string prep

This commit is contained in:
theo3 2021-11-02 14:46:21 -07:00
parent 479920b5ba
commit 60c744c998
5 changed files with 462 additions and 315 deletions

View File

@ -1,168 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
adds r4, r0, #0
ldrb r2, [r4, #0xa]
ldr r0, _080ACD20 @ =gScreenTransition
ldr r0, [r0]
adds r0, r2, r0
movs r1, #1
ands r0, r1
cmp r0, #0
beq _080ACCF8
ldr r0, _080ACD24 @ =gUnk_0812AAAC
lsls r1, r2, #2
adds r1, r1, r0
ldr r7, [r1]
ldr r0, [r4, #0x74]
adds r0, r7, r0
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
bne _080ACCA4
str r0, [r4, #0x74]
_080ACCA4:
ldr r0, [r4, #0x74]
adds r0, r7, r0
movs r2, #0
ldrsb r2, [r0, r2]
movs r3, #1
ldrsb r3, [r0, r3]
adds r0, r4, #0
movs r1, #0xe
bl sub_08008782
adds r5, r0, #0
cmp r5, #0
beq _080ACCF2
ldrb r1, [r5, #5]
ldrb r2, [r5, #2]
movs r0, #0x11
bl CreateObject
adds r6, r0, #0
cmp r6, #0
beq _080ACCF2
ldrb r0, [r5, #3]
strb r0, [r6, #0xe]
ldr r0, [r4, #0x74]
adds r0, r7, r0
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
ldrh r1, [r4, #0x2e]
adds r0, r0, r1
strh r0, [r6, #0x2e]
ldr r0, [r4, #0x74]
adds r0, r0, r7
ldrb r0, [r0, #1]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
ldrh r1, [r4, #0x32]
adds r0, r0, r1
strh r0, [r6, #0x32]
_080ACCF2:
ldr r0, [r4, #0x74]
adds r0, #2
str r0, [r4, #0x74]
_080ACCF8:
ldr r2, [r4, #0x54]
cmp r2, #0
bne _080ACD08
ldr r0, [r4, #0x70]
cmp r0, #2
bls _080ACD08
movs r0, #1
str r0, [r4, #0x70]
_080ACD08:
ldr r0, [r4, #0x70]
subs r0, #1
str r0, [r4, #0x70]
movs r1, #1
rsbs r1, r1, #0
cmp r0, r1
bne _080ACDAE
cmp r2, #0
bne _080ACD28
movs r0, #2
b _080ACD32
.align 2, 0
_080ACD20: .4byte gScreenTransition
_080ACD24: .4byte gUnk_0812AAAC
_080ACD28:
ldr r0, _080ACD74 @ =gUnk_0812AABC
ldrb r1, [r4, #0xa]
adds r1, r1, r0
movs r0, #0
ldrsb r0, [r1, r0]
_080ACD32:
str r0, [r4, #0x70]
movs r0, #0x17
movs r1, #0
movs r2, #0
bl CreateObject
adds r6, r0, #0
cmp r6, #0
beq _080ACDAE
bl Random
adds r2, r0, #0
movs r0, #0xf
ands r2, r0
ldr r3, [r4, #0x48]
ldrb r1, [r3, #6]
cmp r1, r2
bge _080ACD58
adds r2, r1, #0
_080ACD58:
movs r0, #1
ands r0, r2
cmp r0, #0
beq _080ACD62
rsbs r2, r2, #0
_080ACD62:
ldrb r0, [r4, #0x14]
lsrs r0, r0, #1
cmp r0, #1
beq _080ACD9C
cmp r0, #1
bgt _080ACD78
cmp r0, #0
beq _080ACD82
b _080ACDAE
.align 2, 0
_080ACD74: .4byte gUnk_0812AABC
_080ACD78:
cmp r0, #2
beq _080ACD8C
cmp r0, #3
beq _080ACDA2
b _080ACDAE
_080ACD82:
ldrb r0, [r3, #7]
ldrh r1, [r4, #0x32]
subs r1, r1, r0
strh r1, [r6, #0x32]
b _080ACD94
_080ACD8C:
ldrh r0, [r4, #0x32]
ldrb r3, [r3, #7]
adds r0, r0, r3
strh r0, [r6, #0x32]
_080ACD94:
ldrh r0, [r4, #0x2e]
adds r0, r0, r2
strh r0, [r6, #0x2e]
b _080ACDAE
_080ACD9C:
ldrh r0, [r4, #0x2e]
adds r0, r0, r1
b _080ACDA6
_080ACDA2:
ldrh r0, [r4, #0x2e]
subs r0, r0, r1
_080ACDA6:
strh r0, [r6, #0x2e]
ldrh r0, [r4, #0x32]
adds r0, r0, r2
strh r0, [r6, #0x32]
_080ACDAE:
pop {r4, r5, r6, r7, pc}
.syntax divided

View File

@ -4,146 +4,6 @@
.section .rodata
.align 2
gUnk_0812AA88:: @ 0812AA88
.incbin "baserom.gba", 0x12AA88, 0x0000009
gUnk_0812AA91:: @ 0812AA91
.incbin "baserom.gba", 0x12AA91, 0x0000009
gUnk_0812AA9A:: @ 0812AA9A
.incbin "baserom.gba", 0x12AA9A, 0x0000012
gUnk_0812AAAC:: @ 0812AAAC
.4byte gUnk_0812AA88
.4byte gUnk_0812AA91
.4byte gUnk_0812AA91
.4byte gUnk_0812AA9A
gUnk_0812AABC:: @ 0812AABC
.incbin "baserom.gba", 0x12AABC, 0x0000004
gUnk_0812AAC0:: @ 0812AAC0
.incbin "baserom.gba", 0x12AAC0, 0x0000008
gUnk_0812AAC8:: @ 0812AAC8
.incbin "baserom.gba", 0x12AAC8, 0x0000008
gUnk_0812AAD0:: @ 0812AAD0
.incbin "baserom.gba", 0x12AAD0, 0x0000008
gUnk_0812AAD8:: @ 0812AAD8
.4byte gUnk_0812AAC0
.4byte gUnk_0812AAC8
.4byte gUnk_0812AAC8
.4byte gUnk_0812AAD0
gUnk_0812AAE8:: @ 0812AAE8
.4byte 0x10100c00
.4byte gUnk_0812B204
.4byte gUnk_0812B1F8
.4byte gUnk_0812B1EC
.4byte gUnk_0812B1E0
.4byte gUnk_0812B1D4
.4byte gUnk_0812B1C8
.4byte gUnk_0812B1BC
.4byte gUnk_0812B1B0
.4byte gUnk_0812B1A4
.4byte gUnk_0812B198
.4byte gUnk_0812B18C
.4byte gUnk_0812B180
.4byte gUnk_0812B174
.4byte gUnk_0812B168
.4byte gUnk_0812B15C
.4byte gUnk_0812B150
.4byte gUnk_0812B144
.4byte gUnk_0812B138
.4byte gUnk_0812B124
.4byte gUnk_0812B11C
.4byte gUnk_0812B110
.4byte gUnk_0812B104
.4byte gUnk_0812B0FC
.4byte gUnk_0812B0EC
.4byte gUnk_0812B0DC
.4byte gUnk_0812B0CC
.4byte gUnk_0812B0BC
.4byte gUnk_0812B0AC
.4byte gUnk_0812B0A0
.4byte gUnk_0812B098
.4byte gUnk_0812B08C
.4byte gUnk_0812B07C
.4byte gUnk_0812B06C
.4byte gUnk_0812B05C
.4byte gUnk_0812B050
.4byte gUnk_0812B044
.4byte gUnk_0812B034
.4byte gUnk_0812B028
.4byte gUnk_0812B018
.4byte gUnk_0812B010
.4byte gUnk_0812B004
.4byte gUnk_0812AFF4
.4byte gUnk_0812AFE0
.4byte gUnk_0812AFCC
.4byte gUnk_0812AFB8
.4byte gUnk_0812AFA4
.4byte gUnk_0812AF94
.4byte gUnk_0812AF84
.4byte gUnk_0812AF70
.4byte gUnk_0812AF64
.4byte gUnk_0812AF58
.4byte gUnk_0812AF4C
.4byte gUnk_0812AF40
.4byte gUnk_0812AF34
.4byte gUnk_0812AF28
.4byte gUnk_0812AF1C
.4byte gUnk_0812AF10
.4byte gUnk_0812AF04
.4byte gUnk_0812AEF4
.4byte gUnk_0812AEEC
.4byte gUnk_0812AEE4
.4byte gUnk_0812AEDC
.4byte gUnk_0812AEC8
.4byte gUnk_0812AEB4
.4byte gUnk_0812AEA0
.4byte gUnk_0812AE8C
.4byte gUnk_0812AE7C
.4byte gUnk_0812AE6C
.4byte gUnk_0812AE5C
.4byte gUnk_0812AE48
.4byte gUnk_0812AE38
.4byte gUnk_0812AE24
.4byte gUnk_0812AE14
.4byte gUnk_0812AE0C
.4byte gUnk_0812ADFC
.4byte gUnk_0812ADEC
.4byte gUnk_0812ADDC
.4byte gUnk_0812ADCC
.4byte gUnk_0812ADBC
.4byte gUnk_0812ADB0
.4byte gUnk_0812ADA0
.4byte gUnk_0812AD98
.4byte gUnk_0812AD8C
.4byte gUnk_0812AD7C
.4byte gUnk_0812AD70
.4byte gUnk_0812AD64
.4byte gUnk_0812AD54
.4byte gUnk_0812AD40
.4byte gUnk_0812AD30
.4byte gUnk_0812AD20
.4byte gUnk_0812AD0C
.4byte gUnk_0812AD00
.4byte gUnk_0812ACF0
.4byte gUnk_0812ACE4
.4byte gUnk_0812ACD8
.4byte gUnk_0812ACCC
.4byte gUnk_0812ACC0
.4byte gUnk_0812ACB0
.4byte gUnk_0812ACA4
.4byte gUnk_0812AC94
.ifndef EU
.4byte gUnk_0812AC88
.endif
.4byte gUnk_0812AC84
gUnk_0812AC84:: @ 0812AC84
.incbin "baserom.gba", 0x12AC84, 0x0000004

View File

@ -766,7 +766,7 @@ SECTIONS {
asm/bossDoor.o(.text);
asm/object3A.o(.text);
asm/macroMushroomStalks.o(.text);
asm/object75.o(.text); /* 75 and 76 are mislocated in base game */
asm/object75.o(.text); /* 75 and 76 are mislocated for unknown reasons */
asm/object76.o(.text);
asm/code_0808C964.o(.text);
asm/macroPlayer.o(.text);
@ -1614,7 +1614,8 @@ data/const/object/object1D.o(.rodata);
data/animations/object/fan.o(.rodata);
data/const/object/objectA0.o(.rodata);
data/animations/object/objectA0.o(.rodata);
data/const/object/palaceArchway.o(.rodata); src/object/objectA2.o(.rodata);
data/const/object/palaceArchway.o(.rodata);
src/object/objectA2.o(.rodata);
data/animations/object/objectA2.o(.rodata);
data/const/object/cloud.o(.rodata);
data/const/object/minishLight.o(.rodata);
@ -1715,6 +1716,8 @@ data/const/object/object1D.o(.rodata);
data/animations/projectile/gyorgMaleEnergyProjectile.o(.rodata);
src/projectile/v3TennisBallProjectile.o(.rodata);
data/const/playerItem/playerItem10.o(.rodata);
src/playerItem/playerItem10.o(.rodata);
src/flag_debug.o(.rodata);
data/data_0812AA88.o(.rodata);
data/const/playerItem/playerItem13.o(.rodata);
src/intro.o(.rodata);

330
src/flag_debug.c Normal file
View File

@ -0,0 +1,330 @@
//
// #define DEF_FLAGS( name, ... ) \
// const char* const name##_flags[] = { \
// "BEGIN", \
// __VA_ARGS__ \
// "END" \
// };
// DEF_FLAGS(global, "a",
// "b");
extern const char* gUnk_0812B204;
extern const char* gUnk_0812B1F8;
extern const char* gUnk_0812B1EC;
extern const char* gUnk_0812B1E0;
extern const char* gUnk_0812B1D4;
extern const char* gUnk_0812B1C8;
extern const char* gUnk_0812B1BC;
extern const char* gUnk_0812B1B0;
extern const char* gUnk_0812B1A4;
extern const char* gUnk_0812B198;
extern const char* gUnk_0812B18C;
extern const char* gUnk_0812B180;
extern const char* gUnk_0812B174;
extern const char* gUnk_0812B168;
extern const char* gUnk_0812B15C;
extern const char* gUnk_0812B150;
extern const char* gUnk_0812B144;
extern const char* gUnk_0812B138;
extern const char* gUnk_0812B124;
extern const char* gUnk_0812B11C;
extern const char* gUnk_0812B110;
extern const char* gUnk_0812B104;
extern const char* gUnk_0812B0FC;
extern const char* gUnk_0812B0EC;
extern const char* gUnk_0812B0DC;
extern const char* gUnk_0812B0CC;
extern const char* gUnk_0812B0BC;
extern const char* gUnk_0812B0AC;
extern const char* gUnk_0812B0A0;
extern const char* gUnk_0812B098;
extern const char* gUnk_0812B08C;
extern const char* gUnk_0812B07C;
extern const char* gUnk_0812B06C;
extern const char* gUnk_0812B05C;
extern const char* gUnk_0812B050;
extern const char* gUnk_0812B044;
extern const char* gUnk_0812B034;
extern const char* gUnk_0812B028;
extern const char* gUnk_0812B018;
extern const char* gUnk_0812B010;
extern const char* gUnk_0812B004;
extern const char* gUnk_0812AFF4;
extern const char* gUnk_0812AFE0;
extern const char* gUnk_0812AFCC;
extern const char* gUnk_0812AFB8;
extern const char* gUnk_0812AFA4;
extern const char* gUnk_0812AF94;
extern const char* gUnk_0812AF84;
extern const char* gUnk_0812AF70;
extern const char* gUnk_0812AF64;
extern const char* gUnk_0812AF58;
extern const char* gUnk_0812AF4C;
extern const char* gUnk_0812AF40;
extern const char* gUnk_0812AF34;
extern const char* gUnk_0812AF28;
extern const char* gUnk_0812AF1C;
extern const char* gUnk_0812AF10;
extern const char* gUnk_0812AF04;
extern const char* gUnk_0812AEF4;
extern const char* gUnk_0812AEEC;
extern const char* gUnk_0812AEE4;
extern const char* gUnk_0812AEDC;
extern const char* gUnk_0812AEC8;
extern const char* gUnk_0812AEB4;
extern const char* gUnk_0812AEA0;
extern const char* gUnk_0812AE8C;
extern const char* gUnk_0812AE7C;
extern const char* gUnk_0812AE6C;
extern const char* gUnk_0812AE5C;
extern const char* gUnk_0812AE48;
extern const char* gUnk_0812AE38;
extern const char* gUnk_0812AE24;
extern const char* gUnk_0812AE14;
extern const char* gUnk_0812AE0C;
extern const char* gUnk_0812ADFC;
extern const char* gUnk_0812ADEC;
extern const char* gUnk_0812ADDC;
extern const char* gUnk_0812ADCC;
extern const char* gUnk_0812ADBC;
extern const char* gUnk_0812ADB0;
extern const char* gUnk_0812ADA0;
extern const char* gUnk_0812AD98;
extern const char* gUnk_0812AD8C;
extern const char* gUnk_0812AD7C;
extern const char* gUnk_0812AD70;
extern const char* gUnk_0812AD64;
extern const char* gUnk_0812AD54;
extern const char* gUnk_0812AD40;
extern const char* gUnk_0812AD30;
extern const char* gUnk_0812AD20;
extern const char* gUnk_0812AD0C;
extern const char* gUnk_0812AD00;
extern const char* gUnk_0812ACF0;
extern const char* gUnk_0812ACE4;
extern const char* gUnk_0812ACD8;
extern const char* gUnk_0812ACCC;
extern const char* gUnk_0812ACC0;
extern const char* gUnk_0812ACB0;
extern const char* gUnk_0812ACA4;
extern const char* gUnk_0812AC94;
#ifndef EU
extern const char* gUnk_0812AC88;
#endif
extern const char* gUnk_0812AC84;
const char** const globalFlagNames[] = {
&gUnk_0812B204,
&gUnk_0812B1F8,
&gUnk_0812B1EC,
&gUnk_0812B1E0,
&gUnk_0812B1D4,
&gUnk_0812B1C8,
&gUnk_0812B1BC,
&gUnk_0812B1B0,
&gUnk_0812B1A4,
&gUnk_0812B198,
&gUnk_0812B18C,
&gUnk_0812B180,
&gUnk_0812B174,
&gUnk_0812B168,
&gUnk_0812B15C,
&gUnk_0812B150,
&gUnk_0812B144,
&gUnk_0812B138,
&gUnk_0812B124,
&gUnk_0812B11C,
&gUnk_0812B110,
&gUnk_0812B104,
&gUnk_0812B0FC,
&gUnk_0812B0EC,
&gUnk_0812B0DC,
&gUnk_0812B0CC,
&gUnk_0812B0BC,
&gUnk_0812B0AC,
&gUnk_0812B0A0,
&gUnk_0812B098,
&gUnk_0812B08C,
&gUnk_0812B07C,
&gUnk_0812B06C,
&gUnk_0812B05C,
&gUnk_0812B050,
&gUnk_0812B044,
&gUnk_0812B034,
&gUnk_0812B028,
&gUnk_0812B018,
&gUnk_0812B010,
&gUnk_0812B004,
&gUnk_0812AFF4,
&gUnk_0812AFE0,
&gUnk_0812AFCC,
&gUnk_0812AFB8,
&gUnk_0812AFA4,
&gUnk_0812AF94,
&gUnk_0812AF84,
&gUnk_0812AF70,
&gUnk_0812AF64,
&gUnk_0812AF58,
&gUnk_0812AF4C,
&gUnk_0812AF40,
&gUnk_0812AF34,
&gUnk_0812AF28,
&gUnk_0812AF1C,
&gUnk_0812AF10,
&gUnk_0812AF04,
&gUnk_0812AEF4,
&gUnk_0812AEEC,
&gUnk_0812AEE4,
&gUnk_0812AEDC,
&gUnk_0812AEC8,
&gUnk_0812AEB4,
&gUnk_0812AEA0,
&gUnk_0812AE8C,
&gUnk_0812AE7C,
&gUnk_0812AE6C,
&gUnk_0812AE5C,
&gUnk_0812AE48,
&gUnk_0812AE38,
&gUnk_0812AE24,
&gUnk_0812AE14,
&gUnk_0812AE0C,
&gUnk_0812ADFC,
&gUnk_0812ADEC,
&gUnk_0812ADDC,
&gUnk_0812ADCC,
&gUnk_0812ADBC,
&gUnk_0812ADB0,
&gUnk_0812ADA0,
&gUnk_0812AD98,
&gUnk_0812AD8C,
&gUnk_0812AD7C,
&gUnk_0812AD70,
&gUnk_0812AD64,
&gUnk_0812AD54,
&gUnk_0812AD40,
&gUnk_0812AD30,
&gUnk_0812AD20,
&gUnk_0812AD0C,
&gUnk_0812AD00,
&gUnk_0812ACF0,
&gUnk_0812ACE4,
&gUnk_0812ACD8,
&gUnk_0812ACCC,
&gUnk_0812ACC0,
&gUnk_0812ACB0,
&gUnk_0812ACA4,
&gUnk_0812AC94,
#ifndef EU
&gUnk_0812AC88,
#endif
&gUnk_0812AC84,
};
// const char* globalFlagNames[] = {
// "BEGIN",
// "LV0_CLEAR",
// "LV1_CLEAR",
// "LV2_CLEAR",
// "LV3_CLEAR",
// "LV4_CLEAR",
// "LV5_CLEAR",
// "LV6_CLEAR",
// "LV7_CLEAR",
// "LV8_CLEAR",
// "MACHI_SET_1",
// "MACHI_SET_2",
// "MACHI_SET_3",
// "MACHI_SET_4",
// "MACHI_SET_5",
// "MACHI_SET_6",
// "MACHI_SET_7",
// "MACHI_SET_8",
// "MACHI_MACHIHOKORI",
// "START",
// "EZERO_1ST",
// "TABIDACHI",
// "LV1TARU",
// "LV1TARU_OPEN",
// "TATEKAKE_HOUSE",
// "TATEKAKE_TOCHU",
// "WATERBEAN_OUT",
// "WATERBEAN_PUT",
// "ZELDA_CHASE",
// "INLOCK",
// "DASHBOOTS",
// "LEFT_DOOR_OPEN",
// "HAKA_KEY_LOST",
// "HAKA_KEY_FOUND",
// "ENTRANCE_OK",
// "TATSUMAKI",
// "KUMOTATSUMAKI",
// "KAITENGIRI",
// "DAIKAITENGIRI",
// "GATOTSU",
// "KABUTOWARI",
// "MIZUKAKI_START",
// "MIZUKAKI_HARIFALL",
// "RENTED_HOUSE_DIN",
// "RENTED_HOUSE_NAYRU",
// "RENTED_HOUSE_FARORE",
// "NEW_HOUSE_DIN",
// "NEW_HOUSE_NAYRU",
// "NEW_HOUSE_FARORE",
// "OUGONTEKI_A",
// "OUGONTEKI_B",
// "OUGONTEKI_C",
// "OUGONTEKI_D",
// "OUGONTEKI_E",
// "OUGONTEKI_F",
// "OUGONTEKI_G",
// "OUGONTEKI_H",
// "OUGONTEKI_I",
// "KAKERA_COMPLETE",
// "DRUG_1",
// "DRUG_2",
// "DRUG_3",
// "GORON_KAKERA_LV2",
// "GORON_KAKERA_LV3",
// "GORON_KAKERA_LV4",
// "GORON_KAKERA_LV5",
// "GORON_KAKERA_L",
// "GORON_KAKERA_M",
// "GORON_KAKERA_R",
// "CHIKATSURO_SHUTTER",
// "ENTRANCE_USED",
// "GOMAN_RENTED_HOUSE",
// "GOMAN_NEW_HOUSE",
// "OUTDOOR",
// "POWERGLOVE_HINT",
// "ANJU_LV_BIT0",
// "ANJU_LV_BIT1",
// "ANJU_LV_BIT2",
// "ANJU_LV_BIT3",
// "ANJU_HEART",
// "MAROYA_WAKEUP",
// "ENDING",
// "WARP_1ST",
// "WARP_MONUMENT",
// "DRUG_COUNT",
// "GAMECLEAR",
// "WHITE_SWORD_END",
// "SOUGEN_06_HASHIGO",
// "WARP_EVENT_END",
// "FIGURE_ALLCOMP",
// "AKINDO_BOTTLE_SELL",
// "BIN_DOGFOOD",
// "TINGLE_TALK1ST",
// "SEIIKI_BGM",
// "ENTRANCE_0",
// "ENTRANCE_1",
// "ENTRANCE_2",
// "MIZUKAKI_NECHAN",
// "MAZE_CLEAR",
// "TINY_ENTRANCE",
// #ifndef EU
// "CASTLE_BGM",
// #endif
// "END",
// };

View File

@ -1,16 +1,73 @@
#include "entity.h"
#include "player.h"
#include "functions.h"
#include "random.h"
extern void (*const gUnk_0812AA80[])(Entity*);
extern Hitbox* gUnk_0812AAD8[];
bool32 sub_080ACDB0(Entity*);
void sub_080ACC78(Entity*);
void sub_080ACECC(Entity*);
extern u8 gUnk_0812AAE8[];
typedef struct {
u16 bits;
u8 type2;
u8 actionDelay;
u8 _4;
u8 type;
u16 tileID;
} Obj11;
Obj11* sub_08008782(Entity*, u32, u32, u32);
const s8 gUnk_0812AA88[] = {
-4, -4, 4, -4, -4, 4, 4, 4, 0,
};
const s8 gUnk_0812AA91[] = {
-5, -5, 5, -5, -5, 5, 5, 5, 0,
};
const s8 gUnk_0812AA9A[] = {
-9, -9, 1, -9, 9, -9, -9, 1, 9, 1, -9, 9, 1, 9, 9, 9, 0, 0,
};
const s8* const gUnk_0812AAAC[] = {
gUnk_0812AA88,
gUnk_0812AA91,
gUnk_0812AA91,
gUnk_0812AA9A,
};
const s8 gUnk_0812AABC[] = {
0x78,
0x50,
0x28,
0x4,
};
const Hitbox gUnk_0812AAC0 = {
0, 0, 4, 2, 2, 4, 4, 4,
};
const Hitbox gUnk_0812AAC8 = {
0, 0, 4, 3, 3, 4, 9, 9,
};
const Hitbox gUnk_0812AAD0 = {
0, 0, 8, 7, 7, 8, 14, 14,
};
const Hitbox* const gUnk_0812AAD8[] = {
&gUnk_0812AAC0,
&gUnk_0812AAC8,
&gUnk_0812AAC8,
&gUnk_0812AAD0,
};
const u8 gUnk_0812AAE8[] = {
0, 12, 16, 16,
};
void PlayerItem10(Entity* this) {
if ((gPlayerState.field_0x1c & 0x7f) != 1) {
@ -27,7 +84,7 @@ void sub_080ACC04(Entity* this) {
this->speed = 0x200;
this->flags |= 0xa0;
this->field_0x3c = 2;
this->hitbox = gUnk_0812AAD8[this->type];
this->hitbox = (Hitbox*)gUnk_0812AAD8[this->type];
this->field_0x70.WORD = 0x10;
sub_080ACDB0(this);
sub_0801766C(this);
@ -40,7 +97,72 @@ void sub_080ACC5C(Entity* this) {
}
}
ASM_FUNC("asm/non_matching/playerItem10/sub_080ACC78.inc", void sub_080ACC78(Entity* this))
void sub_080ACC78(Entity* this) {
s32 width;
Obj11* o;
Entity* child;
s32 offset;
const s8* puVar8;
if ((this->type + gScreenTransition.frameCount) & 1) {
puVar8 = gUnk_0812AAAC[this->type];
if (puVar8[*(u32*)&this->field_0x74] == 0) {
*(u32*)&this->field_0x74 = 0;
}
o = sub_08008782(this, 0xe, puVar8[*(u32*)&this->field_0x74], puVar8[*(u32*)&this->field_0x74 + 1]);
if (o != NULL) {
child = CreateObject(0x11, o->type, o->type2);
if (child != NULL) {
child->actionDelay = o->actionDelay;
child->x.HALF.HI = puVar8[*(u32*)&this->field_0x74] + this->x.HALF.HI;
child->y.HALF.HI = puVar8[*(u32*)&this->field_0x74 + 1] + this->y.HALF.HI;
}
}
*(u32*)&this->field_0x74 += 2;
}
if (this->attachedEntity == NULL && (u32)this->field_0x70.WORD > 2) {
this->field_0x70.WORD = 1;
}
if (--this->field_0x70.WORD != -1) {
return;
}
if (this->attachedEntity == NULL) {
this->field_0x70.WORD = 2;
} else {
this->field_0x70.WORD = gUnk_0812AABC[this->type];
}
child = CreateObject(0x17, 0, 0);
if (child == NULL) {
return;
}
offset = Random() % 16;
width = this->hitbox->width;
if (width < offset) {
offset = width;
}
if (offset & 1) {
offset = -offset;
}
switch (this->animationState >> 1) {
case 0:
child->y.HALF.HI = this->y.HALF.HI - this->hitbox->height;
child->x.HALF.HI = this->x.HALF.HI + offset;
break;
case 2:
child->y.HALF.HI = this->y.HALF.HI + this->hitbox->height;
child->x.HALF.HI = this->x.HALF.HI + offset;
break;
case 1:
child->x.HALF.HI = this->x.HALF.HI + this->hitbox->width;
child->y.HALF.HI = this->y.HALF.HI + offset;
break;
case 3:
child->x.HALF.HI = this->x.HALF.HI - this->hitbox->width;
child->y.HALF.HI = this->y.HALF.HI + offset;
break;
}
}
ASM_FUNC("asm/non_matching/playerItem10/sub_080ACDB0.inc", bool32 sub_080ACDB0(Entity* this))