diff --git a/asm/code_0807B9B8.s b/asm/code_0807B9B8.s index f0d37f9c..83800962 100644 --- a/asm/code_0807B9B8.s +++ b/asm/code_0807B9B8.s @@ -1994,35 +1994,4 @@ _0807C956: mov r8, r3 mov sb, r4 pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0807C960 -sub_0807C960: @ 0x0807C960 - push {lr} - adds r2, r0, #0 - movs r0, #1 - rsbs r0, r0, #0 - cmp r1, r0 - beq _0807C994 - ldr r0, _0807C984 @ =0x7FFFFFFF - ands r0, r1 - ldr r1, _0807C988 @ =gUnk_08324AE4 - adds r1, r0, r1 - lsrs r0, r2, #0x18 - cmp r0, #6 - bne _0807C98C - adds r0, r1, #0 - adds r1, r2, #0 - bl LZ77UnCompVram - b _0807C994 - .align 2, 0 -_0807C984: .4byte 0x7FFFFFFF -_0807C988: .4byte gUnk_08324AE4 -_0807C98C: - adds r0, r1, #0 - adds r1, r2, #0 - bl LZ77UnCompWram -_0807C994: - pop {pc} - .align 2, 0 - \ No newline at end of file + .align 2, 0 \ No newline at end of file diff --git a/asm/code_0807CC3C.s b/asm/code_0807CC3C.s index 61f52c24..4ff60f5c 100644 --- a/asm/code_0807CC3C.s +++ b/asm/code_0807CC3C.s @@ -5,38 +5,6 @@ .text - thumb_func_start sub_0807CF48 -sub_0807CF48: @ 0x0807CF48 - push {r4, r5, lr} - bl sub_0807D1C4 - adds r4, r0, #0 - ldrh r0, [r4, #4] - ldr r5, _0807CF64 @ =gUnk_0811E4AC - adds r1, r5, #0 - bl sub_0807D184 - ldrh r0, [r4, #2] - adds r1, r5, #0 - bl sub_0807D184 - pop {r4, r5, pc} - .align 2, 0 -_0807CF64: .4byte gUnk_0811E4AC - - thumb_func_start sub_0807CF68 -sub_0807CF68: @ 0x0807CF68 - push {r4, r5, lr} - bl sub_0807D1C4 - adds r4, r0, #0 - ldr r5, _0807CF84 @ =gUnk_0811E4A4 - ldrh r0, [r4, #4] - adds r1, r5, #0 - bl sub_0807D184 - ldrh r0, [r4, #2] - adds r1, r5, #0 - bl sub_0807D184 - pop {r4, r5, pc} - .align 2, 0 -_0807CF84: .4byte gUnk_0811E4A4 - thumb_func_start sub_0807CF88 sub_0807CF88: @ 0x0807CF88 push {r4, r5, r6, r7, lr} diff --git a/asm/wisp.s b/asm/wisp.s deleted file mode 100644 index ac62efac..00000000 --- a/asm/wisp.s +++ /dev/null @@ -1,335 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Wisp -Wisp: @ 0x0803353C - push {lr} - ldr r1, _08033548 @ =gUnk_080CEB74 - bl EnemyFunctionHandler - pop {pc} - .align 2, 0 -_08033548: .4byte gUnk_080CEB74 - - thumb_func_start sub_0803354C -sub_0803354C: @ 0x0803354C - push {lr} - ldr r2, _08033560 @ =gUnk_080CEB8C - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08033560: .4byte gUnk_080CEB8C - - thumb_func_start sub_08033564 -sub_08033564: @ 0x08033564 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08033628 - movs r0, #0x3f - ands r0, r1 - cmp r0, #0xe - beq _080335E4 - cmp r0, #0xe - bgt _08033586 - cmp r0, #0 - beq _08033590 - b _08033628 -_08033586: - cmp r0, #0x14 - beq _080335EE - cmp r0, #0x15 - beq _080335E4 - b _08033628 -_08033590: - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #6 - ands r0, r1 - strb r0, [r4, #0x18] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - adds r1, r4, #0 - adds r1, #0x7c - movs r0, #0x9f - lsls r0, r0, #2 - strh r0, [r1] - ldr r2, _080335DC @ =gLinkState - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #7 - orrs r0, r1 - str r0, [r2, #0x30] - ldr r1, _080335E0 @ =gUnk_02002A40 - ldrb r2, [r4, #0xa] - adds r0, r2, #1 - adds r3, r1, #0 - adds r3, #0xba - strb r0, [r3] - adds r1, #0xc8 - movs r0, #0x96 - lsls r0, r0, #2 - strh r0, [r1] - lsls r2, r2, #0x18 - cmp r2, #0 - beq _08033628 - bl DeleteThisEntity - b _08033628 - .align 2, 0 -_080335DC: .4byte gLinkState -_080335E0: .4byte gUnk_02002A40 -_080335E4: - adds r1, r4, #0 - adds r1, #0x45 - movs r0, #0 - strb r0, [r1] - b _08033628 -_080335EE: - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - movs r1, #0 - strb r0, [r4, #0x10] - adds r0, r4, #0 - adds r0, #0x3d - strb r1, [r0] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #2 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _08033624 - str r1, [r4, #0x54] - movs r0, #0xe - strb r0, [r4, #0xe] - adds r0, r4, #0 - bl CopyPosition -_08033624: - bl DeleteThisEntity -_08033628: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803362C -sub_0803362C: @ 0x0803362C - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F520 - cmp r0, #0 - beq _08033648 - ldr r0, _0803364C @ =gUnk_080CEB98 - ldrb r1, [r4, #0xd] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_08033648: - pop {r4, pc} - .align 2, 0 -_0803364C: .4byte gUnk_080CEB98 - - thumb_func_start sub_08033650 -sub_08033650: @ 0x08033650 - movs r1, #2 - strb r1, [r0, #0xd] - bx lr - .align 2, 0 - - thumb_func_start sub_08033658 -sub_08033658: @ 0x08033658 - push {lr} - bl sub_0806F4E8 - pop {pc} - - thumb_func_start sub_08033660 -sub_08033660: @ 0x08033660 - push {r4, lr} - adds r4, r0, #0 - bl sub_0806F3E4 - cmp r0, #0 - beq _08033672 - adds r0, r4, #0 - bl sub_0804A7D4 -_08033672: - pop {r4, pc} - - thumb_func_start sub_08033674 -sub_08033674: @ 0x08033674 - push {r4, lr} - adds r4, r0, #0 - bl sub_0804A720 - movs r0, #0 - strb r0, [r4, #0xe] - movs r0, #1 - strb r0, [r4, #0xc] - strb r0, [r4, #0x1c] - ldrh r1, [r4, #0x2e] - adds r0, r4, #0 - adds r0, #0x80 - strh r1, [r0] - ldrh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x82 - strh r0, [r1] - adds r0, r4, #0 - bl sub_08033744 - ldrb r1, [r4, #0xb] - adds r0, r4, #0 - bl InitializeAnimation - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080336A8 -sub_080336A8: @ 0x080336A8 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080336C0 - adds r0, r4, #0 - bl sub_08033744 - b _080336CE -_080336C0: - ldrh r0, [r4, #0x2a] - cmp r0, #0 - beq _080336CE - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_0800417E -_080336CE: - adds r0, r4, #0 - bl sub_080AEF88 - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - - thumb_func_start sub_080336DC -sub_080336DC: @ 0x080336DC - push {lr} - adds r2, r0, #0 - adds r1, r2, #0 - adds r1, #0x7c - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0xc - beq _0803371E - cmp r0, #0xc - bgt _080336FC - cmp r0, #0 - beq _0803372E - b _08033740 -_080336FC: - cmp r0, #0x18 - beq _08033716 - cmp r0, #0x24 - bne _08033740 - adds r0, r2, #0 - adds r0, #0x80 - ldrh r0, [r0] - strh r0, [r2, #0x2e] - adds r0, r2, #0 - adds r0, #0x82 - ldrh r0, [r0] - strh r0, [r2, #0x32] - b _08033740 -_08033716: - adds r0, r2, #0 - bl sub_080A29BC - b _08033740 -_0803371E: - ldrb r0, [r2, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #1 - orrs r1, r0 - strb r1, [r2, #0x18] - b _08033740 -_0803372E: - movs r0, #1 - strb r0, [r2, #0xc] - ldrb r1, [r2, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x10] - adds r0, r2, #0 - bl sub_08033744 -_08033740: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08033744 -sub_08033744: @ 0x08033744 - push {r4, r5, r6, lr} - adds r6, r0, #0 - bl Random - adds r5, r0, #0 - movs r0, #0xff - ands r5, r0 - ldr r1, _0803378C @ =gUnk_080CEBA4 - movs r0, #0x70 - ands r0, r5 - lsrs r0, r0, #4 - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r6, #0xe] - movs r0, #0xc - ands r0, r5 - lsls r4, r0, #1 - adds r0, r6, #0 - bl sub_08049FA0 - cmp r0, #0 - bne _08033796 - movs r0, #3 - ands r0, r5 - cmp r0, #0 - beq _08033796 - adds r0, r6, #0 - bl sub_08049EE4 - adds r4, r0, #0 - movs r0, #0x80 - ands r5, r0 - cmp r5, #0 - beq _08033790 - adds r4, #4 - b _08033792 - .align 2, 0 -_0803378C: .4byte gUnk_080CEBA4 -_08033790: - adds r4, #0x1c -_08033792: - movs r0, #0x18 - ands r4, r0 -_08033796: - strb r4, [r6, #0x15] - pop {r4, r5, r6, pc} - .align 2, 0 diff --git a/asm/zeldaFollower.s b/asm/zeldaFollower.s index a85b9394..42000df5 100644 --- a/asm/zeldaFollower.s +++ b/asm/zeldaFollower.s @@ -6,61 +6,6 @@ .text - - thumb_func_start ZeldaFollower -ZeldaFollower: @ 0x080682B0 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - adds r2, r0, #0 - cmp r2, #0 - bne _080682F4 - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - movs r0, #4 - strb r0, [r4, #0x14] - adds r0, r4, #0 - adds r0, #0x68 - strb r2, [r0] - adds r0, #1 - strb r2, [r0] - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate - adds r0, r4, #0 - movs r1, #0 - bl sub_0806854C -_080682F4: - adds r0, r4, #0 - adds r0, #0x68 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _0806830A - adds r0, r4, #0 - bl sub_08068318 - b _08068314 -_0806830A: - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] -_08068314: - pop {r4, pc} - .align 2, 0 - thumb_func_start sub_08068318 sub_08068318: @ 0x08068318 push {r4, r5, r6, r7, lr} diff --git a/baserom.gba.pal b/baserom.gba.pal new file mode 100644 index 00000000..0d552603 Binary files /dev/null and b/baserom.gba.pal differ diff --git a/baserom.gba.spr b/baserom.gba.spr new file mode 100644 index 00000000..d61cdcb9 Binary files /dev/null and b/baserom.gba.spr differ diff --git a/graphics/gameover.pal b/graphics/gameover.pal new file mode 100644 index 00000000..32050439 --- /dev/null +++ b/graphics/gameover.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 172 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 230 0 +255 172 16 +246 115 0 +238 65 0 +230 0 0 +180 65 90 +0 0 90 diff --git a/graphics/gameover.png b/graphics/gameover.png new file mode 100644 index 00000000..f82d6e33 Binary files /dev/null and b/graphics/gameover.png differ diff --git a/include/functions.h b/include/functions.h index 9796376b..dcfcf70d 100644 --- a/include/functions.h +++ b/include/functions.h @@ -124,7 +124,7 @@ extern void sub_080580B0(u32); extern void sub_080751E8(u32, u32, void*); extern void sub_08052CA4(u32, u32, u32, u32); extern void sub_08052878(void); -extern void sub_0808091C(u32*, u32); +extern void sub_0808091C(ScreenTransitionData*, u32); extern void sub_0805BC4C(void); extern void sub_0807BB68(u32*, u32, u32); extern void sub_08054570(void); @@ -220,4 +220,12 @@ extern void sub_0807CF68(u32); extern void sub_0807D20C(u32, char*, u32); extern u32 sub_0807CF88(u32, u8*); extern u32 sub_0807D008(u32, void*); +extern void sub_0807D184(u32, char*); +extern void sub_0805E3A0(Entity*, u32); +extern u32 sub_0806F520(); +extern void sub_0806F4E8(); +extern u32 sub_0806F3E4(Entity*); +extern void sub_0804A7D4(Entity*); +extern void sub_08033744(Entity*); +extern void sub_0800417E(Entity*, u32); #endif \ No newline at end of file diff --git a/include/link.h b/include/link.h index ca6508a1..5a7a73a2 100644 --- a/include/link.h +++ b/include/link.h @@ -73,7 +73,14 @@ typedef struct { u8 itemOnB; u8 filler2[10]; u16 rupees; - u8 filler3[12]; + u8 field_0x1a; + u8 field_0x1b; + u8 field_0x1c; + u8 field_0x1d; + u8 field_0x1e; + u8 field_0x1f; + u16 field_0x20; + u8 filler4[4]; } Stats; typedef struct { diff --git a/linker.ld b/linker.ld index 07210c60..024820ac 100644 --- a/linker.ld +++ b/linker.ld @@ -376,7 +376,7 @@ SECTIONS { asm/crow.o(.text); asm/mulldozer.o(.text); asm/bombarossa.o(.text); - asm/wisp.o(.text); + src/enemy/wisp.o(.text); asm/spinyBeetle.o(.text); asm/mazaalHead.o(.text); asm/mazaalMacro.o(.text); @@ -580,6 +580,7 @@ SECTIONS { src/npc/cat.o(.text); asm/cat.o(.text); asm/mountainMinish.o(.text); + src/npc/zeldaFollower.o(.text); asm/zeldaFollower.o(.text); src/npc/melari.o(.text); src/npc/bladeBrothers.o(.text); @@ -664,7 +665,6 @@ SECTIONS { src/flags.o(.text); src/code_0807CC3C.o(.text); asm/code_0807CC3C.o(.text); - src/code_080808D8.o(.text); src/code_0808091C.o(.text); /* objects */ asm/itemOnGround.o(.text); diff --git a/src/code_0807CC3C.c b/src/code_0807CC3C.c index b5b1c4ee..e0cbbe90 100644 --- a/src/code_0807CC3C.c +++ b/src/code_0807CC3C.c @@ -7,6 +7,9 @@ extern void (*const gUnk_0811E478[])(u32); extern s16 gUnk_02021EE0[6]; +extern char gUnk_0811E484[]; +extern char gUnk_0811E4AC[]; +extern char gUnk_0811E4A4[]; void sub_0807CD9C() { sub_080530C8(); @@ -69,8 +72,6 @@ s32 sub_0807CE54(void) { return uVar1; } -extern char gUnk_0811E484[]; - u32 sub_0807CE90(void) { struct_0807D1C4 *puVar1; @@ -123,3 +124,23 @@ u32 sub_0807CF30(void* arg0) { u32 sub_0807CF3C(void* arg0) { return sub_0807D008(5, arg0); } + +void sub_0807CF48(u32 arg0) +{ + struct_0807D1C4 *temp; + + temp = sub_0807D1C4(arg0); + sub_0807D184(temp->field_0x4, gUnk_0811E4AC); + sub_0807D184(temp->field_0x2, gUnk_0811E4AC); +} + +void sub_0807CF68(u32 arg0) +{ + struct_0807D1C4 *temp; + char* str; + + temp = sub_0807D1C4(arg0); + str = gUnk_0811E4A4; + sub_0807D184(temp->field_0x4, str); + sub_0807D184(temp->field_0x2, str); +} \ No newline at end of file diff --git a/src/code_080808D8.c b/src/code_080808D8.c deleted file mode 100644 index e9b9f8f5..00000000 --- a/src/code_080808D8.c +++ /dev/null @@ -1,25 +0,0 @@ -#include "global.h" -#include "entity.h" -#include "structures.h" -#include "functions.h" - -void sub_080808D8(void) { - gScreenTransition.transitionType = 0; -} - -void sub_080808E4(void) { - - if (sub_08052638(gScreenTransition.areaID)) { - gScreenTransition.transitionType = 0; - } else { - gScreenTransition.transitionType = 5; - } -} - -void sub_08080904(void) { - gScreenTransition.transitionType = 1; -} - -void sub_08080910(void) { - gScreenTransition.transitionType = 1; -} \ No newline at end of file diff --git a/src/code_0808091C.c b/src/code_0808091C.c index 1607ddf0..dcb86728 100644 --- a/src/code_0808091C.c +++ b/src/code_0808091C.c @@ -1,4 +1,7 @@ #include "global.h" +#include "entity.h" +#include "structures.h" +#include "functions.h" #include "room.h" extern void sub_0805E5A8(); @@ -6,16 +9,35 @@ extern void sub_0805E5A8(); extern RoomControls gRoomControls; extern u32 gUnk_0200B650; extern u32 gUnk_02025EB0; -extern u8 gScreenTransition[10]; -extern void DoExitTransition(Entity*); +extern void DoExitTransition(ScreenTransitionData*); extern void sub_080809D4(); -void sub_0808091C(Entity* param_1, u32 param_2) +void sub_080808D8(void) { + gScreenTransition.transitionType = 0; +} +void sub_080808E4(void) { + + if (sub_08052638(gScreenTransition.areaID)) { + gScreenTransition.transitionType = 0; + } else { + gScreenTransition.transitionType = 5; + } +} + +void sub_08080904(void) { + gScreenTransition.transitionType = 1; +} + +void sub_08080910(void) { + gScreenTransition.transitionType = 1; +} + +void sub_0808091C(ScreenTransitionData* param_1, u32 param_2) { DoExitTransition(param_1); - gScreenTransition[9] = param_2; + gScreenTransition.transitionType = param_2; return; } diff --git a/src/enemy/bombPeahat.c b/src/enemy/bombPeahat.c index da782b85..1dc3d30f 100644 --- a/src/enemy/bombPeahat.c +++ b/src/enemy/bombPeahat.c @@ -8,7 +8,6 @@ extern u32 GetNextFunction(Entity*); extern void sub_0802AD54(Entity*); extern void sub_0802B048(Entity*); extern void sub_0806F4E8(Entity*); -extern void sub_0806F3E4(Entity*); extern void (*const gUnk_080012C8[])(Entity*); extern void (*const gUnk_080CD0F0[])(Entity*); diff --git a/src/enemy/wisp.c b/src/enemy/wisp.c new file mode 100644 index 00000000..d6729201 --- /dev/null +++ b/src/enemy/wisp.c @@ -0,0 +1,149 @@ +#include "global.h" +#include "entity.h" +#include "enemy.h" +#include "structures.h" +#include "link.h" +#include "functions.h" + +extern void (*const gUnk_080CEB74[])(Entity*); +extern void (*const gUnk_080CEB8C[])(Entity*); +extern void (*const gUnk_080CEB98[])(Entity*); + +extern u8 gUnk_080CEBA4[]; + +void Wisp(Entity* this) { + EnemyFunctionHandler(this, gUnk_080CEB74); +} + +void sub_0803354C(Entity* this) { + gUnk_080CEB8C[this->action](this); +} + +void sub_08033564(Entity* this) { + u32 bits; + Entity* ent; + + bits = this->bitfield; + if ((bits & 0x80) == 0) { + return; + } + + switch ((s32)bits & 0x3f) { + case 0: + this->action = 2; + this->spriteSettings.b.draw = FALSE; + this->flags &= 0x7f; + this->field_0x7c.HALF.LO = 0x27c; + gLinkState.flags.all |= 0x4000; + gUnk_02002A40.stats.filler2[4] = this->entityType.form + 1; + gUnk_02002A40.stats.field_0x20 = 600; + if (this->entityType.form == 0) { + break; + } + DeleteThisEntity(); + break; + case 0xe: + case 0x15: + this->currentHealth = 0; + break; + case 0x14: + this->flags &= 0x7f; + this->hurtBlinkTime = 0; + this->spriteSettings.b.draw = FALSE; + ent = CreateFx(this, 2, 0); + if (ent != NULL) { + this->attachedEntity = ent; + this->actionDelay = 0xe; + CopyPosition(this, ent); + } + DeleteThisEntity(); + break; + } +} + +void sub_0803362C(Entity* this) { + if (sub_0806F520() != 0) { + gUnk_080CEB98[this->previousActionFlag](this); + } +} + +void sub_08033650(Entity* this) { + this->previousActionFlag = 2; +} + +void sub_08033658(Entity* this) { + sub_0806F4E8(); +} + +void sub_08033660(Entity* this) { + if (sub_0806F3E4(this)) { + sub_0804A7D4(this); + } +} + +void sub_08033674(Entity* this) { + sub_0804A720(this); + this->actionDelay = 0; + this->action = 1; + this->filler[0] = 1; + this->field_0x80.HWORD = this->x.HALF.HI; + this->field_0x82.HWORD = this->y.HALF.HI; + sub_08033744(this); + InitializeAnimation(this, this->entityType.parameter); +} + +void sub_080336A8(Entity* this) { + if (--this->actionDelay == 0) { + sub_08033744(this); + } else if (this->collisions != 0) { + sub_0800417E(this, this->collisions); + } + sub_080AEF88(this); + GetNextFrame(this); +} + +void sub_080336DC(Entity* this) { + switch ((u16)-- this->field_0x7c.HALF.LO) { + case 0x24: + this->x.HALF.HI = this->field_0x80.HWORD; + this->y.HALF.HI = this->field_0x82.HWORD; + break; + case 0x18: + sub_080A29BC(this); + break; + case 0xc: + this->spriteSettings.b.draw = TRUE; + break; + case 0x0: + this->action = 1; + this->flags |= 0x80; + sub_08033744(this); + break; + } +} + +void sub_08033744(Entity* this) { + u32 temp; + u32 rand = (u32)Random() % 256; + + // 8 potential options + this->actionDelay = gUnk_080CEBA4[(rand & 0x70) >> 4]; + + // 4 potential options + temp = ((rand & 0xc) * 2); + + // 75% chance to pass + if ((sub_08049FA0(this) == 0) && ((rand % 4) != 0)) { + temp = sub_08049EE4(this); + + // 50% chance to pass + if ((rand & 0x80) != 0) { + temp += 0x4; + temp &= 0x18; + } else { + temp += 0x1c; + temp &= 0x18; + } + } + this->direction = temp; +} \ No newline at end of file diff --git a/src/npc/zeldaFollower.c b/src/npc/zeldaFollower.c new file mode 100644 index 00000000..3dec4d10 --- /dev/null +++ b/src/npc/zeldaFollower.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "entity.h" +#include "functions.h" + +extern void sub_08068318(Entity*); +extern void sub_0806854C(Entity*, u32); + +void ZeldaFollower(Entity *this) +{ + if (this->action == 0) { + this->action++; + this->spriteSettings.b.draw = TRUE; + this->animationState = 4; + this->field_0x68.HALF.LO = 0; + this->field_0x68.HALF.HI = 0; + sub_0805E3A0(this, 2); + InitAnimationForceUpdate(this, 0); + sub_0806854C(this, 0); + } + if ((s8)this->field_0x68.HALF.LO != 0) { + sub_08068318(this); + } else { + this->spriteSettings.b.draw = FALSE; + } +} \ No newline at end of file diff --git a/src/room.c b/src/room.c index 4246c675..7d9e46d4 100644 --- a/src/room.c +++ b/src/room.c @@ -665,7 +665,7 @@ void sub_0804BC70(void) { } } -extern u32 gUnk_0813AB80; +extern ScreenTransitionData gUnk_0813AB80; void sub_0804BCDC() { sub_0808091C(&gUnk_0813AB80, 4); diff --git a/src/sub_0807C998.c b/src/sub_0807C998.c index a1d16fdf..bc31e322 100644 --- a/src/sub_0807C998.c +++ b/src/sub_0807C998.c @@ -1,12 +1,29 @@ #include "global.h" +#include "entity.h" extern void sub_0807C960(); extern u32 gUnk_0202CEB4; extern u32 gUnk_02012654; +extern u8 gUnk_08324AE4; + +void sub_0807C960(void* dest, u32 offset) +{ + void* temp; + + if (offset != -1) { + temp = &gUnk_08324AE4 + (offset & 0x7fffffff); + if ((u32)dest >> 0x18 == 6) { + LZ77UnCompVram(temp, (void *)dest); + } + else { + LZ77UnCompWram(temp, (void *)dest); + } + } +} void sub_0807C998(u32* a1) { sub_0807C960(&gUnk_0202CEB4, a1[0]); sub_0807C960(&gUnk_0202CEB4 - 0x800, a1[1]); sub_0807C960(&gUnk_02012654, a1[2]); sub_0807C960(&gUnk_02012654 - 0x800, a1[3]); -} +} \ No newline at end of file diff --git a/tools/gbagfx/link.pal b/tools/gbagfx/link.pal new file mode 100644 index 00000000..f7ee0b1d --- /dev/null +++ b/tools/gbagfx/link.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +65 180 139 +222 41 41 +123 16 41 +16 123 41 +65 164 41 +16 255 8 +49 82 255 +189 255 164 +222 172 82 +255 255 0 +115 65 32 +164 123 65 +213 180 139 +255 230 189 +255 255 255 +0 0 0 diff --git a/minishmaker-license.txt b/tools/minishmaker-license.txt similarity index 100% rename from minishmaker-license.txt rename to tools/minishmaker-license.txt