decomp enemyUtils.c

This commit is contained in:
Henny022p
2022-02-08 22:19:23 +01:00
parent 89cfe17caa
commit 9360acdcc6
10 changed files with 326 additions and 573 deletions
@@ -0,0 +1,101 @@
.syntax unified
push {r4, r5, r6, lr}
adds r2, r0, #0
adds r0, #0x6d
ldrb r1, [r0]
movs r0, #4
ands r0, r1
cmp r0, #0
bne _0804A7D0
ldrb r0, [r2, #9]
lsls r0, r0, #1
ldr r1, _0804A76C @ =gUnk_080D3D94
adds r3, r0, r1
adds r4, r2, #0
adds r4, #0x68
ldrb r1, [r4, #0x16]
cmp r1, #0
bne _0804A744
ldrb r1, [r3]
_0804A744:
adds r0, r2, #0
adds r0, #0x6e
strb r1, [r0]
adds r5, r0, #0
ldrb r1, [r4, #0x17]
cmp r1, #0
bne _0804A754
ldrb r1, [r3, #1]
_0804A754:
adds r0, r2, #0
adds r0, #0x6f
strb r1, [r0]
adds r6, r0, #0
ldrh r1, [r4, #0x1c]
adds r3, r1, #0
cmp r3, #0
beq _0804A774
ldr r0, _0804A770 @ =gRoomControls
ldrh r0, [r0, #6]
adds r0, r1, r0
b _0804A784
.align 2, 0
_0804A76C: .4byte gUnk_080D3D94
_0804A770: .4byte gRoomControls
_0804A774:
ldrb r0, [r5]
lsls r1, r0, #2
movs r5, #0x2e
ldrsh r0, [r2, r5]
cmp r0, r1
blt _0804A78C
ldrh r0, [r2, #0x2e]
subs r0, r0, r1
_0804A784:
adds r1, r2, #0
adds r1, #0x70
strh r0, [r1]
b _0804A792
_0804A78C:
adds r0, r2, #0
adds r0, #0x70
strh r3, [r0]
_0804A792:
ldrh r1, [r4, #0x1e]
adds r3, r1, #0
cmp r3, #0
beq _0804A7A8
ldr r0, _0804A7A4 @ =gRoomControls
ldrh r0, [r0, #8]
adds r0, r1, r0
b _0804A7B8
.align 2, 0
_0804A7A4: .4byte gRoomControls
_0804A7A8:
ldrb r0, [r6]
lsls r1, r0, #2
movs r4, #0x32
ldrsh r0, [r2, r4]
cmp r0, r1
blt _0804A7C0
ldrh r0, [r2, #0x32]
subs r0, r0, r1
_0804A7B8:
adds r1, r2, #0
adds r1, #0x72
strh r0, [r1]
b _0804A7C6
_0804A7C0:
adds r0, r2, #0
adds r0, #0x72
strh r3, [r0]
_0804A7C6:
adds r2, #0x6d
ldrb r1, [r2]
movs r0, #4
orrs r0, r1
strb r0, [r2]
_0804A7D0:
pop {r4, r5, r6, pc}
.align 2, 0
.syntax divided
+4 -4
View File
@@ -16,9 +16,9 @@ _0805453A:
adds r0, r1, r0
ldrb r1, [r0]
lsls r0, r1, #5
ldr r1, _0805455C @ =gUnk_080015BC
ldr r1, _0805455C @ =gDroptablesAreas
adds r0, r0, r1
ldr r1, _08054560 @ =gUnk_02034398
ldr r1, _08054560 @ =gCurrentAreaDroptable
movs r2, #0x20
bl MemCopy
pop {pc}
@@ -26,6 +26,6 @@ _0805453A:
_08054550: .4byte gArea
_08054554: .4byte gRoomTransition
_08054558: .4byte gUnk_080FE1C6
_0805455C: .4byte gUnk_080015BC
_08054560: .4byte gUnk_02034398
_0805455C: .4byte gDroptablesAreas
_08054560: .4byte gCurrentAreaDroptable
.syntax divided
-428
View File
@@ -1,428 +0,0 @@
.ifdef EU
.syntax unified
push {r4, r5, r6, r7, lr}
sub sp, #0x20
adds r6, r0, #0
adds r3, r1, #0
ldr r0, _08054138 @ =gRoomVars
ldrb r0, [r0, #2]
cmp r0, #1
bne _08054126
b _080542CC
_08054126:
ldr r2, _0805413C @ =gUnk_08001A1C
movs r4, #0
cmp r3, #0x18
bhi _080541BC
lsls r0, r3, #2
ldr r1, _08054140 @ =_08054144
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08054138: .4byte gRoomVars
_0805413C: .4byte gUnk_08001A1C
_08054140: .4byte _08054144
_08054144: @ jump table
.4byte _080541BC @ case 0
.4byte _080541A8 @ case 1
.4byte _080541A8 @ case 2
.4byte _080541A8 @ case 3
.4byte _080541A8 @ case 4
.4byte _080541A8 @ case 5
.4byte _080541A8 @ case 6
.4byte _080541A8 @ case 7
.4byte _080541A8 @ case 8
.4byte _080541A8 @ case 9
.4byte _080541A8 @ case 10
.4byte _080541A8 @ case 11
.4byte _080541A8 @ case 12
.4byte _080541BC @ case 13
.4byte _080541BC @ case 14
.4byte _080541BA @ case 15
.4byte _080541B4 @ case 16
.4byte _080541B4 @ case 17
.4byte _080541B4 @ case 18
.4byte _080541B4 @ case 19
.4byte _080541B4 @ case 20
.4byte _080541B4 @ case 21
.4byte _080541B4 @ case 22
.4byte _080541B4 @ case 23
.4byte _080541B4 @ case 24
_080541A8:
lsls r1, r3, #5
ldr r0, _080541B0 @ =gUnk_0800137C
adds r4, r1, r0
b _080541BC
.align 2, 0
_080541B0: .4byte gUnk_0800137C
_080541B4:
lsls r1, r3, #5
ldr r0, _080541D0 @ =gUnk_0800161C
adds r2, r1, r0
_080541BA:
ldr r4, _080541D4 @ =gUnk_02034398
_080541BC:
cmp r4, #0
bne _080541C2
b _080542CC
_080541C2:
ldr r0, _080541D8 @ =gSave
adds r0, #0xb3
ldrb r1, [r0]
cmp r1, #0
bne _080541E0
ldr r3, _080541DC @ =gUnk_08001A1C
b _080541E6
.align 2, 0
_080541D0: .4byte gUnk_0800161C
_080541D4: .4byte gUnk_02034398
_080541D8: .4byte gSave
_080541DC: .4byte gUnk_08001A1C
_080541E0:
lsls r1, r1, #5
ldr r0, _080542BC @ =0x080014E4
adds r3, r1, r0
_080541E6:
mov r0, sp
adds r1, r4, #0
bl sub_08000F14
ldr r4, _080542C0 @ =gSave
adds r0, r4, #0
adds r0, #0xaa
ldrb r0, [r0]
cmp r0, #8
bhi _08054204
mov r1, sp
mov r0, sp
ldrh r0, [r0, #8]
adds r0, #5
strh r0, [r1, #8]
_08054204:
adds r0, r4, #0
adds r0, #0xac
ldrb r0, [r0]
cmp r0, #0
bne _08054218
mov r1, sp
mov r0, sp
ldrh r0, [r0, #0xc]
adds r0, #3
strh r0, [r1, #0xc]
_08054218:
adds r0, r4, #0
adds r0, #0xad
ldrb r0, [r0]
cmp r0, #0
bne _0805422C
mov r1, sp
mov r0, sp
ldrh r0, [r0, #0xe]
adds r0, #3
strh r0, [r1, #0xe]
_0805422C:
adds r0, r4, #0
adds r0, #0xc0
ldrh r0, [r0]
cmp r0, #0xa
bhi _08054240
mov r1, sp
mov r0, sp
ldrh r0, [r0, #4]
adds r0, #1
strh r0, [r1, #4]
_08054240:
ldr r2, _080542C4 @ =gUnk_08001A1C
adds r0, r4, #0
adds r0, #0xbb
ldrb r0, [r0]
adds r3, r2, #0
cmp r0, #0
beq _08054250
adds r2, #0x20
_08054250:
movs r1, #0x8b
lsls r1, r1, #1
adds r0, r4, r1
ldrb r0, [r0]
cmp r0, #0
beq _0805425E
adds r3, #0x40
_0805425E:
mov r0, sp
mov r1, sp
bl sub_08000F2C
adds r4, r0, #0
bl Random
adds r2, r0, #0
asrs r5, r2, #0x18
movs r0, #0xf
ands r5, r0
adds r0, r2, #0
adds r1, r4, #0
bl __modsi3
adds r2, r0, #0
movs r3, #0
lsls r0, r5, #1
add r0, sp
movs r4, #0
ldrsh r1, [r0, r4]
cmp r1, r2
bgt _080542A6
movs r4, #0xf
_0805428E:
adds r3, #1
adds r5, #1
ands r5, r4
cmp r3, #0xf
bhi _080542A6
lsls r0, r5, #1
add r0, sp
movs r7, #0
ldrsh r0, [r0, r7]
adds r1, r1, r0
cmp r1, r2
ble _0805428E
_080542A6:
ldr r0, _080542C8 @ =gUnk_080FE1B4
adds r0, r5, r0
ldrb r1, [r0]
cmp r1, #0
beq _080542CC
adds r0, r6, #0
movs r2, #0
bl CreateItemDrop
b _080542CE
.align 2, 0
_080542BC: .4byte 0x080014E4
_080542C0: .4byte gSave
_080542C4: .4byte gUnk_08001A1C
_080542C8: .4byte gUnk_080FE1B4
_080542CC:
movs r0, #0
_080542CE:
add sp, #0x20
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided
.else
.syntax unified
push {r4, r5, r6, r7, lr}
sub sp, #0x20
adds r6, r0, #0
adds r3, r1, #0
ldr r0, _080545A4 @ =gRoomVars
ldrb r1, [r0, #2]
adds r5, r0, #0
cmp r1, #1
bne _08054590
b _0805474C
_08054590:
ldr r2, _080545A8 @ =gUnk_08001A1C
movs r4, #0
cmp r3, #0x19
bhi _0805463C
lsls r0, r3, #2
ldr r1, _080545AC @ =_080545B0
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_080545A4: .4byte gRoomVars
_080545A8: .4byte gUnk_08001A1C
_080545AC: .4byte _080545B0
_080545B0: @ jump table
.4byte _0805463C @ case 0
.4byte _08054618 @ case 1
.4byte _08054618 @ case 2
.4byte _08054618 @ case 3
.4byte _08054618 @ case 4
.4byte _08054618 @ case 5
.4byte _08054618 @ case 6
.4byte _08054618 @ case 7
.4byte _08054618 @ case 8
.4byte _08054618 @ case 9
.4byte _08054618 @ case 10
.4byte _08054618 @ case 11
.4byte _08054618 @ case 12
.4byte _0805463C @ case 13
.4byte _0805463C @ case 14
.4byte _0805463A @ case 15
.4byte _08054634 @ case 16
.4byte _08054634 @ case 17
.4byte _08054634 @ case 18
.4byte _08054634 @ case 19
.4byte _08054634 @ case 20
.4byte _08054634 @ case 21
.4byte _08054634 @ case 22
.4byte _08054634 @ case 23
.4byte _08054624 @ case 24
.4byte _08054624 @ case 25
_08054618:
lsls r1, r3, #5
ldr r0, _08054620 @ =gUnk_0800137C
adds r4, r1, r0
b _0805463C
.align 2, 0
_08054620: .4byte gUnk_0800137C
_08054624:
ldrb r0, [r5, #0xa]
ldr r4, _08054630 @ =gUnk_0800191C
cmp r0, #0
beq _0805463C
adds r4, #0x20
b _0805463C
.align 2, 0
_08054630: .4byte gUnk_0800191C
_08054634:
lsls r1, r3, #5
ldr r0, _08054650 @ =gUnk_0800161C
adds r2, r1, r0
_0805463A:
ldr r4, _08054654 @ =gUnk_02034398
_0805463C:
cmp r4, #0
bne _08054642
b _0805474C
_08054642:
ldr r0, _08054658 @ =gSave
adds r0, #0xb3
ldrb r1, [r0]
cmp r1, #0
bne _08054660
ldr r3, _0805465C @ =gUnk_08001A1C
b _08054666
.align 2, 0
_08054650: .4byte gUnk_0800161C
_08054654: .4byte gUnk_02034398
_08054658: .4byte gSave
_0805465C: .4byte gUnk_08001A1C
_08054660:
lsls r1, r1, #5
ldr r0, _0805473C @ =gUnk_0800143C
adds r3, r1, r0
_08054666:
mov r0, sp
adds r1, r4, #0
bl sub_08000F14
ldr r4, _08054740 @ =gSave
adds r0, r4, #0
adds r0, #0xaa
ldrb r0, [r0]
cmp r0, #8
bhi _08054684
mov r1, sp
mov r0, sp
ldrh r0, [r0, #8]
adds r0, #5
strh r0, [r1, #8]
_08054684:
adds r0, r4, #0
adds r0, #0xac
ldrb r0, [r0]
cmp r0, #0
bne _08054698
mov r1, sp
mov r0, sp
ldrh r0, [r0, #0xc]
adds r0, #3
strh r0, [r1, #0xc]
_08054698:
adds r0, r4, #0
adds r0, #0xad
ldrb r0, [r0]
cmp r0, #0
bne _080546AC
mov r1, sp
mov r0, sp
ldrh r0, [r0, #0xe]
adds r0, #3
strh r0, [r1, #0xe]
_080546AC:
adds r0, r4, #0
adds r0, #0xc0
ldrh r0, [r0]
cmp r0, #0xa
bhi _080546C0
mov r1, sp
mov r0, sp
ldrh r0, [r0, #4]
adds r0, #1
strh r0, [r1, #4]
_080546C0:
ldr r2, _08054744 @ =gUnk_08001A1C
adds r0, r4, #0
adds r0, #0xbb
ldrb r0, [r0]
adds r3, r2, #0
cmp r0, #0
beq _080546D0
adds r2, #0x20
_080546D0:
movs r1, #0x8b
lsls r1, r1, #1
adds r0, r4, r1
ldrb r0, [r0]
cmp r0, #0
beq _080546DE
adds r3, #0x40
_080546DE:
mov r0, sp
mov r1, sp
bl sub_08000F2C
adds r4, r0, #0
bl Random
adds r2, r0, #0
asrs r5, r2, #0x18
movs r0, #0xf
ands r5, r0
adds r0, r2, #0
adds r1, r4, #0
bl __modsi3
adds r2, r0, #0
movs r3, #0
lsls r0, r5, #1
add r0, sp
movs r4, #0
ldrsh r1, [r0, r4]
cmp r1, r2
bgt _08054726
movs r4, #0xf
_0805470E:
adds r3, #1
adds r5, #1
ands r5, r4
cmp r3, #0xf
bhi _08054726
lsls r0, r5, #1
add r0, sp
movs r7, #0
ldrsh r0, [r0, r7]
adds r1, r1, r0
cmp r1, r2
ble _0805470E
_08054726:
ldr r0, _08054748 @ =gUnk_080FE1B4
adds r0, r5, r0
ldrb r1, [r0]
cmp r1, #0
beq _0805474C
adds r0, r6, #0
movs r2, #0
bl CreateItemDrop
b _0805474E
.align 2, 0
_0805473C: .4byte gUnk_0800143C
_08054740: .4byte gSave
_08054744: .4byte gUnk_08001A1C
_08054748: .4byte gUnk_080FE1B4
_0805474C:
movs r0, #0
_0805474E:
add sp, #0x20
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided
.endif
+8 -4
View File
@@ -24,11 +24,15 @@ typedef union {
} Droptable;
static_assert(sizeof(Droptable) == 0x20);
extern const Droptable gUnk_0800137C[];
extern const Droptable gDroptablesEnemies[];
extern const Droptable gUnk_0800143C[];
extern const Droptable gUnk_080015BC[];
extern const Droptable gUnk_0800161C[];
extern const Droptable gDroptablesAreas[];
extern const Droptable gDroptablesObjects[];
extern const Droptable gUnk_0800191C[];
extern const Droptable gUnk_08001A1C[];
extern const Droptable gDroptablesModifiers[];
#define gDroptableModifierNone gDroptablesModifiers[0]
#define gDroptableModifierNoShells gDroptablesModifiers[1]
#define gDroptableModifierNoKinstones gDroptablesModifiers[2]
#endif // TMC_DROPTABLES_H
+1
View File
@@ -124,6 +124,7 @@ extern const char gUnk_0811E470[];
}
*/
void UpdateGlobalProgress(void);
void sub_0807CD9C(void);
#ifdef DEMO_USA
extern const u8* const demoPointers[];
+1 -2
View File
@@ -116,7 +116,7 @@ SECTIONS {
. = 0x000342F8; gUnk_020342F8 = .;
. = 0x00034330; gUnk_02034330 = .;
. = 0x00034350; gRoomVars = .;
. = 0x00034398; gUnk_02034398 = .;
. = 0x00034398; gCurrentAreaDroptable = .;
. = 0x00034480; gUnk_02034480 = .;
. = 0x00034490; gUnk_02034490 = .;
. = 0x00034492; gUnk_02034492 = .;
@@ -433,7 +433,6 @@ SECTIONS {
src/code_08049CD4.o(.text); /* enemyUtils.c */
asm/code_08049D30.o(.text);
src/enemyUtils.o(.text);
asm/enemyUtils.o(.text);
src/createEnemy.o(.text);
src/enterPortalSubtask.o(.text);
asm/enterPortalSubtask.o(.text);
+42 -103
View File
@@ -20,7 +20,33 @@ extern struct_080FD5B4 gUnk_080FD5B4[];
extern u8 gUnk_0200AF13;
extern u8 gUnk_0200AF14;
extern u8 gUnk_080FE1C6[];
extern Droptable gUnk_02034398;
/*{
0u,
0x1u,
0x2u,
0x3u,
0x4u,
0x5u,
0x6u,
0x7u,
0x8u,
0x9u,
0x8u,
0x9u,
0xau,
0xau,
0xbu,
0xcu,
0xdu,
0xeu,
0xfu,
0x8u,
0xfu,
0x1u,
0x8u,
};
*/
extern Droptable gCurrentAreaDroptable;
extern void (*const gUnk_080FE2A0[])(void);
void ForceEquipItem(u32, u8);
@@ -158,7 +184,7 @@ NONMATCH("asm/non_matching/sub_08054524.inc", void sub_08054524(void)) {
bVar1 = 0;
}
MemCopy(&gUnk_080015BC[0] + gUnk_080FE1C6[bVar1] * 0x8, &gUnk_02034398, 0x20);
MemCopy(&gDroptablesAreas[0] + gUnk_080FE1C6[bVar1] * 0x8, &gCurrentAreaDroptable, 0x20);
}
END_NONMATCH
@@ -170,8 +196,6 @@ void sub_08054570(void) {
gRoomVars.field_0x2 = 0;
}
// BUG?
extern const Droptable gUnk_080014e4[];
extern void sub_08000F14(s16*, const s16*, const s16*, const s16*);
extern u32 sub_08000F2C(s16*, const s16*, const s16*, const s16*);
u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter);
@@ -188,11 +212,11 @@ u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) {
Droptable s0;
r3 = arg1;
if (gRoomVars.field_0x2 != 1) {
ptr2 = &gUnk_08001A1C[0];
ptr2 = &gDroptablesModifiers[0];
ptr4 = 0;
switch (r3) {
case 1 ... 12:
ptr4 = &gUnk_0800137C[r3];
ptr4 = &gDroptablesEnemies[r3];
break;
#ifndef EU
case 24:
@@ -208,9 +232,9 @@ u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) {
#ifdef EU
case 24:
#endif
ptr2 = &gUnk_0800161C[r3];
ptr2 = &gDroptablesObjects[r3 - 16];
case 15:
ptr4 = &gUnk_02034398;
ptr4 = &gCurrentAreaDroptable;
break;
case 0:
default:
@@ -218,7 +242,8 @@ u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) {
}
if (ptr4 != 0) {
if ((r1 = gSave.stats.unkB) == 0) {
ptr3 = &gUnk_08001A1C[0];
// nop
ptr3 = &gDroptableModifierNone;
} else {
#ifdef EU
ptr3 = &gUnk_0800143C[r1 + 3];
@@ -240,16 +265,16 @@ u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) {
if (gSave.stats.rupees <= 10) {
s0.s.rupee5 += 1;
}
ptr2 = &gUnk_08001A1C[0];
ptr2 = &gDroptableModifierNone;
r0 = gSave.stats.hasAllFigurines;
ptr3 = ptr2;
ptr3 = &gDroptableModifierNone;
// don't drop shells anymore
if (r0 != 0) {
ptr2++;
ptr2 = &gDroptableModifierNoShells;
}
// don't drop kinstones anymore
if (gSave.didAllFusions != 0) {
ptr3 += 2;
ptr3 = &gDroptableModifierNoKinstones;
}
// vector addition, s0 = s0 + ptr2 + ptr3
// resulting values are clamped to be >= 0
@@ -268,9 +293,8 @@ u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) {
}
}
r1 = gUnk_080FE1B4[r5];
if (r1 != 0) {
r2 = 0;
return CreateItemDrop(arg0, r1, r2);
if (r1 != ITEM_NONE) {
return CreateItemDrop(arg0, r1, 0);
}
}
}
@@ -311,10 +335,10 @@ u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter) {
u32 rand;
if (GetInventoryValue(ITEM_KINSTONE_BAG) == 0) {
return 0;
return ITEM_NONE;
}
if (3 < gRoomVars.filler1[0]) {
return 0;
return ITEM_NONE;
}
if (itemID != ITEM_KINSTONE) {
@@ -362,91 +386,6 @@ u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter) {
}
return itemID;
}
/*
extern u8 gUnk_080FE1DD[];
u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter) {
u32 prereqID;
u32 adjustedParam;
u32 uVar1;
Entity* itemEntity;
adjustedParam = (u8)itemParameter;
switch (adjustedParam) {
case 0x3f:
if (!GetInventoryValue(0x40)) {
return 0;
}
if (itemParameter == 0) {
adjustedParam = 1;
}
case 0x5d:
if (!GetInventoryValue(0x65)) {
return 0;
}
break;
case 0x5e:
if (!GetInventoryValue(0x9)) {
return 0;
}
break;
case 0x5c:
case 0xfc ... 0xfe:
if (GetInventoryValue(0x67) == 0) {
return 0;
}
if (3 < gRoomVars.filler[5]) {
return 0;
}
if (itemID != 0x5c) {
adjustedParam = gUnk_080FE1DD[(Random() & 0x3f) + (itemID - 0xfc) * 0x40];
if (adjustedParam == 0) {
itemID = 0;
}
else {
itemID = 0x5c;
}
}
break;
case 0xff:
if (!GetInventoryValue(0x1)) {
return 0;
}
}
if (itemID != 0) {
if (itemID == 0xff) {
itemEntity = CreateEnemy(BEETLE, 0);
if (itemEntity != NULL) {
itemEntity->x.HALF.HI = arg0->x.HALF.HI;
itemEntity->y.HALF.HI = arg0->y.HALF.HI;
itemEntity->collisionLayer = arg0->collisionLayer;
UpdateSpriteOrderAndFlip(itemEntity);
}
} else {
itemEntity = CreateObject(GROUND_ITEM, itemID, adjustedParam);
if (itemEntity != NULL) {
if (arg0 == &gPlayerEntity) {
itemEntity->actionDelay = 1;
} else {
itemEntity->actionDelay = 0;
}
if (arg0->kind == OBJECT) {
if (arg0->id == 99) {
arg0->child = itemEntity;
} else if (arg0->id == 0x1e) {
itemEntity->direction = arg0->animationState << 3 | 0x80;
itemEntity->speed = 0xc0;
itementity->zVelocity = 0x18000;
}
}
CopyPosition(arg0, itemEntity);
}
}
}
return itemID;
}
*/
void Subtask_WorldEvent(void) {
#if !(defined(DEMO_USA) || defined(DEMO_JP))
+30 -30
View File
@@ -1,7 +1,7 @@
#include "global.h"
#include "droptables.h"
const Droptable gUnk_0800137C[] = {
const Droptable gDroptablesEnemies[] = {
{ {
.none = -999,
.rupee1 = -999,
@@ -331,8 +331,8 @@ const Droptable gUnk_0800143C[] = {
} },
};
// not 100% sure
const Droptable gUnk_080015BC[] = {
{ {
const Droptable gDroptablesAreas[] = {
[0] = { {
.none = 920,
.rupee1 = 15,
.rupee5 = 5,
@@ -350,7 +350,7 @@ const Droptable gUnk_080015BC[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[1] = { {
.none = 900,
.rupee1 = 0,
.rupee5 = 0,
@@ -368,7 +368,7 @@ const Droptable gUnk_080015BC[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[2] = { {
.none = 920,
.rupee1 = 11,
.rupee5 = 3,
@@ -386,9 +386,7 @@ const Droptable gUnk_080015BC[] = {
.none4 = 0,
.none5 = 0,
} },
};
const Droptable gUnk_0800161C[] = {
{ {
[3] = { {
.none = 920,
.rupee1 = 30,
.rupee5 = 1,
@@ -406,7 +404,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[4] = { {
.none = 920,
.rupee1 = 6,
.rupee5 = 1,
@@ -424,7 +422,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[5] = { {
.none = 920,
.rupee1 = 55,
.rupee5 = 7,
@@ -442,7 +440,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[6] = { {
.none = 920,
.rupee1 = 23,
.rupee5 = 5,
@@ -460,7 +458,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[7] = { {
.none = 920,
.rupee1 = 20,
.rupee5 = 3,
@@ -478,7 +476,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[8] = { {
.none = 920,
.rupee1 = 25,
.rupee5 = 6,
@@ -496,7 +494,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[9] = { {
.none = 920,
.rupee1 = 18,
.rupee5 = 2,
@@ -514,7 +512,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[0xa] = { {
.none = 920,
.rupee1 = 30,
.rupee5 = 1,
@@ -536,7 +534,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[0xb] = { {
.none = 900,
.rupee1 = 16,
.rupee5 = 4,
@@ -554,7 +552,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[0xc] = { {
.none = 920,
.rupee1 = 23,
.rupee5 = 15,
@@ -572,7 +570,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[0xd] = { {
.none = 920,
.rupee1 = 25,
.rupee5 = 25,
@@ -590,7 +588,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[0xe] = { {
.none = 920,
.rupee1 = 25,
.rupee5 = 1,
@@ -608,7 +606,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[0xf] = { {
.none = 800,
.rupee1 = 60,
.rupee5 = 15,
@@ -626,7 +624,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[0x10] = { {
.none = 920,
.rupee1 = 15,
.rupee5 = 5,
@@ -644,7 +642,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[0x11] = { {
.none = 920,
.rupee1 = 15,
.rupee5 = 5,
@@ -662,7 +660,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[0x12] = { {
.none = 920,
.rupee1 = 15,
.rupee5 = 5,
@@ -680,7 +678,9 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
};
const Droptable gDroptablesObjects[] = {
[0] = { {
.none = 0,
.rupee1 = 10,
.rupee5 = 0,
@@ -698,7 +698,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[1] = { {
.none = 0,
.rupee1 = 3,
.rupee5 = 0,
@@ -716,7 +716,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[2] = { {
.none = 0,
.rupee1 = 100,
.rupee5 = 20,
@@ -734,7 +734,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[3] = { {
.none = 0,
.rupee1 = 300,
.rupee5 = 50,
@@ -752,7 +752,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[4] = { {
.none = 0,
.rupee1 = -999,
.rupee5 = -999,
@@ -770,7 +770,7 @@ const Droptable gUnk_0800161C[] = {
.none4 = 0,
.none5 = 0,
} },
{ {
[5] = { {
.none = 0,
.rupee1 = 2,
.rupee5 = 2,
@@ -1068,7 +1068,7 @@ const Droptable gUnk_0800191C[] = {
};
// special treatment for shells and kinstones after finishing figurines/fusions
const Droptable gUnk_08001A1C[] = {
const Droptable gDroptablesModifiers[] = {
// nop
{ {
.none = 0,
+137
View File
@@ -2,6 +2,10 @@
#include "definitions.h"
#include "functions.h"
#include "object.h"
#include "save.h"
#include "projectile.h"
extern void sub_08049CF4(Entity*);
extern EnemyDefinition gEnemyDefinitions[];
@@ -86,3 +90,136 @@ bool32 LoadEnemySprite(Entity* entity, const EnemyDefinition* definition) {
LoadObjPalette(entity, definition->paletteIndex);
return TRUE;
}
ASM_FUNC("asm/non_matching/enemyUtils/sub_0804A720.inc", void sub_0804A720(Entity* this))
void CreateDeathFx(Entity* param_1, u32 param_2, u32 param_3);
void sub_0804A7D4(Entity* param_1) {
CreateDeathFx(param_1, (u32)param_1->id, 0);
}
void CreateDeathFx(Entity* param_1, u32 param_2, u32 param_3) {
Entity* pEVar2;
Entity* pEVar3;
u8 bVar3;
if ((param_1->field_0x6c.HALF.HI & 1) != 0) {
if ((param_1->field_0x6c.HALF.HI & 2) != 0) {
return;
}
pEVar2 = CreateObject(DEATH_FX, param_1->id, 0);
if (pEVar2 == NULL) {
return;
}
pEVar2->field_0x6c.HALF.LO = 1;
PositionRelative(param_1, pEVar2, 0, 1);
pEVar2->parent = param_1;
param_1->field_0x6c.HALF.HI |= 2;
if ((param_1->id == '7') && (gRoomTransition.field_0x39 != 0)) {
DeleteThisEntity();
}
sub_0807CD9C();
SoundReq(SONG_STOP_BGM);
DeleteThisEntity();
return;
} else {
int tmp = param_1->field_0x3a & 2;
if (tmp == 0) {
sub_08049CF4(param_1);
gSave.unk50 += 1;
param_1->field_0x3a |= 2;
param_1->actionDelay = 0xff;
SetDefaultPriority(param_1, 3);
pEVar3 = CreateObject(DEATH_FX, param_1->id, 0);
if (pEVar3 != NULL) {
pEVar3->field_0x6c.HALF.LO = tmp;
pEVar3->field_0x6c.HALF.HI = param_2;
pEVar3->field_0x6e.HALF.LO = param_3;
pEVar3->parent = param_1;
pEVar3->child = param_1;
CopyPosition(param_1, pEVar3);
}
if ((param_1->field_0x6c.HALF.HI & 8) != 0) {
pEVar3->field_0x6c.HALF.LO |= 8;
DeleteEntity(param_1);
return;
}
if ((param_1->bitfield & 0x7f) == 0x13) {
bVar3 = param_1->field_0x1c & 0xf;
if (bVar3 != 1) {
if ((bVar3 == 2) && (pEVar3 != NULL)) {
pEVar3->field_0x6c.HALF.LO |= 2;
}
} else {
if (pEVar3 != NULL) {
pEVar3->field_0x6c.HALF.LO |= 4;
}
}
pEVar3->parent = NULL;
DeleteThisEntity();
return;
}
}
if (param_1->actionDelay == 0) {
DeleteThisEntity();
} else {
if (--param_1->actionDelay == 0) {
param_1->spriteSettings.draw = 0;
SetDefaultPriority(param_1, 0);
} else {
if (param_1->actionDelay < 9) {
if (param_1->spriteSettings.draw != 0) {
param_1->spriteSettings.draw = 0;
} else {
param_1->spriteSettings.draw = 1;
}
}
}
}
return;
}
}
Entity* CreateProjectileWithParent(Entity* parent, u32 projectileId, u32 projectileType) {
Entity* projectile;
projectile = CreateProjectile(projectileId);
if (projectile != NULL) {
projectile->type = projectileType;
CopyPosition(parent, projectile);
}
return projectile;
}
void SetChildOffset(Entity* entity, s32 xOffset, s32 yOffset, s32 zOffset) {
Entity* other;
other = *(Entity**)&entity->field_0x68;
if (other != NULL) {
other->spriteRendering.b3 = entity->spriteRendering.b3;
other->spriteOrientation.flipY = entity->spriteOrientation.flipY;
other->x.HALF.HI = entity->x.HALF.HI + xOffset;
other->y.HALF.HI = entity->y.HALF.HI + yOffset;
other->z.HALF.HI = entity->z.HALF.HI + zOffset;
other->collisionLayer = entity->collisionLayer;
}
}
Entity* sub_0804A9FC(Entity* parent, u32 fxType) {
Entity* fx;
if ((*(Entity**)&parent->field_0x68 == NULL) && (fx = CreateFx(parent, fxType, 0), fx != NULL)) {
*(Entity**)&parent->field_0x68 = fx;
} else {
fx = NULL;
}
return fx;
}
void sub_0804AA1C(Entity* param_1) {
if (*(Entity**)&param_1->field_0x68 != NULL) {
(*(Entity**)&param_1->field_0x68)->parent = NULL;
*(Entity**)&param_1->field_0x68 = NULL;
}
}
+2 -2
View File
@@ -42,7 +42,7 @@ static void LoadLocationTile(TileEntity*);
typedef struct {
u8 filler[0x20];
} VarStruct;
extern VarStruct gUnk_080015BC[];
extern VarStruct gDroptablesAreas[];
void LoadRoomEntityList(EntityData* listPtr) {
if (listPtr != NULL) {
@@ -302,7 +302,7 @@ void LoadRoomTileEntities(TileEntity* list) {
}
static void LoadGrassDropTile(TileEntity* tile) {
MemCopy(&gUnk_080015BC[tile->_1], &gRoomVars.filler4[44], 0x20);
MemCopy(&gDroptablesAreas[tile->_1], &gRoomVars.filler4[44], 0x20);
}
static void LoadLocationTile(TileEntity* tile) {