diff --git a/assets/xml/interface/parameter_static.xml b/assets/xml/interface/parameter_static.xml index e5e0808c0..a2ab9e0c5 100644 --- a/assets/xml/interface/parameter_static.xml +++ b/assets/xml/interface/parameter_static.xml @@ -119,13 +119,13 @@ - - - - - - - + + + + + + + diff --git a/assets/xml/objects/gameplay_dangeon_keep.xml b/assets/xml/objects/gameplay_dangeon_keep.xml index e9acb308b..493290604 100644 --- a/assets/xml/objects/gameplay_dangeon_keep.xml +++ b/assets/xml/objects/gameplay_dangeon_keep.xml @@ -88,6 +88,6 @@ - + diff --git a/assets/xml/objects/gameplay_field_keep.xml b/assets/xml/objects/gameplay_field_keep.xml index 596101814..eac855669 100644 --- a/assets/xml/objects/gameplay_field_keep.xml +++ b/assets/xml/objects/gameplay_field_keep.xml @@ -40,8 +40,8 @@ - - + + diff --git a/assets/xml/objects/gameplay_keep.xml b/assets/xml/objects/gameplay_keep.xml index 2e65fb73d..16cbf0b85 100644 --- a/assets/xml/objects/gameplay_keep.xml +++ b/assets/xml/objects/gameplay_keep.xml @@ -932,16 +932,16 @@ - - - - - - - - + + + + + + + + - + @@ -1039,14 +1039,14 @@ - - - - - - - - + + + + + + + + @@ -1154,8 +1154,8 @@ - - + + diff --git a/assets/xml/objects/object_ah.xml b/assets/xml/objects/object_ah.xml index 1bf479e86..71b031a01 100644 --- a/assets/xml/objects/object_ah.xml +++ b/assets/xml/objects/object_ah.xml @@ -1,9 +1,9 @@  - - - - + + + + diff --git a/assets/xml/objects/object_al.xml b/assets/xml/objects/object_al.xml index db348868a..790ca3d8a 100644 --- a/assets/xml/objects/object_al.xml +++ b/assets/xml/objects/object_al.xml @@ -1,6 +1,6 @@  - + @@ -66,10 +66,10 @@ - - - - - + + + + + diff --git a/assets/xml/objects/object_am.xml b/assets/xml/objects/object_am.xml index 1f738d39b..259700dc8 100644 --- a/assets/xml/objects/object_am.xml +++ b/assets/xml/objects/object_am.xml @@ -1,8 +1,8 @@  - - + + @@ -35,7 +35,7 @@ - + diff --git a/assets/xml/objects/object_an1.xml b/assets/xml/objects/object_an1.xml index 2db214bd3..d0f5f73c5 100644 --- a/assets/xml/objects/object_an1.xml +++ b/assets/xml/objects/object_an1.xml @@ -1,16 +1,16 @@  - - - - - - - - - - - + + + + + + + + + + + @@ -52,7 +52,7 @@ - + @@ -60,7 +60,7 @@ - + @@ -82,7 +82,7 @@ - - + + diff --git a/assets/xml/objects/object_an2.xml b/assets/xml/objects/object_an2.xml index 3adcc27f7..a1785e5dd 100644 --- a/assets/xml/objects/object_an2.xml +++ b/assets/xml/objects/object_an2.xml @@ -1,12 +1,12 @@  - + - - - - + + + + diff --git a/assets/xml/objects/object_an3.xml b/assets/xml/objects/object_an3.xml index 2d94b81b7..2fa21dadc 100644 --- a/assets/xml/objects/object_an3.xml +++ b/assets/xml/objects/object_an3.xml @@ -1,12 +1,12 @@  - + - - - + + + diff --git a/assets/xml/objects/object_an4.xml b/assets/xml/objects/object_an4.xml index 57088a072..a6bb94e37 100644 --- a/assets/xml/objects/object_an4.xml +++ b/assets/xml/objects/object_an4.xml @@ -1,15 +1,15 @@  - - - - - - - - - - - + + + + + + + + + + + diff --git a/assets/xml/objects/object_and.xml b/assets/xml/objects/object_and.xml index 00c8d7585..a076a1c07 100644 --- a/assets/xml/objects/object_and.xml +++ b/assets/xml/objects/object_and.xml @@ -1,6 +1,6 @@  - + @@ -68,12 +68,12 @@ - - - - - - - + + + + + + + diff --git a/assets/xml/objects/object_ani.xml b/assets/xml/objects/object_ani.xml index 34fb49f0d..fb17e4e75 100644 --- a/assets/xml/objects/object_ani.xml +++ b/assets/xml/objects/object_ani.xml @@ -1,11 +1,11 @@  - - - - - - + + + + + + @@ -53,15 +53,15 @@ - + - - - + + + - - + + - + diff --git a/assets/xml/objects/object_astr_obj.xml b/assets/xml/objects/object_astr_obj.xml index 7a87bd61b..75a8e7ca2 100644 --- a/assets/xml/objects/object_astr_obj.xml +++ b/assets/xml/objects/object_astr_obj.xml @@ -5,9 +5,9 @@ - + - + diff --git a/assets/xml/objects/object_bai.xml b/assets/xml/objects/object_bai.xml index 813065876..419f37b29 100644 --- a/assets/xml/objects/object_bai.xml +++ b/assets/xml/objects/object_bai.xml @@ -1,7 +1,7 @@  - - + + @@ -48,6 +48,6 @@ - + diff --git a/assets/xml/objects/object_bal.xml b/assets/xml/objects/object_bal.xml index 2cdfc5c3a..a31c0e29f 100644 --- a/assets/xml/objects/object_bal.xml +++ b/assets/xml/objects/object_bal.xml @@ -1,9 +1,9 @@  - - - - + + + + @@ -69,13 +69,13 @@ - - - - - - - - + + + + + + + + diff --git a/assets/xml/objects/object_bba.xml b/assets/xml/objects/object_bba.xml index 0b22866e7..c3a5d0424 100644 --- a/assets/xml/objects/object_bba.xml +++ b/assets/xml/objects/object_bba.xml @@ -18,10 +18,10 @@ - - - - + + + + @@ -44,8 +44,8 @@ - - + + diff --git a/assets/xml/objects/object_bee.xml b/assets/xml/objects/object_bee.xml index 8fcd930fa..ab9699e84 100644 --- a/assets/xml/objects/object_bee.xml +++ b/assets/xml/objects/object_bee.xml @@ -2,7 +2,7 @@ - + diff --git a/assets/xml/objects/object_bg.xml b/assets/xml/objects/object_bg.xml index fe294cb33..272968b8d 100644 --- a/assets/xml/objects/object_bg.xml +++ b/assets/xml/objects/object_bg.xml @@ -1,8 +1,8 @@  - - - + + + @@ -52,11 +52,11 @@ - - - - - + + + + + diff --git a/assets/xml/objects/object_bh.xml b/assets/xml/objects/object_bh.xml index 3e33fb739..b4cc95393 100644 --- a/assets/xml/objects/object_bh.xml +++ b/assets/xml/objects/object_bh.xml @@ -1,6 +1,6 @@  - + diff --git a/assets/xml/objects/object_big_fwall.xml b/assets/xml/objects/object_big_fwall.xml index f3f51a488..bb8b838be 100644 --- a/assets/xml/objects/object_big_fwall.xml +++ b/assets/xml/objects/object_big_fwall.xml @@ -1,6 +1,6 @@  - + diff --git a/assets/xml/objects/object_bigicicle.xml b/assets/xml/objects/object_bigicicle.xml index 3e1a7fd7e..f02767256 100644 --- a/assets/xml/objects/object_bigicicle.xml +++ b/assets/xml/objects/object_bigicicle.xml @@ -2,11 +2,11 @@ - - - - - + + + + + diff --git a/assets/xml/objects/object_bigokuta.xml b/assets/xml/objects/object_bigokuta.xml index d8df44ddc..7c2928b23 100644 --- a/assets/xml/objects/object_bigokuta.xml +++ b/assets/xml/objects/object_bigokuta.xml @@ -1,10 +1,10 @@  - - - - - + + + + + diff --git a/assets/xml/objects/object_bigpo.xml b/assets/xml/objects/object_bigpo.xml index 531a151c6..e10052e3c 100644 --- a/assets/xml/objects/object_bigpo.xml +++ b/assets/xml/objects/object_bigpo.xml @@ -1,14 +1,14 @@  - - - - - - + + + + + + - + @@ -19,8 +19,8 @@ - - + + diff --git a/assets/xml/objects/object_bigslime.xml b/assets/xml/objects/object_bigslime.xml index 84a6eec61..93c2ef807 100644 --- a/assets/xml/objects/object_bigslime.xml +++ b/assets/xml/objects/object_bigslime.xml @@ -1,30 +1,30 @@  - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -90,34 +90,34 @@ - - - + + + - - + + - + - + - + - + - + - - + + diff --git a/assets/xml/objects/object_bji.xml b/assets/xml/objects/object_bji.xml index bef54b0e5..697ee565c 100644 --- a/assets/xml/objects/object_bji.xml +++ b/assets/xml/objects/object_bji.xml @@ -1,8 +1,8 @@  - - - + + + @@ -59,6 +59,6 @@ - + diff --git a/assets/xml/objects/object_bjt.xml b/assets/xml/objects/object_bjt.xml index 27529206f..a4943f6ee 100644 --- a/assets/xml/objects/object_bjt.xml +++ b/assets/xml/objects/object_bjt.xml @@ -1,13 +1,12 @@  + - - - - - - - + + + + + diff --git a/assets/xml/objects/object_boj.xml b/assets/xml/objects/object_boj.xml index 20c661bb5..2eb08a1ef 100644 --- a/assets/xml/objects/object_boj.xml +++ b/assets/xml/objects/object_boj.xml @@ -1,20 +1,20 @@  - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -58,7 +58,7 @@ - + @@ -76,18 +76,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/assets/xml/objects/object_bombf.xml b/assets/xml/objects/object_bombf.xml index a0e5cdef3..f27d67bc1 100644 --- a/assets/xml/objects/object_bombf.xml +++ b/assets/xml/objects/object_bombf.xml @@ -1,8 +1,8 @@  - - - + + + diff --git a/assets/xml/objects/object_bombiwa.xml b/assets/xml/objects/object_bombiwa.xml index 6dbcaf2b5..903d5bd40 100644 --- a/assets/xml/objects/object_bombiwa.xml +++ b/assets/xml/objects/object_bombiwa.xml @@ -2,26 +2,26 @@ - + - + - + - + - + - + diff --git a/assets/xml/objects/object_boss05.xml b/assets/xml/objects/object_boss05.xml index 95bb16edd..9490dd878 100644 --- a/assets/xml/objects/object_boss05.xml +++ b/assets/xml/objects/object_boss05.xml @@ -1,7 +1,7 @@  - - + + @@ -25,9 +25,9 @@ - - - + + + @@ -73,9 +73,9 @@ - - - - + + + + diff --git a/assets/xml/objects/object_boss07.xml b/assets/xml/objects/object_boss07.xml index 82e06d98a..b1f6cb417 100644 --- a/assets/xml/objects/object_boss07.xml +++ b/assets/xml/objects/object_boss07.xml @@ -55,7 +55,7 @@ - + @@ -98,7 +98,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -144,12 +144,12 @@ - + - + @@ -197,7 +197,7 @@ - + @@ -234,7 +234,7 @@ - + diff --git a/assets/xml/objects/object_botihasira.xml b/assets/xml/objects/object_botihasira.xml index 93c59f42f..f949abcc7 100644 --- a/assets/xml/objects/object_botihasira.xml +++ b/assets/xml/objects/object_botihasira.xml @@ -1,6 +1,6 @@  - + diff --git a/assets/xml/objects/object_box.xml b/assets/xml/objects/object_box.xml index 4413ecd7a..be4f34b87 100644 --- a/assets/xml/objects/object_box.xml +++ b/assets/xml/objects/object_box.xml @@ -1,9 +1,9 @@  - - + + - + @@ -22,8 +22,8 @@ - - + + @@ -45,8 +45,8 @@ - - + + diff --git a/assets/xml/objects/object_bsb.xml b/assets/xml/objects/object_bsb.xml index 81cdb9991..40bce73f2 100644 --- a/assets/xml/objects/object_bsb.xml +++ b/assets/xml/objects/object_bsb.xml @@ -1,27 +1,27 @@  - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -73,8 +73,8 @@ - - - + + + diff --git a/assets/xml/objects/object_bsmask.xml b/assets/xml/objects/object_bsmask.xml index 0e7a349cb..92e8148e9 100644 --- a/assets/xml/objects/object_bsmask.xml +++ b/assets/xml/objects/object_bsmask.xml @@ -3,10 +3,10 @@ - - - - + + + + diff --git a/assets/xml/objects/object_cha.xml b/assets/xml/objects/object_cha.xml index 12835da1f..79b008353 100644 --- a/assets/xml/objects/object_cha.xml +++ b/assets/xml/objects/object_cha.xml @@ -1,7 +1,7 @@  - - + + diff --git a/assets/xml/objects/object_comb.xml b/assets/xml/objects/object_comb.xml index df9359acc..d2b00b0dd 100644 --- a/assets/xml/objects/object_comb.xml +++ b/assets/xml/objects/object_comb.xml @@ -1,8 +1,8 @@  - + - + diff --git a/assets/xml/objects/object_crow.xml b/assets/xml/objects/object_crow.xml index 10fc23543..068ca790a 100644 --- a/assets/xml/objects/object_crow.xml +++ b/assets/xml/objects/object_crow.xml @@ -1,6 +1,6 @@  - + diff --git a/assets/xml/objects/object_cs.xml b/assets/xml/objects/object_cs.xml index fe614582b..cc9dfbe74 100644 --- a/assets/xml/objects/object_cs.xml +++ b/assets/xml/objects/object_cs.xml @@ -2,25 +2,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -90,8 +90,8 @@ - - - + + + diff --git a/assets/xml/objects/object_ctower_rot.xml b/assets/xml/objects/object_ctower_rot.xml index 3a04c474e..ad2336257 100644 --- a/assets/xml/objects/object_ctower_rot.xml +++ b/assets/xml/objects/object_ctower_rot.xml @@ -67,34 +67,34 @@ - - + + - + - - + + - - + + - + - + - - + + diff --git a/assets/xml/objects/object_eg.xml b/assets/xml/objects/object_eg.xml index 9cda7f0a3..6aba85e62 100644 --- a/assets/xml/objects/object_eg.xml +++ b/assets/xml/objects/object_eg.xml @@ -1,106 +1,154 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_fish.xml b/assets/xml/objects/object_fish.xml index f01639fbf..4d9a86e51 100644 --- a/assets/xml/objects/object_fish.xml +++ b/assets/xml/objects/object_fish.xml @@ -43,17 +43,17 @@ - - + + - - + + - - + + - - + + @@ -74,11 +74,11 @@ - - + + - - + + @@ -95,11 +95,11 @@ - - + + - - + + @@ -144,15 +144,15 @@ - - - - + + + + - - - - + + + + diff --git a/assets/xml/objects/object_ge1.xml b/assets/xml/objects/object_ge1.xml index ead4263dc..a9c930215 100644 --- a/assets/xml/objects/object_ge1.xml +++ b/assets/xml/objects/object_ge1.xml @@ -38,7 +38,7 @@ - + diff --git a/assets/xml/objects/object_ice_block.xml b/assets/xml/objects/object_ice_block.xml index ba755d100..dd25c06d5 100644 --- a/assets/xml/objects/object_ice_block.xml +++ b/assets/xml/objects/object_ice_block.xml @@ -5,7 +5,7 @@ - + @@ -21,8 +21,8 @@ - + - + diff --git a/assets/xml/objects/object_kz.xml b/assets/xml/objects/object_kz.xml index 55f980ad2..f500ba141 100644 --- a/assets/xml/objects/object_kz.xml +++ b/assets/xml/objects/object_kz.xml @@ -12,6 +12,7 @@ + @@ -20,6 +21,7 @@ + @@ -30,19 +32,21 @@ + - + - + - + + @@ -52,30 +56,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_os_anime.xml b/assets/xml/objects/object_os_anime.xml index 7957dd58d..379beff0a 100644 --- a/assets/xml/objects/object_os_anime.xml +++ b/assets/xml/objects/object_os_anime.xml @@ -12,11 +12,11 @@ - - - - - + + + + + diff --git a/assets/xml/objects/object_test3.xml b/assets/xml/objects/object_test3.xml index efd018995..678e11693 100644 --- a/assets/xml/objects/object_test3.xml +++ b/assets/xml/objects/object_test3.xml @@ -7,7 +7,8 @@ - + + @@ -17,7 +18,16 @@ - + + + + + + + + + + diff --git a/assets/xml/objects/object_zod.xml b/assets/xml/objects/object_zod.xml index 2616dbcdf..45fb179cc 100644 --- a/assets/xml/objects/object_zod.xml +++ b/assets/xml/objects/object_zod.xml @@ -1,50 +1,72 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/overlays/ovl_En_Sth.xml b/assets/xml/overlays/ovl_En_Sth.xml index 80393fc2d..51b29870d 100644 --- a/assets/xml/overlays/ovl_En_Sth.xml +++ b/assets/xml/overlays/ovl_En_Sth.xml @@ -2,13 +2,13 @@ - - - - - - - - + + + + + + + + diff --git a/assets/xml/overlays/ovl_En_Sth2.xml b/assets/xml/overlays/ovl_En_Sth2.xml index 23140ad71..cd458db36 100644 --- a/assets/xml/overlays/ovl_En_Sth2.xml +++ b/assets/xml/overlays/ovl_En_Sth2.xml @@ -9,6 +9,6 @@ - + diff --git a/include/PR/gbi.h b/include/PR/gbi.h index 5cfe31785..07fa0ac2c 100644 --- a/include/PR/gbi.h +++ b/include/PR/gbi.h @@ -4132,7 +4132,7 @@ _DW({ \ #define gDPLoadMultiTile(pkt, timg, tmem, rtile, fmt, siz, width, height,\ uls, ult, lrs, lrt, pal, \ cms, cmt, masks, maskt, shifts, shiftt) \ -{ \ +_DW({ \ gDPSetTextureImage(pkt, fmt, siz, width, timg); \ gDPSetTile(pkt, fmt, siz, \ (((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), tmem, \ @@ -4154,7 +4154,7 @@ _DW({ \ (ult)<= 201112L) /* C11 */ +#define ALIGNOF(x) _Alignof(x) +#else /* __GNUC__ */ +#define ALIGNOF(x) __alignof__(x) +#endif + +#define ALIGN_MASK(n) (~((n) - 1)) + +#define ALIGNOF_MASK(x) ALIGN_MASK(ALIGNOF(x)) + +#endif diff --git a/include/audiothread_cmd.h b/include/audiothread_cmd.h new file mode 100644 index 000000000..c9e6703dc --- /dev/null +++ b/include/audiothread_cmd.h @@ -0,0 +1,644 @@ +#ifndef AUDIOTHREAD_CMD_H +#define AUDIOTHREAD_CMD_H + +/** + * Audio thread commands to safely transfer information/requests/data + * from the external graph thread to the internal audio thread + */ + +typedef enum { + // Channel Commands + /* 0x00 */ AUDIOCMD_OP_NOOP, + /* 0x01 */ AUDIOCMD_OP_CHANNEL_SET_VOL_SCALE, + /* 0x02 */ AUDIOCMD_OP_CHANNEL_SET_VOL, + /* 0x03 */ AUDIOCMD_OP_CHANNEL_SET_PAN, + /* 0x04 */ AUDIOCMD_OP_CHANNEL_SET_FREQ_SCALE, + /* 0x05 */ AUDIOCMD_OP_CHANNEL_SET_REVERB_VOLUME, + /* 0x06 */ AUDIOCMD_OP_CHANNEL_SET_IO, + /* 0x07 */ AUDIOCMD_OP_CHANNEL_SET_PAN_WEIGHT, + /* 0x08 */ AUDIOCMD_OP_CHANNEL_SET_MUTE, + /* 0x09 */ AUDIOCMD_OP_CHANNEL_SET_MUTE_FLAGS, + /* 0x0A */ AUDIOCMD_OP_CHANNEL_SET_VIBRATO_DEPTH, + /* 0x0B */ AUDIOCMD_OP_CHANNEL_SET_VIBRATO_RATE, + /* 0x0C */ AUDIOCMD_OP_CHANNEL_SET_COMB_FILTER_SIZE, + /* 0x0D */ AUDIOCMD_OP_CHANNEL_SET_COMB_FILTER_GAIN, + /* 0x0E */ AUDIOCMD_OP_CHANNEL_SET_STEREO, + /* 0x0F */ AUDIOCMD_OP_CHANNEL_SET_SET_START_POS, + /* 0x10 */ AUDIOCMD_OP_CHANNEL_SET_SFX_STATE, + /* 0x11 */ AUDIOCMD_OP_CHANNEL_SET_REVERB_INDEX, + /* 0x12 */ AUDIOCMD_OP_CHANNEL_SET_SURROUND_EFFECT_INDEX, + /* 0x13 */ AUDIOCMD_OP_CHANNEL_SET_FILTER, + /* 0x14 */ AUDIOCMD_OP_CHANNEL_SET_GAIN, + // SeqPlayer Commands + /* 0x41 */ AUDIOCMD_OP_SEQPLAYER_FADE_VOLUME_SCALE = 0x41, + /* 0x46 */ AUDIOCMD_OP_SEQPLAYER_SET_IO = 0x46, + /* 0x47 */ AUDIOCMD_OP_SEQPLAYER_SET_TEMPO, + /* 0x48 */ AUDIOCMD_OP_SEQPLAYER_SET_TRANSPOSITION, + /* 0x49 */ AUDIOCMD_OP_SEQPLAYER_CHANGE_TEMPO, + /* 0x4A */ AUDIOCMD_OP_SEQPLAYER_FADE_TO_SET_VOLUME, + /* 0x4B */ AUDIOCMD_OP_SEQPLAYER_FADE_TO_SCALED_VOLUME, + /* 0x4C */ AUDIOCMD_OP_SEQPLAYER_RESET_VOLUME, + /* 0x4D */ AUDIOCMD_OP_SEQPLAYER_SET_BEND, + /* 0x4E */ AUDIOCMD_OP_SEQPLAYER_CHANGE_TEMPO_TICKS, + // Global Commands + /* 0x81 */ AUDIOCMD_OP_GLOBAL_SYNC_LOAD_SEQ_PARTS = 0x81, + /* 0x82 */ AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER, + /* 0x83 */ AUDIOCMD_OP_GLOBAL_DISABLE_SEQPLAYER, + /* 0x85 */ AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER_SKIP_TICKS = 0x85, + /* 0x90 */ AUDIOCMD_OP_GLOBAL_SET_CHANNEL_MASK = 0x90, + /* 0xE0 */ AUDIOCMD_OP_GLOBAL_SET_DRUM_FONT = 0xE0, + /* 0xE1 */ AUDIOCMD_OP_GLOBAL_SET_SFX_FONT, + /* 0xE2 */ AUDIOCMD_OP_GLOBAL_SET_INSTRUMENT_FONT, + /* 0xE3 */ AUDIOCMD_OP_GLOBAL_POP_PERSISTENT_CACHE, + /* 0xE4 */ AUDIOCMD_OP_GLOBAL_SET_CUSTOM_FUNCTION, // TODO: check + /* 0xE5 */ AUDIOCMD_OP_GLOBAL_E5, // TODO: check + /* 0xE6 */ AUDIOCMD_OP_GLOBAL_SET_REVERB_DATA, + /* 0xF0 */ AUDIOCMD_OP_GLOBAL_SET_SOUND_MODE = 0xF0, + /* 0xF1 */ AUDIOCMD_OP_GLOBAL_MUTE, + /* 0xF2 */ AUDIOCMD_OP_GLOBAL_UNMUTE, + /* 0xF3 */ AUDIOCMD_OP_GLOBAL_SYNC_LOAD_INSTRUMENT, + /* 0xF4 */ AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_SAMPLE_BANK, + /* 0xF5 */ AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_FONT, + /* 0xF6 */ AUDIOCMD_OP_GLOBAL_DISCARD_SEQ_FONTS, + /* 0xF8 */ AUDIOCMD_OP_GLOBAL_STOP_AUDIOCMDS = 0xF8, + /* 0xF9 */ AUDIOCMD_OP_GLOBAL_RESET_AUDIO_HEAP, + /* 0xFA */ AUDIOCMD_OP_GLOBAL_NOOP_1, // used but no code exists for it + /* 0xFB */ AUDIOCMD_OP_GLOBAL_SET_CUSTOM_UPDATE_FUNCTION, + /* 0xFC */ AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_SEQ, + /* 0xFD */ AUDIOCMD_OP_GLOBAL_NOOP_2, // used but no code exists for it + /* 0xFE */ AUDIOCMD_OP_GLOBAL_DISABLE_ALL_SEQPLAYERS +} AudioThreadCmdOp; + +#define AUDIO_MK_CMD(b0, b1, b2, b3) (_SHIFTL(b0, 24, 8) | _SHIFTL(b1, 16, 8) | _SHIFTL(b2, 8, 8) | _SHIFTL(b3, 0, 8)) + +#define AUDIOCMD_ALL_SEQPLAYERS 0xFF +// Pass to a AUDIOCMD_CHANNEL_ command in place of a channelIndex to try and apply to all channels. +// Then uses `threadCmdChannelMask` to determine which channels to apply the command to. +#define AUDIOCMD_ALL_CHANNELS 0xFF + +// ==== Audio Thread Channel Commands ==== + +/** + * Set the volumeScale on a given channel + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the channel to modify + * @param volumeScale (f32) the volume scale for the sequence. No change in volume is 1.0f + */ +#define AUDIOCMD_CHANNEL_SET_VOL_SCALE(seqPlayerIndex, channelIndex, volumeScale) \ + AudioThread_QueueCmdF32(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_VOL_SCALE, seqPlayerIndex, channelIndex, 0), \ + volumeScale) + +/** + * Set the volume on a given channel + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the channel to modify + * @param volume (f32) the target volume for the sequence. Default volume is 1.0f + */ +#define AUDIOCMD_CHANNEL_SET_VOL(seqPlayerIndex, channelIndex, volume) \ + AudioThread_QueueCmdF32(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_VOL, seqPlayerIndex, channelIndex, 0), volume) + +/** + * Set the pan + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the channel to modify + * @param pan (s8) the pan applied to the channel + */ +#define AUDIOCMD_CHANNEL_SET_PAN(seqPlayerIndex, channelIndex, pan) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_PAN, seqPlayerIndex, channelIndex, 0), pan) + +/** + * Set frequency scale + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the channel to modify + * @param freqScale (f32) the scaling factor to shift the pitch. + */ +#define AUDIOCMD_CHANNEL_SET_FREQ_SCALE(seqPlayerIndex, channelIndex, freqScale) \ + AudioThread_QueueCmdF32(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_FREQ_SCALE, seqPlayerIndex, channelIndex, 0), \ + freqScale) + +/** + * Set reverb volume + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the channel to modify + * @param reverbVolume (s8) volume to set the reverb to (dry/wet mix) + */ +#define AUDIOCMD_CHANNEL_SET_REVERB_VOLUME(seqPlayerIndex, channelIndex, reverbVolume) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_REVERB_VOLUME, seqPlayerIndex, channelIndex, 0), \ + reverbVolume) + +/** + * Write a value that can be read as input directly by the sequence itself. This will be set to the channel + * ioPort, which will only affect a single channel + * + * @param seqPlayerIndex the index of the seqPlayer to write the input to + * @param channelIndex the index of the channel to write the input to + * @param ioPort the index of the array to store the input-output value + * @param ioData (s8) the value that's written to the input-output array + */ +#define AUDIOCMD_CHANNEL_SET_IO(seqPlayerIndex, channelIndex, ioPort, ioData) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_IO, seqPlayerIndex, channelIndex, ioPort), ioData) + +/** + * Set the proportion of pan that comes from the channel + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the channel to modify + * @param panChannelWeight (u8) proportion of pan that comes from the channel. + * Set to 0 for layer-only, and 128 for channel-only. + */ +#define AUDIOCMD_CHANNEL_SET_PAN_WEIGHT(seqPlayerIndex, channelIndex, panChannelWeight) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_PAN_WEIGHT, seqPlayerIndex, channelIndex, 0), \ + panChannelWeight) + +/** + * Mute a specified channel. How a muted channel behaves will depend on channel mute flags + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the channel to modify + * @param muted (s8) set true to mute + */ +#define AUDIOCMD_CHANNEL_SET_MUTE(seqPlayerIndex, channelIndex, muted) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_MUTE, seqPlayerIndex, channelIndex, 0), muted) + +/** + * Set the muteFlags for a specified channel + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the channel to modify + * @param muteFlags (s8) Affected how a muted channel behaves. See `MUTE_BEHAVIOR_` macros + */ +#define AUDIOCMD_CHANNEL_SET_MUTE_FLAGS(seqPlayerIndex, channelIndex, muteFlags) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_MUTE_FLAGS, seqPlayerIndex, channelIndex, 0), muteFlags) + +/** + * Set the vibrato depth (magnitude/amplitude/extent) + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the channel to modify + * @param vibratoDepthTarget (s8) the vibrato depth scaled down by 1/8th + */ +#define AUDIOCMD_CHANNEL_SET_VIBRATO_DEPTH(seqPlayerIndex, channelIndex, vibratoDepthTarget) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_VIBRATO_DEPTH, seqPlayerIndex, channelIndex, 0), \ + vibratoDepthTarget) + +/** + * Set the vibrato rate (freq/pitch) + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the channel to modify + * @param vibratoRateTarget (s8) the vibrato rate scaled down by 1/32nd + */ +#define AUDIOCMD_CHANNEL_SET_VIBRATO_RATE(seqPlayerIndex, channelIndex, vibratoRateTarget) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_VIBRATO_RATE, seqPlayerIndex, channelIndex, 0), \ + vibratoRateTarget) + +/** + * Set the comb filter size + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the channel to modify + * @param combFilterSize (s8) delay number of sample bytes to offset and add back to itself + */ +#define AUDIOCMD_CHANNEL_SET_COMB_FILTER_SIZE(seqPlayerIndex, channelIndex, combFilterSize) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_COMB_FILTER_SIZE, seqPlayerIndex, channelIndex, 0), \ + combFilterSize) + +/** + * Set the comb filter gain + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the channel to modify + * @param combFilterGain (u16) strength of the signal added back to itself + */ +#define AUDIOCMD_CHANNEL_SET_COMB_FILTER_GAIN(seqPlayerIndex, channelIndex, combFilterGain) \ + AudioThread_QueueCmdU16(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_COMB_FILTER_GAIN, seqPlayerIndex, channelIndex, 0), \ + combFilterGain) + +/** + * Set the stereo bits + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the channel to modify + * @param stereoData (s8) bit-packed stereo information. See `StereoData` + */ +#define AUDIOCMD_CHANNEL_SET_STEREO(seqPlayerIndex, channelIndex, stereoData) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_STEREO, seqPlayerIndex, channelIndex, 0), stereoData) + +/** + * Set the start position of a sample. + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the seqPlayer to modify + * @param startSamplePos + */ +#define AUDIOCMD_CHANNEL_SET_SET_START_POS(seqPlayerIndex, channelIndex, startSamplePos) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_SET_START_POS, seqPlayerIndex, channelIndex, 0), \ + startSamplePos) + +/** + * Set the address of the sfxState to read from. + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the seqPlayer to modify + * @param sfxState + */ +#define AUDIOCMD_CHANNEL_SET_SFX_STATE(seqPlayerIndex, channelIndex, sfxState) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_SFX_STATE, seqPlayerIndex, channelIndex, 0), sfxState) + +/** + * Set the reverb index. + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the seqPlayer to modify + * @param reverbIndex + */ +#define AUDIOCMD_CHANNEL_SET_REVERB_INDEX(seqPlayerIndex, channelIndex, reverbIndex) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_REVERB_INDEX, seqPlayerIndex, channelIndex, 0), \ + reverbIndex) + +/** + * Set the surround effect index. + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the seqPlayer to modify + * @param surroundEffectIndex + */ +#define AUDIOCMD_CHANNEL_SET_SURROUND_EFFECT_INDEX(seqPlayerIndex, channelIndex, surroundEffectIndex) \ + AudioThread_QueueCmdS8( \ + AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_SURROUND_EFFECT_INDEX, seqPlayerIndex, channelIndex, 0), \ + surroundEffectIndex) + +/** + * Set a filter. + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the seqPlayer to modify + * @param filterCutoff + * @param filter + */ +#define AUDIOCMD_CHANNEL_SET_FILTER(seqPlayerIndex, channelIndex, filterCutoff, filter) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_FILTER, seqPlayerIndex, channelIndex, filterCutoff), \ + filter) + +/** + * Set the gain. + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param channelIndex the index of the seqPlayer to modify + * @param gain + */ +#define AUDIOCMD_CHANNEL_SET_GAIN(seqPlayerIndex, channelIndex, gain) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_GAIN, seqPlayerIndex, channelIndex, 0), gain) + +// ==== Audio Thread SeqPlayer Commands ==== + +/** + * Set the fade volume scale + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param fadeVolumeScale (f32) multiplicative scaling factor to apply to volume + */ +#define AUDIOCMD_SEQPLAYER_FADE_VOLUME_SCALE(seqPlayerIndex, fadeVolumeScale) \ + AudioThread_QueueCmdF32(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_FADE_VOLUME_SCALE, seqPlayerIndex, 0, 0), \ + fadeVolumeScale) + +/** + * Write a value that can be read as input directly by the sequence itself. This will be set to the global + * ioPort, which can affect the entire sequence + * + * @param seqPlayerIndex the index of the seqPlayer to write the input to + * @param ioPort the index of the array to store the input-output value + * @param ioData (s8) the value that's written to the input-output array + */ +#define AUDIOCMD_SEQPLAYER_SET_IO(seqPlayerIndex, ioPort, ioData) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_SET_IO, seqPlayerIndex, 0, ioPort), ioData) + +/** + * Set the tempo (bpm) of a sequence on a given seqPlayer + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param tempo (s32) the tempo for the sequence, in bpm + */ +#define AUDIOCMD_SEQPLAYER_SET_TEMPO(seqPlayerIndex, tempo) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_SET_TEMPO, seqPlayerIndex, 0, 0), tempo) + +/** + * Set the transposition + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param transposition (s8) the number of semitones to increase or decrease by for all notes on the seqPlayer + */ +#define AUDIOCMD_SEQPLAYER_SET_TRANSPOSITION(seqPlayerIndex, transposition) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_SET_TRANSPOSITION, seqPlayerIndex, 0, 0), transposition) + +/** + * Set tempoChange in bpm + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param tempoChange (s32) difference in tempo to change, in bpm + */ +#define AUDIOCMD_SEQPLAYER_CHANGE_TEMPO(seqPlayerIndex, tempoChange) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_CHANGE_TEMPO, seqPlayerIndex, 0, 0), tempoChange) + +/** + * Set tempoChange in ticks per minute + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param tempoChange (s32) difference in tempo to change, in ticks per minute + */ +#define AUDIOCMD_SEQPLAYER_CHANGE_TEMPO_TICKS(seqPlayerIndex, tempoChange) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_CHANGE_TEMPO_TICKS, seqPlayerIndex, 0, 0), tempoChange) + +/** + * Fade the volume to the target volume requested in the command + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param fadeVolume target volume to fade to + * @param fadeTimer (s32) number of ticks to fade to `fadeVolume` + */ +#define AUDIOCMD_SEQPLAYER_FADE_TO_SET_VOLUME(seqPlayerIndex, fadeVolume, fadeTimer) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_FADE_TO_SET_VOLUME, seqPlayerIndex, fadeVolume, 0), \ + fadeTimer) + +/** + * Fade the volume to the current volume scaled by a scale factor + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param fadeVolumeScale scaling factor to apply to volume to get the targetVolume + * @param fadeTimer (s32) number of ticks to fade to `targetVolume` + */ +#define AUDIOCMD_SEQPLAYER_FADE_TO_SCALED_VOLUME(seqPlayerIndex, fadeVolumeScale, fadeTimer) \ + AudioThread_QueueCmdS32( \ + AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_FADE_TO_SCALED_VOLUME, seqPlayerIndex, fadeVolumeScale, 0), fadeTimer) + +/** + * Reset to the default volume of the seqPlayer + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param fadeTimer (s32) number of ticks to fade the sequence back to its default volume + */ +#define AUDIOCMD_SEQPLAYER_RESET_VOLUME(seqPlayerIndex, fadeTimer) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_RESET_VOLUME, seqPlayerIndex, 0, 0), fadeTimer) + +/** + * Set the bend + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param bend (f32) ratio relative to 1.0f to scale channel frequencies by + */ +#define AUDIOCMD_SEQPLAYER_SET_BEND(seqPlayerIndex, bend) \ + AudioThread_QueueCmdF32(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_SET_BEND, seqPlayerIndex, 0, 0), bend) + +// ==== Audio Thread Global Commands ==== + +/** + * Synchronously load a sequence in parts + * + * @param seqId the id of the sequence to load, see `SeqId` + * @param flags set `& 1` to load the sequence, set `& 2` to load the soundfonts + * @param data + */ +#define AUDIOCMD_GLOBAL_SYNC_LOAD_SEQ_PARTS(seqId, flags, data) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SYNC_LOAD_SEQ_PARTS, 0, seqId, flags), data) + +/** + * Synchronously initialize a sequence player + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param seqId the id of the sequence to play, see `SeqId` + * @param fadeInTimer (s32) number of ticks to fade in the sequence to the requested volume + */ +#define AUDIOCMD_GLOBAL_INIT_SEQPLAYER(seqPlayerIndex, seqId, fadeInTimer) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER, seqPlayerIndex, seqId, 0), fadeInTimer) + +/** + * Disable a sequence player + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param fadeOutTimer (s32) number of ticks to fade out the sequence + */ +#define AUDIOCMD_GLOBAL_DISABLE_SEQPLAYER(seqPlayerIndex, fadeOutTimer) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_DISABLE_SEQPLAYER, seqPlayerIndex, 0, 0), fadeOutTimer) + +/** + * Synchronously initialize a sequence player and skip ticks, + * allowing the sequence to start somewhere other than the beginning of the sequences + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param seqId the id of the sequence to play, see `SeqId` + * @param skipTicks (s32) number of ticks to skip before starting the sequence + */ +#define AUDIOCMD_GLOBAL_INIT_SEQPLAYER_SKIP_TICKS(seqPlayerIndex, seqId, skipTicks) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER_SKIP_TICKS, seqPlayerIndex, seqId, 0), \ + skipTicks) + +/** + * When processing an audio thread channel command on all channels, set which channels to process + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param threadCmdChannelMask (u16) bitfield for 16 channels. Turn bit on to allow audio thread commands of type + * "Channel" to process that channel with `AUDIOCMD_ALL_CHANNELS` set. + */ +#define AUDIOCMD_GLOBAL_SET_CHANNEL_MASK(seqPlayerIndex, threadCmdChannelMask) \ + AudioThread_QueueCmdU16(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SET_CHANNEL_MASK, seqPlayerIndex, 0, 0), \ + threadCmdChannelMask) + +/** + * Set a drum ptr within a soundfont + * + * @param fontId the id of the soundfont to set the drum in + * @param drumId the id of the drum to set + * @param drumPtr (s32) the ptr to the `Drum` struct + */ +#define AUDIOCMD_GLOBAL_SET_DRUM_FONT(fontId, drumId, drumPtr) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SET_DRUM_FONT, 0, fontId, drumId), drumPtr) + +/** + * Set a soundeffect ptr within a soundfont + * + * @param fontId the id of the soundfont to set the sound effect in + * @param soundEffectId the id of the sound effect to set + * @param soundEffectPtr (s32) the ptr to the `SoundEffect` struct + */ +#define AUDIOCMD_GLOBAL_SET_SFX_FONT(fontId, soundEffectId, soundEffectPtr) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SET_SFX_FONT, 0, fontId, soundEffectId), soundEffectPtr) + +/** + * Set an instrument ptr within a soundfont + * + * @param fontId the id of the soundfont to set the instrument in + * @param instId the id of the instrument to set + * @param instPtr (s32) the ptr to the `Instrument` struct + */ +#define AUDIOCMD_GLOBAL_SET_INSTRUMENT_FONT(fontId, instId, instPtr) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SET_INSTRUMENT_FONT, 0, fontId, instId), instPtr) + +/** + * Pop the persistent cache of the specified table + * + * @param tableType (s32) see the `SampleBankTableType` enum + */ +#define AUDIOCMD_GLOBAL_POP_PERSISTENT_CACHE(tableType) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_POP_PERSISTENT_CACHE, 0, 0, 0), tableType) + +/** + * Set a custom function. + * + * @param functionType + * @param functionPtr + */ +#define AUDIOCMD_GLOBAL_SET_CUSTOM_FUNCTION(functionType, functionPtr) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SET_CUSTOM_FUNCTION, 0, 0, functionType), functionPtr) + +/** + * Do something related to the unloaded-type audio data in the heap. + * + * @param tableType + * @param id + * @param type + * @param data + */ +#define AUDIOCMD_GLOBAL_E5(tableType, id, type, data) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_E5, tableType, id, type), data) + +/** + * Set reverb data. + * + * @param reverbIndex + * @param dataType + * @param data + */ +#define AUDIOCMD_GLOBAL_SET_REVERB_DATA(reverbIndex, dataType, data) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SET_REVERB_DATA, dataType, reverbIndex, 0), data) + +/** + * Change the sound mode of audio + * + * @param soundMode (s32) see the `SoundMode` enum + */ +#define AUDIOCMD_GLOBAL_SET_SOUND_MODE(soundMode) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SET_SOUND_MODE, 0, 0, 0), soundMode) + +/** + * Mute a sequence player + * + * @param seqPlayerIndex the index of the seqPlayer to modify + */ +#define AUDIOCMD_GLOBAL_MUTE(seqPlayerIndex) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_MUTE, seqPlayerIndex, 0, 0), 0) + +/** + * Unmute a sequence player + * + * @param seqPlayerIndex the index of the seqPlayer to modify + * @param restart (s32) if set to 1, then notes with the `MUTE_FLAGS_STOP_SAMPLES` flag set are marked as finished + */ +#define AUDIOCMD_GLOBAL_UNMUTE(seqPlayerIndex, restart) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_UNMUTE, seqPlayerIndex, 0, 0), restart) + +/** + * Synchronously load an instrument + * + * @param fontId the id of the soundfont to load + * @param instId If below 0x7F, the id of the instrument to use. If equal to 0x7F, load the drum using the drumId + * @param drumId the id of the drum to use + */ +#define AUDIOCMD_GLOBAL_SYNC_LOAD_INSTRUMENT(fontId, instId, drumId) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SYNC_LOAD_INSTRUMENT, fontId, instId, drumId), 0) + +/** + * Asynchronously load a sample bank + * + * @param sampleBankId the id of the samplebank to load + * @param retData return data from `externalLoadQueue` + */ +#define AUDIOCMD_GLOBAL_ASYNC_LOAD_SAMPLE_BANK(sampleBankId, retData) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_SAMPLE_BANK, sampleBankId, 0, retData), 0) + +/** + * Asynchronously load a font + * + * @param fontId the id of the soundfont to load + * @param retData return data from `externalLoadQueue` + */ +#define AUDIOCMD_GLOBAL_ASYNC_LOAD_FONT(fontId, retData) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_FONT, fontId, 20, retData), 0) + +/** + * Discard sequence fonts + * + * @param seqId the id of the sequence to discard, see `SeqId` + */ +#define AUDIOCMD_GLOBAL_DISCARD_SEQ_FONTS(seqId) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_DISCARD_SEQ_FONTS, 0, seqId, 0), 0) + +/** + * Stop processing all audio thread commands + */ +#define AUDIOCMD_GLOBAL_STOP_AUDIOCMDS() \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_STOP_AUDIOCMDS, 0, 0, 0), 0) + +/** + * Reset Audio Heap + * + * @param specId (s32) index for the audio specifications to set high-level audio parameters + */ +#define AUDIOCMD_GLOBAL_RESET_AUDIO_HEAP(specId) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_RESET_AUDIO_HEAP, 0, 0, 0), specId) + +/** + * No Operation. No code exists for this OP + * + * @param arg0 No info + * @param arg1 No info + * @param arg2 No info + * @param data (s32) No info + */ +#define AUDIOCMD_GLOBAL_NOOP_1(arg0, arg1, arg2, data) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_NOOP_1, arg0, arg1, arg2), data) + +/** + * Set a custom function that runs every audio thread update, see `AudioCustomUpdateFunction` + * + * @param functionPtr (s32) address of the function to run once every audio frame + */ +#define AUDIOCMD_GLOBAL_SET_CUSTOM_UPDATE_FUNCTION(functionPtr) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SET_CUSTOM_UPDATE_FUNCTION, 0, 0, 0), functionPtr) + +/** + * Asynchronously load a sequence + * + * @param seqId the id of the sequence to load, see `SeqId` + * @param retData return data from `externalLoadQueue` + */ +#define AUDIOCMD_GLOBAL_ASYNC_LOAD_SEQ(seqId, retData) \ + AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_SEQ, seqId, 0, retData), 0) + +/** + * No Operation. No code exists for this OP + * + * @param arg0 No info + * @param arg1 No info + * @param arg2 No info + * @param data (s32) No info + */ +#define AUDIOCMD_GLOBAL_NOOP_2(arg0, arg1, arg2, data) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_NOOP_2, arg0, arg1, arg2), data) + +/** + * Disable all sequence players + * + * @param flags (s32) Set `AUDIO_NOTE_RELEASE` to discard all sequences. + * + * @note Also set `AUDIO_NOTE_SAMPLE_NOTES` will also only discard sampled notes, but the sequences are disabled anyway. + * Not setting `AUDIO_NOTE_RELEASE` should make this command useless + */ +#define AUDIOCMD_GLOBAL_DISABLE_ALL_SEQPLAYERS(flags) \ + AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_DISABLE_ALL_SEQPLAYERS, 0, 0, 0), flags) + +#endif diff --git a/include/color.h b/include/color.h index d0cdb62f5..b49ab8d78 100644 --- a/include/color.h +++ b/include/color.h @@ -51,6 +51,26 @@ typedef union { u16 rgba; } Color_RGBA16; +typedef union { + struct { + u32 r : 5; + u32 g : 5; + u32 b : 5; + u32 a : 1; + }; + u16 rgba; +} Color_RGBA16_2; + +typedef union{ + struct { + u32 r : 3; + u32 g : 3; + u32 b : 3; + u32 a : 5; + }; + u16 rgba; +} Color_RGBA14; + #define RGBA8(r, g, b, a) ((((r) & 0xFF) << 24) | (((g) & 0xFF) << 16) | (((b) & 0xFF) << 8) | (((a) & 0xFF) << 0)) #endif diff --git a/include/functions.h b/include/functions.h index bc865e3e1..1668511b1 100644 --- a/include/functions.h +++ b/include/functions.h @@ -473,7 +473,7 @@ void func_800AE5A0(PlayState* play); void func_800AE5E4(PlayState* play, Color_RGBA8* color, s16 arg2, s16 arg3); void func_800AE778(PlayState* play, Color_RGBA8* color, s16 arg2, s16 arg3); void func_800AE8EC(PlayState* play); -void func_800AE930(CollisionContext* colCtx, EffectTireMark* this, Vec3f* pos, f32 arg3, s16 arg4, CollisionPoly* colPoly, s32 arg6); +void func_800AE930(CollisionContext* colCtx, EffectTireMark* this, Vec3f* pos, f32 arg3, s16 angle, CollisionPoly* colPoly, s32 bgId); void func_800AEF44(EffectTireMark* this); void EffectTireMark_Init(void* thisx, void* initParamsx); void EffectTireMark_Destroy(void* thisx); @@ -549,7 +549,7 @@ void EffectSsDtBubble_SpawnCustomColor(PlayState* play, Vec3f* pos, Vec3f* veloc void EffectSsHahen_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 flags, s16 scale, s16 objId, s16 life, Gfx* dList); void EffectSsHahen_SpawnBurst(PlayState* play, Vec3f* pos, f32 burstScale, s16 flags, s16 scale, s16 randScaleRange, s16 count, s16 objId, s16 life, Gfx* dList); // void func_800B2364(void); -// void EffectSsStick_Spawn(UNK_TYPE4 uParm1, UNK_PTR puParm2, UNK_TYPE2 uParm3); +void EffectSsStick_Spawn(PlayState* play, Vec3f* pos, s16 yaw); // void EffectSsSibuki_Spawn(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7); void EffectSsSibuki_SpawnBurst(PlayState* play, Vec3f* pos); void EffectSsStone1_Spawn(PlayState* play, Vec3f* pos, s32 reg0); @@ -560,13 +560,13 @@ void EffectSsKFire_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* ac void EffectSsSolderSrchBall_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16* playerDetected, s16 flags); void EffectSsKakera_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* arg3, s16 gravity, s16 arg5, s16 arg6, s16 arg7, s16 arg8, s16 scale, s16 arg10, s16 arg11, s32 life, s16 colorIdx, s16 objId, Gfx* dList); // void EffectSsIcePiece_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, UNK_TYPE4 uParm3, Vec3f* pzParm4, Vec3f* param_5, UNK_TYPE4 param_6); -// void EffectSsIcePiece_SpawnBurst(void); +void EffectSsIcePiece_SpawnBurst(PlayState* play, Vec3f* refPos, f32 scale); void func_800B2B44(PlayState* play, Actor* actor, Vec3f* pos, f32 scale); // void func_800B2B7C(void); void EffectSsEnIce_Spawn(PlayState* play, Vec3f* pos, f32 scale, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, Color_RGBA8* envColor, s32 life); // void EffectSsFireTail_Spawn(UNK_TYPE4 uParm1, UNK_TYPE4 uParm2, Vec3f* pzParm3, UNK_TYPE4 uParm4, Vec3f* param_5, UNK_TYPE2 param_6, Color_RGBA8* param_7, Color_RGBA8* param_8, UNK_TYPE2 param_9, UNK_TYPE2 param_10, UNK_TYPE4 param_11); // void EffectSsFireTail_SpawnFlame(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE4 param_6); -// void EffectSsFireTail_SpawnFlameOnPlayer(void); +void EffectSsFireTail_SpawnFlameOnPlayer(PlayState* play, f32 scale, s16 bodyPart, f32 colorIntensity); void EffectSsEnFire_SpawnVec3f(PlayState* play, Actor* actor, Vec3f* pos, s16 scale, s16 params, s16 flags, s16 bodyPart); // void EffectSsEnFire_SpawnVec3s(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7); void EffectSsExtra_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scoreIdx); @@ -656,7 +656,7 @@ s32 func_800B715C(PlayState* play); void Actor_SetCameraHorseSetting(PlayState* play, Player* player); void Actor_MountHorse(PlayState* play, Player* player, Actor* horse); s32 func_800B724C(PlayState* play, Actor* actor, u8 csMode); -u32 func_800B7298(PlayState* play, Actor* actor, u8 csMode); +s32 func_800B7298(PlayState* play, Actor* actor, u8 csMode); void func_800B72F8(DynaPolyActor* dyna, f32 extraPushForce, s16 yRotation); s32 Player_IsFacingActor(Actor* actor, s16 maxAngleDiff, PlayState* play); @@ -666,7 +666,7 @@ s32 Actor_ActorAIsFacingActorB(Actor* actorA, Actor* actorB, s16 maxAngleDiff); s32 Actor_IsFacingAndNearPlayer(Actor* actor, f32 range, s16 maxAngleDiff); s32 Actor_ActorAIsFacingAndNearActorB(Actor* actorA, Actor* actorB, f32 range, s16 maxAngleDiff); -void func_800B75A0(CollisionPoly* poly, Vec3f* normal, s16* azimuth); +void Actor_GetSlopeDirection(CollisionPoly* floorPoly, Vec3f* slopeNormal, s16* downwardSlopeYaw); void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, f32 wallCheckRadius, f32 ceilingCheckHeight, u32 flags); Hilite* Hilite_DrawOpa(Vec3f* object, Vec3f* eye, Vec3f* lightDir, GraphicsContext* gfxCtx); void func_800B8050(Actor* actor, PlayState* play, s32 flag); @@ -677,13 +677,13 @@ PosRot* Actor_GetWorldPosShapeRot(PosRot* dest, Actor* actor); s32 func_800B83F8(Actor* actor, Player* player, s32 flag); s32 Actor_ProcessTalkRequest(Actor* actor, GameState* gameState); -s32 func_800B8500(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, PlayerActionParam exchangeItemId); -s32 func_800B85E0(Actor* actor, PlayState* play, f32 radius, PlayerActionParam exchangeItemId); +s32 func_800B8500(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, PlayerItemAction exchangeItemId); +s32 func_800B85E0(Actor* actor, PlayState* play, f32 radius, PlayerItemAction exchangeItemId); s32 func_800B8614(Actor* actor, PlayState* play, f32 radius); s32 func_800B863C(Actor* actor, PlayState* play); s32 Actor_TextboxIsClosing(Actor* actor, PlayState* play); s32 Actor_ChangeFocus(Actor* actor1, PlayState* play, Actor* actor2); -s32 Player_GetExchangeItemId(PlayState* play); +PlayerItemAction Player_GetExchangeItemId(PlayState* play); s32 func_800B8718(Actor* actor, GameState* gameState); s32 func_800B874C(Actor* actor, PlayState* play, f32 xzRange, f32 yRange); s32 func_800B8804(Actor* actor, PlayState* play, f32 xzRange); @@ -691,10 +691,10 @@ s32 func_800B886C(Actor* actor, PlayState* play); void Actor_GetScreenPos(PlayState* play, Actor* actor, s16* x, s16* y); s32 Actor_OnScreen(PlayState* play, Actor* actor); s32 Actor_HasParent(Actor* actor, PlayState* play); -s32 Actor_PickUp(Actor* actor, PlayState* play, s32 getItemId, f32 xzRange, f32 yRange); -s32 Actor_PickUpNearby(Actor* actor, PlayState* play, s32 getItemId); +s32 Actor_PickUp(Actor* actor, PlayState* play, GetItemId getItemId, f32 xzRange, f32 yRange); +s32 Actor_PickUpNearby(Actor* actor, PlayState* play, GetItemId getItemId); s32 Actor_LiftActor(Actor* actor, PlayState* play); -s32 Actor_PickUpFar(Actor* actor, PlayState* play, s32 getItemId); +s32 Actor_PickUpFar(Actor* actor, PlayState* play, GetItemId getItemId); s32 Actor_HasNoParent(Actor* actor, PlayState* play); void func_800B8C20(Actor* actorA, Actor* actorB, PlayState* play); void func_800B8C50(Actor* actor, PlayState* play); @@ -716,7 +716,7 @@ void func_800B9010(Actor* actor, u16 sfxId); void func_800B9038(Actor* actor, s32 timer); void func_800B9084(Actor* actor); void func_800B9098(Actor* actor); -s32 func_800B90AC(PlayState* play, Actor* actor, CollisionPoly* polygon, s32 bgId, s32 arg4); +s32 func_800B90AC(PlayState* play, Actor* actor, CollisionPoly* polygon, s32 bgId, Vec3f* arg4); void Actor_DeactivateLens(PlayState* play); void func_800B9120(ActorContext* actorCtx); void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* actorEntry); @@ -975,10 +975,10 @@ Vec3s* Camera_Update(Vec3s* param_1, Camera* camera); // void func_800DF498(void); u32 Camera_SetMode(Camera* camera, s16 mode, s8 param_3); s32 Camera_ChangeMode(Camera* camera, s16 mode); -// void func_800DF86C(void); +s32 func_800DF86C(Camera* camera, s16 arg1); // void func_800DF8EC(void); s32 Camera_ChangeSetting(Camera* camera, s16 setting); -u32 Camera_ChangeDataIdx(Camera* camera, u32 camDataIdx); +s32 Camera_ChangeDataIdx(Camera* camera, s32 camDataIdx); // void func_800DFC1C(void); // void func_800DFC40(void); s32 Camera_GetInputDirYaw(Camera* camera); @@ -988,7 +988,7 @@ s16 Camera_GetCamDirYaw(Camera* camera); void Camera_AddQuake(Camera* camera, s32 arg1, s16 y, s32 countdown); s32 Camera_SetViewParam(Camera* camera, s32 viewFlag, void* param); // UNK_TYPE4 func_800DFEF0(s32 param_1, u16 param_2); -// UNK_TYPE4 func_800DFF18(Camera* iParm1, UNK_TYPE2 uParm2); +void func_800DFF18(Camera* camera, s32 arg1); // UNK_TYPE4 func_800DFF34(s32 param_1); // UNK_TYPE4 func_800DFF44(void); s16 Camera_SetFlags(Camera* iParm1, s16 flags); @@ -999,7 +999,7 @@ s32 Camera_Copy(Camera* dstCamera, Camera* srcCamera); Vec3f* Camera_GetQuakeOffset(Vec3f* dst, Camera* camera); // void func_800E01DC(s32 param_1, u32 param_2, UNK_TYPE4 param_3, UNK_TYPE4 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6); // UNK_TYPE4 func_800E0228(void); -// void func_800E0238(void); +void func_800E0238(Camera* camera); void Camera_SetToTrackActor(Camera* camera, Actor* actor); void Camera_SetTargetActor(Camera* camera, Actor* actor); f32 Camera_GetWaterYPos(Camera* camera); @@ -1227,7 +1227,8 @@ s32 Actor_TrackPlayerSetFocusHeight(PlayState* play, Actor* actor, Vec3s* headRo s32 Actor_TrackPlayer(PlayState* play, Actor* actor, Vec3s* headRot, Vec3s* torsoRot, Vec3f focusPos); void SaveContext_Init(void); void GameInfo_Init(void); -// void DebugDisplay_Init(void); +DebugDispObject* DebugDisplay_Init(void); +void DebugDisplay_DrawObjects(PlayState* play); DebugDispObject* DebugDisplay_AddObject(f32 posX, f32 posY, f32 posZ, s16 rotX, s16 rotY, s16 rotZ, f32 scaleX, f32 scaleY, f32 scaleZ, u8 red, u8 green, u8 blue, u8 alpha, s16 type, GraphicsContext* gfxCtx); // void func_800E9C90(void); // void func_800E9CA0(s32 param_1, UNK_TYPE1 param_2, s8* param_3); @@ -1274,11 +1275,11 @@ s16 func_800F1460(s16 param_1); ActorCutscene* ActorCutscene_GetCutsceneImpl(s16 index); void ActorCutscene_Init(PlayState* play, ActorCutscene* cutscenes, s32 num); void func_800F15D8(Camera* camera); -// void ActorCutscene_ClearWaiting(void); +void ActorCutscene_ClearWaiting(void); // void ActorCutscene_ClearNextCutscenes(void); // void ActorCutscene_MarkNextCutscenes(void); // void ActorCutscene_End(void); -// void ActorCutscene_Update(void); +s16 ActorCutscene_Update(void); void ActorCutscene_SetIntentToPlay(s16 index); s16 ActorCutscene_GetCanPlayNext(s16 index); s16 ActorCutscene_StartAndSetUnkLinkFields(s16 index, Actor* actor); @@ -1323,13 +1324,13 @@ void Font_LoadMessageBoxEndIcon(Font* font, u16 icon); void Font_LoadOrderedFont(Font* font); // void func_800F5090(void); // void func_800F50D4(void); -void Kankyo_Init(PlayState* play, EnvironmentContext* envCtx); +void Environment_Init(PlayState* play, EnvironmentContext* envCtx, s32 arg2); u32 func_800F5954(u8* param_1, u32 param_2, u32 param_3, u8 param_4, u8 param_5); f32 Environment_LerpWeight(u16 max, u16 min, u16 val); // void func_800F5B10(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5); -// void func_800F5CD0(void); +void Environment_UpdateSkybox(u8 skyboxId, EnvironmentContext* envCtx, SkyboxContext* skyboxCtx); void func_800F6834(PlayState* play, s32 waterLightsIndex); -// void func_800F694C(void); +void func_800F694C(PlayState* play); // void func_800F6A04(void); // void func_800F6A40(void); // void func_800F6AB8(void); @@ -1342,13 +1343,15 @@ void func_800F6FF8(PlayState* play, EnvironmentContext* envCtx, LightContext* li // void func_800F88C4(void); // void func_800F8970(void); // void func_800F8A9C(void); -// void func_800F8CD4(PlayState* play, EnvironmentContext* envCtx, LightContext* lightCtx, s32 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); +void Environment_Update(PlayState* play, EnvironmentContext* envCtx, LightContext* lightCtx, + PauseContext* pauseCtx, MessageContext* msgCtx, GameOverContext* gameOverCtx, + GraphicsContext* gfxCtx); // void func_800F8D84(void); -// void func_800F9728(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7); +void Environment_DrawSunLensFlare(PlayState* play, EnvironmentContext* envCtx, View* view, GraphicsContext* gfxCtx, Vec3f pos); void func_800F9824(PlayState* play, EnvironmentContext* envCtx, View* view, GraphicsContext* gfxCtx, Vec3f vec, f32 arg5, f32 arg6, s8 arg7, s8 arg8); // void func_800FA39C(void); // void func_800FA3C4(void); -// void func_800FA9FC(void); +void Environment_DrawRain(PlayState* play, View* view, GraphicsContext* gfxCtx); void func_800FAAB4(PlayState* play, u8 arg1); // void func_800FAC20(void); // void func_800FAF74(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5); @@ -1357,13 +1360,13 @@ void Environment_AddLightningBolts(PlayState* play, u8 num); // void func_800FB388(void); void func_800FB758(PlayState* play); // void func_800FB9B4(void); -// void func_800FBCBC(void); +void Environment_DrawCustomLensFlare(PlayState* play); void Kankyo_InitGameOverLights(PlayState* play); void Kankyo_FadeInGameOverLights(PlayState* play); void Kankyo_FadeOutGameOverLights(PlayState* play); // void func_800FC3DC(void); -void func_800FC444(GraphicsContext* gfxCtx, u8 arg1, u8 arg2, u8 arg3, u8 arg4, UNK_TYPE arg5); -// void func_800FC64C(void); +void Environment_FillScreen(GraphicsContext* gfxCtx, u8 red, u8 green, u8 blue, u8 alpha, u8 drawFlags); +void Environment_DrawSandstorm(PlayState* play, u8 sandstormState); s32 func_800FD2B4(PlayState* play, f32 arg1, f32 arg2, f32 arg3, f32 arg4); void func_800FD538(Color_RGB8* param_1, Color_RGB8* param_2, f32 param_3, Vec3s* param_4); void func_800FD59C(PlayState* play, Color_RGB8* pzParm2, f32 fParm3); @@ -1374,20 +1377,20 @@ void func_800FD698(PlayState* play, s16 arg1, s16 arg2, f32 arg3); // void reset_days_elapsed(void); // u32 get_current_day(void); void func_800FD750(u16 seqId); -// void func_800FD768(void); +s32 func_800FD768(void); void func_800FD78C(PlayState* play); void func_800FD858(PlayState* play); void func_800FD928(s32 param_1); // void func_800FD980(void); // void func_800FDAF8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // void func_800FDC94(void); -// void func_800FE390(void); -// void func_800FE3E0(void); -void func_800FE484(void); -void func_800FE498(void); -// void func_800FE4A8(void); +void func_800FE390(PlayState* play); +void func_800FE3E0(PlayState* play); +void Environment_StopTime(void); +void Environment_StartTime(void); +u8 Environment_IsTimeStopped(void); u32 func_800FE4B8(PlayState* play); -// void func_800FE590(void); +s32 func_800FE590(PlayState* play); // void func_800FE5D0(void); // UNK_TYPE4 func_800FE610(void); u32 func_800FE620(PlayState* play); @@ -1496,7 +1499,7 @@ LightNode* Lights_FindBufSlot(); void Lights_FreeNode(LightNode* light); void LightContext_Init(PlayState* play, LightContext* lightCtx); void LightContext_SetAmbientColor(LightContext* lightCtx, u8 r, u8 g, u8 b); -void func_80102544(LightContext* lightCtx, u8 a1, u8 a2, u8 a3, s16 numLights, s16 sp16); +void LightContext_SetFog(LightContext* lightCtx, u8 r, u8 g, u8 b, s16 near, s16 far); Lights* LightContext_NewLights(LightContext* lightCtx, GraphicsContext* gfxCtx); void LightContext_InitList(PlayState* play, LightContext* lightCtx); void LightContext_DestroyList(PlayState* play, LightContext* lightCtx); @@ -1514,7 +1517,7 @@ void* ZeldaArena_Calloc(u32 num, size_t size); void ZeldaArena_GetSizes(size_t* outMaxFree, size_t* outFree, size_t* outAlloc); s32 ZeldaArena_Check(); void ZeldaArena_Init(void* start, size_t size); -void ZeldaArena_Cleanup(); +void ZeldaArena_Cleanup(void); u8 ZeldaArena_IsInitialized(); // void func_80102E40(void); // void func_80102E90(void); @@ -1621,9 +1624,9 @@ s32 func_8010A0A4(PlayState* play); void Minimap_SavePlayerRoomInitInfo(PlayState* play); void Map_InitRoomData(PlayState* play, s16 room); void Map_Destroy(PlayState* play); -// void Map_Init(PlayState* play); -// void Minimap_Draw(PlayState* play); -// void Map_Update(PlayState* play); +void Map_Init(PlayState* play); +void Minimap_Draw(PlayState* play); +void Map_Update(PlayState* play); // void func_8010A760(void); // void func_8010A7CC(void); // void func_8010A814(void); @@ -1698,24 +1701,20 @@ Vec3f* OLib_Vec3fDiffDegF(Vec3f* dest, Vec3f* a, Vec3f* b); Vec3s* OLib_Vec3fDiffBinAng(Vec3s* dest, Vec3f* a, Vec3f* b); void OLib_DbCameraVec3fDiff(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode); void OLib_DbCameraVec3fSum(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode); -Gfx* func_8010CB80(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy); -Gfx* func_8010CD98(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy); -// void func_8010CFBC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE2 param_10, UNK_TYPE2 param_11, UNK_TYPE2 param_12, UNK_TYPE2 param_13, UNK_TYPE2 param_14); -// void func_8010D2D4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE2 param_10, UNK_TYPE2 param_11); -// void func_8010D480(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE2 param_10, UNK_TYPE2 param_11, UNK_TYPE2 param_12, UNK_TYPE2 param_13, UNK_TYPE2 param_14, UNK_TYPE4 param_15, UNK_TYPE4 param_16); -Gfx* func_8010D7D0(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy); -// void func_8010D9F4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11, UNK_TYPE4 param_12, UNK_TYPE2 param_13, UNK_TYPE2 param_14); -Gfx* func_8010DC58(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, u16 i); -Gfx* func_8010DE38(Gfx* gfx, TexturePtr texture, s32 fmt, s16 textureWidth, s16 textureHeight, u16 point); -// void func_8010E028(void); + +Gfx* Gfx_DrawTexRectRGBA16(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy); +Gfx* Gfx_DrawTexRectIA8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy); +Gfx* Gfx_DrawTexRectI8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy); +Gfx* Gfx_DrawTexQuadIA8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, u16 point); +Gfx* Gfx_DrawTexQuad4b(Gfx* gfx, TexturePtr texture, s32 fmt, s16 textureWidth, s16 textureHeight, u16 point); + void Interface_StartTimer(s16 timerId, s16 seconds); void Interface_StartPostmanTimer(s16 seconds, s16 bunnyHoodState); -void func_8010EE74(PlayState* play, s32 day); +void Interface_NewDay(PlayState* play, s32 day); void Interface_SetHudVisibility(u16 hudVisibility); void func_80110038(PlayState* play); -// void func_80111CB4(void); -// void func_801129E4(void); -void func_80112AFC(PlayState* play); +void Interface_SetSceneRestrictions(PlayState* play); +void Interface_InitMinigame(PlayState* play); void Interface_LoadItemIconImpl(PlayState* play, u8 btn); void Interface_LoadItemIcon(PlayState* play, u8 btn); void func_80112C0C(PlayState* play, u16 flag); @@ -1730,12 +1729,10 @@ s32 Inventory_HasItemInBottle(u8 item); void Inventory_UpdateBottleItem(PlayState* play, u8 item, u8 btn); s32 Inventory_ConsumeFairy(PlayState* play); void Inventory_UpdateItem(PlayState* play, s16 slot, s16 item); -// void func_801153C8(void); -// void func_80115428(void); -void func_8011552C(PlayState* play, s16 arg1); -// void func_801155B4(void); -// void func_80115764(void); -void func_80115844(PlayState* play, s16 param_2); +void func_8011552C(PlayState* play, u16 arg1); +void func_801155B4(PlayState* play, s16 arg1); +void func_80115764(PlayState* play, UNK_TYPE arg1); +void func_80115844(PlayState* play, s16 doAction); s32 Health_ChangeBy(PlayState* play, s16 healthChange); void Health_GiveHearts(s16 hearts); void Rupees_ChangeBy(s16 rupeeChange); @@ -1743,30 +1740,13 @@ void Inventory_ChangeAmmo(s16 item, s16 ammoChange); void Magic_Add(PlayState* play, s16 magicToAdd); void Magic_Reset(PlayState* play); s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type); -// void func_80116FD8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -// void func_801170B8(void); -// void func_80117100(void); -// void func_80117A20(void); -// void func_80117BD0(void); -// void func_80118084(void); -// void func_80118890(void); -// void func_80118BA4(void); -// void func_80119030(void); -// void func_80119610(void); -void func_8011B4E0(PlayState* play, s32 arg1); -// void func_8011B5C0(void); -// void func_8011B9E0(void); -// void func_8011BF70(void); -// void func_8011C4C4(void); +void Interface_SetPerfectLetters(PlayState* play, s16 perfectLettersType); void Interface_StartMoonCrash(PlayState* play); -// void func_8011E730(void); -// void func_8011F0E0(UNK_TYPE4 ctxt); -// void func_80120F90(void); -// void func_80121000(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE1 param_8, UNK_TYPE1 param_9, UNK_TYPE1 param_10, UNK_TYPE4 param_11, UNK_TYPE4 param_12, UNK_TYPE4 param_13, UNK_TYPE4 param_14); -// void func_80121064(void); -// void func_801210E0(void); +void Interface_Draw(PlayState* play); +void Interface_Update(PlayState* play); void Interface_Destroy(PlayState* play); -void func_80121FC4(PlayState* play); +void Interface_Init(PlayState* play); + Path* Path_GetByIndex(PlayState* play, s16 index, s16 max); f32 Path_OrientAndGetDistSq(Actor* actor, Path* path, s16 waypoint, s16* yaw); void Path_CopyLastPoint(Path* path, Vec3f* dest); @@ -1779,7 +1759,7 @@ s32 func_80122744(PlayState* play, struct_80122744_arg1* arg1, u32 arg2, Vec3s* s32 func_80122760(PlayState* play, struct_80122744_arg1* arg1, f32 arg2); void func_80122868(PlayState* play, Player* player); void func_801229A0(PlayState* play, Player* player); -void func_801229EC(UNK_TYPE arg0, UNK_TYPE arg1); +void func_801229EC(Actor* thisx, PlayState* play); void func_801229FC(Player* player); void func_80122BA4(PlayState* play, struct_80122D44_arg1* arg1, s32 arg2, s32 alpha); void func_80122C20(PlayState* play, struct_80122D44_arg1* arg1); @@ -1790,7 +1770,7 @@ void func_80122F28(Player* player); s32 func_80122F9C(PlayState* play); s32 func_80122FCC(PlayState* play); void func_8012300C(PlayState* play, s32 arg1); -void func_8012301C(Player* player, PlayState* play2); +void func_8012301C(Actor* thisx, PlayState* play2); void func_80123140(PlayState* play, Player* player); s32 Player_InBlockingCsMode(PlayState* play, Player* player); s32 Player_InCsMode(PlayState* play); @@ -1801,14 +1781,14 @@ s32 Player_IsGoronOrDeku(Player* player); s32 func_801234D4(PlayState* play); s32 func_80123590(PlayState* play, Actor* actor); ItemId func_8012364C(PlayState* play, Player* player, s32 arg2); -s32 func_80123810(PlayState* play); -PlayerModelGroup Player_ActionToModelGroup(Player* player, PlayerActionParam actionParam); +PlayerItemAction func_80123810(PlayState* play); +PlayerModelGroup Player_ActionToModelGroup(Player* player, PlayerItemAction itemAction); void Player_SetModelsForHoldingShield(Player* player); void Player_SetModels(Player* player, PlayerModelGroup modelGroup); void Player_SetModelGroup(Player* player, PlayerModelGroup modelGroup); void func_80123C58(Player* player); void Player_SetEquipmentData(PlayState* play, Player* player); -void func_80123D50(PlayState* play, Player* player, ItemId itemId, PlayerActionParam actionParam); +void Player_UpdateBottleHeld(PlayState* play, Player* player, ItemId itemId, PlayerItemAction itemAction); void func_80123DA4(Player* player); void func_80123DC0(Player* player); void func_80123E90(PlayState* play, Actor* actor); @@ -1821,18 +1801,18 @@ s32 Player_HasMirrorShieldEquipped(PlayState* play); s32 Player_IsHoldingMirrorShield(PlayState* play); s32 Player_IsHoldingHookshot(Player* player); s32 func_801240DC(Player* player); -s32 func_80124110(Player* player, PlayerActionParam actionParam); +s32 func_80124110(Player* player, PlayerItemAction itemAction); s32 func_80124148(Player* player); -s32 Player_ActionToMeleeWeapon(PlayerActionParam actionParam); +s32 Player_ActionToMeleeWeapon(PlayerItemAction itemAction); s32 Player_GetMeleeWeaponHeld(Player* player); s32 Player_IsHoldingTwoHandedWeapon(Player* player); -s32 Player_ActionToBottle(Player* player, PlayerActionParam actionParam); +s32 Player_ActionToBottle(Player* player, PlayerItemAction itemAction); s32 Player_GetBottleHeld(Player* Player); -s32 Player_ActionToExplosive(Player* player, PlayerActionParam actionParam); +s32 Player_ActionToExplosive(Player* player, PlayerItemAction itemAction); s32 Player_GetExplosiveHeld(Player* player); -s32 Player_ActionToSword(Actor* actor, PlayerActionParam actionParam); +s32 Player_ActionToSword(Actor* actor, PlayerItemAction itemAction); s32 func_801242B4(Player* player); -s32 Player_GetEnvTimerType(PlayState* play); +s32 Player_GetEnvironmentalHazard(PlayState* play); void func_80124420(Player* player); void func_80124618(struct_80124618 arg0[], f32 curFrame, Vec3f* arg2); void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, s32 lod, PlayerTransformation playerForm, s32 boots, s32 face, OverrideLimbDrawFlex overrideLimbDraw, PostLimbDrawFlex postLimbDraw, Actor* actor); @@ -1997,7 +1977,7 @@ void Scene_SetExitFade(PlayState* play); s32 Scene_ProcessHeader(PlayState* play, SceneCmd* header); u16 Entrance_Create(s32 scene, s32 spawn, s32 layer); u16 Entrance_CreateFromSpawn(s32 spawn); -void Scene_ExecuteDrawConfig(PlayState* play); +void Scene_Draw(PlayState* play); void Scene_DrawConfigDefault(PlayState* play); Gfx* AnimatedMat_TexScroll(PlayState* play, AnimatedMatTexScrollParams* params); void AnimatedMat_DrawTexScroll(PlayState* play, s32 segment, void* params); @@ -2078,7 +2058,7 @@ void AnimationContext_CopyTrue(PlayState* play, AnimationEntryData* data); void AnimationContext_CopyFalse(PlayState* play, AnimationEntryData* data); void AnimationContext_MoveActor(PlayState* play, AnimationEntryData* data); void AnimationContext_Update(PlayState* play, AnimationContext* animationCtx); -void SkelAnime_InitLink(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg, LinkAnimationHeader* animation, s32 flags, Vec3s* jointTable, Vec3s* morphTable, s32 limbBufCount); +void SkelAnime_InitLink(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg, LinkAnimationHeader* animation, s32 flags, void* jointTableBuffer, void* morphTableBuffer, s32 limbBufCount); void LinkAnimation_SetUpdateFunction(SkelAnime* skelAnime); s32 LinkAnimation_Update(PlayState* play, SkelAnime* skelAnime); s32 LinkAnimation_Morph(PlayState* play, SkelAnime* skelAnime); @@ -2096,8 +2076,8 @@ void LinkAnimation_CopyMorphToJoint(PlayState* play, SkelAnime* skelAnime); void LinkAnimation_LoadToMorph(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 frame); void LinkAnimation_LoadToJoint(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 frame); void LinkAnimation_InterpJointMorph(PlayState* play, SkelAnime* skelAnime, f32 weight); -void LinkAnimation_BlendToJoint(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation1, f32 frame1, LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, Vec3s* blendTable); -void LinkAnimation_BlendToMorph(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation1, f32 frame1, LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, Vec3s* blendTable); +void LinkAnimation_BlendToJoint(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation1, f32 frame1, LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, void* blendTableBuffer); +void LinkAnimation_BlendToMorph(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation1, f32 frame1, LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, void* blendTableBuffer); void LinkAnimation_EndLoop(SkelAnime* skelAnime); s32 Animation_OnFrameImpl(SkelAnime* skelAnime, f32 frame, f32 updateRate); s32 LinkAnimation_OnFrame(SkelAnime* skelAnime, f32 frame); @@ -2164,8 +2144,8 @@ void func_80140900(void* arg0); void func_80140CE0(void* arg0); void func_80140D04(void* arg0); void func_80140D10(void* arg0, Gfx** gfx, u32 arg2); -void func_80140E80(void* param_1); -// void func_80140EA0(void); +void func_80140E80(Struct_80140E80* arg0); +void func_80140EA0(Struct_80140E80* arg0); // void func_80140EAC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // void func_80141008(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10); void func_8014116C(Gfx** gfxP, u16* arg1, u16* arg2, s32 width, s32 height, s32 arg5); @@ -2173,7 +2153,7 @@ void func_8014116C(Gfx** gfxP, u16* arg1, u16* arg2, s32 width, s32 height, s32 // void func_80141200(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // void func_8014151C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // void func_80141678(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -// void func_80141778(void); +void func_80141778(Struct_80140E80* arg0, Gfx** gfxp, void* unk_18E60, GraphicsContext* gfxCtx); void VisMono_Init(VisMono* this); void VisMono_Destroy(VisMono* this); // void VisMono_DesaturateTLUT(u16* tlut); @@ -2183,15 +2163,16 @@ void VisMono_Draw(VisMono* this, Gfx** gfxp); void func_801420C0(void* arg0); void func_801420F4(void* arg0); void func_80142100(void* arg0, Gfx** gfx, u32 arg2); -s32 func_80142440(SkyboxContext* skyboxCtx, Vtx* vtx, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8); + +s32 func_80142440(SkyboxContext* skyboxCtx, Vtx* roomVtx, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8); void func_80143148(SkyboxContext* skyboxCtx, s32 arg1); -void func_801431E8(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyType); -void func_80143324(PlayState* play, SkyboxContext* skyboxCtx, s16 skyType); -void func_801434E4(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyType); +void Skybox_Setup(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyboxId); +void func_80143324(PlayState* play, SkyboxContext* skyboxCtx, s16 skyboxId); +void Skybox_Init(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyboxId); Mtx* SkyboxDraw_UpdateMatrix(SkyboxContext* skyboxCtx, f32 x, f32 y, f32 z); void SkyboxDraw_SetColors(SkyboxContext* skyboxCtx, u8 primR, u8 primG, u8 primB, u8 envR, u8 envG, u8 envB); void SkyboxDraw_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyboxId, s16 blend, f32 x, f32 y, f32 z); -void SkyboxDraw_Noop(SkyboxContext* skyboxCtx); +void SkyboxDraw_Update(SkyboxContext* skyboxCtx); // void func_80147520(void); void func_80147564(PlayState* play); @@ -2243,8 +2224,8 @@ u8 Message_GetState(MessageContext* msgCtx); // void func_80153E7C(void); // void func_80153EF0(void); void func_801541D4(PlayState* play, Gfx** gfxp); -// void func_80156758(void); -void func_8015680C(PlayState* play); +void Message_Draw(PlayState* play); +void Message_Update(PlayState* play); void func_801586A4(PlayState* play); void Message_Init(PlayState* play); void Message_FindMessageNES(PlayState* play, u16 textId); @@ -2287,7 +2268,7 @@ void* KaleidoManager_FaultAddrConvFunc(void* address, void* param); void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl); void KaleidoManager_ClearOvl(KaleidoMgrOverlay* ovl); void KaleidoManager_Init(PlayState* play); -void KaleidoManager_Destroy(); +void KaleidoManager_Destroy(void); void* KaleidoManager_GetRamAddr(void* vram); void KaleidoScopeCall_LoadPlayer(void); void KaleidoScopeCall_Init(PlayState* play); @@ -2298,21 +2279,22 @@ void Transition_Init(TransitionContext* transitionCtx); void Transition_Destroy(TransitionContext* transitionCtx); // void func_80163DC0(void); // void func_8016418C(void); -// void func_8016424C(void); -// void func_801642D8(void); +void TransitionUnk_Destroy(FbDemoStruct* this); +FbDemoStruct* TransitionUnk_Init(FbDemoStruct* this, s32 row, s32 col); // void func_80164438(void); -// void func_8016454C(void); +void TransitionUnk_Draw(FbDemoStruct* this, Gfx**); // void func_80164678(void); -// void func_801647AC(void); +void func_801647AC(FbDemoStruct* this); // UNK_TYPE4 func_801647B8(void); // void TransitionFade_Start(void); -void* TransitionFade_Init(void* param_1); -// void TransitionFade_Destroy(void); -// void TransitionFade_Update(void); -// void TransitionFade_Draw(void); +void* TransitionFade_Init(TransitionFade* arg0); +void TransitionFade_Destroy(TransitionFade* arg0); +void TransitionFade_Update(TransitionFade* thisx, s32 updateRate); +void TransitionFade_Draw(void* thisx, Gfx** gfxP); // void TransitionFade_IsDone(void); -// void TransitionFade_SetColor(void); -// void TransitionFade_SetType(void); +void TransitionFade_SetColor(TransitionFade* arg0, u32 color); +void TransitionFade_SetType(TransitionFade* arg0, s32 arg1); +void TransitionFade_Start(TransitionFade* arg0); void TransitionOverlay_ClearLoadInfo(TransitionOverlay *overlayEntry); void TransitionOverlay_SetSegment(TransitionOverlay *overlayEntry, void* vramStart, void* vramEnd, uintptr_t vromStart, uintptr_t vromEnd); void TransitionCircle_Start(void* thisx); @@ -2321,8 +2303,7 @@ void TransitionCircle_Destroy(void* thisx); void TransitionCircle_Update(void* thisx); void TransitionCircle_SetColor(void* thisx, u32 color); void TransitionCircle_SetType(void* thisx, s32 type); -void TransitionCircle_LoadAndSetTexture(Gfx** gfxp, TexturePtr texture, s32 fmt, s32 arg3, s32 masks, s32 maskt, - f32 arg6); +void TransitionCircle_LoadAndSetTexture(Gfx** gfxp, TexturePtr texture, s32 fmt, s32 arg3, s32 masks, s32 maskt, f32 arg6); void TransitionCircle_Draw(void* thisx, Gfx** gfxp); s32 TransitionCircle_IsDone(void* thisx); void* TransitionOverlay_VramToRam(TransitionOverlay *overlayEntry, void* vramAddr); @@ -2331,39 +2312,26 @@ s32 TransitionOverlay_Load(TransitionOverlay *overlayEntry); s32 TransitionOverlay_Free(TransitionOverlay *overlayEntry); void func_80165438(UNK_PTR param_1); // void func_80165444(s32 param_1, UNK_TYPE4 param_2, UNK_TYPE4 param_3, UNK_TYPE4 param_4, UNK_TYPE4 param_5); -// void func_80165460(void); -// void func_80165608(void); -// void func_80165630(void); -void func_80165658(u32 arg0); -void func_8016566C(u32 arg0); -void func_80165690(void); -// void func_801656A4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8); -// void func_80165DCC(void); -// void func_80165DF0(void); -// void func_80165E1C(void); -// void func_80165E7C(void); -// void func_80165EC0(void); -// void func_80166060(void); -Gfx* func_801660B8(PlayState* play, Gfx* gfx); + +void Play_SetMotionBlurAlpha(u32 alpha); +void Play_EnableMotionBlur(u32 alpha); +void Play_DisableMotionBlur(void); +void Play_SetMotionBlurPriorityAlpha(u32 alpha); +void Play_EnableMotionBlurPriority(u32 alpha); +void Play_DisableMotionBlurPriority(void); +void Play_TriggerPictoPhoto(void); +Gfx* Play_SetFog(PlayState* this, Gfx* gfx); void Play_Destroy(GameState* thisx); -// void func_801663C4(void); -// void func_80166644(void); -// void func_801668B4(void); -void func_80166968(PlayState* play, Camera* camera); -void func_80166B30(PlayState* play); -void Play_Update(PlayState* play); -void func_80167DE4(PlayState* play); -// void func_80167F0C(void); -void Play_Draw(PlayState* play); -void func_80168DAC(PlayState* play); -void Play_Main(PlayState* play); +void Play_CompressI8ToI5(void* srcI8, void* destI5, size_t size); +void Play_DecompressI5ToI8(void* srcI5, void* destI8, size_t size); +void Play_Update(PlayState* this); +void Play_Draw(PlayState* this); +void Play_Main(GameState* thisx); s32 Play_InCsMode(PlayState* this); -f32 func_80169100(PlayState* play, MtxF* mtx, CollisionPoly** arg2, s32* arg3, Vec3f* feetPosPtr); -void func_801691F0(PlayState* play, MtxF* mtx, Vec3f* arg2); -void* Play_LoadScene(PlayState* play, RomFile* entry); -void func_8016927C(PlayState* play, s16 sParm2); -// void func_801692C4(PlayState* play, UNK_TYPE1 uParm2); -// void Play_SceneInit(PlayState* play, s32 sceneIndex, UNK_TYPE1 param_3); +f32 Play_GetFloorSurfaceImpl(PlayState* this, MtxF* mtx, CollisionPoly** poly, s32* bgId, Vec3f* pos); +void Play_GetFloorSurface(PlayState* this, MtxF* mtx, Vec3f* pos); +void* Play_LoadFile(PlayState* this, RomFile* entry); +void Play_InitEnvironment(PlayState* this, s16 skyboxId); void Play_GetScreenPos(PlayState* this, Vec3f* worldPos, Vec3f* screenPos); s16 Play_CreateSubCamera(PlayState* this); s16 Play_GetActiveCamId(PlayState* this); @@ -2393,8 +2361,9 @@ s32 func_8016A02C(GameState* thisx, Actor* actor, s16* yaw); s32 Play_IsUnderwater(PlayState* this, Vec3f* pos); s32 Play_IsDebugCamEnabled(void); void Play_AssignPlayerActorCsIdsFromScene(GameState* thisx, s32 startActorCsId); -void Play_FillScreen(GameState* gameState, s16 fillScreenOn, u8 red, u8 green, u8 blue, u8 alpha); -void Play_Init(GameState* gameState); +void Play_FillScreen(GameState* thisx, s16 fillScreenOn, u8 red, u8 green, u8 blue, u8 alpha); +void Play_Init(GameState* thisx); + // void func_8016AC10(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10); // void func_8016AE1C(void); // void func_8016B278(void); @@ -2403,11 +2372,11 @@ void Play_Init(GameState* gameState); // void func_8016CD4C(void); // void func_8016E40C(void); // void func_8016EA90(void); -// void func_8016F1A8(void); +void BombersNotebook_Draw(BombersNotebook* this, GraphicsContext* gfxCtx); // void func_8016F4EC(void); -void func_8016F5A8(PlayState* play, s8* pcParm2, Input* iParm3); -// void func_8016FC78(void); -// void func_8016FC98(void); +void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input); +void BombersNotebook_Init(BombersNotebook* this); +void BombersNotebook_Destroy(BombersNotebook* this); void PreRender_SetValuesSave(PreRender* this, u32 width, u32 height, void* fbuf, void* zbuf, void* cvg); void PreRender_Init(PreRender* this); void PreRender_SetValues(PreRender* this, u32 width, u32 height, void* fbuf, void* zbuf); @@ -2573,24 +2542,22 @@ void SpeedMeter_DrawTimeEntries(void* displayList, GraphicsContext* gfxCtx); // void func_80177A84(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9); //void func_80177AC8(void); void SpeedMeter_DrawAllocEntries(void* displayList, GraphicsContext* gfxCtx, GameState* gameState); -void func_801780F0(Mtx* param_1, f32 param_2, f32 param_3, f32 param_4, f32 param_5, f32 param_6, f32 param_7); -// void func_801781EC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -void func_8017842C(MtxF* arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8, f32 arg9, f32 arg10); -// void func_80178750(void); -// void func_80178818(void); + +void Mtx_SetTranslateScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, f32 translateX, f32 translateY, f32 translateZ); +void Mtx_SetRotationMtx(Mtx* mtx, s32 angle, f32 axisX, f32 axisY, f32 axisZ); +void Mtx_SetTranslationRotationScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, s32 angle, f32 axisX, f32 axisY, f32 axisZ,f32 translateX, f32 translateY, f32 translateZ); + +void func_80178750(void); +void func_80178818(void); void func_80178978(void); // void func_801789D4(void); -u32 SysCfb_GetFbPtr(s32 index); -u32 SysCfb_GetZBuffer(void); +void* SysCfb_GetFbPtr(s32 index); +void* SysCfb_GetZBuffer(void); // UNK_TYPE4 func_80178A24(void); // void func_80178A34(void); s32 func_80178A94(s32 param_1, s32 param_2); -// void func_80178AC0(void); -// void func_80178C80(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -// void func_80178D7C(void); -// void func_80178DAC(void); -void func_80178E3C(u8*, s32, s32, s32); -void func_80178E7C(uintptr_t arg0, void* arg1, size_t size); +void CmpDma_LoadFile(uintptr_t segmentVrom, s32 id, void* dst, size_t size); +void CmpDma_LoadAllFiles(uintptr_t segmentVrom, void* dst, size_t size); // void Check_WriteRGBA16Pixel(u16* buffer, u32 x, u32 y, u32 value); // void Check_WriteI4Pixel(u16* buffer, u32 x, u32 y, u32 value); // void Check_DrawI4Texture(u16* buffer, u32 x, u32 y, u32 width, u32 height, u8* texture); @@ -2701,11 +2668,10 @@ s32 Math3D_YZInSphere(Sphere16* sphere, f32 y, f32 z); // void func_8017FB1C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11); // void func_8017FD44(void); -u16 Math_GetAtan2Tbl(f32 y, f32 x); s16 Math_Atan2S(f32 y, f32 x); f32 Math_Atan2F(f32 y, f32 x); -s16 Math_FAtan2F(f32 adjacent, f32 opposite); -f32 Math_Acot2F(f32 adjacent, f32 opposite); +s16 Math_Atan2S_XY(f32 x, f32 y); +f32 Math_Atan2F_XY(f32 x, f32 y); u64* SysUcode_GetUCodeBoot(void); size_t SysUcode_GetUCodeBootSize(void); @@ -2841,39 +2807,18 @@ void AudioLoad_ScriptLoad(s32 tableType, s32 id, s8* isDone); void AudioLoad_ProcessScriptLoads(void); void AudioLoad_InitScriptLoads(void); -AudioTask* func_80192BE0(void); -// void func_80192C00(void); -// void func_8019319C(void); -// void func_801936D8(void); -// void func_8019372C(void); -// void func_80193774(void); -// void func_8019380C(void); -// void func_80193858(void); +AudioTask* AudioThread_Update(void); +void AudioThread_QueueCmdF32(u32 opArgs, f32 data); void AudioThread_QueueCmdS32(u32 opArgs, s32 data); void AudioThread_QueueCmdS8(u32 opArgs, s8 data); -// void func_801938D0(void); +void AudioThread_QueueCmdU16(u32 opArgs, u16 data); s32 AudioThread_ScheduleProcessCmds(void); -// void func_80193990(void); -// void func_801939A8(void); -// void func_80193AEC(void); -// void func_80193BA0(void); -// void func_80193C04(void); -// void func_80193C5C(void); -// void func_80193CB4(void); -// void func_80193D08(void); -// void func_80193DA4(void); -// void func_80193E6C(void); -// void func_80193EA8(void); -// void func_80194080(void); -// void func_80194304(void); -// void func_80194328(void); -// void func_8019435C(void); -// void func_8019439C(void); -// void func_801943D0(void); -// void func_8019440C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -// void func_80194528(void); -// void func_80194548(void); -// void func_80194568(void); +u32 AudioThread_GetExternalLoadQueueMsg(u32* retMsg); +u8* AudioThread_GetFontsForSequence(s32 seqId, u32* outNumFonts); +s32 func_80193C5C(void); +s32 AudioThread_ResetAudioHeap(s32 specId); +void AudioThread_PreNMIInternal(void); +s32 AudioThread_GetEnabledNotesCount(void); u32 AudioThread_NextRandom(void); void AudioThread_InitMesgQueues(void); @@ -2915,7 +2860,7 @@ void* AudioSeq_AudioListPopBack(AudioListItem* list); void AudioSeq_ProcessSequences(s32 arg0); void AudioSeq_SkipForwardSequence(SequencePlayer* seqPlayer); void AudioSeq_ResetSequencePlayer(SequencePlayer* seqPlayer); -void AudioSeq_InitSequencePlayerChannels(s32 playerIndex); +void AudioSeq_InitSequencePlayerChannels(s32 seqPlayerIndex); void AudioSeq_InitSequencePlayers(void); void func_8019AE40(s32 param_1, s32 param_2, u32 param_3, s32 param_4); @@ -2951,19 +2896,19 @@ void func_8019F420(Vec3f* pos, u16 sfxId); void func_8019F4AC(Vec3f* pos, u16 sfxId); void func_8019F540(s8 arg0); void AudioSfx_LowerSfxSettingsReverb(Vec3f* pos, s8 isReverbLowered); -// void func_8019F5AC(void); -// void func_8019F638(void); -// void func_8019F780(void); +f32 func_8019F5AC(f32 arg0); +void func_8019F638(Vec3f* arg0, u16 sfxId, f32 arg2); +void func_8019F780(Vec3f* arg0, u16 sfxId, f32 arg2); // void func_8019F7D8(void); -// void func_8019F830(void); +void func_8019F830(Vec3f* arg0, u16 arg1); void func_8019F88C(Vec3f* arg0, u16 sfxId, UNK_TYPE arg2); void func_8019F900(Vec3f* pos, u8 chargeLevel); // void func_8019FA18(void); void func_8019FAD8(Vec3f* param_1, u16 sfxId, f32 param_3); void func_8019FB0C(Vec3f* arg0, u16 sfxId, f32 arg2, s32 arg3); void func_8019FC20(Vec3f* pos, u16 sfxId); -// void func_8019FCB8(void); -// void func_8019FD90(void); +void func_8019FCB8(Vec3f* arg0, u16 arg1, f32 arg2); +void func_8019FD90(s8 arg0, s8 arg1); void func_8019FDC8(UNK_PTR arg0, u16 sfxId, UNK_TYPE arg2); void func_8019FE1C(Vec3f*, u16 sfxId, f32); void func_8019FE74(f32* arg0, f32 arg1, s32 arg2); @@ -2973,8 +2918,8 @@ void Audio_PlaySfxForRiver(Vec3f* pos, f32 freqScale); // void Audio_PlaySfxForWaterfall(void); // void Audio_StepFreqLerp(void); void func_801A0124(Vec3f* pos, u8 arg1); -// void func_801A0184(void); -// void func_801A01C4(void); +void func_801A0184(void); +void func_801A01C4(void); void func_801A0204(s8 seqId); void func_801A0238(s32 arg0, s32 arg1); // void Audio_SetGanonsTowerBgmVolumeLevel(void); @@ -3033,18 +2978,18 @@ void func_801A3AEC(s32 arg0); void func_801A3B48(UNK_TYPE arg0); // void func_801A3B90(void); void func_801A3CD8(s8 param_1); -// void func_801A3CF4(void); +void func_801A3CF4(s8 arg0); void func_801A3D98(s8 audioSetting); -// void func_801A3E38(void); -// void func_801A3EC0(void); +void func_801A3E38(u8 arg0); +void func_801A3EC0(u8 arg0); void Audio_SetCutsceneFlag(s8 flag); // void func_801A3F6C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // void func_801A3FB4(void); // void func_801A3FFC(UNK_TYPE1 param_1); void Audio_SetSpec(u32 specId); void func_801A4058(UNK_TYPE arg0); -// void func_801A41C8(void); -// void func_801A41F8(void); +void func_801A41C8(s32 arg0); +void func_801A41F8(UNK_TYPE arg0); // void func_801A429C(void); // void func_801A42C8(void); // void func_801A4324(void); @@ -3119,6 +3064,6 @@ u8 func_801A982C(void); void GameOver_Init(PlayState* play); void GameOver_FadeLights(PlayState* play); void GameOver_Update(PlayState* play); -void func_801AAAA0(PlayState* play); +void Regs_InitData(PlayState* play); #endif diff --git a/include/macros.h b/include/macros.h index ad963153f..77d3eadad 100644 --- a/include/macros.h +++ b/include/macros.h @@ -48,10 +48,13 @@ #define DAY_LENGTH (CLOCK_TIME(24, 0)) #define TIME_TO_MINUTES_F(time) ((time) * ((24.0f * 60.0f) / 0x10000)) // 0.021972656f -#define CLOCK_TIME_F(hr, min) (((hr) * 60.0f + (min)) * (0x10000 / (24.0f * 60.0f))) - #define TIME_TO_MINUTES_ALT_F(time) ((time) / (0x10000 / (24.0f * 60.0f))) + +#define TIME_TO_SECONDS_F(time) ((time) * ((24.0f * 60.0f * 60.0f) / 0x10000)) + +#define CLOCK_TIME_F(hr, min) (((hr) * 60.0f + (min)) * (0x10000 / (24.0f * 60.0f))) #define CLOCK_TIME_ALT_F(hr, min) (((hr) * 60.0f + (min)) / (24.0f * 60.0f / 0x10000)) +#define CLOCK_TIME_ALT2_F(hr, min) ((((hr) + (min) / 60.0f) * 60.0f) / (24.0f * 60.0f / 0x10000)) #define CAPACITY(upg, value) gUpgradeCapacities[upg][value] #define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg)) @@ -69,6 +72,11 @@ #define CHECK_FLAG_ALL(flags, mask) (((flags) & (mask)) == (mask)) +#define ALIGN8(val) (((val) + 7) & ~7) +#define ALIGN16(val) (((val) + 0xF) & ~0xF) +#define ALIGN64(val) (((val) + 0x3F) & ~0x3F) +#define ALIGN256(val) (((val) + 0xFF) & ~0xFF) + extern GraphicsContext* __gfxCtx; #define WORK_DISP __gfxCtx->work.p @@ -106,7 +114,7 @@ extern GraphicsContext* __gfxCtx; #define VTX_T(x, y, z, s, t, cr, cg, cb, a) \ { { x, y, z }, 0, { s, t }, { cr, cg, cb, a }, } -#define GRAPH_ALLOC(gfxCtx, size) ((void*)((gfxCtx)->polyOpa.d = (Gfx*)((u8*)(gfxCtx)->polyOpa.d - (size)))) +#define GRAPH_ALLOC(gfxCtx, size) ((void*)((gfxCtx)->polyOpa.d = (Gfx*)((u8*)(gfxCtx)->polyOpa.d - ALIGN16(size)))) // Custom gbi macro #define gDPSetTileCustom(pkt, fmt, siz, width, height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ @@ -123,11 +131,6 @@ extern GraphicsContext* __gfxCtx; } \ (void)0 -#define ALIGN8(val) (((val) + 7) & ~7) -#define ALIGN16(val) (((val) + 0xF) & ~0xF) -#define ALIGN64(val) (((val) + 0x3F) & ~0x3F) -#define ALIGN256(val) (((val) + 0xFF) & ~0xFF) - #define SQ(x) ((x) * (x)) #define ABS(x) ((x) >= 0 ? (x) : -(x)) #define ABS_ALT(x) ((x) < 0 ? -(x) : (x)) @@ -137,6 +140,10 @@ extern GraphicsContext* __gfxCtx; #define CLAMP_MAX(x, max) ((x) > (max) ? (max) : (x)) #define CLAMP_MIN(x, min) ((x) < (min) ? (min) : (x)) +#define RGBA16_GET_R(pixel) (((pixel) >> 11) & 0x1F) +#define RGBA16_GET_G(pixel) (((pixel) >> 6) & 0x1F) +#define RGBA16_GET_B(pixel) (((pixel) >> 1) & 0x1F) + #define ROUND(x) (s32)(((x) >= 0.0) ? ((x) + 0.5) : ((x) - 0.5)) #define SWAP(type, a, b) \ @@ -149,10 +156,4 @@ extern GraphicsContext* __gfxCtx; #define OVERLAY_RELOCATION_OFFSET(overlayEntry) ((uintptr_t)((overlayEntry)->vramStart) - (uintptr_t)((overlayEntry)->loadedRamAddr)) #define VRAM_PTR_SIZE(entry) ((uintptr_t)((entry)->vramEnd) - (uintptr_t)((entry)->vramStart)) -#ifdef __GNUC__ -#define ALIGNED8 __attribute__ ((aligned (8))) -#else -#define ALIGNED8 -#endif - #endif // MACROS_H diff --git a/include/regs.h b/include/regs.h index 9fa5f736a..9ea58aed1 100644 --- a/include/regs.h +++ b/include/regs.h @@ -43,23 +43,47 @@ #define bREG(r) BASE_REG(28, r) /* TODO: Actually confirm these, in case of miss-match it's at least a simple list to `sed` */ -#define R_ENABLE_ARENA_DBG SREG(0) // Same as OoT +#define R_TIME_SPEED REG(15) #define R_RUN_SPEED_LIMIT REG(45) + +#define R_ENABLE_ARENA_DBG SREG(0) // Same as OoT #define R_UPDATE_RATE SREG(30) +#define R_FB_FILTER_TYPE SREG(80) +#define R_FB_FILTER_PRIM_COLOR(c) SREG(81 + c) +#define R_FB_FILTER_A SREG(84) +#define R_FB_FILTER_ENV_COLOR(c) SREG(85 + c) +#define R_PICTO_PHOTO_STATE SREG(89) +#define R_MOTION_BLUR_ALPHA SREG(90) +#define R_MOTION_BLUR_ENABLED SREG(91) +#define R_MOTION_BLUR_PRIORITY_ALPHA SREG(92) +#define R_MOTION_BLUR_PRIORITY_ENABLED SREG(93) #define R_PAUSE_BG_PRERENDER_STATE SREG(94) + #define R_PLAY_FILL_SCREEN_ON MREG(64) #define R_PLAY_FILL_SCREEN_R MREG(65) #define R_PLAY_FILL_SCREEN_G MREG(66) #define R_PLAY_FILL_SCREEN_B MREG(67) #define R_PLAY_FILL_SCREEN_ALPHA MREG(68) -#define R_PAUSE_WORLD_MAP_YAW YREG(24) -#define R_PAUSE_WORLD_MAP_Y_OFFSET YREG(25) -#define R_PAUSE_WORLD_MAP_DEPTH YREG(26) -#define R_PAUSE_DBG_QUEST_CURSOR_ON YREG(69) -#define R_PAUSE_DBG_QUEST_CURSOR_X YREG(70) -#define R_PAUSE_DBG_QUEST_CURSOR_Y YREG(71) -#define R_C_UP_ICON_X YREG(88) -#define R_C_UP_ICON_Y YREG(89) + +#define R_PAUSE_WORLD_MAP_YAW YREG(24) +#define R_PAUSE_WORLD_MAP_Y_OFFSET YREG(25) +#define R_PAUSE_WORLD_MAP_DEPTH YREG(26) +#define R_PICTO_FOCUS_BORDER_TOPLEFT_X YREG(32) +#define R_PICTO_FOCUS_BORDER_TOPLEFT_Y YREG(33) +#define R_PICTO_FOCUS_BORDER_TOPRIGHT_X YREG(34) +#define R_PICTO_FOCUS_BORDER_TOPRIGHT_Y YREG(35) +#define R_PICTO_FOCUS_BORDER_BOTTOMLEFT_X YREG(36) +#define R_PICTO_FOCUS_BORDER_BOTTOMLEFT_Y YREG(37) +#define R_PICTO_FOCUS_BORDER_BOTTOMRIGHT_X YREG(38) +#define R_PICTO_FOCUS_BORDER_BOTTOMRIGHT_Y YREG(39) +#define R_PICTO_FOCUS_ICON_X YREG(40) +#define R_PICTO_FOCUS_ICON_Y YREG(41) +#define R_PICTO_FOCUS_TEXT_X YREG(42) +#define R_PICTO_FOCUS_TEXT_Y YREG(43) +#define R_PAUSE_DBG_QUEST_CURSOR_ON YREG(69) +#define R_PAUSE_DBG_QUEST_CURSOR_X YREG(70) +#define R_PAUSE_DBG_QUEST_CURSOR_Y YREG(71) + #define R_MAGIC_FILL_COLOR(i) ZREG(0 + i) #define R_C_BTN_COLOR(i) ZREG(39 + i) #define R_B_BTN_COLOR(i) ZREG(43 + i) @@ -76,21 +100,28 @@ #define R_ITEM_ICON_X(i) ZREG(82 + i) #define R_ITEM_ICON_Y(i) ZREG(86 + i) #define R_ITEM_ICON_DD(i) ZREG(90 + i) -#define R_A_BTN_Y XREG(16) -#define R_A_BTN_X XREG(17) -#define R_A_ICON_Y XREG(19) -#define R_A_ICON_X XREG(20) -#define R_A_BTN_COLOR(i) XREG(22 + i) -#define R_MAGIC_CONSUME_TIMER_GIANTS_MASK XREG(41) -#define R_PAUSE_DBG_MAP_CLOUD_ON XREG(50) -#define R_PAUSE_DBG_MAP_CLOUD_X XREG(52) -#define R_PAUSE_DBG_MAP_CLOUD_Y XREG(53) -#define R_MOON_CRASH_TIMER_Y XREG(80) -#define R_MOON_CRASH_TIMER_X XREG(81) -#define R_PAUSE_OWLWARP_ALPHA XREG(87) -#define R_STORY_FILL_SCREEN_ALPHA XREG(91) -#define R_REVERSE_FLOOR_INDEX XREG(94) -#define R_MINIMAP_DISABLED XREG(95) + +#define R_MAGIC_DBG_SET_UPGRADE XREG(4) +#define R_A_BTN_Y XREG(16) +#define R_A_BTN_X XREG(17) +#define R_A_ICON_Y XREG(19) +#define R_A_ICON_X XREG(20) +#define R_A_BTN_COLOR(i) XREG(22 + i) +#define R_A_BTN_Y_OFFSET XREG(31) +#define R_MAGIC_CONSUME_TIMER_GIANTS_MASK XREG(41) +#define R_THREE_DAY_CLOCK_Y_POS XREG(43) +#define R_THREE_DAY_CLOCK_SUN_MOON_CUTOFF XREG(44) +#define R_THREE_DAY_CLOCK_HOUR_DIGIT_CUTOFF XREG(45) +#define R_PAUSE_DBG_MAP_CLOUD_ON XREG(50) +#define R_PAUSE_DBG_MAP_CLOUD_X XREG(52) +#define R_PAUSE_DBG_MAP_CLOUD_Y XREG(53) +#define R_MOON_CRASH_TIMER_Y XREG(80) +#define R_MOON_CRASH_TIMER_X XREG(81) +#define R_PAUSE_OWLWARP_ALPHA XREG(87) +#define R_STORY_FILL_SCREEN_ALPHA XREG(91) +#define R_REVERSE_FLOOR_INDEX XREG(94) +#define R_MINIMAP_DISABLED XREG(95) + #define R_B_LABEL_DD WREG(0) #define R_OW_MINIMAP_X WREG(29) #define R_OW_MINIMAP_Y WREG(30) @@ -98,6 +129,7 @@ #define R_B_LABEL_Y(i) WREG(43 + i) #define R_DGN_MINIMAP_X WREG(68) #define R_DGN_MINIMAP_Y WREG(69) + #define R_MAP_INDEX VREG(11) #define R_MAP_TEX_INDEX_BASE VREG(12) #define R_MAP_TEX_INDEX VREG(13) @@ -111,9 +143,4 @@ #define R_ITEM_ICON_WIDTH(i) VREG(76 + i) #define R_ITEM_BTN_WIDTH(i) VREG(80 + i) -#define R_FB_FILTER_TYPE SREG(80) -#define R_FB_FILTER_PRIM_COLOR(c) SREG(81 + c) -#define R_FB_FILTER_A SREG(84) -#define R_FB_FILTER_ENV_COLOR(c) SREG(85 + c) - #endif diff --git a/include/variables.h b/include/variables.h index a3278c481..af32d062e 100644 --- a/include/variables.h +++ b/include/variables.h @@ -308,7 +308,7 @@ extern u8* sYaz0CurDataEnd; extern u32 sYaz0CurRomStart; extern u32 sYaz0CurSize; extern u8* sYaz0MaxPtr; -extern u8* D_8009BE20; +extern void* gYaz0DecompressDstEnd; // extern UNK_TYPE4 D_8009BE30; // extern UNK_TYPE4 D_8009BE34; // extern FaultClient romInfoFaultClient; @@ -358,9 +358,7 @@ extern u16 viRetrace; extern DmaEntry dmadata[1568]; // extern UNK_TYPE1 D_80186028; extern u64 aspMainTextStart[]; -extern ColliderCylinderInit enAObjCylinderInit; -extern InitChainEntry enAObjInitVar; -extern Gfx* enAObjDisplayLists[2]; + extern u8 sDropTable[DROP_TABLE_SIZE * DROP_TABLE_NUMBER]; extern u8 sDropTableAmounts[DROP_TABLE_SIZE * DROP_TABLE_NUMBER]; extern s32 D_801AE194[32]; @@ -427,7 +425,7 @@ extern Gfx D_801AEFA0[]; // extern UNK_TYPE1 D_801AEFBC; // extern UNK_TYPE1 D_801AEFC0; extern ActorOverlay gActorOverlayTable[ACTOR_ID_MAX]; -extern s32 gMaxActorId; +extern ActorId gMaxActorId; extern BgCheckSceneSubdivisionEntry sSceneSubdivisionList[]; extern BgSpecialSceneMaxObjects sCustomDynapolyMem[]; // extern UNK_TYPE1 D_801B4708; @@ -631,145 +629,6 @@ extern UNK_PTR D_801BEC14; // extern UNK_TYPE2 D_801BF5B0; extern UNK_PTR D_801BF5C0; // extern UNK_TYPE1 D_801BF68C; -// extern UNK_TYPE1 D_801BF6C0; -// extern UNK_TYPE1 D_801BF79E; -// extern UNK_TYPE2 D_801BF884; -// extern UNK_TYPE2 D_801BF888; -// extern UNK_TYPE2 D_801BF88C; -// extern UNK_TYPE2 D_801BF890; -// extern UNK_TYPE2 D_801BF898; -// extern UNK_TYPE2 D_801BF89C; -// extern UNK_TYPE2 sMagicMeterOutlinePrimRed; -// extern UNK_TYPE2 sMagicMeterOutlinePrimGreen; -// extern UNK_TYPE2 sMagicMeterOutlinePrimBlue; -// extern UNK_TYPE2 sMagicBorderRatio; -// extern UNK_TYPE2 sMagicBorderStep; -// extern UNK_TYPE2 sEnvTimerType; -// extern UNK_TYPE2 sEnvTimerActive; -// extern UNK_TYPE2 sPostmanBunnyHoodState; -// extern UNK_TYPE4 sTimerPausedOsTime; -// extern UNK_TYPE4 sBottleTimerPausedOsTime; -// extern UNK_TYPE4 D_801BF8F4; -// extern UNK_TYPE4 D_801BF8F8; -// extern UNK_TYPE4 D_801BF8FC; -// extern UNK_TYPE4 D_801BF930; -// extern UNK_TYPE4 D_801BF934; -// extern UNK_TYPE1 sIsTimerPaused; -// extern UNK_TYPE1 D_801BF96A; -// extern UNK_TYPE1 sIsBottleTimerPaused; -// extern UNK_TYPE1 D_801BF96E; -// extern UNK_TYPE2 sTimerId; -// extern UNK_TYPE1 D_801BF972; -// extern UNK_TYPE2 D_801BF974; -// extern UNK_TYPE2 D_801BF978; -// extern UNK_TYPE2 D_801BF97C; -// extern UNK_TYPE4 D_801BF980; -// extern UNK_TYPE1 D_801BF988; -// extern UNK_TYPE1 D_801BF998; -// extern UNK_TYPE2 D_801BF9B0; -// extern UNK_TYPE1 D_801BF9B4; -// extern UNK_TYPE1 D_801BF9BC; -// extern UNK_TYPE1 D_801BF9C4; -// extern UNK_TYPE1 D_801BF9C8; -// extern UNK_TYPE1 D_801BF9CC; -// extern UNK_TYPE2 D_801BF9D4; -// extern UNK_TYPE2 D_801BF9D6; -// extern UNK_TYPE2 D_801BF9D8; -// extern UNK_TYPE2 D_801BF9DA; -// extern UNK_TYPE2 D_801BF9DC; -// extern UNK_TYPE2 D_801BF9DE; -// extern UNK_TYPE2 D_801BF9E0; -// extern UNK_TYPE2 D_801BF9E2; -// extern UNK_TYPE2 D_801BF9E4; -// extern UNK_TYPE2 D_801BF9E6; -// extern UNK_TYPE2 D_801BF9E8; -// extern UNK_TYPE2 D_801BF9EA; -// extern UNK_TYPE2 D_801BF9EC; -// extern UNK_TYPE2 D_801BF9F0; -// extern UNK_TYPE2 D_801BF9F4; -// extern UNK_TYPE2 D_801BF9F8; -// extern UNK_TYPE2 D_801BF9FC; -// extern UNK_TYPE2 D_801BFA00; -// extern UNK_TYPE2 D_801BFA04; -// extern UNK_TYPE2 D_801BFA1C; -// extern UNK_TYPE2 D_801BFA34; -// extern UNK_TYPE2 D_801BFA4C; -// extern UNK_TYPE2 D_801BFA64; -// extern UNK_TYPE2 D_801BFA74; -// extern UNK_TYPE4 sPostmanTimerInputBtnAPressed; -// extern UNK_TYPE1 D_801BFAB0; -// extern UNK_TYPE1 D_801BFAB8; -// extern UNK_TYPE1 D_801BFAC4; -// extern UNK_TYPE1 D_801BFACC; -// extern UNK_TYPE1 D_801BFAD4; -// extern UNK_TYPE2 D_801BFAF4; -// extern UNK_TYPE2 D_801BFAF6; -// extern UNK_TYPE2 D_801BFAF8; -// extern UNK_TYPE2 D_801BFAFA; -// extern UNK_TYPE1 D_801BFAFC; -// extern UNK_TYPE1 D_801BFB04; -// extern UNK_TYPE1 D_801BFB0C; -// extern UNK_TYPE1 D_801BFB14; -// extern UNK_TYPE1 D_801BFB1C; -// extern UNK_TYPE1 D_801BFB24; -// extern UNK_TYPE2 D_801BFB2C; -// extern UNK_TYPE2 D_801BFB30; -// extern UNK_TYPE2 D_801BFB34; -// extern UNK_TYPE1 D_801BFB38; -// extern UNK_TYPE1 D_801BFB6C; -// extern UNK_TYPE2 D_801BFBCC; -// extern UNK_TYPE2 D_801BFBD0; -// extern UNK_TYPE2 D_801BFBD4; -// extern UNK_TYPE2 D_801BFBD8; -// extern UNK_TYPE2 D_801BFBDC; -// extern UNK_TYPE2 D_801BFBE0; -// extern UNK_TYPE2 D_801BFBE4; -// extern UNK_TYPE2 D_801BFBE8; -// extern UNK_TYPE1 D_801BFBEC; -// extern UNK_TYPE1 D_801BFBF0; -// extern UNK_TYPE1 D_801BFBF4; -// extern UNK_TYPE1 D_801BFBF8; -// extern UNK_TYPE1 D_801BFBFC; -// extern UNK_TYPE1 D_801BFC00; -// extern UNK_TYPE1 D_801BFC04; -// extern UNK_TYPE1 D_801BFC08; -// extern UNK_TYPE1 D_801BFC0C; -// extern UNK_TYPE1 D_801BFC10; -// extern UNK_TYPE1 D_801BFC14; -// extern UNK_TYPE1 D_801BFC40; -// extern UNK_TYPE2 D_801BFC50; -// extern UNK_TYPE2 D_801BFC60; -// extern UNK_TYPE2 D_801BFC62; -// extern UNK_TYPE2 D_801BFC64; -// extern UNK_TYPE2 D_801BFC6C; -// extern UNK_TYPE2 D_801BFC7C; -// extern UNK_TYPE1 D_801BFC8C; -// extern UNK_TYPE2 D_801BFC98; -// extern UNK_TYPE2 D_801BFCA8; -// extern UNK_TYPE1 D_801BFCB8; -// extern UNK_TYPE4 D_801BFCC4; -// extern UNK_TYPE2 sTimerStateTimer; -// extern UNK_TYPE2 sTimerDigits; -// extern UNK_TYPE2 D_801BFCEA; -// extern UNK_TYPE2 D_801BFCEC; -// extern UNK_TYPE2 D_801BFCEE; -// extern UNK_TYPE2 D_801BFCF0; -// extern UNK_TYPE2 D_801BFCF2; -// extern UNK_TYPE2 D_801BFCF4; -// extern UNK_TYPE2 sTimerBeepSfxSeconds; -// extern UNK_TYPE2 D_801BFCFC; -// extern UNK_TYPE2 D_801BFD0C; -// extern UNK_TYPE1 D_801BFD1C; -// extern UNK_TYPE1 D_801BFD24; -// extern UNK_TYPE1 D_801BFD2C; -// extern UNK_TYPE1 D_801BFD40; -// extern UNK_TYPE1 D_801BFD54; -// extern UNK_TYPE1 D_801BFD64; -// extern UNK_TYPE2 D_801BFD6C; -// extern UNK_TYPE1 D_801BFD84; -// extern UNK_TYPE1 D_801BFD8C; -// extern UNK_TYPE1 D_801BFD94; -// extern UNK_TYPE2 D_801BFD98; extern FlexSkeletonHeader* gPlayerSkeletons[PLAYER_FORM_MAX]; extern PlayerModelIndices gPlayerModelTypes[]; @@ -808,13 +667,6 @@ extern UNK_PTR D_801C5CB0; // extern UNK_TYPE1 D_801C5DE0; // extern UNK_TYPE1 D_801C5DF0; // extern UNK_TYPE1 D_801C5E00; -extern s32 D_801C5E30[]; // D_801C5E30 -extern u16 D_801C5E48[]; // D_801C5E48 -extern s32 D_801C5E88[]; // D_801C5E88 -extern s32 D_801C5E9C[]; // D_801C5E9C -extern s32 D_801C5EB0[]; // D_801C5EB0 -extern s16 D_801C5EC4[]; // D_801C5EC4 -extern struct_801C5F44 D_801C5F44[]; // D_801C5F44 // extern UNK_TYPE1 D_801C6A70; // extern UNK_TYPE2 D_801C6A74; @@ -958,8 +810,8 @@ extern KaleidoMgrOverlay* gKaleidoMgrCurOvl; extern Gfx D_801D0D00[]; extern s32 gDbgCamEnabled; // extern UNK_TYPE1 D_801D0D54; -// extern UNK_TYPE2 D_801D0D58; -// extern UNK_TYPE2 D_801D0D5C; +// extern UNK_TYPE2 sQuakeIndex; +// extern UNK_TYPE2 sIsCameraUnderwater; extern Input* D_801D0D60; // extern UNK_TYPE2 D_801D0D64; // extern UNK_TYPE1 D_801D0D7A; @@ -1057,14 +909,9 @@ extern UNK_PTR D_801D5FE0; // extern UNK_TYPE1 D_801D5FE4; extern s32 gAudioCtxInitalized; // extern UNK_TYPE4 D_801D5FEC; -// extern UNK_TYPE4 D_801D5FF0; -// extern UNK_TYPE4 D_801D5FF4; -// extern UNK_TYPE1 D_801D5FF8; -// extern UNK_TYPE4 D_801D5FFC; -extern UNK_PTR D_801D6000; // extern UNK_TYPE4 D_801D6190; // extern UNK_TYPE4 D_801D6194; -// extern UNK_TYPE1 D_801D6200; +extern u8 D_801D6200[0x400]; extern u8 gIsLargeSfxBank[7]; extern u8 D_801D6608[7]; extern u8 gChannelsPerBank[4][7]; @@ -2441,7 +2288,6 @@ extern u8 gSoundFontTable[]; extern u8 gSequenceFontTable[]; extern u8 gSequenceTable[]; extern u8 gSampleBankTable[]; -extern u64 aspMainDataStart[]; // bss // extern UNK_TYPE1 D_801ED890; @@ -2479,27 +2325,17 @@ extern TriNorm D_801EDBB0; // extern UNK_TYPE1 D_801EDBD8; // extern UNK_TYPE1 D_801EDBDC; // extern UNK_TYPE1 D_801EDBE0; -extern s16 D_801EDBF0; -// extern UNK_TYPE1 D_801EDBF4; -// extern UNK_TYPE1 D_801EDBF8; -// extern UNK_TYPE1 D_801EDC00; -// extern UNK_TYPE1 D_801EDC04; -// extern UNK_TYPE1 D_801EDC08; -// extern UNK_TYPE1 D_801EDC0C; -// extern UNK_TYPE1 D_801EDC10; -// extern UNK_TYPE1 D_801EDC14; -// extern UNK_TYPE1 D_801EDC28; -// extern UNK_TYPE1 D_801EDC30; -// extern UNK_TYPE1 D_801EDC8C; -// extern UNK_TYPE1 D_801EDC90; -// extern UNK_TYPE1 D_801EDC92; -// extern UNK_TYPE1 D_801EDC94; -// extern UNK_TYPE1 D_801EDC96; -// extern UNK_TYPE1 D_801EDDD0; -// extern UNK_TYPE1 D_801EDDD4; -// extern UNK_TYPE1 D_801EDDD8; -// extern UNK_TYPE1 D_801EDDE0; -// extern UNK_TYPE1 D_801EDDF0; + +// extern s16 D_801EDBF0; +// extern f32 D_801EDBF4; +// extern f32 D_801EDBF8; +// extern CameraCollision D_801EDC00; +// extern PlayState* sCamPlayState; +// extern SwingAnimation D_801EDC30[4]; +// extern Vec3f D_801EDDD0; +// extern Vec3f D_801EDDE0; +// extern Vec3f D_801EDDF0; + extern Vec3f D_801EDE00; extern Vec3f D_801EDE10; extern Vec3f D_801EDE20; @@ -2643,18 +2479,18 @@ extern s16 D_801F4E7A; extern void (*sKaleidoScopeUpdateFunc)(PlayState* play); extern void (*sKaleidoScopeDrawFunc)(PlayState* play); extern FaultAddrConvClient sKaleidoAreaFaultClient; -// extern UNK_TYPE1 D_801F6C10; +extern s16 sTransitionFillTimer; extern Input D_801F6C18; -// extern UNK_TYPE1 D_801F6C30; -// extern UNK_TYPE1 D_801F6D0C; -extern UNK_TYPE4 D_801F6D10; -// extern UNK_TYPE1 D_801F6D18; -extern Color_RGBA8 D_801F6D30; -// extern UNK_TYPE1 D_801F6D38; -// extern UNK_TYPE4 D_801F6D4C; -// extern UNK_TYPE1 D_801F6D50; -extern u8 D_801F6DFC; -// extern UNK_TYPE1 D_801F6DFD; +extern FbDemoStruct sTrnsnUnk; +extern u16* D_801F6D0C; +extern s32 gTrnsnUnkState; +extern VisMono sVisMono; +extern Color_RGBA8_u32 gVisMonoColor; +extern Struct_80140E80 D_801F6D38; +extern Struct_80140E80* D_801F6D4C; +extern BombersNotebook sBombersNotebook; +extern u8 sBombersNotebookOpen; +extern u8 sMotionBlurStatus; extern SlowlyTask D_801F6E00; extern s32 D_801F6FC0; extern StackEntry slowlyStackEntry; @@ -2728,8 +2564,7 @@ extern UNK_TYPE2 D_801FBBCC; extern UNK_TYPE2 D_801FBBCE; // extern UNK_TYPE1 D_801FBBD0; // extern UNK_TYPE1 D_801FBBD2; -// extern UNK_TYPE1 D_801FBBD4; -// extern UNK_TYPE1 D_801FBBE0; +extern u8 D_801FBBD4; extern Vec3f D_801FBBF0; extern LineSegment Math3D_ColSphereTri_line; extern Vec3f Math3D_ColSphereTri_point; @@ -2940,10 +2775,10 @@ extern ActiveSequence gActiveSeqs[]; // extern UNK_TYPE1 D_80200BCE; // extern UNK_TYPE1 D_80200BD0; extern AudioContext gAudioCtx; // at 0x80200C70 -extern void (*gCustomAudioUpdateFunction)(void); -extern u32 (*gCustomAudioSeqFunction)(s8 value, SequenceChannel* channel); -extern s32 (*gCustomAudioReverbFunction)(Sample*, s32, s8, s32); -extern Acmd* (*gCustomAudioSynthFunction)(Acmd*, s32, s32); +extern AudioCustomUpdateFunction gAudioCustomUpdateFunction; +extern AudioCustomSeqFunction gAudioCustomSeqFunction; +extern AudioCustomReverbFunction gAudioCustomReverbFunction; +extern AudioCustomSynthFunction gAudioCustomSynthFunction; // post-code buffers extern u8 gGfxSPTaskYieldBuffer[OS_YIELD_DATA_SIZE]; @@ -2952,7 +2787,7 @@ extern GfxPool gGfxPools[2]; extern u8 gAudioHeap[0x138000]; extern u8 gSystemHeap[UNK_SIZE]; -extern u8 D_80780000[0x4600]; +extern u8 gPictoPhotoI8[PICTO_PHOTO_SIZE]; extern u8 D_80784600[0x56200]; extern u16 gFramebuffer0[SCREEN_HEIGHT][SCREEN_WIDTH]; diff --git a/include/z64.h b/include/z64.h index 4b2f45bbf..1a6fcd1d3 100644 --- a/include/z64.h +++ b/include/z64.h @@ -35,6 +35,7 @@ #include "z64cutscene.h" #include "z64dma.h" #include "z64effect.h" +#include "z64interface.h" #include "z64item.h" #include "z64light.h" #include "z64map.h" @@ -244,9 +245,9 @@ typedef struct GraphicsContext { /* 0x2E4 */ u32 viConfigFeatures; /* 0x2E8 */ char unk_2E8[0x2]; /* 0x2EA */ u8 updateViMode; - /* 0x2EB */ u8 framebufferIdx; + /* 0x2EB */ u8 framebufferIndex; /* 0x2EC */ void (*callback)(struct GraphicsContext*, u32); - /* 0x2F0 */ u32 callbackParam; + /* 0x2F0 */ u32 callbackArg; /* 0x2F4 */ f32 xScale; /* 0x2F8 */ f32 yScale; /* 0x2FC */ GfxMasterList* masterList; @@ -465,106 +466,6 @@ typedef struct { /* 0x2CA */ s16 unk_2CA; // Uses OwlWarpId enum for Owl Warp. Never set. } PauseContext; // size = 0x2D0 -typedef struct { - /* 0x000 */ View view; - /* 0x168 */ Vtx* actionVtx; - /* 0x16C */ Vtx* beatingHeartVtx; - /* 0x170 */ u8* parameterSegment; - /* 0x174 */ u8* doActionSegment; - /* 0x178 */ u8* iconItemSegment; - /* 0x17C */ u8* mapSegment; - /* 0x180 */ u8* unk_180; - /* 0x184 */ DmaRequest dmaRequest_184; - /* 0x1A4 */ DmaRequest dmaRequest_1A4; - /* 0x1C4 */ DmaRequest dmaRequest_1C4; - /* 0x1E4 */ OSMesgQueue loadQueue; - /* 0x1FC */ OSMesg loadMsg; - /* 0x200 */ Viewport viewport; - /* 0x210 */ s16 unk_210; - /* 0x212 */ u16 unk_212; - /* 0x214 */ u16 unk_214; - /* 0x218 */ f32 unk_218; - /* 0x21C */ s16 unk_21C; - /* 0x21E */ s16 bButtonDoAction; - /* 0x220 */ s16 unk_220; - /* 0x222 */ s16 unk_222; - /* 0x224 */ s16 unk_224; - /* 0x226 */ s16 lifeColorChange; - /* 0x228 */ s16 lifeColorChangeDirection; - /* 0x22A */ s16 beatingHeartPrim[3]; - /* 0x230 */ s16 beatingHeartEnv[3]; - /* 0x236 */ s16 heartsPrimR[2]; - /* 0x23A */ s16 heartsPrimG[2]; - /* 0x23E */ s16 heartsPrimB[2]; - /* 0x242 */ s16 heartsEnvR[2]; - /* 0x246 */ s16 heartsEnvG[2]; - /* 0x24A */ s16 heartsEnvB[2]; - /* 0x24E */ s16 health; - /* 0x250 */ s16 unkTimer; - /* 0x252 */ s16 lifeSizeChange; - /* 0x254 */ s16 lifeSizeChangeDirection; // 1 means shrinking, 0 growing - /* 0x256 */ s16 unk_256; - /* 0x258 */ s16 magicConsumptionTimer; // For certain magic states, 1 unit of magic is consumed every time the timer reaches 0 - /* 0x25A */ u8 numHorseBoosts; - /* 0x25C */ u16 unk_25C; - /* 0x25E */ u16 unk_25E; - /* 0x260 */ u16 hbaAmmo; - /* 0x262 */ u16 unk_262; - /* 0x264 */ s16 unk_264; - /* 0x266 */ s16 aAlpha; - /* 0x268 */ s16 bAlpha; - /* 0x26A */ s16 cLeftAlpha; - /* 0x26C */ s16 cDownAlpha; - /* 0x26E */ s16 cRightAlpha; - /* 0x270 */ s16 healthAlpha; - /* 0x272 */ s16 magicAlpha; - /* 0x274 */ s16 minimapAlpha; - /* 0x276 */ s16 startAlpha; - /* 0x278 */ s16 unk_278; - /* 0x27A */ s16 dungeonOrBossAreaMapIndex; - /* 0x27C */ s16 mapRoomNum; - /* 0x27E */ u8 unk_27E; - /* 0x27F */ u8 unk_27F; - /* 0x280 */ u8 unk_280; - /* 0x282 */ s16 unk_282; - /* 0x284 */ s16 unk_284; - /* 0x286 */ s16 unk_286; - /* 0x288 */ s16 unk_288; - /* 0x28A */ s16 unk_28A[8]; - /* 0x29A */ u16 unk_29A[8]; - /* 0x2AA */ s16 unk_2AA[8]; - /* 0x2BC */ f32 unk_2BC[8]; - /* 0x2DC */ f32 unk_2DC[8]; - /* 0x2FC */ s16 unk_2FC[4]; - /* 0x304 */ s16 unk_304; - /* 0x306 */ s16 unk_306; - /* 0x308 */ s16 unk_308; - /* 0x30A */ s16 unk_30A; - /* 0x30C */ s16 unk_30C; - struct { - /* 0x30E */ u8 unk_30E; // "h_gauge" - /* 0x30F */ u8 bButton; - /* 0x310 */ u8 aButton; - /* 0x311 */ u8 tradeItems; - /* 0x312 */ u8 unk_312; - /* 0x313 */ u8 unk_313; - /* 0x314 */ u8 unk_314; - /* 0x315 */ u8 songOfSoaring; - /* 0x316 */ u8 songOfStorms; - /* 0x317 */ u8 unk_317; - /* 0x318 */ u8 pictographBox; - /* 0x319 */ u8 all; // "another"; enables all item restrictions - } restrictions; // size = 0xC - /* 0x31A */ u8 storyState; - /* 0x31B */ u8 storyType; - /* 0x31C */ u8 unk_31C; - /* 0x320 */ OSMesgQueue unk_320; - /* 0x338 */ OSMesg unk_338; - /* 0x33C */ void* unk_33C; - /* 0x340 */ u32 unk_340; - /* 0x344 */ u32 unk_344; -} InterfaceContext; // size = 0x348 - typedef struct { /* 0x00 */ void* loadedRamAddr; /* 0x04 */ uintptr_t vromStart; @@ -583,10 +484,8 @@ typedef enum { typedef struct { /* 0x00 */ u16 unk_0; - /* 0x02 */ u16 timeIncrement; - /* 0x04 */ f32 unk_4; - /* 0x08 */ f32 unk_8; - /* 0x0C */ f32 unk_C; + /* 0x02 */ u16 sceneTimeSpeed; + /* 0x04 */ Vec3f sunPos; /* 0x10 */ u8 unk_10; /* 0x11 */ u8 unk_11; /* 0x12 */ u8 unk_12; @@ -635,8 +534,8 @@ typedef struct { /* 0xE5 */ u8 fillScreen; /* 0xE6 */ u8 screenFillColor[4]; /* 0xEA */ u8 sandstormState; - /* 0xEB */ u8 unk_EB; - /* 0xEC */ u8 unk_EC; + /* 0xEB */ u8 sandstormPrimA; + /* 0xEC */ u8 sandstormEnvA; /* 0xED */ u8 unk_ED; /* 0xEE */ u8 unk_EE[4]; /* 0xF2 */ u8 unk_F2[8]; // [3] is used by both DemoKankyo and ObjectKankyo effect count @@ -645,9 +544,9 @@ typedef struct { typedef struct { /* 0x000 */ View view; - /* 0x168 */ void* skyboxStaticSegment[4]; - /* 0x178 */ void* skyboxPaletteStaticSegment; - /* 0x17C */ Gfx* dListBuf; + /* 0x168 */ void* staticSegments[4]; + /* 0x178 */ void* paletteStaticSegment; + /* 0x17C */ Gfx (*dListBuf)[150]; /* 0x180 */ Gfx* roomDL; /* 0x184 */ Vtx* roomVtx; /* 0x188 */ DmaRequest unk188; @@ -720,64 +619,6 @@ typedef struct { /* 0x24 */ u32 flags; } PreRenderParams; // size = 0x28 -#define TRANS_TRIGGER_OFF 0 // transition is not active -#define TRANS_TRIGGER_START 20 // start transition (exiting an area) -#define TRANS_TRIGGER_END -20 // transition is ending (arriving in a new area) - -typedef enum TransitionMode { - /* 0 */ TRANS_MODE_OFF, - /* 1 */ TRANS_MODE_01, - /* 2 */ TRANS_MODE_02, - /* 3 */ TRANS_MODE_03, - /* 4 */ TRANS_MODE_04, - /* 5 */ TRANS_MODE_05, - /* 6 */ TRANS_MODE_06, - /* 7 */ TRANS_MODE_07, - /* 8 */ TRANS_MODE_08, - /* 9 */ TRANS_MODE_09, - /* 10 */ TRANS_MODE_10, - /* 11 */ TRANS_MODE_11, - /* 12 */ TRANS_MODE_12, - /* 13 */ TRANS_MODE_13, - /* 14 */ TRANS_MODE_14, - /* 15 */ TRANS_MODE_15, - /* 16 */ TRANS_MODE_16, - /* 17 */ TRANS_MODE_17 -} TransitionMode; - -typedef enum TransitionType { - /* 0 */ TRANS_TYPE_00, - /* 1 */ TRANS_TYPE_01, - /* 2 */ TRANS_TYPE_02, - /* 3 */ TRANS_TYPE_03, - /* 4 */ TRANS_TYPE_04, - /* 5 */ TRANS_TYPE_05, - /* 6 */ TRANS_TYPE_06, - /* 7 */ TRANS_TYPE_07, - /* 8 */ TRANS_TYPE_08, - /* 9 */ TRANS_TYPE_09, - /* 10 */ TRANS_TYPE_10, - /* 11 */ TRANS_TYPE_11, - /* 12 */ TRANS_TYPE_12, - /* 13 */ TRANS_TYPE_13, - /* 14 */ TRANS_TYPE_14, - /* 15 */ TRANS_TYPE_15, - /* 16 */ TRANS_TYPE_16, - /* 17 */ TRANS_TYPE_17, - /* 18 */ TRANS_TYPE_18, - /* 19 */ TRANS_TYPE_19, - /* 20 */ TRANS_TYPE_20, - /* 21 */ TRANS_TYPE_21, - /* 64 */ TRANS_TYPE_64 = 64, - /* 70 */ TRANS_TYPE_70 = 70, - /* 72 */ TRANS_TYPE_72 = 72, - /* 73 */ TRANS_TYPE_73, - /* 80 */ TRANS_TYPE_80 = 80, - /* 86 */ TRANS_TYPE_86 = 86 -} TransitionType; - -#define TRANS_NEXT_TYPE_DEFAULT 0xFF - typedef struct FaultAddrConvClient { /* 0x0 */ struct FaultAddrConvClient* next; /* 0x4 */ void* (*callback)(void*, void*); @@ -809,10 +650,6 @@ typedef struct { /* 0x844 */ void* fb; } FaultThreadStruct; // size = 0x848 -typedef struct FireObj FireObj; - -typedef struct FireObjLight FireObjLight; - struct GameState; typedef void (*GameStateFunc)(struct GameState* gameState); @@ -868,15 +705,14 @@ typedef struct { /* 0x10 */ OSTime resetTime; } PreNmiBuff; // size = 0x18 (actually osAppNmiBuffer is 0x40 bytes large but the rest is unused) -typedef struct PlayState PlayState; -typedef s32 (*ColChkResetFunc)(PlayState*, Collider*); -typedef void (*ColChkBloodFunc)(PlayState*, Collider*, Vec3f*); -typedef void (*ColChkApplyFunc)(PlayState*, CollisionCheckContext*, Collider*); -typedef void (*ColChkVsFunc)(PlayState*, CollisionCheckContext*, Collider*, Collider*); -typedef s32 (*ColChkLineFunc)(PlayState*, CollisionCheckContext*, Collider*, Vec3f*, Vec3f*); +typedef s32 (*ColChkResetFunc)(struct PlayState*, Collider*); +typedef void (*ColChkBloodFunc)(struct PlayState*, Collider*, Vec3f*); +typedef void (*ColChkApplyFunc)(struct PlayState*, CollisionCheckContext*, Collider*); +typedef void (*ColChkVsFunc)(struct PlayState*, CollisionCheckContext*, Collider*, Collider*); +typedef s32 (*ColChkLineFunc)(struct PlayState*, CollisionCheckContext*, Collider*, Vec3f*, Vec3f*); -typedef void(*room_draw_func)(PlayState* play, Room* room, u32 flags); +typedef void(*room_draw_func)(struct PlayState* play, Room* room, u32 flags); typedef struct { /* 0x000 */ u8 controllers; // bit 0 is set if controller 1 is plugged in, etc. @@ -917,11 +753,11 @@ typedef enum { STACK_STATUS_OVERFLOW = 2 } StackStatus; -struct FireObjLight { +typedef struct FireObjLight { /* 0x00 */ LightNode* light; /* 0x04 */ LightInfo lightInfo; /* 0x12 */ u8 lightParamsIndex; -}; // size = 0x14 +} FireObjLight; // size = 0x14 #define OS_SC_RETRACE_MSG 1 #define OS_SC_DONE_MSG 2 @@ -960,7 +796,7 @@ typedef struct { /* 0x5E */ u16 age; } EffFootmark; // size = 0x60 -struct FireObj { +typedef struct FireObj { /* 0x00 */ Vec3f position; /* 0x0C */ f32 size; /* 0x10 */ f32 sizeInv; @@ -977,7 +813,7 @@ struct FireObj { /* 0x2A */ s16 ignitionDelay; /* 0x2C */ ColliderCylinder collision; /* 0x78 */ FireObjLight light; -}; // size = 0x8B +} FireObj; // size = 0x8B typedef struct { /* 0x0 */ u8 seqId; @@ -1005,7 +841,7 @@ typedef struct { /* 0x0 */ u16 state; } GameOverContext; // size = 0x2 -struct PlayState { +typedef struct PlayState { /* 0x00000 */ GameState state; /* 0x000A4 */ s16 sceneId; /* 0x000A6 */ u8 sceneConfig; @@ -1047,17 +883,17 @@ struct PlayState { /* 0x18784 */ s32 (*damagePlayer)(struct PlayState* play, s32 damage); /* 0x18788 */ void (*talkWithPlayer)(struct PlayState* play, Actor* actor); /* 0x1878C */ void (*unk_1878C)(struct PlayState* play); - /* 0x18790 */ void (*unk_18790)(struct PlayState* play, s16 arg1, Actor* actor); - /* 0x18794 */ s32 (*unk_18794)(struct PlayState* play, Player* player, s32 itemId, s32 arg3); - /* 0x18798 */ s32 (*setPlayerTalkAnim)(struct PlayState* play, void* talkAnim, s32 arg2); + /* 0x18790 */ void (*unk_18790)(struct PlayState* play, s16 arg1); + /* 0x18794 */ PlayerItemAction (*unk_18794)(struct PlayState* play, Player* player, ItemId itemId); + /* 0x18798 */ s32 (*setPlayerTalkAnim)(struct PlayState* play, LinkAnimationHeader* talkAnim, s32 animMode); /* 0x1879C */ s16 playerActorCsIds[10]; /* 0x187B0 */ MtxF viewProjectionMtxF; - /* 0x187F0 */ Vec3f unk_187F0; + /* 0x187F0 */ Vec3f projectionMtxFDiagonal; /* 0x187FC */ MtxF billboardMtxF; /* 0x1883C */ Mtx* billboardMtx; /* 0x18840 */ u32 gameplayFrames; /* 0x18844 */ u8 unk_18844; - /* 0x18845 */ u8 unk_18845; + /* 0x18845 */ u8 haltAllActors; /* 0x18846 */ s16 numSetupActors; /* 0x18848 */ u8 numRooms; /* 0x1884C */ RomFile* roomList; @@ -1072,7 +908,7 @@ struct PlayState { /* 0x18870 */ void* specialEffects; /* 0x18874 */ u8 skyboxId; /* 0x18875 */ s8 transitionTrigger; // "fade_direction" - /* 0x18876 */ s16 unk_18876; + /* 0x18876 */ s16 worldCoverAlpha; /* 0x18878 */ s16 bgCoverAlpha; /* 0x1887A */ u16 nextEntrance; /* 0x1887C */ s8 unk_1887C; // shootingGalleryStatus? @@ -1086,12 +922,57 @@ struct PlayState { /* 0x18B49 */ u8 unk_18B49; /* 0x18B4A */ u8 transitionMode; /* 0x18B4C */ PreRender pauseBgPreRender; - /* 0x18B9C */ char unk_18B9C[0x2B8]; + /* 0x18B9C */ char unk_18B9C[0x54]; + /* 0x18BF0 */ TransitionContext transitionCtx; + /* 0x18E48 */ TransitionFade unk_18E48; /* 0x18E54 */ SceneTableEntry* loadedScene; - /* 0x18E58 */ char unk_18E58[0x10]; + /* 0x18E58 */ void* unk_18E58; + /* 0x18E5C */ TexturePtr pictoPhotoI8; + /* 0x18E60 */ void* unk_18E60; + /* 0x18E64 */ void* unk_18E64; /* 0x18E68 */ void* unk_18E68; /* 0x18E6C */ char unk_18E6C[0x3EC]; -}; // size = 0x19258 +} PlayState; // size = 0x19258 + +typedef struct { + /* 0x00 */ u8 unk_00; + /* 0x01 */ char unk_01[0x3F]; + /* 0x40 */ void* unk_40; + /* 0x44 */ u32 unk_44; + /* 0x48 */ u32 unk_48; + /* 0x4C */ DmaRequest unk_4C; + /* 0x6C */ OSMesgQueue unk_6C; + /* 0x84 */ OSMesg unk_84[1]; + /* 0x88 */ void* unk_88; + /* 0x8C */ uintptr_t unk_8C; + /* 0x90 */ size_t unk_90; + /* 0x94 */ s32 unk_94; + /* 0x98 */ s32 unk_98; + /* 0x9C */ s32 unk_9C; + /* 0xA0 */ char unk_A0[0x4]; + /* 0xA4 */ s32 unk_A4; + /* 0xA8 */ s32 unk_A8; +} BombersNotebook; // size = 0xAC + +typedef enum { + /* 0 */ PICTO_PHOTO_STATE_OFF, + /* 1 */ PICTO_PHOTO_STATE_SETUP, + /* 2 */ PICTO_PHOTO_STATE_PROCESS, + /* 3 */ PICTO_PHOTO_STATE_READY +} PictoPhotoState; + +// OoT's TransitionUnk +typedef struct { + /* 0x00 */ char unk_00[0xDC]; +} FbDemoStruct; // size = 0xDC + +typedef struct { + /* 0x00 */ u8 mode; + /* 0x04 */ f32 scale; + /* 0x08 */ f32 lodProportion; // expected to be between 0.0f and 1.0f + /* 0x0C */ Color_RGBA8_u32 primColor; + /* 0x10 */ Color_RGBA8_u32 envColor; +} Struct_80140E80; // size = 0x14 typedef struct { /* 0x00 */ s32 unk0; diff --git a/include/z64actor.h b/include/z64actor.h index 9a6515ae8..370b49e75 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -19,6 +19,7 @@ struct Lights; struct CollisionPoly; struct EnBox; +struct EnTorch2; typedef void(*ActorFunc)(struct Actor* this, struct PlayState* play); @@ -208,7 +209,7 @@ typedef enum { * 0x040 : Has touched water (actor is responsible for unsetting this the frame it touches the water) * 0x080 : Similar to & 0x1 but with no velocity check and is cleared every frame * 0x100 : Crushed between a floor and ceiling (triggers a void for player) - * 0x200 : Unknown (only set/used by player so far) + * 0x200 : Only set/used by player, related to interacting with walls */ typedef struct { @@ -224,7 +225,7 @@ typedef struct { } DynaPolyActor; // size = 0x15C -typedef enum { +typedef enum Item00Type { /* 0x00 */ ITEM00_RUPEE_GREEN, /* 0x01 */ ITEM00_RUPEE_BLUE, /* 0x02 */ ITEM00_RUPEE_RED, @@ -288,8 +289,17 @@ typedef struct EnAObj { /* 0x000 */ Actor actor; /* 0x144 */ EnAObjActionFunc actionFunc; /* 0x148 */ ColliderCylinder collision; - /* 0x194 */ UNK_TYPE1 pad194[0x14]; -} EnAObj; // size = 0x1A8 +} EnAObj; // size = 0x194 + +typedef enum { + /* 0 */ AOBJ_SIGNPOST_OBLONG, + /* 1 */ AOBJ_SIGNPOST_ARROW, +} AObjType; + +#define AOBJ_GET_TEXTID(thisx) ((((thisx)->params >> 8) & 0xFF) | 0x300) +#define AOBJ_GET_TYPE(thisx) (((thisx)->params & 0xFF) - 9) + +#define AOBJ_PARAMS(textId, type) ((((textId - 0x300) & 0xFF) << 8) | (type + 9)) typedef enum { /* 0x00 */ ACTORCAT_SWITCH, @@ -309,7 +319,7 @@ typedef enum { #define ACTORCTX_FLAG_0 (1 << 0) #define ACTORCTX_FLAG_1 (1 << 1) -#define ACTORCTX_FLAG_2 (1 << 2) +#define ACTORCTX_FLAG_PICTO_BOX_ON (1 << 2) #define ACTORCTX_FLAG_3 (1 << 3) #define ACTORCTX_FLAG_4 (1 << 4) #define ACTORCTX_FLAG_5 (1 << 5) @@ -404,7 +414,7 @@ typedef struct ActorContext { /* 0x20C */ ActorContext_unk_20C unk_20C[8]; /* 0x24C */ UNK_TYPE1 unk_24C[0x4]; /* 0x250 */ void* absoluteSpace; // Space used to allocate actor overlays of alloc type ALLOCTYPE_ABSOLUTE - /* 0x254 */ u32 unk254[5]; + /* 0x254 */ struct EnTorch2* elegyShells[5]; // PLAYER_FORM_MAX /* 0x268 */ u8 unk268; /* 0x269 */ UNK_TYPE1 pad269[0x3]; /* 0x26C */ Input unk_26C; diff --git a/include/z64animation.h b/include/z64animation.h index b697dbfdf..272a4fb84 100644 --- a/include/z64animation.h +++ b/include/z64animation.h @@ -9,23 +9,26 @@ struct PlayState; struct Actor; struct SkelAnime; +struct PlayerAnimationFrame; #define LINK_ANIMETION_OFFSET(addr, offset) \ - (SEGMENT_ROM_START(link_animetion) + ((u32)addr & 0xFFFFFF) + ((u32)offset)) + (SEGMENT_ROM_START(link_animetion) + ((uintptr_t)addr & 0xFFFFFF) + ((u32)offset)) #define LIMB_DONE 0xFF #define ANIMATION_ENTRY_MAX 50 +#define ANIM_FLAG_1 (1 << 0) #define ANIM_FLAG_UPDATEY (1 << 1) +#define ANIM_FLAG_4 (1 << 2) #define ANIM_FLAG_NOMOVE (1 << 4) -typedef enum { +typedef enum AnimationMode { /* 0 */ ANIMMODE_LOOP, /* 1 */ ANIMMODE_LOOP_INTERP, /* 2 */ ANIMMODE_ONCE, /* 3 */ ANIMMODE_ONCE_INTERP, /* 4 */ ANIMMODE_LOOP_PARTIAL, /* 5 */ ANIMMODE_LOOP_PARTIAL_INTERP -} AnimationModes; +} AnimationMode; typedef enum { /* -1 */ ANIMTAPER_DECEL = -1, @@ -168,7 +171,10 @@ typedef struct AnimationContext { typedef struct { /* 0x0 */ AnimationHeaderCommon common; - /* 0x4 */ u32 segment; + /* 0x4 */ union { + void* segmentVoid; + struct PlayerAnimationFrame* segment; + }; } LinkAnimationHeader; // size = 0x8 typedef struct SkelAnime { diff --git a/include/z64audio.h b/include/z64audio.h index 17f0e84f9..bfb66a23a 100644 --- a/include/z64audio.h +++ b/include/z64audio.h @@ -1,7 +1,7 @@ #ifndef Z64_AUDIO_H #define Z64_AUDIO_H -#define AUDIO_MK_CMD(b0,b1,b2,b3) ((((b0) & 0xFF) << 0x18) | (((b1) & 0xFF) << 0x10) | (((b2) & 0xFF) << 0x8) | (((b3) & 0xFF) << 0)) +#include "audiothread_cmd.h" #define NO_LAYER ((SequenceLayer*)(-1)) @@ -11,16 +11,25 @@ #define SEQ_NUM_CHANNELS 16 #define SEQ_IO_VAL_NONE -1 +typedef enum { + /* 0x00 */ AUDIO_CUSTOM_FUNCTION_SEQ_0, + /* 0x01 */ AUDIO_CUSTOM_FUNCTION_SEQ_1, + /* 0x02 */ AUDIO_CUSTOM_FUNCTION_SEQ_2, + /* 0x03 */ AUDIO_CUSTOM_FUNCTION_SEQ_3, + /* 0xFE */ AUDIO_CUSTOM_FUNCTION_SYNTH = 0xFE, + /* 0xFF */ AUDIO_CUSTOM_FUNCTION_REVERB +} AudioCustomFunctions; + typedef enum { /* 0 */ SEQPLAYER_STATE_0, - /* 1 */ SEQPLAYER_STATE_1, // Fading in - /* 2 */ SEQPLAYER_STATE_2 // Fading out + /* 1 */ SEQPLAYER_STATE_FADE_IN, + /* 2 */ SEQPLAYER_STATE_FADE_OUT } SeqPlayerState; #define MAX_CHANNELS_PER_BANK 3 -#define MUTE_FLAGS_3 (1 << 3) // prevent further noteSubEus from playing -#define MUTE_FLAGS_4 (1 << 4) // stop something in seqLayer scripts +#define MUTE_FLAGS_STOP_SAMPLES (1 << 3) // prevent further noteSubEus from playing +#define MUTE_FLAGS_STOP_LAYER (1 << 4) // stop something in seqLayer scripts #define MUTE_FLAGS_SOFTEN (1 << 5) // lower volume, by default to half #define MUTE_FLAGS_STOP_NOTES (1 << 6) // prevent further notes from playing #define MUTE_FLAGS_STOP_SCRIPT (1 << 7) // stop processing sequence/channel scripts @@ -58,6 +67,10 @@ typedef enum { #define REVERB_INDEX_NONE -1 +// To be used with AudioThread_CountAndReleaseNotes() +#define AUDIO_NOTE_RELEASE (1 << 0) +#define AUDIO_NOTE_SAMPLE_NOTES (1 << 1) + typedef enum { /* 0 */ REVERB_DATA_TYPE_SETTINGS, // Reverb Settings (Init) /* 1 */ REVERB_DATA_TYPE_DELAY, // Reverb Delay (numSamples) @@ -353,11 +366,11 @@ typedef struct { /* 0x007 */ s8 playerIndex; /* 0x008 */ u16 tempo; // tatums per minute /* 0x00A */ u16 tempoAcc; - /* 0x00C */ s16 unk_0C; + /* 0x00C */ s16 tempoChange; /* 0x00E */ s16 transposition; /* 0x010 */ u16 delay; /* 0x012 */ u16 fadeTimer; - /* 0x014 */ u16 fadeTimerUnkEu; + /* 0x014 */ u16 storedFadeTimer; /* 0x016 */ u16 unk_16; /* 0x018 */ u8* seqData; /* 0x01C */ f32 fadeVolume; @@ -374,8 +387,8 @@ typedef struct { /* 0x09C */ NotePool notePool; /* 0x0DC */ s32 skipTicks; /* 0x0E0 */ u32 scriptCounter; - /* 0x0E4 */ char unk_E4[0x74]; // unused struct members for sequence/sound font dma management, according to sm64 decomp - /* 0x158 */ s8 soundScriptIO[8]; + /* 0x0E4 */ UNK_TYPE1 unk_E4[0x74]; // unused struct members for sequence/sound font dma management, according to sm64 decomp + /* 0x158 */ s8 seqScriptIO[8]; } SequencePlayer; // size = 0x160 typedef struct { @@ -387,7 +400,7 @@ typedef struct { typedef struct { union { struct { - /* 0x00 */ u8 unk_0b80 : 1; + /* 0x00 */ u8 unused : 1; /* 0x00 */ u8 hang : 1; /* 0x00 */ u8 decay : 1; /* 0x00 */ u8 release : 1; @@ -402,7 +415,7 @@ typedef struct { /* 0x0C */ f32 fadeOutVel; /* 0x10 */ f32 current; /* 0x14 */ f32 target; - /* 0x18 */ char unk_18[4]; + /* 0x18 */ UNK_TYPE1 unk_18[4]; /* 0x1C */ EnvelopePoint* envelope; } AdsrState; // size = 0x20 @@ -434,11 +447,11 @@ typedef struct { typedef struct VibratoSubStruct { /* 0x0 */ u16 vibratoRateStart; - /* 0x2 */ u16 vibratoExtentStart; + /* 0x2 */ u16 vibratoDepthStart; /* 0x4 */ u16 vibratoRateTarget; - /* 0x6 */ u16 vibratoExtentTarget; + /* 0x6 */ u16 vibratoDepthTarget; /* 0x8 */ u16 vibratoRateChangeDelay; - /* 0xA */ u16 vibratoExtentChangeDelay; + /* 0xA */ u16 vibratoDepthChangeDelay; /* 0xC */ u16 vibratoDelay; } VibratoSubStruct; // size = 0xE @@ -447,7 +460,7 @@ typedef struct SequenceChannel { /* 0x00 */ u8 enabled : 1; /* 0x00 */ u8 finished : 1; /* 0x00 */ u8 stopScript : 1; - /* 0x00 */ u8 stopSomething2 : 1; // sets SequenceLayer.stopSomething + /* 0x00 */ u8 muted : 1; // sets SequenceLayer.muted /* 0x00 */ u8 hasInstrument : 1; /* 0x00 */ u8 stereoHeadsetEffects : 1; /* 0x00 */ u8 largeNotes : 1; // notes specify duration and velocity @@ -475,7 +488,7 @@ typedef struct SequenceChannel { /* 0x0E */ u8 gateTimeRandomVariance; /* 0x0F */ u8 combFilterSize; /* 0x10 */ u8 surroundEffectIndex; - /* 0x11 */ u8 unk_11; + /* 0x11 */ u8 channelIndex; /* 0x12 */ VibratoSubStruct vibrato; /* 0x20 */ u16 delay; /* 0x22 */ u16 combFilterGain; @@ -497,7 +510,7 @@ typedef struct SequenceChannel { /* 0x64 */ SeqScriptState scriptState; /* 0x80 */ AdsrSettings adsr; /* 0x88 */ NotePool notePool; - /* 0xC8 */ s8 soundScriptIO[8]; // bridge between sound script and audio lib, "io ports" + /* 0xC8 */ s8 seqScriptIO[8]; // bridge between sound script and audio lib, "io ports" /* 0xD0 */ u8* sfxState; // SfxChannelState /* 0xD4 */ s16* filter; /* 0xD8 */ StereoData stereoData; @@ -509,7 +522,7 @@ typedef struct SequenceChannel { typedef struct SequenceLayer { /* 0x00 */ u8 enabled : 1; /* 0x00 */ u8 finished : 1; - /* 0x00 */ u8 stopSomething : 1; + /* 0x00 */ u8 muted : 1; /* 0x00 */ u8 continuousNotes : 1; // keep the same note for consecutive notes with the same sound /* 0x00 */ u8 bit3 : 1; // "loaded"? /* 0x00 */ u8 ignoreDrumPan : 1; @@ -605,11 +618,11 @@ typedef struct { /* 0x00 */ struct VibratoSubStruct* vibSubStruct; // Something else? /* 0x04 */ u32 time; /* 0x08 */ s16* curve; - /* 0x0C */ f32 extent; + /* 0x0C */ f32 depth; /* 0x10 */ f32 rate; /* 0x14 */ u8 active; /* 0x16 */ u16 rateChangeTimer; - /* 0x18 */ u16 extentChangeTimer; + /* 0x18 */ u16 depthChangeTimer; /* 0x1A */ u16 delay; } VibratoState; // size = 0x1C @@ -984,7 +997,7 @@ typedef struct { /* 0x28B0 */ s32 sampleDmaBufSize; /* 0x28B4 */ s32 maxAudioCmds; /* 0x28B8 */ s32 numNotes; - /* 0x2898 */ s16 tempoInternalToExternal; + /* 0x2898 */ s16 maxTempo; /* 0x28BE */ s8 soundMode; /* 0x28C0 */ s32 totalTaskCount; // The total number of times the top-level function on the audio thread is run since the last audio reset /* 0x28C4 */ s32 curAudioFrameDmaCount; @@ -997,13 +1010,13 @@ typedef struct { /* 0x2980 */ f32 unk_2960; /* 0x2984*/ s32 refreshRate; /* 0x2988 */ s16* aiBuffers[3]; // Pointers to the audio buffer allocated on the initPool contained in the audio heap. Stores fully processed digital audio before transferring to the audio interface (AI) - /* 0x2994 */ s16 aiBufNumSamples[3]; // Number of samples to transfer to the audio interface buffer + /* 0x2994 */ s16 numSamplesPerFrame[3]; // Number of samples to transfer to the audio interface buffer /* 0x299C */ u32 audioRandom; /* 0x29A0 */ s32 audioErrorFlags; /* 0x29A4 */ volatile u32 resetTimer; - /* 0x29A8 */ u32 (*unk_29A8[4])(s8 value, SequenceChannel* channel); + /* 0x29A8 */ u32 (*customSeqFunctions[4])(s8 value, SequenceChannel* channel); /* 0x29B8 */ s8 unk_29B8; - /* 0x29BC */ s32 unk_29BC; // sMaxAbiCmdCnt + /* 0x29BC */ s32 numAbiCmdsMax; // sMaxAbiCmdCnt /* 0x29C0 */ AudioAllocPool sessionPool; // A sub-pool to main pool, contains all sub-pools and data that changes every audio reset /* 0x29D0 */ AudioAllocPool externalPool; // pool allocated on an external device. Never used in game /* 0x29E0 */ AudioAllocPool initPool; // A sub-pool to the main pool, contains all sub-pools and data that persists every audio reset @@ -1027,7 +1040,7 @@ typedef struct { /* 0x4398 */ u8 fontLoadStatus[0x30]; /* 0x43C8 */ u8 seqLoadStatus[0x80]; /* 0x4448 */ volatile u8 resetStatus; - /* 0x4449 */ u8 audioResetSpecIdToLoad; + /* 0x4449 */ u8 specId; /* 0x444C */ s32 audioResetFadeOutFramesLeft; /* 0x4450 */ f32* adsrDecayTable; // A table on the audio heap that stores decay rates used for ADSR /* 0x4454 */ u8* audioHeap; @@ -1039,21 +1052,21 @@ typedef struct { /* 0x7924 */ s32 sampleStateOffset; // Start of the list of sample states for this update. Resets after each audio frame. /* 0x7928 */ AudioListItem layerFreeList; /* 0x7938 */ NotePool noteFreeLists; - /* 0x7978 */ u8 cmdWritePos; - /* 0x7979 */ u8 cmdReadPos; - /* 0x797A */ u8 cmdQueueFinished; - /* 0x797C */ u16 activeChannelsFlags[5]; // bit-packed for 16 channels. Only channels with bit turned on will be processed + /* 0x7978 */ u8 threadCmdWritePos; + /* 0x7979 */ u8 threadCmdReadPos; + /* 0x797A */ u8 threadCmdQueueFinished; + /* 0x797C */ u16 threadCmdChannelMask[5]; // bit-packed for 16 channels. When processing an audio thread channel command on all channels, only process channels with their bit set. /* 0x7988 */ OSMesgQueue* audioResetQueueP; /* 0x798C */ OSMesgQueue* taskStartQueueP; - /* 0x7990 */ OSMesgQueue* cmdProcQueueP; + /* 0x7990 */ OSMesgQueue* threadCmdProcQueueP; /* 0x7994 */ OSMesgQueue taskStartQueue; - /* 0x79AC */ OSMesgQueue cmdProcQueue; + /* 0x79AC */ OSMesgQueue threadCmdProcQueue; /* 0x79C4 */ OSMesgQueue audioResetQueue; /* 0x79DC */ OSMesg taskStartMsgs[1]; /* 0x79E0 */ OSMesg audioResetMesgs[1]; - /* 0x79E4 */ OSMesg cmdProcMsgs[4]; - /* 0x79F4 */ AudioCmd cmdBuf[0x100]; // Audio commands used to transfer audio requests from the graph thread to the audio thread - /* 0x81F4 */ char unk_81F4[4]; + /* 0x79E4 */ OSMesg threadCmdProcMsgBuf[4]; + /* 0x79F4 */ AudioCmd threadCmdBuf[0x100]; // Audio commands used to transfer audio requests from the graph thread to the audio thread + /* 0x81F4 */ UNK_TYPE1 unk_81F4[4]; } AudioContext; // size = 0x81F8 typedef struct { @@ -1255,4 +1268,9 @@ typedef struct { /* 0x2 */ u16 params; } SfxParams; // size = 0x4 +typedef void (*AudioCustomUpdateFunction)(void); +typedef u32 (*AudioCustomSeqFunction)(s8 value, SequenceChannel* channel); +typedef s32 (*AudioCustomReverbFunction)(Sample*, s32, s8, s32); +typedef Acmd* (*AudioCustomSynthFunction)(Acmd*, s32, s32); + #endif diff --git a/include/z64collision_check.h b/include/z64collision_check.h index 434b74a3a..836fd3555 100644 --- a/include/z64collision_check.h +++ b/include/z64collision_check.h @@ -283,16 +283,16 @@ typedef enum { } ColChkMassType; typedef enum { - /* 0 */ COLTYPE_HIT0, // Blue blood, white hitmark - /* 1 */ COLTYPE_HIT1, // No blood, dust hitmark - /* 2 */ COLTYPE_HIT2, // Green blood, dust hitmark - /* 3 */ COLTYPE_HIT3, // No blood, white hitmark - /* 4 */ COLTYPE_HIT4, // Water burst, no hitmark - /* 5 */ COLTYPE_HIT5, // No blood, red hitmark - /* 6 */ COLTYPE_HIT6, // Green blood, white hitmark - /* 7 */ COLTYPE_HIT7, // Red blood, white hitmark - /* 8 */ COLTYPE_HIT8, // Blue blood, red hitmark - /* 9 */ COLTYPE_METAL, + /* 0 */ COLTYPE_HIT0, // Blue blood, white hitmark + /* 1 */ COLTYPE_HIT1, // No blood, dust hitmark + /* 2 */ COLTYPE_HIT2, // Green blood, dust hitmark + /* 3 */ COLTYPE_HIT3, // No blood, white hitmark + /* 4 */ COLTYPE_HIT4, // Water burst, no hitmark + /* 5 */ COLTYPE_HIT5, // No blood, red hitmark + /* 6 */ COLTYPE_HIT6, // Green blood, white hitmark + /* 7 */ COLTYPE_HIT7, // Red blood, white hitmark + /* 8 */ COLTYPE_HIT8, // Blue blood, red hitmark + /* 9 */ COLTYPE_METAL, /* 10 */ COLTYPE_NONE, /* 11 */ COLTYPE_WOOD, /* 12 */ COLTYPE_HARD, diff --git a/include/z64interface.h b/include/z64interface.h new file mode 100644 index 000000000..385f80835 --- /dev/null +++ b/include/z64interface.h @@ -0,0 +1,216 @@ +#ifndef Z64INTERFACE_H +#define Z64INTERFACE_H + +#include "ultra64.h" +#include "z64view.h" + +typedef enum { + /* 0 */ A_BTN_STATE_0, + /* 1 */ A_BTN_STATE_1, + /* 2 */ A_BTN_STATE_2, + /* 3 */ A_BTN_STATE_3, + /* 4 */ A_BTN_STATE_4 +} AButtonState; + +typedef enum { + /* 0x00 */ DO_ACTION_ATTACK, + /* 0x01 */ DO_ACTION_CHECK, + /* 0x02 */ DO_ACTION_ENTER, + /* 0x03 */ DO_ACTION_RETURN, + /* 0x04 */ DO_ACTION_OPEN, + /* 0x05 */ DO_ACTION_JUMP, + /* 0x06 */ DO_ACTION_DECIDE, + /* 0x07 */ DO_ACTION_DIVE, + /* 0x08 */ DO_ACTION_FASTER, + /* 0x09 */ DO_ACTION_THROW, + /* 0x0A */ DO_ACTION_NONE, // in do_action_static, the texture at this position is NAVI, however this value is in practice the "No Action" value + /* 0x0B */ DO_ACTION_CLIMB, + /* 0x0C */ DO_ACTION_DROP, + /* 0x0D */ DO_ACTION_DOWN, + /* 0x0E */ DO_ACTION_QUIT, + /* 0x0F */ DO_ACTION_SPEAK, + /* 0x10 */ DO_ACTION_NEXT, + /* 0x11 */ DO_ACTION_GRAB, + /* 0x12 */ DO_ACTION_STOP, + /* 0x13 */ DO_ACTION_PUTAWAY, + /* 0x14 */ DO_ACTION_REEL, + /* 0x15 */ DO_ACTION_INFO, + /* 0x16 */ DO_ACTION_WARP, + /* 0x17 */ DO_ACTION_SNAP, + /* 0x18 */ DO_ACTION_EXPLODE, + /* 0x19 */ DO_ACTION_DANCE, + /* 0x1A */ DO_ACTION_MARCH, + /* 0x1B */ DO_ACTION_1, + /* 0x1C */ DO_ACTION_2, + /* 0x1D */ DO_ACTION_3, + /* 0x1E */ DO_ACTION_4, + /* 0x1F */ DO_ACTION_5, + /* 0x20 */ DO_ACTION_6, + /* 0x21 */ DO_ACTION_7, + /* 0x22 */ DO_ACTION_8, + /* 0x23 */ DO_ACTION_CURL, + /* 0x24 */ DO_ACTION_SURFACE, + /* 0x25 */ DO_ACTION_SWIM, + /* 0x26 */ DO_ACTION_PUNCH, + /* 0x27 */ DO_ACTION_POUND, + /* 0x28 */ DO_ACTION_HOOK, + /* 0x29 */ DO_ACTION_SHOOT, + /* 0x2A */ DO_ACTION_MAX +} DoAction; + +typedef enum { + /* 0 */ MINIGAME_STATE_NONE, + /* 1 */ MINIGAME_STATE_COUNTDOWN_SETUP_3, + /* 2 */ MINIGAME_STATE_COUNTDOWN_3, + /* 3 */ MINIGAME_STATE_COUNTDOWN_SETUP_2, + /* 4 */ MINIGAME_STATE_COUNTDOWN_2, + /* 5 */ MINIGAME_STATE_COUNTDOWN_SETUP_1, + /* 6 */ MINIGAME_STATE_COUNTDOWN_1, + /* 7 */ MINIGAME_STATE_COUNTDOWN_SETUP_GO, + /* 8 */ MINIGAME_STATE_COUNTDOWN_GO, + /* 20 */ MINIGAME_STATE_NO_COUNTDOWN_SETUP = 20, + /* 21 */ MINIGAME_STATE_NO_COUNTDOWN, + /* 30 */ MINIGAME_STATE_PLAYING = 30 +} MinigameState; + +typedef enum { + /* 0 */ PERFECT_LETTERS_TYPE_OFF, + /* 1 */ PERFECT_LETTERS_TYPE_1, + /* 2 */ PERFECT_LETTERS_TYPE_2, + /* 3 */ PERFECT_LETTERS_TYPE_3 +} PerfectLettersType; + +typedef enum { + /* 0 */ PERFECT_LETTERS_STATE_OFF, + /* 1 */ PERFECT_LETTERS_STATE_INIT, + /* 2 */ PERFECT_LETTERS_STATE_ENTER, + /* 3 */ PERFECT_LETTERS_STATE_STATIONARY, // Display for type 1 + /* 4 */ PERFECT_LETTERS_STATE_SPREAD, // Exit for type 1 + /* 5 */ PERFECT_LETTERS_STATE_DISPLAY, + /* 6 */ PERFECT_LETTERS_STATE_EXIT +} PerfectLettersState; + +#define PERFECT_LETTERS_NUM_LETTERS 8 +#define PERFECT_LETTERS_ANGLE_PER_LETTER (0x10000 / PERFECT_LETTERS_NUM_LETTERS) + +typedef enum { + /* 0 */ STORY_DMA_IDLE, + /* 1 */ STORY_DMA_LOADING, + /* 2 */ STORY_DMA_DONE +} StoryLoadStatus; + +typedef enum { + /* 0 */ STORY_STATE_OFF, + /* 1 */ STORY_STATE_INIT, + /* 2 */ STORY_STATE_IDLE, + /* 3 */ STORY_STATE_DESTROY, + /* 4 */ STORY_STATE_SETUP_IDLE, + /* 5 */ STORY_STATE_FADE_OUT, + /* 6 */ STORY_STATE_FADE_IN +} StoryState; + +typedef enum { + /* 0 */ STORY_TYPE_MASK_FESTIVAL, + /* 1 */ STORY_TYPE_GIANTS_LEAVING +} StoryType; + +typedef struct { + /* 0x000 */ View view; + /* 0x168 */ Vtx* actionVtx; + /* 0x16C */ Vtx* beatingHeartVtx; + /* 0x170 */ u8* parameterSegment; + /* 0x174 */ u8* doActionSegment; + /* 0x178 */ u8* iconItemSegment; + /* 0x17C */ u8* mapSegment; + /* 0x180 */ u8* unk_180; // unused segment? + /* 0x184 */ DmaRequest dmaRequest; + /* 0x1A4 */ UNK_TYPE1 unk_1A4[0x40]; // likely 2 DmaRequest + /* 0x1E4 */ OSMesgQueue loadQueue; + /* 0x1FC */ OSMesg loadMsg; + /* 0x200 */ Viewport viewport; + /* 0x210 */ s16 aButtonState; + /* 0x212 */ u16 unk_212; + /* 0x214 */ u16 aButtonDoAction; + /* 0x218 */ f32 aButtonRoll; + /* 0x21C */ s16 unk_21C; + /* 0x21E */ s16 bButtonDoAction; + /* 0x220 */ s16 unk_220; + /* 0x222 */ s16 unk_222; + /* 0x224 */ s16 unk_224; + /* 0x226 */ s16 lifeColorChange; + /* 0x228 */ s16 lifeColorChangeDirection; + /* 0x22A */ s16 beatingHeartPrim[3]; + /* 0x230 */ s16 beatingHeartEnv[3]; + /* 0x236 */ s16 heartsPrimR[2]; + /* 0x23A */ s16 heartsPrimG[2]; + /* 0x23E */ s16 heartsPrimB[2]; + /* 0x242 */ s16 heartsEnvR[2]; + /* 0x246 */ s16 heartsEnvG[2]; + /* 0x24A */ s16 heartsEnvB[2]; + /* 0x24E */ s16 health; + /* 0x250 */ s16 healthTimer; + /* 0x252 */ s16 lifeSizeChange; + /* 0x254 */ s16 lifeSizeChangeDirection; // 1 means shrinking, 0 growing + /* 0x256 */ s16 unk_256; + /* 0x258 */ s16 magicConsumptionTimer; // For certain magic states, 1 unit of magic is consumed every time the timer reaches 0 + /* 0x25A */ u8 numHorseBoosts; + /* 0x25C */ u16 minigamePoints; // Points to add to the minigame score. Reset to 0 every frame. + /* 0x25E */ u16 minigameHiddenPoints; // Points to add to the secondary set of minigame points not displayed. Reset to 0 every frame. + /* 0x260 */ u16 minigameAmmo; + /* 0x262 */ u16 minigameUnusedPoints; // Associated with other minigame points, unused + /* 0x264 */ s16 screenFillAlpha; + /* 0x266 */ s16 aAlpha; + /* 0x268 */ s16 bAlpha; + /* 0x26A */ s16 cLeftAlpha; + /* 0x26C */ s16 cDownAlpha; + /* 0x26E */ s16 cRightAlpha; + /* 0x270 */ s16 healthAlpha; + /* 0x272 */ s16 magicAlpha; + /* 0x274 */ s16 minimapAlpha; + /* 0x276 */ s16 startAlpha; + /* 0x278 */ s16 unk_278; + /* 0x27A */ s16 dungeonOrBossAreaMapIndex; + /* 0x27C */ s16 mapRoomNum; + /* 0x27E */ u8 unk_27E; + /* 0x27F */ u8 unk_27F; + /* 0x280 */ u8 minigameState; + /* 0x282 */ s16 minigameCountdownAlpha; + /* 0x284 */ s16 minigameCountdownScale; + /* 0x286 */ s16 perfectLettersOn; + /* 0x288 */ s16 perfectLettersType; + /* 0x28A */ s16 perfectLettersState[PERFECT_LETTERS_NUM_LETTERS]; + /* 0x29A */ u16 perfectLettersAngles[PERFECT_LETTERS_NUM_LETTERS]; // Angle that follows the projectory of an ellipse + /* 0x2AA */ s16 perfectLettersOffsetX[PERFECT_LETTERS_NUM_LETTERS]; + /* 0x2BC */ f32 perfectLettersSemiAxisX[PERFECT_LETTERS_NUM_LETTERS]; + /* 0x2DC */ f32 perfectLettersSemiAxisY[PERFECT_LETTERS_NUM_LETTERS]; + /* 0x2FC */ s16 perfectLettersPrimColor[4]; + /* 0x304 */ s16 perfectLettersCount; + /* 0x306 */ s16 perfectLettersUnused; + /* 0x308 */ s16 perfectLettersColorIndex; + /* 0x30A */ s16 perfectLettersColorTimer; + /* 0x30C */ s16 perfectLettersTimer; + struct { + /* 0x30E */ u8 hGauge; + /* 0x30F */ u8 bButton; + /* 0x310 */ u8 aButton; + /* 0x311 */ u8 tradeItems; // Includes deed trade quest, anju/kafei trade quest, bottles, and ocarina + /* 0x312 */ u8 songOfTime; + /* 0x313 */ u8 songOfDoubleTime; + /* 0x314 */ u8 invSongOfTime; + /* 0x315 */ u8 songOfSoaring; + /* 0x316 */ u8 songOfStorms; + /* 0x317 */ u8 masks; + /* 0x318 */ u8 pictoBox; + /* 0x319 */ u8 all; // "another"; enables all item restrictions + } restrictions; // size = 0xC + /* 0x31A */ u8 storyState; + /* 0x31B */ u8 storyType; + /* 0x31C */ u8 storyDmaStatus; + /* 0x320 */ OSMesgQueue storyMsgQueue; + /* 0x338 */ OSMesg storyMsgBuf; + /* 0x33C */ u8* storySegment; + /* 0x340 */ uintptr_t storyAddr; + /* 0x344 */ size_t storySize; +} InterfaceContext; // size = 0x348 + +#endif diff --git a/include/z64item.h b/include/z64item.h index 2f17c67c7..d1d36ebba 100644 --- a/include/z64item.h +++ b/include/z64item.h @@ -1,5 +1,5 @@ -#ifndef _Z64ITEM_H_ -#define _Z64ITEM_H_ +#ifndef Z64ITEM_H +#define Z64ITEM_H #define DROP_TABLE_SIZE 16 #define DROP_TABLE_NUMBER 17 @@ -9,7 +9,8 @@ typedef enum { /* 0 */ EQUIP_TYPE_SWORD, /* 1 */ EQUIP_TYPE_SHIELD, - /* 2 */ EQUIP_TYPE_MAX + /* 2 */ EQUIP_TYPE_TUNIC, // Remnant of OoT + /* 3 */ EQUIP_TYPE_MAX } EquipmentType; typedef enum { @@ -28,6 +29,14 @@ typedef enum { /* 3 */ EQUIP_VALUE_SHIELD_MAX } EquipValueShield; +typedef enum { + /* 0 */ EQUIP_VALUE_TUNIC_NONE, + /* 1 */ EQUIP_VALUE_TUNIC_KOKIRI, + /* 2 */ EQUIP_VALUE_TUNIC_GORON, + /* 3 */ EQUIP_VALUE_TUNIC_ZORA, + /* 4 */ EQUIP_VALUE_TUNIC_MAX +} EquipValueTunic; // Remnant of OoT + typedef enum { /* 0 */ UPG_QUIVER, /* 1 */ UPG_BOMB_BAG, @@ -134,7 +143,7 @@ typedef enum { /* 0xFF */ SLOT_NONE = 0xFF } InventorySlot; -typedef enum { +typedef enum ItemId { /* 0x00 */ ITEM_OCARINA, /* 0x01 */ ITEM_BOW, /* 0x02 */ ITEM_ARROW_FIRE, @@ -248,7 +257,9 @@ typedef enum { /* 0x6E */ ITEM_SKULL_TOKEN, /* 0x6F */ ITEM_HEART_CONTAINER, /* 0x70 */ ITEM_HEART_PIECE, - /* 0x73 */ ITEM_SONG_LULLABY_INTRO = 0x73, + /* 0x71 */ ITEM_71, + /* 0x72 */ ITEM_72, + /* 0x73 */ ITEM_SONG_LULLABY_INTRO, /* 0x74 */ ITEM_KEY_BOSS, /* 0x75 */ ITEM_COMPASS, /* 0x76 */ ITEM_DUNGEON_MAP, @@ -297,17 +308,19 @@ typedef enum { /* 0xA1 */ ITEM_GOLD_DUST_2, /* 0xA2 */ ITEM_HYLIAN_LOACH_2, /* 0xA3 */ ITEM_SEAHORSE_CAUGHT, - /* 0xF0 */ ITEM_F0 = 0xF0, - /* 0xF1 */ ITEM_F1, - /* 0xF2 */ ITEM_F2, - /* 0xFD */ ITEM_FD = 0xFD, + /* 0xF0 */ ITEM_F0 = 0xF0, // PLAYER_MASK_BLAST + /* 0xF1 */ ITEM_F1, // PLAYER_MASK_BREMEN + /* 0xF2 */ ITEM_F2, // PLAYER_MASK_KAMARO + /* 0xFC */ ITEM_FC = 0xFC, + /* 0xFD */ ITEM_FD, + /* 0xFE */ ITEM_FE, /* 0xFF */ ITEM_NONE = 0xFF } ItemId; #define BOTTLE_FIRST 0 #define BOTTLE_MAX 6 -typedef enum { +typedef enum GetItemId { /* 0x00 */ GI_NONE, /* 0x01 */ GI_RUPEE_GREEN, /* 0x02 */ GI_RUPEE_BLUE, @@ -362,7 +375,8 @@ typedef enum { /* 0x3D */ GI_KEY_BOSS, /* 0x3E */ GI_MAP, /* 0x3F */ GI_COMPASS, - /* 0x41 */ GI_HOOKSHOT = 0x41, + /* 0x40 */ GI_40, + /* 0x41 */ GI_HOOKSHOT, /* 0x42 */ GI_LENS, /* 0x43 */ GI_PICTO_BOX, /* 0x4C */ GI_OCARINA = 0x4C, @@ -391,9 +405,13 @@ typedef enum { /* 0x69 */ GI_ZORA_EGG, /* 0x6A */ GI_GOLD_DUST, /* 0x6B */ GI_MUSHROOM, - /* 0x6E */ GI_SEAHORSE = 0x6E, + /* 0x6C */ GI_6C, + /* 0x6D */ GI_6D, + /* 0x6E */ GI_SEAHORSE, /* 0x6F */ GI_CHATEAU_BOTTLE, - /* 0x76 */ GI_ICE_TRAP = 0x76, + /* 0x70 */ GI_HYLIAN_LOACH, + /* 0x75 */ GI_75 = 0x75, + /* 0x76 */ GI_ICE_TRAP, /* 0x78 */ GI_MASK_DEKU = 0x78, /* 0x79 */ GI_MASK_GORON, /* 0x7A */ GI_MASK_ZORA, @@ -421,7 +439,7 @@ typedef enum { /* 0x91 */ GI_CHATEAU = 0x91, /* 0x92 */ GI_MILK, /* 0x93 */ GI_GOLD_DUST_2, - /* 0x94 */ GI_HYLIAN_LOACH, // Unused bottled eel + /* 0x94 */ GI_HYLIAN_LOACH_2, // Unused bottled eel /* 0x95 */ GI_SEAHORSE_CAUGHT, /* 0x96 */ GI_MOON_TEAR, /* 0x97 */ GI_DEED_LAND, @@ -435,7 +453,14 @@ typedef enum { /* 0x9F */ GI_SHIELD_HERO_STOLEN, // Code that treats this as hero's shield is unused, implied as intended to be stolen /* 0xA0 */ GI_ROOM_KEY, /* 0xA1 */ GI_LETTER_TO_MAMA, - /* 0xA9 */ GI_BOTTLE_STOLEN = 0xA9, // buy back stolen bottle + /* 0xA2 */ GI_A2, + /* 0xA3 */ GI_A3, + /* 0xA4 */ GI_A4, + /* 0xA5 */ GI_A5, + /* 0xA6 */ GI_A6, + /* 0xA7 */ GI_A7, + /* 0xA8 */ GI_A8, + /* 0xA9 */ GI_BOTTLE_STOLEN, // buy back stolen bottle /* 0xAA */ GI_LETTER_TO_KAFEI, /* 0xAB */ GI_PENDANT_OF_MEMORIES, /* 0xB4 */ GI_TINGLE_MAP_CLOCK_TOWN = 0xB4, @@ -447,7 +472,8 @@ typedef enum { /* 0xBA */ GI_MAX } GetItemId; -typedef enum { +typedef enum GetItemDrawId { + /* -1 */ GID_NONE = -1, /* 0x00 */ GID_BOTTLE, /* 0x01 */ GID_KEY_SMALL, /* 0x02 */ GID_MASK_KAMARO, diff --git a/include/z64light.h b/include/z64light.h index df7c1b4fa..8eaebca61 100644 --- a/include/z64light.h +++ b/include/z64light.h @@ -1,5 +1,5 @@ -#ifndef _Z64LIGHT_H_ -#define _Z64LIGHT_H_ +#ifndef Z64LIGHT_H +#define Z64LIGHT_H #include "ultra64.h" #include "PR/gbi.h" @@ -12,8 +12,8 @@ typedef struct { /* 0x09 */ s8 diffusePos2[3]; /* 0x0C */ u8 diffuseColor[3]; /* 0x0F */ u8 fogColor[3]; - /* 0x12 */ u16 fogNear; - /* 0x14 */ u16 fogFar; + /* 0x12 */ s16 fogNear; + /* 0x14 */ s16 zFar; } LightSettings; // size = 0x16 typedef struct { @@ -22,7 +22,7 @@ typedef struct { /* 0x0C */ s16 diffuseColor2[3]; /* 0x12 */ s16 fogColor[3]; /* 0x18 */ s16 fogNear; - /* 0x1A */ s16 fogFar; + /* 0x1A */ s16 zFar; } EnvLightSettings; // size = 0x1C typedef struct { @@ -74,11 +74,9 @@ typedef struct LightsBuffer { typedef struct LightContext { /* 0x0 */ LightNode* listHead; /* 0x4 */ Color_RGB8 ambient; - /* 0x7 */ u8 unk7; - /* 0x8 */ u8 unk8; - /* 0x9 */ u8 unk9; - /* 0xA */ s16 unkA; - /* 0xC */ s16 unkC; + /* 0x7 */ Color_RGB8 fogColor; + /* 0xA */ s16 fogNear; // how close until fog starts taking effect. range 0 - 996 + /* 0xC */ s16 zFar; // draw distance. range 0 - 12800 } LightContext; // size = 0x10 typedef enum LightType { diff --git a/include/z64math.h b/include/z64math.h index 323042b15..70a115966 100644 --- a/include/z64math.h +++ b/include/z64math.h @@ -117,7 +117,8 @@ typedef struct { #define RADF_TO_BINANG(radf) (s16)((radf) * (0x8000 / M_PI)) #define RADF_TO_DEGF(radf) ((radf) * (180.0f / M_PI)) #define DEGF_TO_RADF(degf) ((degf) * (M_PI / 180.0f)) -#define BINANG_TO_RAD(binang) (((f32)binang / 0x8000) * M_PI) +#define BINANG_TO_RAD(binang) ((f32)binang * (M_PI / 0x8000)) +#define BINANG_TO_RAD_ALT(binang) (((f32)binang / 0x8000) * M_PI) // Angle arithmetic macros #define BINANG_ROT180(angle) ((s16)(angle + 0x8000)) diff --git a/include/z64ocarina.h b/include/z64ocarina.h index 597580388..3bb99cd62 100644 --- a/include/z64ocarina.h +++ b/include/z64ocarina.h @@ -82,7 +82,7 @@ typedef enum { /* 13 */ OCARINA_INSTRUMENT_PIANO, /* 14 */ OCARINA_INSTRUMENT_BASS_GUITAR, /* 15 */ OCARINA_INSTRUMENT_BABY_SINGING, - /* 16 */ OCARINA_INSTRUMENT_AMPLIFIED_GUITAR // Related to (gSaveContext.weekEventReg[41] & 0x20) + /* 16 */ OCARINA_INSTRUMENT_AMPLIFIED_GUITAR // Related to WEEKEVENTREG_41_20 } OcarinaInstrumentId; typedef enum { diff --git a/include/z64player.h b/include/z64player.h index 1d7261aa2..96abf00c8 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -1,19 +1,20 @@ #ifndef Z64PLAYER_H #define Z64PLAYER_H -#include "z64actor.h" +#include "alignment.h" #include "os.h" +#include "z64actor.h" struct Player; -typedef enum { +typedef enum PlayerShield { /* 0 */ PLAYER_SHIELD_NONE, /* 1 */ PLAYER_SHIELD_HEROS_SHIELD, /* 2 */ PLAYER_SHIELD_MIRROR_SHIELD, /* 3 */ PLAYER_SHIELD_MAX } PlayerShield; -typedef enum { +typedef enum PlayerBoots { /* 0 */ PLAYER_BOOTS_FIERCE_DEITY, /* 1 */ PLAYER_BOOTS_HYLIAN, /* 2 */ PLAYER_BOOTS_GIANT, @@ -24,7 +25,7 @@ typedef enum { /* 7 */ PLAYER_BOOTS_MAX } PlayerBoots; -typedef enum { +typedef enum PlayerStrength { /* 0 */ PLAYER_STRENGTH_DEKU, /* 1 */ PLAYER_STRENGTH_HUMAN, /* 2 */ PLAYER_STRENGTH_ZORA, @@ -32,7 +33,7 @@ typedef enum { /* 4 */ PLAYER_STRENGTH_MAX } PlayerStrength; -typedef enum { +typedef enum PlayerTransformation { /* 0 */ PLAYER_FORM_FIERCE_DEITY, /* 1 */ PLAYER_FORM_GORON, /* 2 */ PLAYER_FORM_ZORA, @@ -41,7 +42,7 @@ typedef enum { /* 5 */ PLAYER_FORM_MAX } PlayerTransformation; -typedef enum { +typedef enum PlayerMask { /* 0x00 */ PLAYER_MASK_NONE, /* 0x01 */ PLAYER_MASK_TRUTH, /* 0x02 */ PLAYER_MASK_KAFEIS_MASK, @@ -71,102 +72,102 @@ typedef enum { } PlayerMask; typedef enum { - /* 0 */ PLAYER_ENV_TIMER_NONE, - /* 1 */ PLAYER_ENV_TIMER_HOTROOM, - /* 2 */ PLAYER_ENV_TIMER_UNDERWATER_FLOOR, - /* 3 */ PLAYER_ENV_TIMER_SWIMMING, - /* 4 */ PLAYER_ENV_TIMER_UNDERWATER_FREE -} PlayerEnvTimerType; + /* 0 */ PLAYER_ENV_HAZARD_NONE, + /* 1 */ PLAYER_ENV_HAZARD_HOTROOM, + /* 2 */ PLAYER_ENV_HAZARD_UNDERWATER_FLOOR, + /* 3 */ PLAYER_ENV_HAZARD_SWIMMING, + /* 4 */ PLAYER_ENV_HAZARD_UNDERWATER_FREE +} PlayerEnvHazard; -typedef enum PlayerActionParam { - /* -1 */ PLAYER_AP_MINUS1 = -1, - /* 0x00 */ PLAYER_AP_NONE, - /* 0x01 */ PLAYER_AP_LAST_USED, - /* 0x02 */ PLAYER_AP_FISHING_ROD, - /* 0x03 */ PLAYER_AP_SWORD_KOKIRI, - /* 0x04 */ PLAYER_AP_SWORD_RAZOR, - /* 0x05 */ PLAYER_AP_SWORD_GILDED, - /* 0x06 */ PLAYER_AP_SWORD_GREAT_FAIRY, - /* 0x07 */ PLAYER_AP_STICK, - /* 0x08 */ PLAYER_AP_ZORA_FINS, - /* 0x09 */ PLAYER_AP_BOW, - /* 0x0A */ PLAYER_AP_BOW_FIRE, - /* 0x0B */ PLAYER_AP_BOW_ICE, - /* 0x0C */ PLAYER_AP_BOW_LIGHT, - /* 0x0D */ PLAYER_AP_HOOKSHOT, - /* 0x0E */ PLAYER_AP_BOMB, - /* 0x0F */ PLAYER_AP_POWDER_KEG, - /* 0x10 */ PLAYER_AP_BOMBCHU, - /* 0x11 */ PLAYER_AP_11, - /* 0x12 */ PLAYER_AP_NUT, - /* 0x13 */ PLAYER_AP_PICTO_BOX, - /* 0x14 */ PLAYER_AP_OCARINA, - /* 0x15 */ PLAYER_AP_BOTTLE, - /* 0x16 */ PLAYER_AP_BOTTLE_FISH, - /* 0x17 */ PLAYER_AP_BOTTLE_SPRING_WATER, - /* 0x18 */ PLAYER_AP_BOTTLE_HOT_SPRING_WATER, - /* 0x19 */ PLAYER_AP_BOTTLE_ZORA_EGG, - /* 0x1A */ PLAYER_AP_BOTTLE_DEKU_PRINCESS, - /* 0x1B */ PLAYER_AP_BOTTLE_GOLD_DUST, - /* 0x1C */ PLAYER_AP_BOTTLE_1C, - /* 0x1D */ PLAYER_AP_BOTTLE_SEAHORSE, - /* 0x1E */ PLAYER_AP_BOTTLE_MUSHROOM, - /* 0x1F */ PLAYER_AP_BOTTLE_HYLIAN_LOACH, - /* 0x20 */ PLAYER_AP_BOTTLE_BUG, - /* 0x21 */ PLAYER_AP_BOTTLE_POE, - /* 0x22 */ PLAYER_AP_BOTTLE_BIG_POE, - /* 0x23 */ PLAYER_AP_BOTTLE_POTION_RED, - /* 0x24 */ PLAYER_AP_BOTTLE_POTION_BLUE, - /* 0x25 */ PLAYER_AP_BOTTLE_POTION_GREEN, - /* 0x26 */ PLAYER_AP_BOTTLE_MILK, - /* 0x27 */ PLAYER_AP_BOTTLE_MILK_HALF, - /* 0x28 */ PLAYER_AP_BOTTLE_CHATEAU, - /* 0x29 */ PLAYER_AP_BOTTLE_FAIRY, - /* 0x2A */ PLAYER_AP_MOON_TEAR, - /* 0x2B */ PLAYER_AP_DEED_LAND, - /* 0x2C */ PLAYER_AP_ROOM_KEY, - /* 0x2D */ PLAYER_AP_LETTER_TO_KAFEI, - /* 0x2E */ PLAYER_AP_MAGIC_BEANS, - /* 0x2F */ PLAYER_AP_DEED_SWAMP, - /* 0x30 */ PLAYER_AP_DEED_MOUNTAIN, - /* 0x31 */ PLAYER_AP_DEED_OCEAN, - /* 0x32 */ PLAYER_AP_32, - /* 0x33 */ PLAYER_AP_LETTER_MAMA, - /* 0x34 */ PLAYER_AP_34, - /* 0x35 */ PLAYER_AP_35, - /* 0x36 */ PLAYER_AP_PENDANT_OF_MEMORIES, - /* 0x37 */ PLAYER_AP_37, - /* 0x38 */ PLAYER_AP_38, - /* 0x39 */ PLAYER_AP_39, - /* 0x3A */ PLAYER_AP_MASK_TRUTH, - /* 0x3B */ PLAYER_AP_MASK_KAFEIS_MASK, - /* 0x3C */ PLAYER_AP_MASK_ALL_NIGHT, - /* 0x3D */ PLAYER_AP_MASK_BUNNY, - /* 0x3E */ PLAYER_AP_MASK_KEATON, - /* 0x3F */ PLAYER_AP_MASK_GARO, - /* 0x40 */ PLAYER_AP_MASK_ROMANI, - /* 0x41 */ PLAYER_AP_MASK_CIRCUS_LEADER, - /* 0x42 */ PLAYER_AP_MASK_POSTMAN, - /* 0x43 */ PLAYER_AP_MASK_COUPLE, - /* 0x44 */ PLAYER_AP_MASK_GREAT_FAIRY, - /* 0x45 */ PLAYER_AP_MASK_GIBDO, - /* 0x46 */ PLAYER_AP_MASK_DON_GERO, - /* 0x47 */ PLAYER_AP_MASK_KAMARO, - /* 0x48 */ PLAYER_AP_MASK_CAPTAIN, - /* 0x49 */ PLAYER_AP_MASK_STONE, - /* 0x4A */ PLAYER_AP_MASK_BREMEN, - /* 0x4B */ PLAYER_AP_MASK_BLAST, - /* 0x4C */ PLAYER_AP_MASK_SCENTS, - /* 0x4D */ PLAYER_AP_MASK_GIANT, - /* 0x4E */ PLAYER_AP_MASK_FIERCE_DEITY, - /* 0x4F */ PLAYER_AP_MASK_GORON, - /* 0x50 */ PLAYER_AP_MASK_ZORA, - /* 0x51 */ PLAYER_AP_MASK_DEKU, - /* 0x52 */ PLAYER_AP_LENS, - /* 0x53 */ PLAYER_AP_MAX -} PlayerActionParam; +typedef enum PlayerItemAction { + /* -1 */ PLAYER_IA_MINUS1 = -1, + /* 0x00 */ PLAYER_IA_NONE, + /* 0x01 */ PLAYER_IA_LAST_USED, + /* 0x02 */ PLAYER_IA_FISHING_ROD, + /* 0x03 */ PLAYER_IA_SWORD_KOKIRI, + /* 0x04 */ PLAYER_IA_SWORD_RAZOR, + /* 0x05 */ PLAYER_IA_SWORD_GILDED, + /* 0x06 */ PLAYER_IA_SWORD_GREAT_FAIRY, + /* 0x07 */ PLAYER_IA_STICK, + /* 0x08 */ PLAYER_IA_ZORA_FINS, + /* 0x09 */ PLAYER_IA_BOW, + /* 0x0A */ PLAYER_IA_BOW_FIRE, + /* 0x0B */ PLAYER_IA_BOW_ICE, + /* 0x0C */ PLAYER_IA_BOW_LIGHT, + /* 0x0D */ PLAYER_IA_HOOKSHOT, + /* 0x0E */ PLAYER_IA_BOMB, + /* 0x0F */ PLAYER_IA_POWDER_KEG, + /* 0x10 */ PLAYER_IA_BOMBCHU, + /* 0x11 */ PLAYER_IA_11, + /* 0x12 */ PLAYER_IA_NUT, + /* 0x13 */ PLAYER_IA_PICTO_BOX, + /* 0x14 */ PLAYER_IA_OCARINA, + /* 0x15 */ PLAYER_IA_BOTTLE, + /* 0x16 */ PLAYER_IA_BOTTLE_FISH, + /* 0x17 */ PLAYER_IA_BOTTLE_SPRING_WATER, + /* 0x18 */ PLAYER_IA_BOTTLE_HOT_SPRING_WATER, + /* 0x19 */ PLAYER_IA_BOTTLE_ZORA_EGG, + /* 0x1A */ PLAYER_IA_BOTTLE_DEKU_PRINCESS, + /* 0x1B */ PLAYER_IA_BOTTLE_GOLD_DUST, + /* 0x1C */ PLAYER_IA_BOTTLE_1C, + /* 0x1D */ PLAYER_IA_BOTTLE_SEAHORSE, + /* 0x1E */ PLAYER_IA_BOTTLE_MUSHROOM, + /* 0x1F */ PLAYER_IA_BOTTLE_HYLIAN_LOACH, + /* 0x20 */ PLAYER_IA_BOTTLE_BUG, + /* 0x21 */ PLAYER_IA_BOTTLE_POE, + /* 0x22 */ PLAYER_IA_BOTTLE_BIG_POE, + /* 0x23 */ PLAYER_IA_BOTTLE_POTION_RED, + /* 0x24 */ PLAYER_IA_BOTTLE_POTION_BLUE, + /* 0x25 */ PLAYER_IA_BOTTLE_POTION_GREEN, + /* 0x26 */ PLAYER_IA_BOTTLE_MILK, + /* 0x27 */ PLAYER_IA_BOTTLE_MILK_HALF, + /* 0x28 */ PLAYER_IA_BOTTLE_CHATEAU, + /* 0x29 */ PLAYER_IA_BOTTLE_FAIRY, + /* 0x2A */ PLAYER_IA_MOON_TEAR, + /* 0x2B */ PLAYER_IA_DEED_LAND, + /* 0x2C */ PLAYER_IA_ROOM_KEY, + /* 0x2D */ PLAYER_IA_LETTER_TO_KAFEI, + /* 0x2E */ PLAYER_IA_MAGIC_BEANS, + /* 0x2F */ PLAYER_IA_DEED_SWAMP, + /* 0x30 */ PLAYER_IA_DEED_MOUNTAIN, + /* 0x31 */ PLAYER_IA_DEED_OCEAN, + /* 0x32 */ PLAYER_IA_32, + /* 0x33 */ PLAYER_IA_LETTER_MAMA, + /* 0x34 */ PLAYER_IA_34, + /* 0x35 */ PLAYER_IA_35, + /* 0x36 */ PLAYER_IA_PENDANT_OF_MEMORIES, + /* 0x37 */ PLAYER_IA_37, + /* 0x38 */ PLAYER_IA_38, + /* 0x39 */ PLAYER_IA_39, + /* 0x3A */ PLAYER_IA_MASK_TRUTH, + /* 0x3B */ PLAYER_IA_MASK_KAFEIS_MASK, + /* 0x3C */ PLAYER_IA_MASK_ALL_NIGHT, + /* 0x3D */ PLAYER_IA_MASK_BUNNY, + /* 0x3E */ PLAYER_IA_MASK_KEATON, + /* 0x3F */ PLAYER_IA_MASK_GARO, + /* 0x40 */ PLAYER_IA_MASK_ROMANI, + /* 0x41 */ PLAYER_IA_MASK_CIRCUS_LEADER, + /* 0x42 */ PLAYER_IA_MASK_POSTMAN, + /* 0x43 */ PLAYER_IA_MASK_COUPLE, + /* 0x44 */ PLAYER_IA_MASK_GREAT_FAIRY, + /* 0x45 */ PLAYER_IA_MASK_GIBDO, + /* 0x46 */ PLAYER_IA_MASK_DON_GERO, + /* 0x47 */ PLAYER_IA_MASK_KAMARO, + /* 0x48 */ PLAYER_IA_MASK_CAPTAIN, + /* 0x49 */ PLAYER_IA_MASK_STONE, + /* 0x4A */ PLAYER_IA_MASK_BREMEN, + /* 0x4B */ PLAYER_IA_MASK_BLAST, + /* 0x4C */ PLAYER_IA_MASK_SCENTS, + /* 0x4D */ PLAYER_IA_MASK_GIANT, + /* 0x4E */ PLAYER_IA_MASK_FIERCE_DEITY, + /* 0x4F */ PLAYER_IA_MASK_GORON, + /* 0x50 */ PLAYER_IA_MASK_ZORA, + /* 0x51 */ PLAYER_IA_MASK_DEKU, + /* 0x52 */ PLAYER_IA_LENS, + /* 0x53 */ PLAYER_IA_MAX +} PlayerItemAction; -typedef enum { +typedef enum PlayerMeleeWeaponAnimation { /* 0 */ PLAYER_MWA_FORWARD_SLASH_1H, // Vertical one-handed slash /* 1 */ PLAYER_MWA_FORWARD_SLASH_2H, // Vertical two-handed slash /* 2 */ PLAYER_MWA_FORWARD_COMBO_1H, // Third vertical one-handed slash @@ -183,6 +184,7 @@ typedef enum { /* 13 */ PLAYER_MWA_STAB_2H, // Targeted two-handed stab /* 14 */ PLAYER_MWA_STAB_COMBO_1H, // Third targeted one-handed stab /* 15 */ PLAYER_MWA_STAB_COMBO_2H, // Third targeted two-handed stab + // These animations result in double damage /* 16 */ PLAYER_MWA_FLIPSLASH_START, // unused /* 17 */ PLAYER_MWA_JUMPSLASH_START, // Start of jumpslash /* 18 */ PLAYER_MWA_ZORA_JUMPKICK_START, // Start of Zora jump attack @@ -204,6 +206,16 @@ typedef enum { /* 34 */ PLAYER_MWA_MAX } PlayerMeleeWeaponAnimation; +typedef enum PlayerDoorType { + /* -1 */ PLAYER_DOORTYPE_TALKING = -1, // Displays a message instead of opening + /* 0 */ PLAYER_DOORTYPE_NONE, + /* 1 */ PLAYER_DOORTYPE_HANDLE, + /* 2 */ PLAYER_DOORTYPE_SLIDING, + /* 3 */ PLAYER_DOORTYPE_FAKE, // Unused? OoT leftover (?) + /* 4 */ PLAYER_DOORTYPE_STAIRCASE, + /* 5 */ PLAYER_DOORTYPE_PROXIMITY +} PlayerDoorType; + typedef enum PlayerAnimType { /* 0 */ PLAYER_ANIMTYPE_0, /* 1 */ PLAYER_ANIMTYPE_1, @@ -267,7 +279,7 @@ typedef enum PlayerModelGroup { /* 15 */ PLAYER_MODELGROUP_MAX } PlayerModelGroup; -typedef enum { +typedef enum PlayerEyeIndex { /* 0 */ PLAYER_EYES_OPEN, /* 1 */ PLAYER_EYES_HALF, /* 2 */ PLAYER_EYES_CLOSED, @@ -279,7 +291,7 @@ typedef enum { /* 8 */ PLAYER_EYES_MAX } PlayerEyeIndex; -typedef enum { +typedef enum PlayerMouthIndex { /* 0 */ PLAYER_MOUTH_CLOSED, /* 1 */ PLAYER_MOUTH_TEETH, /* 2 */ PLAYER_MOUTH_ANGRY, @@ -287,7 +299,7 @@ typedef enum { /* 4 */ PLAYER_MOUTH_MAX } PlayerMouthIndex; -typedef enum { +typedef enum PlayerFacialExpression { /* 0 */ PLAYER_FACE_0, /* 1 */ PLAYER_FACE_1, /* 2 */ PLAYER_FACE_2, @@ -306,7 +318,7 @@ typedef enum { /* 15 */ PLAYER_FACE_15 } PlayerFacialExpression; -typedef enum { +typedef enum PlayerLimb { /* 0x00 */ PLAYER_LIMB_NONE, /* 0x01 */ PLAYER_LIMB_ROOT, /* 0x02 */ PLAYER_LIMB_WAIST, @@ -332,9 +344,38 @@ typedef enum { /* 0x16 */ PLAYER_LIMB_MAX } PlayerLimb; -typedef struct { - /* 0x00 */ f32 unk_00; - /* 0x04 */ f32 unk_04; +typedef enum PlayerBodyPart { + /* 0x00 */ PLAYER_BODYPART_WAIST, // PLAYER_LIMB_WAIST + /* 0x01 */ PLAYER_BODYPART_RIGHT_THIGH, // PLAYER_LIMB_RIGHT_THIGH + /* 0x02 */ PLAYER_BODYPART_RIGHT_SHIN, // PLAYER_LIMB_RIGHT_SHIN + /* 0x03 */ PLAYER_BODYPART_RIGHT_FOOT, // PLAYER_LIMB_RIGHT_FOOT + /* 0x04 */ PLAYER_BODYPART_LEFT_THIGH, // PLAYER_LIMB_LEFT_THIGH + /* 0x05 */ PLAYER_BODYPART_LEFT_SHIN, // PLAYER_LIMB_LEFT_SHIN + /* 0x06 */ PLAYER_BODYPART_LEFT_FOOT, // PLAYER_LIMB_LEFT_FOOT + /* 0x07 */ PLAYER_BODYPART_HEAD, // PLAYER_LIMB_HEAD + /* 0x08 */ PLAYER_BODYPART_HAT, // PLAYER_LIMB_HAT + /* 0x09 */ PLAYER_BODYPART_COLLAR, // PLAYER_LIMB_COLLAR + /* 0x0A */ PLAYER_BODYPART_LEFT_SHOULDER, // PLAYER_LIMB_LEFT_SHOULDER + /* 0x0B */ PLAYER_BODYPART_LEFT_FOREARM, // PLAYER_LIMB_LEFT_FOREARM + /* 0x0C */ PLAYER_BODYPART_LEFT_HAND, // PLAYER_LIMB_LEFT_HAND + /* 0x0D */ PLAYER_BODYPART_RIGHT_SHOULDER, // PLAYER_LIMB_R_SHOULDER + /* 0x0E */ PLAYER_BODYPART_RIGHT_FOREARM, // PLAYER_LIMB_R_FOREARM + /* 0x0F */ PLAYER_BODYPART_RIGHT_HAND, // PLAYER_LIMB_R_HAND + /* 0x10 */ PLAYER_BODYPART_SHEATH, // PLAYER_LIMB_SHEATH + /* 0x11 */ PLAYER_BODYPART_TORSO, // PLAYER_LIMB_TORSO + /* 0x12 */ PLAYER_BODYPART_MAX +} PlayerBodyPart; + +typedef struct PlayerAnimationFrame { + /* 0x000 */ Vec3s frameTable[PLAYER_LIMB_MAX]; + /* 0x108 */ s16 faceInfo; +} PlayerAnimationFrame; // size = 0x10A + +#define PLAYER_LIMB_BUF_SIZE (ALIGN16(sizeof(PlayerAnimationFrame)) + 0xF) + +typedef struct PlayerAgeProperties { + /* 0x00 */ f32 unk_00; // ceilingCheckHeight? + /* 0x04 */ f32 shadowScale; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; @@ -347,15 +388,15 @@ typedef struct { /* 0x2C */ f32 unk_2C; /* 0x30 */ f32 unk_30; /* 0x34 */ f32 unk_34; - /* 0x38 */ f32 unk_38; + /* 0x38 */ f32 unk_38; // wallCheckHeight? /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ Vec3s unk_44; /* 0x4A */ Vec3s unk_4A[4]; /* 0x62 */ Vec3s unk_62[4]; /* 0x7A */ Vec3s unk_7A[4]; - /* 0x92 */ u16 unk_92; - /* 0x94 */ u16 unk_94; + /* 0x92 */ u16 voiceSfxIdOffset; + /* 0x94 */ u16 surfaceSfxIdOffset; /* 0x98 */ f32 unk_98; /* 0x9C */ f32 unk_9C; /* 0xA0 */ LinkAnimationHeader* unk_A0; @@ -376,8 +417,6 @@ typedef struct { } WeaponInfo; // size = 0x1C -typedef void (*PlayerFuncD58)(struct PlayState*, struct Player*); - typedef struct { /* 0x00 */ u8 unk_00; /* 0x01 */ u8 alpha; @@ -399,6 +438,151 @@ typedef struct struct_80122744_arg1 { /* 0x4 */ Vec3s* unk_04; } struct_80122744_arg1; // size = 0x8 +typedef enum PlayerCsMode { + /* 0x00 */ PLAYER_CSMODE_0, + /* 0x01 */ PLAYER_CSMODE_1, + /* 0x02 */ PLAYER_CSMODE_2, + /* 0x03 */ PLAYER_CSMODE_3, + /* 0x04 */ PLAYER_CSMODE_4, + /* 0x05 */ PLAYER_CSMODE_5, + /* 0x06 */ PLAYER_CSMODE_6, + /* 0x07 */ PLAYER_CSMODE_7, + /* 0x08 */ PLAYER_CSMODE_8, + /* 0x09 */ PLAYER_CSMODE_9, + /* 0x0A */ PLAYER_CSMODE_10, + /* 0x0B */ PLAYER_CSMODE_11, + /* 0x0C */ PLAYER_CSMODE_12, + /* 0x0D */ PLAYER_CSMODE_13, + /* 0x0E */ PLAYER_CSMODE_14, + /* 0x0F */ PLAYER_CSMODE_15, + /* 0x10 */ PLAYER_CSMODE_16, + /* 0x11 */ PLAYER_CSMODE_17, + /* 0x12 */ PLAYER_CSMODE_18, + /* 0x13 */ PLAYER_CSMODE_19, + /* 0x14 */ PLAYER_CSMODE_20, + /* 0x15 */ PLAYER_CSMODE_21, + /* 0x16 */ PLAYER_CSMODE_22, + /* 0x17 */ PLAYER_CSMODE_23, + /* 0x18 */ PLAYER_CSMODE_24, + /* 0x19 */ PLAYER_CSMODE_25, + /* 0x1A */ PLAYER_CSMODE_26, + /* 0x1B */ PLAYER_CSMODE_27, + /* 0x1C */ PLAYER_CSMODE_28, + /* 0x1D */ PLAYER_CSMODE_29, + /* 0x1E */ PLAYER_CSMODE_30, + /* 0x1F */ PLAYER_CSMODE_31, + /* 0x20 */ PLAYER_CSMODE_32, + /* 0x21 */ PLAYER_CSMODE_33, + /* 0x22 */ PLAYER_CSMODE_34, + /* 0x23 */ PLAYER_CSMODE_35, + /* 0x24 */ PLAYER_CSMODE_36, + /* 0x25 */ PLAYER_CSMODE_37, + /* 0x26 */ PLAYER_CSMODE_38, + /* 0x27 */ PLAYER_CSMODE_39, + /* 0x28 */ PLAYER_CSMODE_40, + /* 0x29 */ PLAYER_CSMODE_41, + /* 0x2A */ PLAYER_CSMODE_42, + /* 0x2B */ PLAYER_CSMODE_43, + /* 0x2C */ PLAYER_CSMODE_44, + /* 0x2D */ PLAYER_CSMODE_45, + /* 0x2E */ PLAYER_CSMODE_46, + /* 0x2F */ PLAYER_CSMODE_47, + /* 0x30 */ PLAYER_CSMODE_48, + /* 0x31 */ PLAYER_CSMODE_49, + /* 0x32 */ PLAYER_CSMODE_50, + /* 0x33 */ PLAYER_CSMODE_51, + /* 0x34 */ PLAYER_CSMODE_52, + /* 0x35 */ PLAYER_CSMODE_53, + /* 0x36 */ PLAYER_CSMODE_54, + /* 0x37 */ PLAYER_CSMODE_55, + /* 0x38 */ PLAYER_CSMODE_56, + /* 0x39 */ PLAYER_CSMODE_57, + /* 0x3A */ PLAYER_CSMODE_58, + /* 0x3B */ PLAYER_CSMODE_59, + /* 0x3C */ PLAYER_CSMODE_60, + /* 0x3D */ PLAYER_CSMODE_61, + /* 0x3E */ PLAYER_CSMODE_62, + /* 0x3F */ PLAYER_CSMODE_63, + /* 0x40 */ PLAYER_CSMODE_64, + /* 0x41 */ PLAYER_CSMODE_65, + /* 0x42 */ PLAYER_CSMODE_66, + /* 0x43 */ PLAYER_CSMODE_67, + /* 0x44 */ PLAYER_CSMODE_68, + /* 0x45 */ PLAYER_CSMODE_69, + /* 0x46 */ PLAYER_CSMODE_70, + /* 0x47 */ PLAYER_CSMODE_71, + /* 0x48 */ PLAYER_CSMODE_72, + /* 0x49 */ PLAYER_CSMODE_73, + /* 0x4A */ PLAYER_CSMODE_74, + /* 0x4B */ PLAYER_CSMODE_75, + /* 0x4C */ PLAYER_CSMODE_76, + /* 0x4D */ PLAYER_CSMODE_77, + /* 0x4E */ PLAYER_CSMODE_78, + /* 0x4F */ PLAYER_CSMODE_79, + /* 0x50 */ PLAYER_CSMODE_80, + /* 0x51 */ PLAYER_CSMODE_81, + /* 0x52 */ PLAYER_CSMODE_82, + /* 0x53 */ PLAYER_CSMODE_83, + /* 0x54 */ PLAYER_CSMODE_84, + /* 0x55 */ PLAYER_CSMODE_85, + /* 0x56 */ PLAYER_CSMODE_86, + /* 0x57 */ PLAYER_CSMODE_87, + /* 0x58 */ PLAYER_CSMODE_88, + /* 0x59 */ PLAYER_CSMODE_89, + /* 0x5A */ PLAYER_CSMODE_90, + /* 0x5B */ PLAYER_CSMODE_91, + /* 0x5C */ PLAYER_CSMODE_92, + /* 0x5D */ PLAYER_CSMODE_93, + /* 0x5E */ PLAYER_CSMODE_94, + /* 0x5F */ PLAYER_CSMODE_95, + /* 0x60 */ PLAYER_CSMODE_96, + /* 0x61 */ PLAYER_CSMODE_97, + /* 0x62 */ PLAYER_CSMODE_98, + /* 0x63 */ PLAYER_CSMODE_99, + /* 0x64 */ PLAYER_CSMODE_100, + /* 0x65 */ PLAYER_CSMODE_101, + /* 0x66 */ PLAYER_CSMODE_102, + /* 0x67 */ PLAYER_CSMODE_103, + /* 0x68 */ PLAYER_CSMODE_104, + /* 0x69 */ PLAYER_CSMODE_105, + /* 0x6A */ PLAYER_CSMODE_106, + /* 0x6B */ PLAYER_CSMODE_107, + /* 0x6C */ PLAYER_CSMODE_108, + /* 0x6D */ PLAYER_CSMODE_109, + /* 0x6E */ PLAYER_CSMODE_110, + /* 0x6F */ PLAYER_CSMODE_111, + /* 0x70 */ PLAYER_CSMODE_112, + /* 0x71 */ PLAYER_CSMODE_113, + /* 0x72 */ PLAYER_CSMODE_114, + /* 0x73 */ PLAYER_CSMODE_115, + /* 0x74 */ PLAYER_CSMODE_116, + /* 0x75 */ PLAYER_CSMODE_117, + /* 0x76 */ PLAYER_CSMODE_118, + /* 0x77 */ PLAYER_CSMODE_119, + /* 0x78 */ PLAYER_CSMODE_120, + /* 0x79 */ PLAYER_CSMODE_121, + /* 0x7A */ PLAYER_CSMODE_122, + /* 0x7B */ PLAYER_CSMODE_123, + /* 0x7C */ PLAYER_CSMODE_124, + /* 0x7D */ PLAYER_CSMODE_125, + /* 0x7E */ PLAYER_CSMODE_126, + /* 0x7F */ PLAYER_CSMODE_127, + /* 0x80 */ PLAYER_CSMODE_128, + /* 0x81 */ PLAYER_CSMODE_129, + /* 0x82 */ PLAYER_CSMODE_130, + /* 0x83 */ PLAYER_CSMODE_131, + /* 0x84 */ PLAYER_CSMODE_132, + /* 0x85 */ PLAYER_CSMODE_133, + /* 0x86 */ PLAYER_CSMODE_134, + /* 0x87 */ PLAYER_CSMODE_135, + /* 0x88 */ PLAYER_CSMODE_136, + /* 0x89 */ PLAYER_CSMODE_137, + /* 0x8A */ PLAYER_CSMODE_138, + /* 0x8B */ PLAYER_CSMODE_139, + /* 0x8C */ PLAYER_CSMODE_MAX +} PlayerCsMode; + + // #define PLAYER_STATE1_1 (1 << 0) // @@ -407,7 +591,7 @@ typedef struct struct_80122744_arg1 { #define PLAYER_STATE1_4 (1 << 2) // #define PLAYER_STATE1_8 (1 << 3) -// +// Zora electric shield #define PLAYER_STATE1_10 (1 << 4) // #define PLAYER_STATE1_20 (1 << 5) @@ -461,7 +645,7 @@ typedef struct struct_80122744_arg1 { #define PLAYER_STATE1_20000000 (1 << 29) // #define PLAYER_STATE1_40000000 (1 << 30) -// +// Related to exit a grotto #define PLAYER_STATE1_80000000 (1 << 31) @@ -523,15 +707,15 @@ typedef struct struct_80122744_arg1 { #define PLAYER_STATE2_8000000 (1 << 27) // #define PLAYER_STATE2_10000000 (1 << 28) -// +// Disable drawing player #define PLAYER_STATE2_20000000 (1 << 29) -// +// Lunge: small forward boost at the end of certain attack animations #define PLAYER_STATE2_40000000 (1 << 30) -// +// Void-out #define PLAYER_STATE2_80000000 (1 << 31) -// +// Ignores collision with floor? #define PLAYER_STATE3_1 (1 << 0) // #define PLAYER_STATE3_2 (1 << 1) @@ -547,7 +731,7 @@ typedef struct struct_80122744_arg1 { #define PLAYER_STATE3_40 (1 << 6) // #define PLAYER_STATE3_80 (1 << 7) -// +// Related to form Deku #define PLAYER_STATE3_100 (1 << 8) // #define PLAYER_STATE3_200 (1 << 9) @@ -555,25 +739,25 @@ typedef struct struct_80122744_arg1 { #define PLAYER_STATE3_400 (1 << 10) // #define PLAYER_STATE3_800 (1 << 11) -// being curled? +// goron curled #define PLAYER_STATE3_1000 (1 << 12) // #define PLAYER_STATE3_2000 (1 << 13) // #define PLAYER_STATE3_4000 (1 << 14) -// +// Swimming Zora #define PLAYER_STATE3_8000 (1 << 15) // #define PLAYER_STATE3_10000 (1 << 16) // #define PLAYER_STATE3_20000 (1 << 17) -// +// Related to form Deku #define PLAYER_STATE3_40000 (1 << 18) // #define PLAYER_STATE3_80000 (1 << 19) // #define PLAYER_STATE3_100000 (1 << 20) -// +// Deku hopping? #define PLAYER_STATE3_200000 (1 << 21) // #define PLAYER_STATE3_400000 (1 << 22) @@ -597,16 +781,44 @@ typedef struct struct_80122744_arg1 { #define PLAYER_STATE3_80000000 (1 << 31) +#define PLAYER_GET_INITMODE(thisx) (((thisx)->params & 0xF00) >> 8) + +typedef enum PlayerInitMode { + /* 0x0 */ PLAYER_INITMODE_0, + /* 0x1 */ PLAYER_INITMODE_1, // Spawning after pulling/putting-back Master sword // OoT leftover + /* 0x2 */ PLAYER_INITMODE_2, + /* 0x3 */ PLAYER_INITMODE_3, + /* 0x4 */ PLAYER_INITMODE_4, + /* 0x5 */ PLAYER_INITMODE_5, + /* 0x6 */ PLAYER_INITMODE_6, + /* 0x7 */ PLAYER_INITMODE_7, + /* 0x8 */ PLAYER_INITMODE_8, + /* 0x9 */ PLAYER_INITMODE_9, + /* 0xA */ PLAYER_INITMODE_A, + /* 0xB */ PLAYER_INITMODE_B, + /* 0xC */ PLAYER_INITMODE_TELESCOPE, + /* 0xD */ PLAYER_INITMODE_D, + /* 0xE */ PLAYER_INITMODE_E, + /* 0xF */ PLAYER_INITMODE_F +} PlayerInitMode; + +#define PLAYER_PARAMS(startBgCamIndex, initMode) ((startBgCamIndex & 0xFF) | ((initMode & 0xF) << 8)) + +typedef void (*PlayerActionFunc)(struct Player* this, struct PlayState* play); +typedef s32 (*PlayerFuncAC4)(struct Player* this, struct PlayState* play); +typedef void (*PlayerFuncD58)(struct PlayState* play, struct Player* this); + + typedef struct Player { /* 0x000 */ Actor actor; /* 0x144 */ s8 currentShield; /* 0x145 */ s8 currentBoots; /* 0x146 */ s8 heldItemButton; - /* 0x147 */ s8 itemActionParam; // PlayerActionParam enum + /* 0x147 */ s8 heldItemAction; // PlayerItemAction enum /* 0x148 */ u8 heldItemId; // ItemId enum /* 0x149 */ s8 prevBoots; - /* 0x14A */ s8 heldItemActionParam; - /* 0x14B */ u8 transformation; + /* 0x14A */ s8 itemAction; // PlayerItemAction enum + /* 0x14B */ u8 transformation; // PlayerTransformation enum /* 0x14C */ u8 modelGroup; // PlayerModelGroup enum /* 0x14D */ u8 nextModelGroup; /* 0x14E */ s8 unk_14E; @@ -614,7 +826,7 @@ typedef struct Player { /* 0x150 */ u8 leftHandType; /* 0x151 */ u8 rightHandType; /* 0x152 */ u8 sheathType; - /* 0x153 */ u8 currentMask; + /* 0x153 */ u8 currentMask; // PlayerMask enum /* 0x154 */ s8 unk_154; /* 0x155 */ u8 prevMask; /* 0x158 */ Gfx** rightHandDLists; @@ -664,44 +876,50 @@ typedef struct Player { /* 0x350 */ PosRot leftHandWorld; /* 0x364 */ Actor* rightHandActor; /* 0x368 */ PosRot rightHandWorld; - /* 0x37C */ s8 doorType; + /* 0x37C */ s8 doorType; // PlayerDoorType enum /* 0x37D */ s8 doorDirection; /* 0x37E */ s8 doorTimer; /* 0x37F */ s8 doorNext; // used with spiral staircase /* 0x380 */ Actor* doorActor; - /* 0x384 */ s16 getItemId; + /* 0x384 */ s16 getItemId; // GetItemId enum /* 0x386 */ u16 getItemDirection; /* 0x388 */ Actor* interactRangeActor; /* 0x38C */ s8 mountSide; /* 0x390 */ Actor* rideActor; - /* 0x394 */ u8 csMode; - /* 0x395 */ u8 unk_395; // prevCsMode? - /* 0x396 */ u8 unk_396; - /* 0x397 */ u8 unk_397; + /* 0x394 */ u8 csMode; // PlayerCsMode enum + /* 0x395 */ u8 prevCsMode; // PlayerCsMode enum + /* 0x396 */ u8 unk_396; // currentActorActionId? + /* 0x397 */ u8 unk_397; // PlayerDoorType enum /* 0x398 */ Actor* unk_398; - /* 0x39C */ s16 unk_39C; - /* 0x39E */ s16 unk_39E; + /* 0x39C */ UNK_TYPE1 unk_39C[0x4]; /* 0x3A0 */ Vec3f unk_3A0; /* 0x3AC */ Vec3f unk_3AC; /* 0x3B8 */ u16 unk_3B8; /* 0x3BA */ s16 unk_3BA; - /* 0x3BC */ s16 unk_3BC; + /* 0x3BC */ s16 subCamId; /* 0x3BE */ char unk_3BE[2]; /* 0x3C0 */ Vec3f unk_3C0; /* 0x3CC */ s16 unk_3CC; /* 0x3CE */ s8 unk_3CE; /* 0x3CF */ u8 unk_3CF; /* 0x3D0 */ struct_80122D44_arg1 unk_3D0; - /* 0x404 */ UNK_TYPE1 unk_404[0x34]; + /* 0x4E4 */ UNK_TYPE1 unk_4E4[0x20]; + /* 0x504 */ LightNode* lightNode; + /* 0x508 */ LightInfo lightInfo; /* 0x518 */ ColliderCylinder cylinder; /* 0x564 */ ColliderQuad meleeWeaponQuads[2]; /* 0x664 */ ColliderQuad shieldQuad; /* 0x6E4 */ ColliderCylinder shieldCylinder; - /* 0x730 */ Actor* unk_730; + /* 0x730 */ Actor* targetedActor; // Z/L-Targeted actor /* 0x734 */ char unk_734[4]; /* 0x738 */ s32 unk_738; /* 0x73C */ s32 meleeWeaponEffectIndex[3]; - /* 0x748 */ char unk_748[0x320]; + /* 0x748 */ PlayerActionFunc actionFunc; + /* 0x74C */ u8 jointTableBuffer[PLAYER_LIMB_BUF_SIZE]; + /* 0x7EB */ u8 morphTableBuffer[PLAYER_LIMB_BUF_SIZE]; + /* 0x88A */ u8 blendTableBuffer[PLAYER_LIMB_BUF_SIZE]; + /* 0x929 */ u8 unk_929[PLAYER_LIMB_BUF_SIZE]; + /* 0x9C8 */ u8 unk_9C8[PLAYER_LIMB_BUF_SIZE]; /* 0xA68 */ PlayerAgeProperties* ageProperties; // repurposed as "transformation properties"? /* 0xA6C */ u32 stateFlags1; /* 0xA70 */ u32 stateFlags2; @@ -710,18 +928,18 @@ typedef struct Player { /* 0xA7C */ Actor* boomerangActor; /* 0xA80 */ Actor* tatlActor; /* 0xA84 */ s16 tatlTextId; - /* 0xA86 */ s8 unk_A86; - /* 0xA87 */ s8 exchangeItemId; - /* 0xA88 */ Actor* targetActor; - /* 0xA8C */ f32 targetActorDistance; + /* 0xA86 */ s8 unk_A86; // actorCutsceneIndex? + /* 0xA87 */ s8 exchangeItemId; // PlayerItemAction enum + /* 0xA88 */ Actor* talkActor; + /* 0xA8C */ f32 talkActorDistance; /* 0xA90 */ Actor* unk_A90; /* 0xA94 */ f32 unk_A94; /* 0xA98 */ Actor* unk_A98; - /* 0xA9C */ f32 unk_A9C; - /* 0xAA0 */ f32 unk_AA0; + /* 0xA9C */ f32 secretRumbleCharge; // builds per frame until discharges with a rumble request + /* 0xAA0 */ f32 closestSecretDistSq; // Used to augment `secretRumbleCharge`. Cleared every frame /* 0xAA4 */ s8 unk_AA4; /* 0xAA5 */ u8 unk_AA5; - /* 0xAA6 */ u16 unk_AA6; + /* 0xAA6 */ u16 unk_AA6; // flags of some kind /* 0xAA8 */ s16 unk_AA8; /* 0xAAA */ s16 unk_AAA; /* 0xAAC */ Vec3s unk_AAC; @@ -729,11 +947,11 @@ typedef struct Player { /* 0xAB8 */ f32 unk_AB8; /* 0xABC */ f32 unk_ABC; /* 0xAC0 */ f32 unk_AC0; - /* 0xAC4 */ void* unk_AC4; + /* 0xAC4 */ PlayerFuncAC4 unk_AC4; /* 0xAC8 */ f32 unk_AC8; /* 0xACC */ s16 unk_ACC; /* 0xACE */ s8 unk_ACE; - /* 0xACF */ u8 unk_ACF; + /* 0xACF */ u8 putAwayCountdown; // Frames to wait before showing "Put Away" on A /* 0xAD0 */ f32 linearVelocity; /* 0xAD4 */ s16 currentYaw; /* 0xAD6 */ s16 targetYaw; @@ -743,15 +961,16 @@ typedef struct Player { /* 0xADC */ s8 unk_ADC; /* 0xADD */ s8 unk_ADD; /* 0xADE */ u8 unk_ADE; - /* 0xADF */ s8 unk_ADF[4]; - /* 0xAE3 */ s8 unk_AE3[4]; + /* 0xADF */ s8 unk_ADF[4]; // Circular buffer used for testing for triggering a quickspin + /* 0xAE3 */ s8 unk_AE3[4]; // Circular buffer used for ? /* 0xAE7 */ s8 unk_AE7; // a timer /* 0xAE8 */ s16 unk_AE8; // multipurpose timer /* 0xAEC */ f32 unk_AEC; /* 0xAF0 */ Vec3f unk_AF0[2]; - /* 0xB08 */ f32 unk_B08[8]; + /* 0xB08 */ f32 unk_B08[2]; // TODO: Investigate if this member actually is an array + /* 0xB10 */ f32 unk_B10[6]; /* 0xB28 */ s16 unk_B28; //Burning stick timer? - /* 0xB2A */ s8 unk_B2A; + /* 0xB2A */ s8 getItemDrawId; /* 0xB2B */ s8 unk_B2B; /* 0xB2C */ f32 windSpeed; /* 0xB30 */ s16 windAngleX; @@ -765,8 +984,8 @@ typedef struct Player { /* 0xB4C */ s16 unk_B4C; /* 0xB4E */ s16 unk_B4E; /* 0xB50 */ f32 unk_B50; - /* 0xB54 */ f32 unk_B54; - /* 0xB58 */ f32 unk_B58; + /* 0xB54 */ f32 wallHeight; // height used to determine whether link can climb or grab a ledge at the top + /* 0xB58 */ f32 wallDistance; // distance to the colliding wall plane /* 0xB5C */ u8 unk_B5C; /* 0xB5D */ u8 unk_B5D; /* 0xB5E */ u8 unk_B5E; @@ -774,15 +993,15 @@ typedef struct Player { /* 0xB60 */ u16 unk_B60; // blast mask timer? /* 0xB62 */ s16 unk_B62; /* 0xB64 */ u8 unk_B64; - /* 0xB65 */ u8 unk_B65; + /* 0xB65 */ u8 shockTimer; /* 0xB66 */ u8 unk_B66; - /* 0xB67 */ u8 unk_B67; // deku hop timer? - /* 0xB68 */ s16 unk_B68; - /* 0xB6A */ s16 unk_B6A; + /* 0xB67 */ u8 unk_B67; // deku remaining hops counter + /* 0xB68 */ s16 fallStartHeight; // last truncated Y position before falling + /* 0xB6A */ s16 fallDistance; // truncated Y distance the player has fallen so far (positive is down) /* 0xB6C */ s16 unk_B6C; /* 0xB6E */ s16 unk_B6E; /* 0xB70 */ s16 unk_B70; - /* 0xB72 */ u16 unk_B72; // floor type? + /* 0xB72 */ u16 floorSfxOffset; /* 0xB74 */ u8 unk_B74; /* 0xB75 */ u8 unk_B75; /* 0xB76 */ s16 unk_B76; @@ -790,8 +1009,7 @@ typedef struct Player { /* 0xB7C */ f32 unk_B7C; /* 0xB80 */ f32 unk_B80; /* 0xB84 */ s16 unk_B84; - /* 0xB86 */ s16 unk_B86; - /* 0xB88 */ s16 unk_B88; + /* 0xB86 */ s16 unk_B86[2]; // unknown length /* 0xB8A */ s16 unk_B8A; /* 0xB8C */ s16 unk_B8C; /* 0xB8E */ s16 unk_B8E; @@ -800,11 +1018,11 @@ typedef struct Player { /* 0xB94 */ s16 unk_B94; /* 0xB96 */ s16 unk_B96; /* 0xB98 */ WeaponInfo meleeWeaponInfo[3]; - /* 0xBEC */ Vec3f bodyPartsPos[18]; + /* 0xBEC */ Vec3f bodyPartsPos[PLAYER_BODYPART_MAX]; /* 0xCC4 */ MtxF mf_CC4; /* 0xD04 */ MtxF shieldMf; /* 0xD44 */ u8 isBurning; - /* 0xD45 */ u8 flameTimers[18]; // one flame per body part + /* 0xD45 */ u8 flameTimers[PLAYER_BODYPART_MAX]; /* 0xD57 */ u8 unk_D57; /* 0xD58 */ PlayerFuncD58 unk_D58; /* 0xD5C */ s8 invincibilityTimer; // prevents damage when nonzero (positive = visible, counts towards zero each frame) @@ -813,7 +1031,7 @@ typedef struct Player { /* 0xD5F */ u8 unk_D5F; /* 0xD60 */ f32 unk_D60; /* 0xD64 */ s16 unk_D64; - /* 0xD66 */ u16 unk_D66; + /* 0xD66 */ u16 unk_D66; // sfx /* 0xD68 */ s16 unk_D68; /* 0xD6A */ s8 unk_D6A; /* 0xD6B */ u8 unk_D6B; diff --git a/include/z64quake.h b/include/z64quake.h index a1272941d..f0bd401fc 100644 --- a/include/z64quake.h +++ b/include/z64quake.h @@ -47,9 +47,9 @@ s32 Quake_NumActiveQuakes(void); void Quake_Init(void); #define DISTORTION_TYPE_0 (1 << 0) -#define DISTORTION_TYPE_2 (1 << 2) -#define DISTORTION_TYPE_3 (1 << 3) -#define DISTORTION_TYPE_4 (1 << 4) +#define DISTORTION_TYPE_NON_ZORA_SWIMMING (1 << 2) +#define DISTORTION_TYPE_ZORA_SWIMMING (1 << 3) +#define DISTORTION_TYPE_UNDERWATER_ENTRY (1 << 4) #define DISTORTION_TYPE_5 (1 << 5) #define DISTORTION_TYPE_6 (1 << 6) #define DISTORTION_TYPE_7 (1 << 7) diff --git a/include/z64save.h b/include/z64save.h index fa65031eb..d3f538029 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -55,6 +55,14 @@ typedef enum { #define MAGIC_NORMAL_METER 0x30 #define MAGIC_DOUBLE_METER (2 * MAGIC_NORMAL_METER) +// See `R_MAGIC_DBG_SET_UPGRADE` +#define MAGIC_DBG_SET_UPGRADE_NO_ACTION 0 +#define MAGIC_DBG_SET_UPGRADE_NORMAL_METER -1 +#define MAGIC_DBG_SET_UPGRADE_DOUBLE_METER 1 + +#define ENV_HAZARD_TEXT_TRIGGER_HOTROOM (1 << 0) +#define ENV_HAZARD_TEXT_TRIGGER_UNDERWATER (1 << 1) + #define SECONDS_TO_TIMER(seconds) ((seconds) * 100) #define OSTIME_TO_TIMER(osTime) ((osTime) * 64 / 3000 / 10000) @@ -69,7 +77,7 @@ typedef enum { /* 2 */ TIMER_ID_2, /* 3 */ TIMER_ID_MOON_CRASH, // timer used for mooncrash on the clocktower roof /* 4 */ TIMER_ID_MINIGAME_2, // minigame timer - /* 5 */ TIMER_ID_ENV, // environmental timer (underwater or hot room) + /* 5 */ TIMER_ID_ENV_HAZARD, // environmental hazard timer (underwater or hot room) /* 6 */ TIMER_ID_GORON_RACE_UNUSED, /* 7 */ TIMER_ID_MAX, /* 99 */ TIMER_ID_NONE = 99, @@ -89,7 +97,7 @@ typedef enum { /* 5 */ TIMER_STATE_STOP, /* 6 */ TIMER_STATE_6, // like `TIMER_STATE_STOP` but with extra minigame checks /* 7 */ TIMER_STATE_7, // stopped but still update `timerCurTimes` - /* 8 */ TIMER_STATE_ENV_START, + /* 8 */ TIMER_STATE_ENV_HAZARD_START, /* 9 */ TIMER_STATE_ALT_START, /* 10 */ TIMER_STATE_10, // precursor to `TIMER_STATE_ALT_COUNTING` /* 11 */ TIMER_STATE_ALT_COUNTING, @@ -105,6 +113,12 @@ typedef enum { /* 1 */ BOTTLE_TIMER_STATE_COUNTING } BottleTimerState; +typedef enum { + /* 0 */ MINIGAME_STATUS_INACTIVE, + /* 1 */ MINIGAME_STATUS_ACTIVE, + /* 3 */ MINIGAME_STATUS_END = 3 +} MinigameStatus; + typedef enum { /* 0 */ HUD_VISIBILITY_IDLE, /* 1 */ HUD_VISIBILITY_NONE, @@ -133,6 +147,15 @@ typedef enum { /* 52 */ HUD_VISIBILITY_NONE_INSTANT = 52 } HudVisibility; +#define PICTO_PHOTO_WIDTH 160 +#define PICTO_PHOTO_HEIGHT 112 + +#define PICTO_PHOTO_TOPLEFT_X ((SCREEN_WIDTH - PICTO_PHOTO_WIDTH) / 2) +#define PICTO_PHOTO_TOPLEFT_Y ((SCREEN_HEIGHT - PICTO_PHOTO_HEIGHT) / 2) + +#define PICTO_PHOTO_SIZE (PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT) +#define PICTO_PHOTO_COMPRESSED_SIZE (PICTO_PHOTO_SIZE * 5 / 8) + typedef struct SramContext { /* 0x00 */ u8* readBuff; /* 0x04 */ u8 *saveBuf; @@ -230,7 +253,7 @@ typedef struct SavePlayerData { } SavePlayerData; // size = 0x28 typedef struct Save { - /* 0x0000 */ u32 entrance; // "scene_no" + /* 0x0000 */ s32 entrance; // "scene_no" /* 0x0004 */ u8 equippedMask; // "player_mask" /* 0x0005 */ u8 isFirstCycle; // "opening_flag" /* 0x0006 */ u8 unk_06; @@ -239,7 +262,7 @@ typedef struct Save { /* 0x000C */ u16 time; // "zelda_time" /* 0x000E */ u16 owlSaveLocation; /* 0x0010 */ s32 isNight; // "asahiru_fg" - /* 0x0014 */ s32 daySpeed; // "change_zelda_time" + /* 0x0014 */ s32 timeSpeedOffset; // "change_zelda_time" /* 0x0018 */ s32 day; // "totalday" /* 0x001C */ s32 daysElapsed; // "eventday" /* 0x0020 */ u8 playerForm; // "player_character" @@ -298,7 +321,7 @@ typedef struct SaveContext { /* 0x1050 */ u64 bottleTimerTimeLimits[BOTTLE_MAX]; // The original total time given before the timer expires, in centiseconds (1/100th sec). "bottle_sub" /* 0x1080 */ u64 bottleTimerCurTimes[BOTTLE_MAX]; // The remaining time left before the timer expires, in centiseconds (1/100th sec). "bottle_time" /* 0x10B0 */ OSTime bottleTimerPausedOsTimes[BOTTLE_MAX]; // The cumulative osTime spent with the timer paused. "bottle_stop_time" - /* 0x10E0 */ u64 pictoPhoto[1400]; // buffer containing the pictograph photo + /* 0x10E0 */ u8 pictoPhotoI5[PICTO_PHOTO_COMPRESSED_SIZE]; // buffer containing the pictograph photo, compressed to I5 from I8 /* 0x3CA0 */ s32 fileNum; // "file_no" /* 0x3CA4 */ s16 powderKegTimer; // "big_bom_timer" /* 0x3CA6 */ u8 unk_3CA6; @@ -311,8 +334,8 @@ typedef struct SaveContext { /* 0x3DB8 */ u16 entranceSound; // "player_wipe_door_SE" /* 0x3DBA */ u8 unk_3DBA; // "player_wipe_item" /* 0x3DBB */ u8 unk_3DBB; // "next_walk" - /* 0x3DBC */ u16 dogParams; // "dog_flag" - /* 0x3DBE */ u8 textTriggerFlags; // "guide_status" + /* 0x3DBC */ s16 dogParams; // "dog_flag" + /* 0x3DBE */ u8 envHazardTextTriggerFlags; // "guide_status" /* 0x3DBF */ u8 showTitleCard; // "name_display" /* 0x3DC0 */ s16 unk_3DC0; // "shield_magic_timer" /* 0x3DC2 */ u8 unk_3DC2; // "pad1" @@ -343,9 +366,9 @@ typedef struct SaveContext { /* 0x3F32 */ s16 magicToConsume; // accumulated magic that is requested to be consumed "magic_used" /* 0x3F34 */ s16 magicToAdd; // accumulated magic that is requested to be added "magic_recovery" /* 0x3F36 */ u16 mapIndex; // "scene_ID" - /* 0x3F38 */ u16 minigameState; // "yabusame_mode" + /* 0x3F38 */ u16 minigameStatus; // "yabusame_mode" /* 0x3F3A */ u16 minigameScore; // "yabusame_total" - /* 0x3F3C */ u16 unk_3F3C; // "yabusame_out_ct" + /* 0x3F3C */ u16 minigameHiddenScore; // "yabusame_out_ct" /* 0x3F3E */ u8 unk_3F3E; // "no_save" /* 0x3F3F */ u8 unk_3F3F; // "flash_flag" /* 0x3F40 */ SaveOptions options; @@ -390,6 +413,13 @@ typedef enum SunsSongState { #define CURRENT_DAY (((void)0, gSaveContext.save.day) % 5) +// The day begins at CLOCK_TIME(6, 0) so it must be offset. +#define TIME_UNTIL_MOON_CRASH \ + ((4 - CURRENT_DAY) * DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0))); +#define TIME_UNTIL_NEW_DAY (DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0))); + +#define GET_PLAYER_FORM ((void)0, gSaveContext.save.playerForm) + #define SLOT(item) gItemSlots[item] #define AMMO(item) gSaveContext.save.inventory.ammo[SLOT(item)] #define INV_CONTENT(item) gSaveContext.save.inventory.items[SLOT(item)] @@ -430,6 +460,10 @@ typedef enum SunsSongState { #define GET_CUR_FORM_BTN_ITEM(btn) ((u8)((btn) == EQUIP_SLOT_B ? BUTTON_ITEM_EQUIP(CUR_FORM, btn) : BUTTON_ITEM_EQUIP(0, btn))) #define GET_CUR_FORM_BTN_SLOT(btn) ((u8)((btn) == EQUIP_SLOT_B ? C_SLOT_EQUIP(CUR_FORM, btn) : C_SLOT_EQUIP(0, btn))) +#define C_BTN_ITEM(btn) \ + ((gSaveContext.buttonStatus[(btn)] != BTN_DISABLED) \ + ? BUTTON_ITEM_EQUIP(0, (btn)) \ + : ((gSaveContext.hudVisibility == HUD_VISIBILITY_A_B_C) ? BUTTON_ITEM_EQUIP(0, (btn)) : ITEM_NONE)) #define SET_CUR_FORM_BTN_ITEM(btn, item) \ if ((btn) == EQUIP_SLOT_B) { \ @@ -462,6 +496,1013 @@ typedef enum SunsSongState { #define SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(score) (gSaveContext.save.shootingGalleryHighScores = (gSaveContext.save.shootingGalleryHighScores & 0xFFFF0000) | ((u16)(score))) #define SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(score) (gSaveContext.save.shootingGalleryHighScores = ((gSaveContext.save.shootingGalleryHighScores) & 0xFFFF) | ((u16)(score) << 0x10)) +/** + * gSaveContext.save.weekEventReg + */ + +#define PACK_WEEKEVENTREG_FLAG(index, mask) (((index) << 8) | (mask)) + +#define WEEKEVENTREG_00_01 PACK_WEEKEVENTREG_FLAG(0, 0x01) +#define WEEKEVENTREG_00_02 PACK_WEEKEVENTREG_FLAG(0, 0x02) +#define WEEKEVENTREG_00_04 PACK_WEEKEVENTREG_FLAG(0, 0x04) +#define WEEKEVENTREG_00_08 PACK_WEEKEVENTREG_FLAG(0, 0x08) +#define WEEKEVENTREG_00_10 PACK_WEEKEVENTREG_FLAG(0, 0x10) +#define WEEKEVENTREG_00_20 PACK_WEEKEVENTREG_FLAG(0, 0x20) +#define WEEKEVENTREG_00_40 PACK_WEEKEVENTREG_FLAG(0, 0x40) +#define WEEKEVENTREG_00_80 PACK_WEEKEVENTREG_FLAG(0, 0x80) +#define WEEKEVENTREG_01_01 PACK_WEEKEVENTREG_FLAG(1, 0x01) +#define WEEKEVENTREG_01_02 PACK_WEEKEVENTREG_FLAG(1, 0x02) +#define WEEKEVENTREG_01_04 PACK_WEEKEVENTREG_FLAG(1, 0x04) +#define WEEKEVENTREG_01_08 PACK_WEEKEVENTREG_FLAG(1, 0x08) +#define WEEKEVENTREG_01_10 PACK_WEEKEVENTREG_FLAG(1, 0x10) +#define WEEKEVENTREG_01_20 PACK_WEEKEVENTREG_FLAG(1, 0x20) +#define WEEKEVENTREG_01_40 PACK_WEEKEVENTREG_FLAG(1, 0x40) +#define WEEKEVENTREG_01_80 PACK_WEEKEVENTREG_FLAG(1, 0x80) +#define WEEKEVENTREG_02_01 PACK_WEEKEVENTREG_FLAG(2, 0x01) +#define WEEKEVENTREG_02_02 PACK_WEEKEVENTREG_FLAG(2, 0x02) +#define WEEKEVENTREG_02_04 PACK_WEEKEVENTREG_FLAG(2, 0x04) +#define WEEKEVENTREG_02_08 PACK_WEEKEVENTREG_FLAG(2, 0x08) +#define WEEKEVENTREG_02_10 PACK_WEEKEVENTREG_FLAG(2, 0x10) +#define WEEKEVENTREG_02_20 PACK_WEEKEVENTREG_FLAG(2, 0x20) +#define WEEKEVENTREG_02_40 PACK_WEEKEVENTREG_FLAG(2, 0x40) +#define WEEKEVENTREG_02_80 PACK_WEEKEVENTREG_FLAG(2, 0x80) +#define WEEKEVENTREG_03_01 PACK_WEEKEVENTREG_FLAG(3, 0x01) +#define WEEKEVENTREG_03_02 PACK_WEEKEVENTREG_FLAG(3, 0x02) +#define WEEKEVENTREG_03_04 PACK_WEEKEVENTREG_FLAG(3, 0x04) +#define WEEKEVENTREG_03_08 PACK_WEEKEVENTREG_FLAG(3, 0x08) +#define WEEKEVENTREG_03_10 PACK_WEEKEVENTREG_FLAG(3, 0x10) +#define WEEKEVENTREG_03_20 PACK_WEEKEVENTREG_FLAG(3, 0x20) +#define WEEKEVENTREG_03_40 PACK_WEEKEVENTREG_FLAG(3, 0x40) +#define WEEKEVENTREG_03_80 PACK_WEEKEVENTREG_FLAG(3, 0x80) +#define WEEKEVENTREG_04_01 PACK_WEEKEVENTREG_FLAG(4, 0x01) +#define WEEKEVENTREG_04_02 PACK_WEEKEVENTREG_FLAG(4, 0x02) +#define WEEKEVENTREG_04_04 PACK_WEEKEVENTREG_FLAG(4, 0x04) +#define WEEKEVENTREG_04_08 PACK_WEEKEVENTREG_FLAG(4, 0x08) +#define WEEKEVENTREG_04_10 PACK_WEEKEVENTREG_FLAG(4, 0x10) +#define WEEKEVENTREG_04_20 PACK_WEEKEVENTREG_FLAG(4, 0x20) +#define WEEKEVENTREG_04_40 PACK_WEEKEVENTREG_FLAG(4, 0x40) +#define WEEKEVENTREG_04_80 PACK_WEEKEVENTREG_FLAG(4, 0x80) +#define WEEKEVENTREG_05_01 PACK_WEEKEVENTREG_FLAG(5, 0x01) +#define WEEKEVENTREG_05_02 PACK_WEEKEVENTREG_FLAG(5, 0x02) +#define WEEKEVENTREG_05_04 PACK_WEEKEVENTREG_FLAG(5, 0x04) +#define WEEKEVENTREG_05_08 PACK_WEEKEVENTREG_FLAG(5, 0x08) +#define WEEKEVENTREG_05_10 PACK_WEEKEVENTREG_FLAG(5, 0x10) +#define WEEKEVENTREG_05_20 PACK_WEEKEVENTREG_FLAG(5, 0x20) +#define WEEKEVENTREG_05_40 PACK_WEEKEVENTREG_FLAG(5, 0x40) +#define WEEKEVENTREG_05_80 PACK_WEEKEVENTREG_FLAG(5, 0x80) +#define WEEKEVENTREG_06_01 PACK_WEEKEVENTREG_FLAG(6, 0x01) +#define WEEKEVENTREG_06_02 PACK_WEEKEVENTREG_FLAG(6, 0x02) +#define WEEKEVENTREG_06_04 PACK_WEEKEVENTREG_FLAG(6, 0x04) +#define WEEKEVENTREG_06_08 PACK_WEEKEVENTREG_FLAG(6, 0x08) +#define WEEKEVENTREG_06_10 PACK_WEEKEVENTREG_FLAG(6, 0x10) +#define WEEKEVENTREG_06_20 PACK_WEEKEVENTREG_FLAG(6, 0x20) +#define WEEKEVENTREG_06_40 PACK_WEEKEVENTREG_FLAG(6, 0x40) +#define WEEKEVENTREG_06_80 PACK_WEEKEVENTREG_FLAG(6, 0x80) +#define WEEKEVENTREG_07_01 PACK_WEEKEVENTREG_FLAG(7, 0x01) +#define WEEKEVENTREG_07_02 PACK_WEEKEVENTREG_FLAG(7, 0x02) +#define WEEKEVENTREG_07_04 PACK_WEEKEVENTREG_FLAG(7, 0x04) +#define WEEKEVENTREG_07_08 PACK_WEEKEVENTREG_FLAG(7, 0x08) +#define WEEKEVENTREG_07_10 PACK_WEEKEVENTREG_FLAG(7, 0x10) +#define WEEKEVENTREG_07_20 PACK_WEEKEVENTREG_FLAG(7, 0x20) +#define WEEKEVENTREG_07_40 PACK_WEEKEVENTREG_FLAG(7, 0x40) +#define WEEKEVENTREG_07_80 PACK_WEEKEVENTREG_FLAG(7, 0x80) +#define WEEKEVENTREG_08_01 PACK_WEEKEVENTREG_FLAG(8, 0x01) +#define WEEKEVENTREG_08_02 PACK_WEEKEVENTREG_FLAG(8, 0x02) +#define WEEKEVENTREG_08_04 PACK_WEEKEVENTREG_FLAG(8, 0x04) +#define WEEKEVENTREG_08_08 PACK_WEEKEVENTREG_FLAG(8, 0x08) +#define WEEKEVENTREG_08_10 PACK_WEEKEVENTREG_FLAG(8, 0x10) +#define WEEKEVENTREG_08_20 PACK_WEEKEVENTREG_FLAG(8, 0x20) +#define WEEKEVENTREG_08_40 PACK_WEEKEVENTREG_FLAG(8, 0x40) +#define WEEKEVENTREG_08_80 PACK_WEEKEVENTREG_FLAG(8, 0x80) +#define WEEKEVENTREG_09_01 PACK_WEEKEVENTREG_FLAG(9, 0x01) +#define WEEKEVENTREG_09_02 PACK_WEEKEVENTREG_FLAG(9, 0x02) +#define WEEKEVENTREG_09_04 PACK_WEEKEVENTREG_FLAG(9, 0x04) +#define WEEKEVENTREG_09_08 PACK_WEEKEVENTREG_FLAG(9, 0x08) +#define WEEKEVENTREG_09_10 PACK_WEEKEVENTREG_FLAG(9, 0x10) +#define WEEKEVENTREG_09_20 PACK_WEEKEVENTREG_FLAG(9, 0x20) +#define WEEKEVENTREG_09_40 PACK_WEEKEVENTREG_FLAG(9, 0x40) +#define WEEKEVENTREG_09_80 PACK_WEEKEVENTREG_FLAG(9, 0x80) +#define WEEKEVENTREG_10_01 PACK_WEEKEVENTREG_FLAG(10, 0x01) +#define WEEKEVENTREG_10_02 PACK_WEEKEVENTREG_FLAG(10, 0x02) +#define WEEKEVENTREG_10_04 PACK_WEEKEVENTREG_FLAG(10, 0x04) +#define WEEKEVENTREG_10_08 PACK_WEEKEVENTREG_FLAG(10, 0x08) +#define WEEKEVENTREG_10_10 PACK_WEEKEVENTREG_FLAG(10, 0x10) +#define WEEKEVENTREG_10_20 PACK_WEEKEVENTREG_FLAG(10, 0x20) +#define WEEKEVENTREG_10_40 PACK_WEEKEVENTREG_FLAG(10, 0x40) +#define WEEKEVENTREG_10_80 PACK_WEEKEVENTREG_FLAG(10, 0x80) +#define WEEKEVENTREG_11_01 PACK_WEEKEVENTREG_FLAG(11, 0x01) +#define WEEKEVENTREG_11_02 PACK_WEEKEVENTREG_FLAG(11, 0x02) +#define WEEKEVENTREG_11_04 PACK_WEEKEVENTREG_FLAG(11, 0x04) +#define WEEKEVENTREG_11_08 PACK_WEEKEVENTREG_FLAG(11, 0x08) +#define WEEKEVENTREG_11_10 PACK_WEEKEVENTREG_FLAG(11, 0x10) +#define WEEKEVENTREG_11_20 PACK_WEEKEVENTREG_FLAG(11, 0x20) +#define WEEKEVENTREG_11_40 PACK_WEEKEVENTREG_FLAG(11, 0x40) +#define WEEKEVENTREG_11_80 PACK_WEEKEVENTREG_FLAG(11, 0x80) + +// woodfall temple wood flower opened +#define WEEKEVENTREG_12_01 PACK_WEEKEVENTREG_FLAG(12, 0x01) + +#define WEEKEVENTREG_12_02 PACK_WEEKEVENTREG_FLAG(12, 0x02) +#define WEEKEVENTREG_12_04 PACK_WEEKEVENTREG_FLAG(12, 0x04) +#define WEEKEVENTREG_12_08 PACK_WEEKEVENTREG_FLAG(12, 0x08) +#define WEEKEVENTREG_12_10 PACK_WEEKEVENTREG_FLAG(12, 0x10) +#define WEEKEVENTREG_12_20 PACK_WEEKEVENTREG_FLAG(12, 0x20) +#define WEEKEVENTREG_12_40 PACK_WEEKEVENTREG_FLAG(12, 0x40) +#define WEEKEVENTREG_12_80 PACK_WEEKEVENTREG_FLAG(12, 0x80) +#define WEEKEVENTREG_13_01 PACK_WEEKEVENTREG_FLAG(13, 0x01) +#define WEEKEVENTREG_13_02 PACK_WEEKEVENTREG_FLAG(13, 0x02) +#define WEEKEVENTREG_13_04 PACK_WEEKEVENTREG_FLAG(13, 0x04) +#define WEEKEVENTREG_13_08 PACK_WEEKEVENTREG_FLAG(13, 0x08) +#define WEEKEVENTREG_13_10 PACK_WEEKEVENTREG_FLAG(13, 0x10) +#define WEEKEVENTREG_13_20 PACK_WEEKEVENTREG_FLAG(13, 0x20) +#define WEEKEVENTREG_13_40 PACK_WEEKEVENTREG_FLAG(13, 0x40) +#define WEEKEVENTREG_13_80 PACK_WEEKEVENTREG_FLAG(13, 0x80) + +// PlayedMilkMinigame +// Attempted Cremia Cart Ride +#define WEEKEVENTREG_14_01 PACK_WEEKEVENTREG_FLAG(14, 0x01) + +#define WEEKEVENTREG_14_02 PACK_WEEKEVENTREG_FLAG(14, 0x02) +#define WEEKEVENTREG_14_04 PACK_WEEKEVENTREG_FLAG(14, 0x04) +#define WEEKEVENTREG_DRANK_CHATEAU_ROMANI PACK_WEEKEVENTREG_FLAG(14, 0x08) +#define WEEKEVENTREG_14_10 PACK_WEEKEVENTREG_FLAG(14, 0x10) +#define WEEKEVENTREG_14_20 PACK_WEEKEVENTREG_FLAG(14, 0x20) +#define WEEKEVENTREG_14_40 PACK_WEEKEVENTREG_FLAG(14, 0x40) +#define WEEKEVENTREG_14_80 PACK_WEEKEVENTREG_FLAG(14, 0x80) +#define WEEKEVENTREG_15_01 PACK_WEEKEVENTREG_FLAG(15, 0x01) +#define WEEKEVENTREG_15_02 PACK_WEEKEVENTREG_FLAG(15, 0x02) +#define WEEKEVENTREG_15_04 PACK_WEEKEVENTREG_FLAG(15, 0x04) +#define WEEKEVENTREG_15_08 PACK_WEEKEVENTREG_FLAG(15, 0x08) +#define WEEKEVENTREG_15_10 PACK_WEEKEVENTREG_FLAG(15, 0x10) +#define WEEKEVENTREG_15_20 PACK_WEEKEVENTREG_FLAG(15, 0x20) +#define WEEKEVENTREG_15_40 PACK_WEEKEVENTREG_FLAG(15, 0x40) +#define WEEKEVENTREG_15_80 PACK_WEEKEVENTREG_FLAG(15, 0x80) +#define WEEKEVENTREG_16_01 PACK_WEEKEVENTREG_FLAG(16, 0x01) +#define WEEKEVENTREG_16_02 PACK_WEEKEVENTREG_FLAG(16, 0x02) +#define WEEKEVENTREG_16_04 PACK_WEEKEVENTREG_FLAG(16, 0x04) +#define WEEKEVENTREG_16_08 PACK_WEEKEVENTREG_FLAG(16, 0x08) +#define WEEKEVENTREG_16_10 PACK_WEEKEVENTREG_FLAG(16, 0x10) +#define WEEKEVENTREG_16_20 PACK_WEEKEVENTREG_FLAG(16, 0x20) +#define WEEKEVENTREG_16_40 PACK_WEEKEVENTREG_FLAG(16, 0x40) +#define WEEKEVENTREG_16_80 PACK_WEEKEVENTREG_FLAG(16, 0x80) +#define WEEKEVENTREG_17_01 PACK_WEEKEVENTREG_FLAG(17, 0x01) +#define WEEKEVENTREG_17_02 PACK_WEEKEVENTREG_FLAG(17, 0x02) +#define WEEKEVENTREG_17_04 PACK_WEEKEVENTREG_FLAG(17, 0x04) +#define WEEKEVENTREG_17_08 PACK_WEEKEVENTREG_FLAG(17, 0x08) +#define WEEKEVENTREG_17_10 PACK_WEEKEVENTREG_FLAG(17, 0x10) +#define WEEKEVENTREG_17_20 PACK_WEEKEVENTREG_FLAG(17, 0x20) +#define WEEKEVENTREG_17_40 PACK_WEEKEVENTREG_FLAG(17, 0x40) +#define WEEKEVENTREG_17_80 PACK_WEEKEVENTREG_FLAG(17, 0x80) +#define WEEKEVENTREG_18_01 PACK_WEEKEVENTREG_FLAG(18, 0x01) +#define WEEKEVENTREG_18_02 PACK_WEEKEVENTREG_FLAG(18, 0x02) +#define WEEKEVENTREG_18_04 PACK_WEEKEVENTREG_FLAG(18, 0x04) +#define WEEKEVENTREG_18_08 PACK_WEEKEVENTREG_FLAG(18, 0x08) +#define WEEKEVENTREG_18_10 PACK_WEEKEVENTREG_FLAG(18, 0x10) +#define WEEKEVENTREG_18_20 PACK_WEEKEVENTREG_FLAG(18, 0x20) +#define WEEKEVENTREG_18_40 PACK_WEEKEVENTREG_FLAG(18, 0x40) +#define WEEKEVENTREG_18_80 PACK_WEEKEVENTREG_FLAG(18, 0x80) +#define WEEKEVENTREG_19_01 PACK_WEEKEVENTREG_FLAG(19, 0x01) +#define WEEKEVENTREG_19_02 PACK_WEEKEVENTREG_FLAG(19, 0x02) +#define WEEKEVENTREG_19_04 PACK_WEEKEVENTREG_FLAG(19, 0x04) +#define WEEKEVENTREG_19_08 PACK_WEEKEVENTREG_FLAG(19, 0x08) +#define WEEKEVENTREG_19_10 PACK_WEEKEVENTREG_FLAG(19, 0x10) +#define WEEKEVENTREG_19_20 PACK_WEEKEVENTREG_FLAG(19, 0x20) +#define WEEKEVENTREG_19_40 PACK_WEEKEVENTREG_FLAG(19, 0x40) +#define WEEKEVENTREG_19_80 PACK_WEEKEVENTREG_FLAG(19, 0x80) +#define WEEKEVENTREG_20_01 PACK_WEEKEVENTREG_FLAG(20, 0x01) + +// woodfall temple purification cutscene watched +#define WEEKEVENTREG_20_02 PACK_WEEKEVENTREG_FLAG(20, 0x02) + +#define WEEKEVENTREG_20_04 PACK_WEEKEVENTREG_FLAG(20, 0x04) +#define WEEKEVENTREG_20_08 PACK_WEEKEVENTREG_FLAG(20, 0x08) +#define WEEKEVENTREG_20_10 PACK_WEEKEVENTREG_FLAG(20, 0x10) +#define WEEKEVENTREG_20_20 PACK_WEEKEVENTREG_FLAG(20, 0x20) +#define WEEKEVENTREG_20_40 PACK_WEEKEVENTREG_FLAG(20, 0x40) +#define WEEKEVENTREG_20_80 PACK_WEEKEVENTREG_FLAG(20, 0x80) +#define WEEKEVENTREG_21_01 PACK_WEEKEVENTREG_FLAG(21, 0x01) +#define WEEKEVENTREG_21_02 PACK_WEEKEVENTREG_FLAG(21, 0x02) +#define WEEKEVENTREG_21_04 PACK_WEEKEVENTREG_FLAG(21, 0x04) +#define WEEKEVENTREG_21_08 PACK_WEEKEVENTREG_FLAG(21, 0x08) +#define WEEKEVENTREG_21_10 PACK_WEEKEVENTREG_FLAG(21, 0x10) +#define WEEKEVENTREG_21_20 PACK_WEEKEVENTREG_FLAG(21, 0x20) +#define WEEKEVENTREG_21_40 PACK_WEEKEVENTREG_FLAG(21, 0x40) +#define WEEKEVENTREG_21_80 PACK_WEEKEVENTREG_FLAG(21, 0x80) + +// Aliens defeated +// "Winning" the alien invasion +#define WEEKEVENTREG_22_01 PACK_WEEKEVENTREG_FLAG(22, 0x01) + +#define WEEKEVENTREG_22_02 PACK_WEEKEVENTREG_FLAG(22, 0x02) +#define WEEKEVENTREG_22_04 PACK_WEEKEVENTREG_FLAG(22, 0x04) +#define WEEKEVENTREG_22_08 PACK_WEEKEVENTREG_FLAG(22, 0x08) +#define WEEKEVENTREG_22_10 PACK_WEEKEVENTREG_FLAG(22, 0x10) +#define WEEKEVENTREG_22_20 PACK_WEEKEVENTREG_FLAG(22, 0x20) +#define WEEKEVENTREG_22_40 PACK_WEEKEVENTREG_FLAG(22, 0x40) +#define WEEKEVENTREG_22_80 PACK_WEEKEVENTREG_FLAG(22, 0x80) +#define WEEKEVENTREG_23_01 PACK_WEEKEVENTREG_FLAG(23, 0x01) +#define WEEKEVENTREG_23_02 PACK_WEEKEVENTREG_FLAG(23, 0x02) +#define WEEKEVENTREG_23_04 PACK_WEEKEVENTREG_FLAG(23, 0x04) +#define WEEKEVENTREG_23_08 PACK_WEEKEVENTREG_FLAG(23, 0x08) +#define WEEKEVENTREG_23_10 PACK_WEEKEVENTREG_FLAG(23, 0x10) +#define WEEKEVENTREG_23_20 PACK_WEEKEVENTREG_FLAG(23, 0x20) +#define WEEKEVENTREG_23_40 PACK_WEEKEVENTREG_FLAG(23, 0x40) +#define WEEKEVENTREG_23_80 PACK_WEEKEVENTREG_FLAG(23, 0x80) +#define WEEKEVENTREG_24_01 PACK_WEEKEVENTREG_FLAG(24, 0x01) +#define WEEKEVENTREG_24_02 PACK_WEEKEVENTREG_FLAG(24, 0x02) +#define WEEKEVENTREG_24_04 PACK_WEEKEVENTREG_FLAG(24, 0x04) +#define WEEKEVENTREG_24_08 PACK_WEEKEVENTREG_FLAG(24, 0x08) + +// The player has already talked as a Goron at least once to Goron elder +#define WEEKEVENTREG_24_10 PACK_WEEKEVENTREG_FLAG(24, 0x10) + +// The player has already talked as a non-Goron at least once +#define WEEKEVENTREG_24_20 PACK_WEEKEVENTREG_FLAG(24, 0x20) + +#define WEEKEVENTREG_24_40 PACK_WEEKEVENTREG_FLAG(24, 0x40) + +// The player has talked to the Goron Child at least once +#define WEEKEVENTREG_24_80 PACK_WEEKEVENTREG_FLAG(24, 0x80) + +#define WEEKEVENTREG_25_01 PACK_WEEKEVENTREG_FLAG(25, 0x01) +#define WEEKEVENTREG_25_02 PACK_WEEKEVENTREG_FLAG(25, 0x02) +#define WEEKEVENTREG_25_04 PACK_WEEKEVENTREG_FLAG(25, 0x04) + +// breman mask was already used +#define WEEKEVENTREG_25_08 PACK_WEEKEVENTREG_FLAG(25, 0x08) + +#define WEEKEVENTREG_25_10 PACK_WEEKEVENTREG_FLAG(25, 0x10) +#define WEEKEVENTREG_25_20 PACK_WEEKEVENTREG_FLAG(25, 0x20) +#define WEEKEVENTREG_25_40 PACK_WEEKEVENTREG_FLAG(25, 0x40) +#define WEEKEVENTREG_25_80 PACK_WEEKEVENTREG_FLAG(25, 0x80) +#define WEEKEVENTREG_26_01 PACK_WEEKEVENTREG_FLAG(26, 0x01) +#define WEEKEVENTREG_26_02 PACK_WEEKEVENTREG_FLAG(26, 0x02) +#define WEEKEVENTREG_26_04 PACK_WEEKEVENTREG_FLAG(26, 0x04) +#define WEEKEVENTREG_26_08 PACK_WEEKEVENTREG_FLAG(26, 0x08) +#define WEEKEVENTREG_26_10 PACK_WEEKEVENTREG_FLAG(26, 0x10) +#define WEEKEVENTREG_26_20 PACK_WEEKEVENTREG_FLAG(26, 0x20) +#define WEEKEVENTREG_26_40 PACK_WEEKEVENTREG_FLAG(26, 0x40) +#define WEEKEVENTREG_26_80 PACK_WEEKEVENTREG_FLAG(26, 0x80) +#define WEEKEVENTREG_27_01 PACK_WEEKEVENTREG_FLAG(27, 0x01) +#define WEEKEVENTREG_27_02 PACK_WEEKEVENTREG_FLAG(27, 0x02) +#define WEEKEVENTREG_27_04 PACK_WEEKEVENTREG_FLAG(27, 0x04) +#define WEEKEVENTREG_27_08 PACK_WEEKEVENTREG_FLAG(27, 0x08) +#define WEEKEVENTREG_27_10 PACK_WEEKEVENTREG_FLAG(27, 0x10) +#define WEEKEVENTREG_27_20 PACK_WEEKEVENTREG_FLAG(27, 0x20) +#define WEEKEVENTREG_27_40 PACK_WEEKEVENTREG_FLAG(27, 0x40) +#define WEEKEVENTREG_27_80 PACK_WEEKEVENTREG_FLAG(27, 0x80) +#define WEEKEVENTREG_28_01 PACK_WEEKEVENTREG_FLAG(28, 0x01) +#define WEEKEVENTREG_28_02 PACK_WEEKEVENTREG_FLAG(28, 0x02) +#define WEEKEVENTREG_28_04 PACK_WEEKEVENTREG_FLAG(28, 0x04) +#define WEEKEVENTREG_28_08 PACK_WEEKEVENTREG_FLAG(28, 0x08) +#define WEEKEVENTREG_28_10 PACK_WEEKEVENTREG_FLAG(28, 0x10) +#define WEEKEVENTREG_28_20 PACK_WEEKEVENTREG_FLAG(28, 0x20) +#define WEEKEVENTREG_28_40 PACK_WEEKEVENTREG_FLAG(28, 0x40) +#define WEEKEVENTREG_28_80 PACK_WEEKEVENTREG_FLAG(28, 0x80) +#define WEEKEVENTREG_29_01 PACK_WEEKEVENTREG_FLAG(29, 0x01) +#define WEEKEVENTREG_29_02 PACK_WEEKEVENTREG_FLAG(29, 0x02) +#define WEEKEVENTREG_29_04 PACK_WEEKEVENTREG_FLAG(29, 0x04) +#define WEEKEVENTREG_29_08 PACK_WEEKEVENTREG_FLAG(29, 0x08) +#define WEEKEVENTREG_29_10 PACK_WEEKEVENTREG_FLAG(29, 0x10) +#define WEEKEVENTREG_29_20 PACK_WEEKEVENTREG_FLAG(29, 0x20) +#define WEEKEVENTREG_29_40 PACK_WEEKEVENTREG_FLAG(29, 0x40) +#define WEEKEVENTREG_29_80 PACK_WEEKEVENTREG_FLAG(29, 0x80) +#define WEEKEVENTREG_30_01 PACK_WEEKEVENTREG_FLAG(30, 0x01) +#define WEEKEVENTREG_30_02 PACK_WEEKEVENTREG_FLAG(30, 0x02) +#define WEEKEVENTREG_30_04 PACK_WEEKEVENTREG_FLAG(30, 0x04) +#define WEEKEVENTREG_30_08 PACK_WEEKEVENTREG_FLAG(30, 0x08) +#define WEEKEVENTREG_30_10 PACK_WEEKEVENTREG_FLAG(30, 0x10) +#define WEEKEVENTREG_30_20 PACK_WEEKEVENTREG_FLAG(30, 0x20) +#define WEEKEVENTREG_30_40 PACK_WEEKEVENTREG_FLAG(30, 0x40) +#define WEEKEVENTREG_30_80 PACK_WEEKEVENTREG_FLAG(30, 0x80) +#define WEEKEVENTREG_31_01 PACK_WEEKEVENTREG_FLAG(31, 0x01) +#define WEEKEVENTREG_31_02 PACK_WEEKEVENTREG_FLAG(31, 0x02) + +// Unconfirmed: "Tatl's Second Cycle Text?" +#define WEEKEVENTREG_31_04 PACK_WEEKEVENTREG_FLAG(31, 0x04) + +#define WEEKEVENTREG_31_08 PACK_WEEKEVENTREG_FLAG(31, 0x08) +#define WEEKEVENTREG_31_10 PACK_WEEKEVENTREG_FLAG(31, 0x10) +#define WEEKEVENTREG_31_20 PACK_WEEKEVENTREG_FLAG(31, 0x20) + +// Cremia asked the player to accompany her to town +#define WEEKEVENTREG_31_40 PACK_WEEKEVENTREG_FLAG(31, 0x40) +// Player is playing the Milk Run +#define WEEKEVENTREG_31_80 PACK_WEEKEVENTREG_FLAG(31, 0x80) + +#define WEEKEVENTREG_32_01 PACK_WEEKEVENTREG_FLAG(32, 0x01) +#define WEEKEVENTREG_32_02 PACK_WEEKEVENTREG_FLAG(32, 0x02) +#define WEEKEVENTREG_32_04 PACK_WEEKEVENTREG_FLAG(32, 0x04) +#define WEEKEVENTREG_32_08 PACK_WEEKEVENTREG_FLAG(32, 0x08) +#define WEEKEVENTREG_32_10 PACK_WEEKEVENTREG_FLAG(32, 0x10) +#define WEEKEVENTREG_32_20 PACK_WEEKEVENTREG_FLAG(32, 0x20) + +// Woodfall Temple Frog Returned +#define WEEKEVENTREG_32_40 PACK_WEEKEVENTREG_FLAG(32, 0x40) +// Great Bay Temple Frog Returned +#define WEEKEVENTREG_32_80 PACK_WEEKEVENTREG_FLAG(32, 0x80) +// Southern Swamp Frog Returned +#define WEEKEVENTREG_33_01 PACK_WEEKEVENTREG_FLAG(33, 0x01) +// Laundry Pool Frog Returned +#define WEEKEVENTREG_33_02 PACK_WEEKEVENTREG_FLAG(33, 0x02) + +#define WEEKEVENTREG_33_04 PACK_WEEKEVENTREG_FLAG(33, 0x04) +#define WEEKEVENTREG_33_08 PACK_WEEKEVENTREG_FLAG(33, 0x08) +#define WEEKEVENTREG_33_10 PACK_WEEKEVENTREG_FLAG(33, 0x10) +#define WEEKEVENTREG_33_20 PACK_WEEKEVENTREG_FLAG(33, 0x20) +#define WEEKEVENTREG_33_40 PACK_WEEKEVENTREG_FLAG(33, 0x40) + +// Mountain village is unfrozen +#define WEEKEVENTREG_33_80 PACK_WEEKEVENTREG_FLAG(33, 0x80) +// Spoken to MINIFROG_YELLOW +#define WEEKEVENTREG_34_01 PACK_WEEKEVENTREG_FLAG(34, 0x01) + +#define WEEKEVENTREG_34_02 PACK_WEEKEVENTREG_FLAG(34, 0x02) +#define WEEKEVENTREG_34_04 PACK_WEEKEVENTREG_FLAG(34, 0x04) +#define WEEKEVENTREG_34_08 PACK_WEEKEVENTREG_FLAG(34, 0x08) +#define WEEKEVENTREG_34_10 PACK_WEEKEVENTREG_FLAG(34, 0x10) +#define WEEKEVENTREG_34_20 PACK_WEEKEVENTREG_FLAG(34, 0x20) +#define WEEKEVENTREG_34_40 PACK_WEEKEVENTREG_FLAG(34, 0x40) + +// Cremia did Milk Run alone. Player didn't interact or didn't accept the ride +#define WEEKEVENTREG_34_80 PACK_WEEKEVENTREG_FLAG(34, 0x80) + +#define WEEKEVENTREG_35_01 PACK_WEEKEVENTREG_FLAG(35, 0x01) +#define WEEKEVENTREG_35_02 PACK_WEEKEVENTREG_FLAG(35, 0x02) +#define WEEKEVENTREG_35_04 PACK_WEEKEVENTREG_FLAG(35, 0x04) +#define WEEKEVENTREG_35_08 PACK_WEEKEVENTREG_FLAG(35, 0x08) +#define WEEKEVENTREG_35_10 PACK_WEEKEVENTREG_FLAG(35, 0x10) +#define WEEKEVENTREG_35_20 PACK_WEEKEVENTREG_FLAG(35, 0x20) +#define WEEKEVENTREG_35_40 PACK_WEEKEVENTREG_FLAG(35, 0x40) + +// Obtained Heart Piece from Five Frogs of the Frog Choir +#define WEEKEVENTREG_35_80 PACK_WEEKEVENTREG_FLAG(35, 0x80) + +#define WEEKEVENTREG_36_01 PACK_WEEKEVENTREG_FLAG(36, 0x01) +#define WEEKEVENTREG_36_02 PACK_WEEKEVENTREG_FLAG(36, 0x02) +#define WEEKEVENTREG_36_04 PACK_WEEKEVENTREG_FLAG(36, 0x04) +#define WEEKEVENTREG_36_08 PACK_WEEKEVENTREG_FLAG(36, 0x08) +#define WEEKEVENTREG_36_10 PACK_WEEKEVENTREG_FLAG(36, 0x10) +#define WEEKEVENTREG_36_20 PACK_WEEKEVENTREG_FLAG(36, 0x20) +#define WEEKEVENTREG_36_40 PACK_WEEKEVENTREG_FLAG(36, 0x40) +#define WEEKEVENTREG_36_80 PACK_WEEKEVENTREG_FLAG(36, 0x80) +#define WEEKEVENTREG_37_01 PACK_WEEKEVENTREG_FLAG(37, 0x01) +#define WEEKEVENTREG_37_02 PACK_WEEKEVENTREG_FLAG(37, 0x02) +#define WEEKEVENTREG_37_04 PACK_WEEKEVENTREG_FLAG(37, 0x04) +#define WEEKEVENTREG_37_08 PACK_WEEKEVENTREG_FLAG(37, 0x08) +#define WEEKEVENTREG_37_10 PACK_WEEKEVENTREG_FLAG(37, 0x10) +#define WEEKEVENTREG_37_20 PACK_WEEKEVENTREG_FLAG(37, 0x20) +#define WEEKEVENTREG_37_40 PACK_WEEKEVENTREG_FLAG(37, 0x40) +#define WEEKEVENTREG_37_80 PACK_WEEKEVENTREG_FLAG(37, 0x80) +#define WEEKEVENTREG_38_01 PACK_WEEKEVENTREG_FLAG(38, 0x01) +#define WEEKEVENTREG_38_02 PACK_WEEKEVENTREG_FLAG(38, 0x02) +#define WEEKEVENTREG_38_04 PACK_WEEKEVENTREG_FLAG(38, 0x04) +#define WEEKEVENTREG_38_08 PACK_WEEKEVENTREG_FLAG(38, 0x08) +#define WEEKEVENTREG_38_10 PACK_WEEKEVENTREG_FLAG(38, 0x10) +#define WEEKEVENTREG_38_20 PACK_WEEKEVENTREG_FLAG(38, 0x20) +#define WEEKEVENTREG_38_40 PACK_WEEKEVENTREG_FLAG(38, 0x40) +#define WEEKEVENTREG_38_80 PACK_WEEKEVENTREG_FLAG(38, 0x80) +#define WEEKEVENTREG_39_01 PACK_WEEKEVENTREG_FLAG(39, 0x01) +#define WEEKEVENTREG_39_02 PACK_WEEKEVENTREG_FLAG(39, 0x02) +#define WEEKEVENTREG_39_04 PACK_WEEKEVENTREG_FLAG(39, 0x04) +#define WEEKEVENTREG_39_08 PACK_WEEKEVENTREG_FLAG(39, 0x08) +#define WEEKEVENTREG_39_10 PACK_WEEKEVENTREG_FLAG(39, 0x10) +#define WEEKEVENTREG_39_20 PACK_WEEKEVENTREG_FLAG(39, 0x20) +#define WEEKEVENTREG_39_40 PACK_WEEKEVENTREG_FLAG(39, 0x40) +#define WEEKEVENTREG_39_80 PACK_WEEKEVENTREG_FLAG(39, 0x80) +#define WEEKEVENTREG_40_01 PACK_WEEKEVENTREG_FLAG(40, 0x01) +#define WEEKEVENTREG_40_02 PACK_WEEKEVENTREG_FLAG(40, 0x02) +#define WEEKEVENTREG_40_04 PACK_WEEKEVENTREG_FLAG(40, 0x04) +#define WEEKEVENTREG_40_08 PACK_WEEKEVENTREG_FLAG(40, 0x08) +#define WEEKEVENTREG_40_10 PACK_WEEKEVENTREG_FLAG(40, 0x10) +#define WEEKEVENTREG_40_20 PACK_WEEKEVENTREG_FLAG(40, 0x20) +#define WEEKEVENTREG_40_40 PACK_WEEKEVENTREG_FLAG(40, 0x40) +#define WEEKEVENTREG_40_80 PACK_WEEKEVENTREG_FLAG(40, 0x80) +#define WEEKEVENTREG_41_01 PACK_WEEKEVENTREG_FLAG(41, 0x01) +#define WEEKEVENTREG_41_02 PACK_WEEKEVENTREG_FLAG(41, 0x02) +#define WEEKEVENTREG_41_04 PACK_WEEKEVENTREG_FLAG(41, 0x04) +#define WEEKEVENTREG_41_08 PACK_WEEKEVENTREG_FLAG(41, 0x08) +#define WEEKEVENTREG_41_10 PACK_WEEKEVENTREG_FLAG(41, 0x10) +#define WEEKEVENTREG_41_20 PACK_WEEKEVENTREG_FLAG(41, 0x20) +#define WEEKEVENTREG_41_40 PACK_WEEKEVENTREG_FLAG(41, 0x40) +#define WEEKEVENTREG_41_80 PACK_WEEKEVENTREG_FLAG(41, 0x80) +#define WEEKEVENTREG_42_01 PACK_WEEKEVENTREG_FLAG(42, 0x01) +#define WEEKEVENTREG_42_02 PACK_WEEKEVENTREG_FLAG(42, 0x02) +#define WEEKEVENTREG_42_04 PACK_WEEKEVENTREG_FLAG(42, 0x04) +#define WEEKEVENTREG_42_08 PACK_WEEKEVENTREG_FLAG(42, 0x08) +#define WEEKEVENTREG_42_10 PACK_WEEKEVENTREG_FLAG(42, 0x10) +#define WEEKEVENTREG_42_20 PACK_WEEKEVENTREG_FLAG(42, 0x20) +#define WEEKEVENTREG_42_40 PACK_WEEKEVENTREG_FLAG(42, 0x40) +#define WEEKEVENTREG_42_80 PACK_WEEKEVENTREG_FLAG(42, 0x80) +#define WEEKEVENTREG_43_01 PACK_WEEKEVENTREG_FLAG(43, 0x01) +#define WEEKEVENTREG_43_02 PACK_WEEKEVENTREG_FLAG(43, 0x02) +#define WEEKEVENTREG_43_04 PACK_WEEKEVENTREG_FLAG(43, 0x04) +#define WEEKEVENTREG_43_08 PACK_WEEKEVENTREG_FLAG(43, 0x08) +#define WEEKEVENTREG_43_10 PACK_WEEKEVENTREG_FLAG(43, 0x10) +#define WEEKEVENTREG_43_20 PACK_WEEKEVENTREG_FLAG(43, 0x20) +#define WEEKEVENTREG_43_40 PACK_WEEKEVENTREG_FLAG(43, 0x40) +#define WEEKEVENTREG_43_80 PACK_WEEKEVENTREG_FLAG(43, 0x80) +#define WEEKEVENTREG_44_01 PACK_WEEKEVENTREG_FLAG(44, 0x01) +#define WEEKEVENTREG_44_02 PACK_WEEKEVENTREG_FLAG(44, 0x02) +#define WEEKEVENTREG_44_04 PACK_WEEKEVENTREG_FLAG(44, 0x04) +#define WEEKEVENTREG_44_08 PACK_WEEKEVENTREG_FLAG(44, 0x08) +#define WEEKEVENTREG_44_10 PACK_WEEKEVENTREG_FLAG(44, 0x10) +#define WEEKEVENTREG_44_20 PACK_WEEKEVENTREG_FLAG(44, 0x20) +#define WEEKEVENTREG_44_40 PACK_WEEKEVENTREG_FLAG(44, 0x40) +#define WEEKEVENTREG_44_80 PACK_WEEKEVENTREG_FLAG(44, 0x80) +#define WEEKEVENTREG_45_01 PACK_WEEKEVENTREG_FLAG(45, 0x01) +#define WEEKEVENTREG_45_02 PACK_WEEKEVENTREG_FLAG(45, 0x02) +#define WEEKEVENTREG_45_04 PACK_WEEKEVENTREG_FLAG(45, 0x04) +#define WEEKEVENTREG_45_08 PACK_WEEKEVENTREG_FLAG(45, 0x08) +#define WEEKEVENTREG_45_10 PACK_WEEKEVENTREG_FLAG(45, 0x10) +#define WEEKEVENTREG_45_20 PACK_WEEKEVENTREG_FLAG(45, 0x20) +#define WEEKEVENTREG_45_40 PACK_WEEKEVENTREG_FLAG(45, 0x40) +#define WEEKEVENTREG_45_80 PACK_WEEKEVENTREG_FLAG(45, 0x80) +#define WEEKEVENTREG_46_01 PACK_WEEKEVENTREG_FLAG(46, 0x01) +#define WEEKEVENTREG_46_02 PACK_WEEKEVENTREG_FLAG(46, 0x02) +#define WEEKEVENTREG_46_04 PACK_WEEKEVENTREG_FLAG(46, 0x04) +#define WEEKEVENTREG_46_08 PACK_WEEKEVENTREG_FLAG(46, 0x08) +#define WEEKEVENTREG_46_10 PACK_WEEKEVENTREG_FLAG(46, 0x10) +#define WEEKEVENTREG_46_20 PACK_WEEKEVENTREG_FLAG(46, 0x20) +#define WEEKEVENTREG_46_40 PACK_WEEKEVENTREG_FLAG(46, 0x40) +#define WEEKEVENTREG_46_80 PACK_WEEKEVENTREG_FLAG(46, 0x80) +#define WEEKEVENTREG_47_01 PACK_WEEKEVENTREG_FLAG(47, 0x01) +#define WEEKEVENTREG_47_02 PACK_WEEKEVENTREG_FLAG(47, 0x02) +#define WEEKEVENTREG_47_04 PACK_WEEKEVENTREG_FLAG(47, 0x04) +#define WEEKEVENTREG_47_08 PACK_WEEKEVENTREG_FLAG(47, 0x08) +#define WEEKEVENTREG_47_10 PACK_WEEKEVENTREG_FLAG(47, 0x10) +#define WEEKEVENTREG_47_20 PACK_WEEKEVENTREG_FLAG(47, 0x20) +#define WEEKEVENTREG_47_40 PACK_WEEKEVENTREG_FLAG(47, 0x40) +#define WEEKEVENTREG_47_80 PACK_WEEKEVENTREG_FLAG(47, 0x80) +#define WEEKEVENTREG_48_01 PACK_WEEKEVENTREG_FLAG(48, 0x01) +#define WEEKEVENTREG_48_02 PACK_WEEKEVENTREG_FLAG(48, 0x02) +#define WEEKEVENTREG_48_04 PACK_WEEKEVENTREG_FLAG(48, 0x04) +#define WEEKEVENTREG_48_08 PACK_WEEKEVENTREG_FLAG(48, 0x08) +#define WEEKEVENTREG_48_10 PACK_WEEKEVENTREG_FLAG(48, 0x10) +#define WEEKEVENTREG_48_20 PACK_WEEKEVENTREG_FLAG(48, 0x20) +#define WEEKEVENTREG_48_40 PACK_WEEKEVENTREG_FLAG(48, 0x40) +#define WEEKEVENTREG_48_80 PACK_WEEKEVENTREG_FLAG(48, 0x80) +#define WEEKEVENTREG_49_01 PACK_WEEKEVENTREG_FLAG(49, 0x01) +#define WEEKEVENTREG_49_02 PACK_WEEKEVENTREG_FLAG(49, 0x02) +#define WEEKEVENTREG_49_04 PACK_WEEKEVENTREG_FLAG(49, 0x04) +#define WEEKEVENTREG_49_08 PACK_WEEKEVENTREG_FLAG(49, 0x08) +#define WEEKEVENTREG_49_10 PACK_WEEKEVENTREG_FLAG(49, 0x10) +#define WEEKEVENTREG_49_20 PACK_WEEKEVENTREG_FLAG(49, 0x20) +#define WEEKEVENTREG_49_40 PACK_WEEKEVENTREG_FLAG(49, 0x40) +#define WEEKEVENTREG_49_80 PACK_WEEKEVENTREG_FLAG(49, 0x80) +#define WEEKEVENTREG_50_01 PACK_WEEKEVENTREG_FLAG(50, 0x01) +#define WEEKEVENTREG_50_02 PACK_WEEKEVENTREG_FLAG(50, 0x02) +#define WEEKEVENTREG_50_04 PACK_WEEKEVENTREG_FLAG(50, 0x04) +#define WEEKEVENTREG_50_08 PACK_WEEKEVENTREG_FLAG(50, 0x08) +#define WEEKEVENTREG_50_10 PACK_WEEKEVENTREG_FLAG(50, 0x10) +#define WEEKEVENTREG_50_20 PACK_WEEKEVENTREG_FLAG(50, 0x20) +#define WEEKEVENTREG_50_40 PACK_WEEKEVENTREG_FLAG(50, 0x40) +#define WEEKEVENTREG_50_80 PACK_WEEKEVENTREG_FLAG(50, 0x80) +#define WEEKEVENTREG_51_01 PACK_WEEKEVENTREG_FLAG(51, 0x01) +#define WEEKEVENTREG_51_02 PACK_WEEKEVENTREG_FLAG(51, 0x02) +#define WEEKEVENTREG_51_04 PACK_WEEKEVENTREG_FLAG(51, 0x04) +#define WEEKEVENTREG_51_08 PACK_WEEKEVENTREG_FLAG(51, 0x08) +#define WEEKEVENTREG_51_10 PACK_WEEKEVENTREG_FLAG(51, 0x10) +#define WEEKEVENTREG_51_20 PACK_WEEKEVENTREG_FLAG(51, 0x20) +#define WEEKEVENTREG_51_40 PACK_WEEKEVENTREG_FLAG(51, 0x40) +#define WEEKEVENTREG_51_80 PACK_WEEKEVENTREG_FLAG(51, 0x80) + +// ProtectedCremia +#define WEEKEVENTREG_52_01 PACK_WEEKEVENTREG_FLAG(52, 0x01) +// Lose Milk Run minigame +#define WEEKEVENTREG_52_02 PACK_WEEKEVENTREG_FLAG(52, 0x02) + +#define WEEKEVENTREG_52_04 PACK_WEEKEVENTREG_FLAG(52, 0x04) +#define WEEKEVENTREG_52_08 PACK_WEEKEVENTREG_FLAG(52, 0x08) +#define WEEKEVENTREG_52_10 PACK_WEEKEVENTREG_FLAG(52, 0x10) + +// cleared Stone Tower Temple +#define WEEKEVENTREG_52_20 PACK_WEEKEVENTREG_FLAG(52, 0x20) + +#define WEEKEVENTREG_52_40 PACK_WEEKEVENTREG_FLAG(52, 0x40) +#define WEEKEVENTREG_52_80 PACK_WEEKEVENTREG_FLAG(52, 0x80) +#define WEEKEVENTREG_53_01 PACK_WEEKEVENTREG_FLAG(53, 0x01) +#define WEEKEVENTREG_53_02 PACK_WEEKEVENTREG_FLAG(53, 0x02) +#define WEEKEVENTREG_53_04 PACK_WEEKEVENTREG_FLAG(53, 0x04) +#define WEEKEVENTREG_53_08 PACK_WEEKEVENTREG_FLAG(53, 0x08) +#define WEEKEVENTREG_53_10 PACK_WEEKEVENTREG_FLAG(53, 0x10) +#define WEEKEVENTREG_53_20 PACK_WEEKEVENTREG_FLAG(53, 0x20) +#define WEEKEVENTREG_53_40 PACK_WEEKEVENTREG_FLAG(53, 0x40) +#define WEEKEVENTREG_53_80 PACK_WEEKEVENTREG_FLAG(53, 0x80) +#define WEEKEVENTREG_54_01 PACK_WEEKEVENTREG_FLAG(54, 0x01) +#define WEEKEVENTREG_54_02 PACK_WEEKEVENTREG_FLAG(54, 0x02) +#define WEEKEVENTREG_54_04 PACK_WEEKEVENTREG_FLAG(54, 0x04) +#define WEEKEVENTREG_54_08 PACK_WEEKEVENTREG_FLAG(54, 0x08) +#define WEEKEVENTREG_54_10 PACK_WEEKEVENTREG_FLAG(54, 0x10) +#define WEEKEVENTREG_54_20 PACK_WEEKEVENTREG_FLAG(54, 0x20) +#define WEEKEVENTREG_54_40 PACK_WEEKEVENTREG_FLAG(54, 0x40) +#define WEEKEVENTREG_54_80 PACK_WEEKEVENTREG_FLAG(54, 0x80) +#define WEEKEVENTREG_55_01 PACK_WEEKEVENTREG_FLAG(55, 0x01) + +// Unconfirmed: "Link the Goron Claims His Reservation: 4:30 PM" +#define WEEKEVENTREG_55_02 PACK_WEEKEVENTREG_FLAG(55, 0x02) + +#define WEEKEVENTREG_55_04 PACK_WEEKEVENTREG_FLAG(55, 0x04) +#define WEEKEVENTREG_55_08 PACK_WEEKEVENTREG_FLAG(55, 0x08) +#define WEEKEVENTREG_55_10 PACK_WEEKEVENTREG_FLAG(55, 0x10) +#define WEEKEVENTREG_55_20 PACK_WEEKEVENTREG_FLAG(55, 0x20) +#define WEEKEVENTREG_55_40 PACK_WEEKEVENTREG_FLAG(55, 0x40) + +// Gyorg has been defeated +#define WEEKEVENTREG_55_80 PACK_WEEKEVENTREG_FLAG(55, 0x80) + +#define WEEKEVENTREG_56_01 PACK_WEEKEVENTREG_FLAG(56, 0x01) +#define WEEKEVENTREG_56_02 PACK_WEEKEVENTREG_FLAG(56, 0x02) +#define WEEKEVENTREG_56_04 PACK_WEEKEVENTREG_FLAG(56, 0x04) +#define WEEKEVENTREG_56_08 PACK_WEEKEVENTREG_FLAG(56, 0x08) +#define WEEKEVENTREG_56_10 PACK_WEEKEVENTREG_FLAG(56, 0x10) +#define WEEKEVENTREG_56_20 PACK_WEEKEVENTREG_FLAG(56, 0x20) +#define WEEKEVENTREG_56_40 PACK_WEEKEVENTREG_FLAG(56, 0x40) +#define WEEKEVENTREG_56_80 PACK_WEEKEVENTREG_FLAG(56, 0x80) +#define WEEKEVENTREG_57_01 PACK_WEEKEVENTREG_FLAG(57, 0x01) +#define WEEKEVENTREG_57_02 PACK_WEEKEVENTREG_FLAG(57, 0x02) +#define WEEKEVENTREG_57_04 PACK_WEEKEVENTREG_FLAG(57, 0x04) +#define WEEKEVENTREG_57_08 PACK_WEEKEVENTREG_FLAG(57, 0x08) +#define WEEKEVENTREG_57_10 PACK_WEEKEVENTREG_FLAG(57, 0x10) +#define WEEKEVENTREG_57_20 PACK_WEEKEVENTREG_FLAG(57, 0x20) +#define WEEKEVENTREG_57_40 PACK_WEEKEVENTREG_FLAG(57, 0x40) +#define WEEKEVENTREG_57_80 PACK_WEEKEVENTREG_FLAG(57, 0x80) +#define WEEKEVENTREG_58_01 PACK_WEEKEVENTREG_FLAG(58, 0x01) +#define WEEKEVENTREG_58_02 PACK_WEEKEVENTREG_FLAG(58, 0x02) +#define WEEKEVENTREG_58_04 PACK_WEEKEVENTREG_FLAG(58, 0x04) +#define WEEKEVENTREG_58_08 PACK_WEEKEVENTREG_FLAG(58, 0x08) +#define WEEKEVENTREG_58_10 PACK_WEEKEVENTREG_FLAG(58, 0x10) +#define WEEKEVENTREG_58_20 PACK_WEEKEVENTREG_FLAG(58, 0x20) +#define WEEKEVENTREG_58_40 PACK_WEEKEVENTREG_FLAG(58, 0x40) +#define WEEKEVENTREG_58_80 PACK_WEEKEVENTREG_FLAG(58, 0x80) +#define WEEKEVENTREG_59_01 PACK_WEEKEVENTREG_FLAG(59, 0x01) +#define WEEKEVENTREG_59_02 PACK_WEEKEVENTREG_FLAG(59, 0x02) + +// Unconfirmed: "Entered South Clock Town" +#define WEEKEVENTREG_59_04 PACK_WEEKEVENTREG_FLAG(59, 0x04) + +#define WEEKEVENTREG_59_08 PACK_WEEKEVENTREG_FLAG(59, 0x08) +#define WEEKEVENTREG_59_10 PACK_WEEKEVENTREG_FLAG(59, 0x10) +#define WEEKEVENTREG_59_20 PACK_WEEKEVENTREG_FLAG(59, 0x20) +#define WEEKEVENTREG_59_40 PACK_WEEKEVENTREG_FLAG(59, 0x40) +#define WEEKEVENTREG_59_80 PACK_WEEKEVENTREG_FLAG(59, 0x80) +#define WEEKEVENTREG_60_01 PACK_WEEKEVENTREG_FLAG(60, 0x01) +#define WEEKEVENTREG_60_02 PACK_WEEKEVENTREG_FLAG(60, 0x02) +#define WEEKEVENTREG_60_04 PACK_WEEKEVENTREG_FLAG(60, 0x04) +#define WEEKEVENTREG_60_08 PACK_WEEKEVENTREG_FLAG(60, 0x08) +#define WEEKEVENTREG_60_10 PACK_WEEKEVENTREG_FLAG(60, 0x10) +#define WEEKEVENTREG_60_20 PACK_WEEKEVENTREG_FLAG(60, 0x20) +#define WEEKEVENTREG_60_40 PACK_WEEKEVENTREG_FLAG(60, 0x40) +#define WEEKEVENTREG_60_80 PACK_WEEKEVENTREG_FLAG(60, 0x80) +#define WEEKEVENTREG_61_01 PACK_WEEKEVENTREG_FLAG(61, 0x01) +#define WEEKEVENTREG_61_02 PACK_WEEKEVENTREG_FLAG(61, 0x02) +#define WEEKEVENTREG_61_04 PACK_WEEKEVENTREG_FLAG(61, 0x04) +#define WEEKEVENTREG_61_08 PACK_WEEKEVENTREG_FLAG(61, 0x08) +#define WEEKEVENTREG_61_10 PACK_WEEKEVENTREG_FLAG(61, 0x10) +#define WEEKEVENTREG_61_20 PACK_WEEKEVENTREG_FLAG(61, 0x20) +#define WEEKEVENTREG_61_40 PACK_WEEKEVENTREG_FLAG(61, 0x40) +#define WEEKEVENTREG_61_80 PACK_WEEKEVENTREG_FLAG(61, 0x80) +#define WEEKEVENTREG_62_01 PACK_WEEKEVENTREG_FLAG(62, 0x01) +#define WEEKEVENTREG_62_02 PACK_WEEKEVENTREG_FLAG(62, 0x02) +#define WEEKEVENTREG_62_04 PACK_WEEKEVENTREG_FLAG(62, 0x04) +#define WEEKEVENTREG_62_08 PACK_WEEKEVENTREG_FLAG(62, 0x08) +#define WEEKEVENTREG_62_10 PACK_WEEKEVENTREG_FLAG(62, 0x10) +#define WEEKEVENTREG_62_20 PACK_WEEKEVENTREG_FLAG(62, 0x20) +#define WEEKEVENTREG_62_40 PACK_WEEKEVENTREG_FLAG(62, 0x40) +#define WEEKEVENTREG_62_80 PACK_WEEKEVENTREG_FLAG(62, 0x80) +#define WEEKEVENTREG_63_01 PACK_WEEKEVENTREG_FLAG(63, 0x01) +#define WEEKEVENTREG_63_02 PACK_WEEKEVENTREG_FLAG(63, 0x02) +#define WEEKEVENTREG_63_04 PACK_WEEKEVENTREG_FLAG(63, 0x04) +#define WEEKEVENTREG_63_08 PACK_WEEKEVENTREG_FLAG(63, 0x08) +#define WEEKEVENTREG_63_10 PACK_WEEKEVENTREG_FLAG(63, 0x10) +#define WEEKEVENTREG_63_20 PACK_WEEKEVENTREG_FLAG(63, 0x20) +#define WEEKEVENTREG_63_40 PACK_WEEKEVENTREG_FLAG(63, 0x40) + +// showed Couple's Mask to meeting +#define WEEKEVENTREG_63_80 PACK_WEEKEVENTREG_FLAG(63, 0x80) + +#define WEEKEVENTREG_64_01 PACK_WEEKEVENTREG_FLAG(64, 0x01) +#define WEEKEVENTREG_64_02 PACK_WEEKEVENTREG_FLAG(64, 0x02) +#define WEEKEVENTREG_64_04 PACK_WEEKEVENTREG_FLAG(64, 0x04) +#define WEEKEVENTREG_64_08 PACK_WEEKEVENTREG_FLAG(64, 0x08) +#define WEEKEVENTREG_64_10 PACK_WEEKEVENTREG_FLAG(64, 0x10) +#define WEEKEVENTREG_64_20 PACK_WEEKEVENTREG_FLAG(64, 0x20) +#define WEEKEVENTREG_64_40 PACK_WEEKEVENTREG_FLAG(64, 0x40) +#define WEEKEVENTREG_64_80 PACK_WEEKEVENTREG_FLAG(64, 0x80) +#define WEEKEVENTREG_65_01 PACK_WEEKEVENTREG_FLAG(65, 0x01) +#define WEEKEVENTREG_65_02 PACK_WEEKEVENTREG_FLAG(65, 0x02) +#define WEEKEVENTREG_65_04 PACK_WEEKEVENTREG_FLAG(65, 0x04) +#define WEEKEVENTREG_65_08 PACK_WEEKEVENTREG_FLAG(65, 0x08) +#define WEEKEVENTREG_65_10 PACK_WEEKEVENTREG_FLAG(65, 0x10) +#define WEEKEVENTREG_65_20 PACK_WEEKEVENTREG_FLAG(65, 0x20) +#define WEEKEVENTREG_65_40 PACK_WEEKEVENTREG_FLAG(65, 0x40) +#define WEEKEVENTREG_65_80 PACK_WEEKEVENTREG_FLAG(65, 0x80) +#define WEEKEVENTREG_66_01 PACK_WEEKEVENTREG_FLAG(66, 0x01) +#define WEEKEVENTREG_66_02 PACK_WEEKEVENTREG_FLAG(66, 0x02) +#define WEEKEVENTREG_66_04 PACK_WEEKEVENTREG_FLAG(66, 0x04) +#define WEEKEVENTREG_66_08 PACK_WEEKEVENTREG_FLAG(66, 0x08) +#define WEEKEVENTREG_66_10 PACK_WEEKEVENTREG_FLAG(66, 0x10) +#define WEEKEVENTREG_66_20 PACK_WEEKEVENTREG_FLAG(66, 0x20) +#define WEEKEVENTREG_66_40 PACK_WEEKEVENTREG_FLAG(66, 0x40) +#define WEEKEVENTREG_66_80 PACK_WEEKEVENTREG_FLAG(66, 0x80) +#define WEEKEVENTREG_67_01 PACK_WEEKEVENTREG_FLAG(67, 0x01) +#define WEEKEVENTREG_67_02 PACK_WEEKEVENTREG_FLAG(67, 0x02) +#define WEEKEVENTREG_67_04 PACK_WEEKEVENTREG_FLAG(67, 0x04) +#define WEEKEVENTREG_67_08 PACK_WEEKEVENTREG_FLAG(67, 0x08) +#define WEEKEVENTREG_67_10 PACK_WEEKEVENTREG_FLAG(67, 0x10) +#define WEEKEVENTREG_67_20 PACK_WEEKEVENTREG_FLAG(67, 0x20) +#define WEEKEVENTREG_67_40 PACK_WEEKEVENTREG_FLAG(67, 0x40) +#define WEEKEVENTREG_67_80 PACK_WEEKEVENTREG_FLAG(67, 0x80) +#define WEEKEVENTREG_68_01 PACK_WEEKEVENTREG_FLAG(68, 0x01) +#define WEEKEVENTREG_68_02 PACK_WEEKEVENTREG_FLAG(68, 0x02) +#define WEEKEVENTREG_68_04 PACK_WEEKEVENTREG_FLAG(68, 0x04) +#define WEEKEVENTREG_68_08 PACK_WEEKEVENTREG_FLAG(68, 0x08) +#define WEEKEVENTREG_68_10 PACK_WEEKEVENTREG_FLAG(68, 0x10) +#define WEEKEVENTREG_68_20 PACK_WEEKEVENTREG_FLAG(68, 0x20) +#define WEEKEVENTREG_68_40 PACK_WEEKEVENTREG_FLAG(68, 0x40) +#define WEEKEVENTREG_68_80 PACK_WEEKEVENTREG_FLAG(68, 0x80) +#define WEEKEVENTREG_69_01 PACK_WEEKEVENTREG_FLAG(69, 0x01) +#define WEEKEVENTREG_69_02 PACK_WEEKEVENTREG_FLAG(69, 0x02) +#define WEEKEVENTREG_69_04 PACK_WEEKEVENTREG_FLAG(69, 0x04) +#define WEEKEVENTREG_69_08 PACK_WEEKEVENTREG_FLAG(69, 0x08) +#define WEEKEVENTREG_69_10 PACK_WEEKEVENTREG_FLAG(69, 0x10) +#define WEEKEVENTREG_69_20 PACK_WEEKEVENTREG_FLAG(69, 0x20) +#define WEEKEVENTREG_69_40 PACK_WEEKEVENTREG_FLAG(69, 0x40) +#define WEEKEVENTREG_69_80 PACK_WEEKEVENTREG_FLAG(69, 0x80) +#define WEEKEVENTREG_70_01 PACK_WEEKEVENTREG_FLAG(70, 0x01) +#define WEEKEVENTREG_70_02 PACK_WEEKEVENTREG_FLAG(70, 0x02) +#define WEEKEVENTREG_70_04 PACK_WEEKEVENTREG_FLAG(70, 0x04) +#define WEEKEVENTREG_70_08 PACK_WEEKEVENTREG_FLAG(70, 0x08) +#define WEEKEVENTREG_70_10 PACK_WEEKEVENTREG_FLAG(70, 0x10) +#define WEEKEVENTREG_70_20 PACK_WEEKEVENTREG_FLAG(70, 0x20) +#define WEEKEVENTREG_70_40 PACK_WEEKEVENTREG_FLAG(70, 0x40) +#define WEEKEVENTREG_70_80 PACK_WEEKEVENTREG_FLAG(70, 0x80) +#define WEEKEVENTREG_71_01 PACK_WEEKEVENTREG_FLAG(71, 0x01) +#define WEEKEVENTREG_71_02 PACK_WEEKEVENTREG_FLAG(71, 0x02) +#define WEEKEVENTREG_71_04 PACK_WEEKEVENTREG_FLAG(71, 0x04) +#define WEEKEVENTREG_71_08 PACK_WEEKEVENTREG_FLAG(71, 0x08) +#define WEEKEVENTREG_71_10 PACK_WEEKEVENTREG_FLAG(71, 0x10) +#define WEEKEVENTREG_71_20 PACK_WEEKEVENTREG_FLAG(71, 0x20) +#define WEEKEVENTREG_71_40 PACK_WEEKEVENTREG_FLAG(71, 0x40) +#define WEEKEVENTREG_71_80 PACK_WEEKEVENTREG_FLAG(71, 0x80) +#define WEEKEVENTREG_72_01 PACK_WEEKEVENTREG_FLAG(72, 0x01) +#define WEEKEVENTREG_72_02 PACK_WEEKEVENTREG_FLAG(72, 0x02) +#define WEEKEVENTREG_72_04 PACK_WEEKEVENTREG_FLAG(72, 0x04) +#define WEEKEVENTREG_72_08 PACK_WEEKEVENTREG_FLAG(72, 0x08) +#define WEEKEVENTREG_72_10 PACK_WEEKEVENTREG_FLAG(72, 0x10) +#define WEEKEVENTREG_72_20 PACK_WEEKEVENTREG_FLAG(72, 0x20) +#define WEEKEVENTREG_72_40 PACK_WEEKEVENTREG_FLAG(72, 0x40) +#define WEEKEVENTREG_72_80 PACK_WEEKEVENTREG_FLAG(72, 0x80) +#define WEEKEVENTREG_73_01 PACK_WEEKEVENTREG_FLAG(73, 0x01) +#define WEEKEVENTREG_73_02 PACK_WEEKEVENTREG_FLAG(73, 0x02) +#define WEEKEVENTREG_73_04 PACK_WEEKEVENTREG_FLAG(73, 0x04) +#define WEEKEVENTREG_73_08 PACK_WEEKEVENTREG_FLAG(73, 0x08) + +// Unconfirmed: "Bombers Hide & Seek started on Day 1?" +#define WEEKEVENTREG_73_10 PACK_WEEKEVENTREG_FLAG(73, 0x10) + +#define WEEKEVENTREG_73_20 PACK_WEEKEVENTREG_FLAG(73, 0x20) +#define WEEKEVENTREG_73_40 PACK_WEEKEVENTREG_FLAG(73, 0x40) +#define WEEKEVENTREG_73_80 PACK_WEEKEVENTREG_FLAG(73, 0x80) +#define WEEKEVENTREG_74_01 PACK_WEEKEVENTREG_FLAG(74, 0x01) +#define WEEKEVENTREG_74_02 PACK_WEEKEVENTREG_FLAG(74, 0x02) +#define WEEKEVENTREG_74_04 PACK_WEEKEVENTREG_FLAG(74, 0x04) +#define WEEKEVENTREG_74_08 PACK_WEEKEVENTREG_FLAG(74, 0x08) +#define WEEKEVENTREG_74_10 PACK_WEEKEVENTREG_FLAG(74, 0x10) +#define WEEKEVENTREG_74_20 PACK_WEEKEVENTREG_FLAG(74, 0x20) +#define WEEKEVENTREG_74_40 PACK_WEEKEVENTREG_FLAG(74, 0x40) +#define WEEKEVENTREG_74_80 PACK_WEEKEVENTREG_FLAG(74, 0x80) +#define WEEKEVENTREG_75_01 PACK_WEEKEVENTREG_FLAG(75, 0x01) +#define WEEKEVENTREG_75_02 PACK_WEEKEVENTREG_FLAG(75, 0x02) +#define WEEKEVENTREG_75_04 PACK_WEEKEVENTREG_FLAG(75, 0x04) +#define WEEKEVENTREG_75_08 PACK_WEEKEVENTREG_FLAG(75, 0x08) +#define WEEKEVENTREG_75_10 PACK_WEEKEVENTREG_FLAG(75, 0x10) +#define WEEKEVENTREG_75_20 PACK_WEEKEVENTREG_FLAG(75, 0x20) +#define WEEKEVENTREG_75_40 PACK_WEEKEVENTREG_FLAG(75, 0x40) +#define WEEKEVENTREG_75_80 PACK_WEEKEVENTREG_FLAG(75, 0x80) +#define WEEKEVENTREG_76_01 PACK_WEEKEVENTREG_FLAG(76, 0x01) +#define WEEKEVENTREG_76_02 PACK_WEEKEVENTREG_FLAG(76, 0x02) +#define WEEKEVENTREG_76_04 PACK_WEEKEVENTREG_FLAG(76, 0x04) +#define WEEKEVENTREG_76_08 PACK_WEEKEVENTREG_FLAG(76, 0x08) +#define WEEKEVENTREG_76_10 PACK_WEEKEVENTREG_FLAG(76, 0x10) +#define WEEKEVENTREG_76_20 PACK_WEEKEVENTREG_FLAG(76, 0x20) +#define WEEKEVENTREG_76_40 PACK_WEEKEVENTREG_FLAG(76, 0x40) +#define WEEKEVENTREG_76_80 PACK_WEEKEVENTREG_FLAG(76, 0x80) +#define WEEKEVENTREG_77_01 PACK_WEEKEVENTREG_FLAG(77, 0x01) +#define WEEKEVENTREG_77_02 PACK_WEEKEVENTREG_FLAG(77, 0x02) +#define WEEKEVENTREG_77_04 PACK_WEEKEVENTREG_FLAG(77, 0x04) +#define WEEKEVENTREG_77_08 PACK_WEEKEVENTREG_FLAG(77, 0x08) +#define WEEKEVENTREG_77_10 PACK_WEEKEVENTREG_FLAG(77, 0x10) +#define WEEKEVENTREG_77_20 PACK_WEEKEVENTREG_FLAG(77, 0x20) +#define WEEKEVENTREG_77_40 PACK_WEEKEVENTREG_FLAG(77, 0x40) + +// The player has heard the Goron Shrine cheer as a Goron at least once. +#define WEEKEVENTREG_77_80 PACK_WEEKEVENTREG_FLAG(77, 0x80) + +#define WEEKEVENTREG_78_01 PACK_WEEKEVENTREG_FLAG(78, 0x01) +#define WEEKEVENTREG_78_02 PACK_WEEKEVENTREG_FLAG(78, 0x02) +#define WEEKEVENTREG_78_04 PACK_WEEKEVENTREG_FLAG(78, 0x04) +#define WEEKEVENTREG_78_08 PACK_WEEKEVENTREG_FLAG(78, 0x08) +#define WEEKEVENTREG_78_10 PACK_WEEKEVENTREG_FLAG(78, 0x10) +#define WEEKEVENTREG_78_20 PACK_WEEKEVENTREG_FLAG(78, 0x20) +#define WEEKEVENTREG_78_40 PACK_WEEKEVENTREG_FLAG(78, 0x40) +#define WEEKEVENTREG_78_80 PACK_WEEKEVENTREG_FLAG(78, 0x80) +#define WEEKEVENTREG_79_01 PACK_WEEKEVENTREG_FLAG(79, 0x01) +#define WEEKEVENTREG_79_02 PACK_WEEKEVENTREG_FLAG(79, 0x02) +#define WEEKEVENTREG_79_04 PACK_WEEKEVENTREG_FLAG(79, 0x04) +#define WEEKEVENTREG_79_08 PACK_WEEKEVENTREG_FLAG(79, 0x08) +#define WEEKEVENTREG_79_10 PACK_WEEKEVENTREG_FLAG(79, 0x10) +#define WEEKEVENTREG_79_20 PACK_WEEKEVENTREG_FLAG(79, 0x20) +#define WEEKEVENTREG_79_40 PACK_WEEKEVENTREG_FLAG(79, 0x40) +#define WEEKEVENTREG_79_80 PACK_WEEKEVENTREG_FLAG(79, 0x80) +#define WEEKEVENTREG_80_01 PACK_WEEKEVENTREG_FLAG(80, 0x01) +#define WEEKEVENTREG_80_02 PACK_WEEKEVENTREG_FLAG(80, 0x02) +#define WEEKEVENTREG_80_04 PACK_WEEKEVENTREG_FLAG(80, 0x04) +#define WEEKEVENTREG_80_08 PACK_WEEKEVENTREG_FLAG(80, 0x08) +#define WEEKEVENTREG_80_10 PACK_WEEKEVENTREG_FLAG(80, 0x10) +#define WEEKEVENTREG_80_20 PACK_WEEKEVENTREG_FLAG(80, 0x20) +#define WEEKEVENTREG_80_40 PACK_WEEKEVENTREG_FLAG(80, 0x40) +#define WEEKEVENTREG_80_80 PACK_WEEKEVENTREG_FLAG(80, 0x80) +#define WEEKEVENTREG_81_01 PACK_WEEKEVENTREG_FLAG(81, 0x01) +#define WEEKEVENTREG_81_02 PACK_WEEKEVENTREG_FLAG(81, 0x02) +#define WEEKEVENTREG_81_04 PACK_WEEKEVENTREG_FLAG(81, 0x04) +#define WEEKEVENTREG_81_08 PACK_WEEKEVENTREG_FLAG(81, 0x08) +#define WEEKEVENTREG_81_10 PACK_WEEKEVENTREG_FLAG(81, 0x10) +#define WEEKEVENTREG_81_20 PACK_WEEKEVENTREG_FLAG(81, 0x20) +#define WEEKEVENTREG_81_40 PACK_WEEKEVENTREG_FLAG(81, 0x40) +#define WEEKEVENTREG_81_80 PACK_WEEKEVENTREG_FLAG(81, 0x80) +#define WEEKEVENTREG_82_01 PACK_WEEKEVENTREG_FLAG(82, 0x01) +#define WEEKEVENTREG_82_02 PACK_WEEKEVENTREG_FLAG(82, 0x02) + +// check if already healed Kamaro the Dancing Ghost +#define WEEKEVENTREG_82_04 PACK_WEEKEVENTREG_FLAG(82, 0x04) + +#define WEEKEVENTREG_82_08 PACK_WEEKEVENTREG_FLAG(82, 0x08) +#define WEEKEVENTREG_82_10 PACK_WEEKEVENTREG_FLAG(82, 0x10) +#define WEEKEVENTREG_82_20 PACK_WEEKEVENTREG_FLAG(82, 0x20) +#define WEEKEVENTREG_82_40 PACK_WEEKEVENTREG_FLAG(82, 0x40) +#define WEEKEVENTREG_82_80 PACK_WEEKEVENTREG_FLAG(82, 0x80) +#define WEEKEVENTREG_83_01 PACK_WEEKEVENTREG_FLAG(83, 0x01) +#define WEEKEVENTREG_83_02 PACK_WEEKEVENTREG_FLAG(83, 0x02) +#define WEEKEVENTREG_83_04 PACK_WEEKEVENTREG_FLAG(83, 0x04) +#define WEEKEVENTREG_83_08 PACK_WEEKEVENTREG_FLAG(83, 0x08) +#define WEEKEVENTREG_83_10 PACK_WEEKEVENTREG_FLAG(83, 0x10) +#define WEEKEVENTREG_83_20 PACK_WEEKEVENTREG_FLAG(83, 0x20) +#define WEEKEVENTREG_83_40 PACK_WEEKEVENTREG_FLAG(83, 0x40) +#define WEEKEVENTREG_83_80 PACK_WEEKEVENTREG_FLAG(83, 0x80) +#define WEEKEVENTREG_84_01 PACK_WEEKEVENTREG_FLAG(84, 0x01) +#define WEEKEVENTREG_84_02 PACK_WEEKEVENTREG_FLAG(84, 0x02) +#define WEEKEVENTREG_84_04 PACK_WEEKEVENTREG_FLAG(84, 0x04) +#define WEEKEVENTREG_84_08 PACK_WEEKEVENTREG_FLAG(84, 0x08) +#define WEEKEVENTREG_84_10 PACK_WEEKEVENTREG_FLAG(84, 0x10) + +// Unconfirmed: "Obtained Fierce Deity's Mask?" +#define WEEKEVENTREG_84_20 PACK_WEEKEVENTREG_FLAG(84, 0x20) + +#define WEEKEVENTREG_84_40 PACK_WEEKEVENTREG_FLAG(84, 0x40) +#define WEEKEVENTREG_84_80 PACK_WEEKEVENTREG_FLAG(84, 0x80) +#define WEEKEVENTREG_85_01 PACK_WEEKEVENTREG_FLAG(85, 0x01) + +// Unconfirmed: "Bombers Hide & Seek in Progress" +#define WEEKEVENTREG_85_02 PACK_WEEKEVENTREG_FLAG(85, 0x02) + +#define WEEKEVENTREG_85_04 PACK_WEEKEVENTREG_FLAG(85, 0x04) +#define WEEKEVENTREG_85_08 PACK_WEEKEVENTREG_FLAG(85, 0x08) +#define WEEKEVENTREG_85_10 PACK_WEEKEVENTREG_FLAG(85, 0x10) +#define WEEKEVENTREG_85_20 PACK_WEEKEVENTREG_FLAG(85, 0x20) +#define WEEKEVENTREG_85_40 PACK_WEEKEVENTREG_FLAG(85, 0x40) + +// Unconfirmed: "Postman showing priority mail to Madame" +#define WEEKEVENTREG_85_80 PACK_WEEKEVENTREG_FLAG(85, 0x80) + +#define WEEKEVENTREG_86_01 PACK_WEEKEVENTREG_FLAG(86, 0x01) +#define WEEKEVENTREG_86_02 PACK_WEEKEVENTREG_FLAG(86, 0x02) +#define WEEKEVENTREG_86_04 PACK_WEEKEVENTREG_FLAG(86, 0x04) +#define WEEKEVENTREG_86_08 PACK_WEEKEVENTREG_FLAG(86, 0x08) +#define WEEKEVENTREG_86_10 PACK_WEEKEVENTREG_FLAG(86, 0x10) +#define WEEKEVENTREG_86_20 PACK_WEEKEVENTREG_FLAG(86, 0x20) +#define WEEKEVENTREG_86_40 PACK_WEEKEVENTREG_FLAG(86, 0x40) +#define WEEKEVENTREG_86_80 PACK_WEEKEVENTREG_FLAG(86, 0x80) +#define WEEKEVENTREG_87_01 PACK_WEEKEVENTREG_FLAG(87, 0x01) +#define WEEKEVENTREG_87_02 PACK_WEEKEVENTREG_FLAG(87, 0x02) +#define WEEKEVENTREG_87_04 PACK_WEEKEVENTREG_FLAG(87, 0x04) +#define WEEKEVENTREG_87_08 PACK_WEEKEVENTREG_FLAG(87, 0x08) +#define WEEKEVENTREG_87_10 PACK_WEEKEVENTREG_FLAG(87, 0x10) +#define WEEKEVENTREG_87_20 PACK_WEEKEVENTREG_FLAG(87, 0x20) +#define WEEKEVENTREG_87_40 PACK_WEEKEVENTREG_FLAG(87, 0x40) +#define WEEKEVENTREG_87_80 PACK_WEEKEVENTREG_FLAG(87, 0x80) +#define WEEKEVENTREG_88_01 PACK_WEEKEVENTREG_FLAG(88, 0x01) +#define WEEKEVENTREG_88_02 PACK_WEEKEVENTREG_FLAG(88, 0x02) +#define WEEKEVENTREG_88_04 PACK_WEEKEVENTREG_FLAG(88, 0x04) +#define WEEKEVENTREG_88_08 PACK_WEEKEVENTREG_FLAG(88, 0x08) +#define WEEKEVENTREG_88_10 PACK_WEEKEVENTREG_FLAG(88, 0x10) +#define WEEKEVENTREG_88_20 PACK_WEEKEVENTREG_FLAG(88, 0x20) +#define WEEKEVENTREG_88_40 PACK_WEEKEVENTREG_FLAG(88, 0x40) +#define WEEKEVENTREG_88_80 PACK_WEEKEVENTREG_FLAG(88, 0x80) +#define WEEKEVENTREG_89_01 PACK_WEEKEVENTREG_FLAG(89, 0x01) +#define WEEKEVENTREG_89_02 PACK_WEEKEVENTREG_FLAG(89, 0x02) +#define WEEKEVENTREG_89_04 PACK_WEEKEVENTREG_FLAG(89, 0x04) + +// Unconfirmed: "Postman has delivered priority mail" +#define WEEKEVENTREG_89_08 PACK_WEEKEVENTREG_FLAG(89, 0x08) + +#define WEEKEVENTREG_89_10 PACK_WEEKEVENTREG_FLAG(89, 0x10) +#define WEEKEVENTREG_89_20 PACK_WEEKEVENTREG_FLAG(89, 0x20) + +// Unconfirmed: "Postman is about to flee" +#define WEEKEVENTREG_89_40 PACK_WEEKEVENTREG_FLAG(89, 0x40) + +#define WEEKEVENTREG_89_80 PACK_WEEKEVENTREG_FLAG(89, 0x80) + +// Unconfirmed: "Postman fleeing town" +#define WEEKEVENTREG_90_01 PACK_WEEKEVENTREG_FLAG(90, 0x01) + +#define WEEKEVENTREG_90_02 PACK_WEEKEVENTREG_FLAG(90, 0x02) +#define WEEKEVENTREG_90_04 PACK_WEEKEVENTREG_FLAG(90, 0x04) +#define WEEKEVENTREG_90_08 PACK_WEEKEVENTREG_FLAG(90, 0x08) +#define WEEKEVENTREG_90_10 PACK_WEEKEVENTREG_FLAG(90, 0x10) +#define WEEKEVENTREG_90_20 PACK_WEEKEVENTREG_FLAG(90, 0x20) +#define WEEKEVENTREG_90_40 PACK_WEEKEVENTREG_FLAG(90, 0x40) +#define WEEKEVENTREG_90_80 PACK_WEEKEVENTREG_FLAG(90, 0x80) +#define WEEKEVENTREG_91_01 PACK_WEEKEVENTREG_FLAG(91, 0x01) +#define WEEKEVENTREG_91_02 PACK_WEEKEVENTREG_FLAG(91, 0x02) +#define WEEKEVENTREG_91_04 PACK_WEEKEVENTREG_FLAG(91, 0x04) +#define WEEKEVENTREG_91_08 PACK_WEEKEVENTREG_FLAG(91, 0x08) +#define WEEKEVENTREG_91_10 PACK_WEEKEVENTREG_FLAG(91, 0x10) +#define WEEKEVENTREG_91_20 PACK_WEEKEVENTREG_FLAG(91, 0x20) +#define WEEKEVENTREG_91_40 PACK_WEEKEVENTREG_FLAG(91, 0x40) +#define WEEKEVENTREG_91_80 PACK_WEEKEVENTREG_FLAG(91, 0x80) + +// RACE_FLAGS +//#define WEEKEVENTREG_92_01 PACK_WEEKEVENTREG_FLAG(92, 0x01) +//#define WEEKEVENTREG_92_02 PACK_WEEKEVENTREG_FLAG(92, 0x02) +//#define WEEKEVENTREG_92_04 PACK_WEEKEVENTREG_FLAG(92, 0x04) + +#define WEEKEVENTREG_92_08 PACK_WEEKEVENTREG_FLAG(92, 0x08) +#define WEEKEVENTREG_92_10 PACK_WEEKEVENTREG_FLAG(92, 0x10) +#define WEEKEVENTREG_92_20 PACK_WEEKEVENTREG_FLAG(92, 0x20) +#define WEEKEVENTREG_92_40 PACK_WEEKEVENTREG_FLAG(92, 0x40) +#define WEEKEVENTREG_92_80 PACK_WEEKEVENTREG_FLAG(92, 0x80) +#define WEEKEVENTREG_93_01 PACK_WEEKEVENTREG_FLAG(93, 0x01) +#define WEEKEVENTREG_93_02 PACK_WEEKEVENTREG_FLAG(93, 0x02) +#define WEEKEVENTREG_93_04 PACK_WEEKEVENTREG_FLAG(93, 0x04) +#define WEEKEVENTREG_93_08 PACK_WEEKEVENTREG_FLAG(93, 0x08) +#define WEEKEVENTREG_93_10 PACK_WEEKEVENTREG_FLAG(93, 0x10) +#define WEEKEVENTREG_93_20 PACK_WEEKEVENTREG_FLAG(93, 0x20) +#define WEEKEVENTREG_93_40 PACK_WEEKEVENTREG_FLAG(93, 0x40) +#define WEEKEVENTREG_93_80 PACK_WEEKEVENTREG_FLAG(93, 0x80) +#define WEEKEVENTREG_94_01 PACK_WEEKEVENTREG_FLAG(94, 0x01) +#define WEEKEVENTREG_94_02 PACK_WEEKEVENTREG_FLAG(94, 0x02) +#define WEEKEVENTREG_94_04 PACK_WEEKEVENTREG_FLAG(94, 0x04) +#define WEEKEVENTREG_94_08 PACK_WEEKEVENTREG_FLAG(94, 0x08) +#define WEEKEVENTREG_94_10 PACK_WEEKEVENTREG_FLAG(94, 0x10) +#define WEEKEVENTREG_94_20 PACK_WEEKEVENTREG_FLAG(94, 0x20) +#define WEEKEVENTREG_94_40 PACK_WEEKEVENTREG_FLAG(94, 0x40) +#define WEEKEVENTREG_94_80 PACK_WEEKEVENTREG_FLAG(94, 0x80) +#define WEEKEVENTREG_95_01 PACK_WEEKEVENTREG_FLAG(95, 0x01) +#define WEEKEVENTREG_95_02 PACK_WEEKEVENTREG_FLAG(95, 0x02) +#define WEEKEVENTREG_95_04 PACK_WEEKEVENTREG_FLAG(95, 0x04) +#define WEEKEVENTREG_95_08 PACK_WEEKEVENTREG_FLAG(95, 0x08) +#define WEEKEVENTREG_95_10 PACK_WEEKEVENTREG_FLAG(95, 0x10) +#define WEEKEVENTREG_95_20 PACK_WEEKEVENTREG_FLAG(95, 0x20) +#define WEEKEVENTREG_95_40 PACK_WEEKEVENTREG_FLAG(95, 0x40) +#define WEEKEVENTREG_95_80 PACK_WEEKEVENTREG_FLAG(95, 0x80) +#define WEEKEVENTREG_96_01 PACK_WEEKEVENTREG_FLAG(96, 0x01) +#define WEEKEVENTREG_96_02 PACK_WEEKEVENTREG_FLAG(96, 0x02) +#define WEEKEVENTREG_96_04 PACK_WEEKEVENTREG_FLAG(96, 0x04) +#define WEEKEVENTREG_96_08 PACK_WEEKEVENTREG_FLAG(96, 0x08) +#define WEEKEVENTREG_96_10 PACK_WEEKEVENTREG_FLAG(96, 0x10) +#define WEEKEVENTREG_96_20 PACK_WEEKEVENTREG_FLAG(96, 0x20) +#define WEEKEVENTREG_96_40 PACK_WEEKEVENTREG_FLAG(96, 0x40) +#define WEEKEVENTREG_96_80 PACK_WEEKEVENTREG_FLAG(96, 0x80) +#define WEEKEVENTREG_97_01 PACK_WEEKEVENTREG_FLAG(97, 0x01) +#define WEEKEVENTREG_97_02 PACK_WEEKEVENTREG_FLAG(97, 0x02) +#define WEEKEVENTREG_97_04 PACK_WEEKEVENTREG_FLAG(97, 0x04) +#define WEEKEVENTREG_97_08 PACK_WEEKEVENTREG_FLAG(97, 0x08) +#define WEEKEVENTREG_97_10 PACK_WEEKEVENTREG_FLAG(97, 0x10) +#define WEEKEVENTREG_97_20 PACK_WEEKEVENTREG_FLAG(97, 0x20) +#define WEEKEVENTREG_97_40 PACK_WEEKEVENTREG_FLAG(97, 0x40) +#define WEEKEVENTREG_97_80 PACK_WEEKEVENTREG_FLAG(97, 0x80) +#define WEEKEVENTREG_98_01 PACK_WEEKEVENTREG_FLAG(98, 0x01) +#define WEEKEVENTREG_98_02 PACK_WEEKEVENTREG_FLAG(98, 0x02) +#define WEEKEVENTREG_98_04 PACK_WEEKEVENTREG_FLAG(98, 0x04) +#define WEEKEVENTREG_98_08 PACK_WEEKEVENTREG_FLAG(98, 0x08) +#define WEEKEVENTREG_98_10 PACK_WEEKEVENTREG_FLAG(98, 0x10) +#define WEEKEVENTREG_98_20 PACK_WEEKEVENTREG_FLAG(98, 0x20) +#define WEEKEVENTREG_98_40 PACK_WEEKEVENTREG_FLAG(98, 0x40) +#define WEEKEVENTREG_98_80 PACK_WEEKEVENTREG_FLAG(98, 0x80) +#define WEEKEVENTREG_99_01 PACK_WEEKEVENTREG_FLAG(99, 0x01) +#define WEEKEVENTREG_99_02 PACK_WEEKEVENTREG_FLAG(99, 0x02) +#define WEEKEVENTREG_99_04 PACK_WEEKEVENTREG_FLAG(99, 0x04) +#define WEEKEVENTREG_99_08 PACK_WEEKEVENTREG_FLAG(99, 0x08) +#define WEEKEVENTREG_99_10 PACK_WEEKEVENTREG_FLAG(99, 0x10) +#define WEEKEVENTREG_99_20 PACK_WEEKEVENTREG_FLAG(99, 0x20) +#define WEEKEVENTREG_99_40 PACK_WEEKEVENTREG_FLAG(99, 0x40) +#define WEEKEVENTREG_99_80 PACK_WEEKEVENTREG_FLAG(99, 0x80) + +#define WEEKEVENTREG(index) (gSaveContext.save.weekEventReg[(index)]) +#define GET_WEEKEVENTREG(index) ((void)0, WEEKEVENTREG(index)) + +#define CHECK_WEEKEVENTREG(flag) (WEEKEVENTREG((flag) >> 8) & ((flag) & 0xFF)) +#define CHECK_WEEKEVENTREG_ALT(flag) (GET_WEEKEVENTREG((flag) >> 8) & ((flag) & 0xFF)) +#define SET_WEEKEVENTREG(flag) (WEEKEVENTREG((flag) >> 8) = GET_WEEKEVENTREG((flag) >> 8) | ((flag) & 0xFF)) +#define CLEAR_WEEKEVENTREG(flag) (WEEKEVENTREG((flag) >> 8) = GET_WEEKEVENTREG((flag) >> 8) & (u8)~((flag) & 0xFF)) + +#define WEEKEVENTREG_RACE_FLAG_END 0 +#define WEEKEVENTREG_RACE_FLAG_START 1 +#define WEEKEVENTREG_RACE_FLAG_2 2 +#define WEEKEVENTREG_RACE_FLAG_3 3 +#define WEEKEVENTREG_RACE_FLAG_4 4 +#define WEEKEVENTREG_RACE_FLAGS 7 + +#define GET_WEEKEVENTREG_RACE_FLAGS (WEEKEVENTREG(92) & WEEKEVENTREG_RACE_FLAGS) + +#define SET_WEEKEVENTREG_RACE_FLAGS(flag) \ + WEEKEVENTREG(92) &= (u8)~WEEKEVENTREG_RACE_FLAGS; \ + WEEKEVENTREG(92) = WEEKEVENTREG(92) | (u8)((WEEKEVENTREG(92) & ~WEEKEVENTREG_RACE_FLAGS) | (flag)) + +/** + * gSaveContext.eventInf + */ + +#define EVENTINF_00 0x00 +#define EVENTINF_01 0x01 +#define EVENTINF_02 0x02 +#define EVENTINF_03 0x03 +#define EVENTINF_04 0x04 +#define EVENTINF_05 0x05 +#define EVENTINF_06 0x06 +#define EVENTINF_07 0x07 +#define EVENTINF_10 0x10 +#define EVENTINF_11 0x11 +#define EVENTINF_12 0x12 +#define EVENTINF_13 0x13 +#define EVENTINF_14 0x14 +#define EVENTINF_15 0x15 +#define EVENTINF_16 0x16 +#define EVENTINF_17 0x17 +#define EVENTINF_20 0x20 +#define EVENTINF_21 0x21 +#define EVENTINF_22 0x22 +#define EVENTINF_23 0x23 +#define EVENTINF_24 0x24 +#define EVENTINF_25 0x25 +#define EVENTINF_26 0x26 +#define EVENTINF_27 0x27 +#define EVENTINF_30 0x30 + +// EVENTINF_31 is used to track if Player is within range of EnGakufu (2D Song Buttons Appearing on Wall) +#define EVENTINF_31 0x31 +// EVENTINF_32 is used to track if Player has played the notes of EnGakufu (2D Song Buttons Appearing on Wall) +#define EVENTINF_32 0x32 + +#define EVENTINF_33 0x33 +#define EVENTINF_34 0x34 +#define EVENTINF_35 0x35 +#define EVENTINF_36 0x36 +#define EVENTINF_37 0x37 +#define EVENTINF_40 0x40 +#define EVENTINF_41 0x41 +#define EVENTINF_42 0x42 +#define EVENTINF_43 0x43 +#define EVENTINF_44 0x44 +#define EVENTINF_45 0x45 +#define EVENTINF_46 0x46 +#define EVENTINF_47 0x47 +#define EVENTINF_50 0x50 +#define EVENTINF_51 0x51 +#define EVENTINF_52 0x52 +#define EVENTINF_53 0x53 +#define EVENTINF_54 0x54 +#define EVENTINF_55 0x55 + +// Enabled when Gyorg's intro cutscene has been watched +#define EVENTINF_56 0x56 + +#define EVENTINF_57 0x57 +#define EVENTINF_60 0x60 +#define EVENTINF_61 0x61 +#define EVENTINF_62 0x62 +#define EVENTINF_63 0x63 +#define EVENTINF_64 0x64 +#define EVENTINF_65 0x65 +#define EVENTINF_66 0x66 +#define EVENTINF_67 0x67 +#define EVENTINF_70 0x70 +#define EVENTINF_71 0x71 +#define EVENTINF_72 0x72 +#define EVENTINF_73 0x73 +#define EVENTINF_74 0x74 +#define EVENTINF_75 0x75 +#define EVENTINF_76 0x76 +#define EVENTINF_77 0x77 + +#define CHECK_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] & (1 << ((flag) & 0xF))) +#define SET_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] |= (1 << ((flag) & 0xF))) +#define CLEAR_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] &= (u8)~(1 << ((flag) & 0xF))) +#define CLEAR_EVENTINF_ALT(flag) (gSaveContext.eventInf[(flag) >> 4] &= ~(1 << ((flag) & 0xF))) + + typedef enum { /* 0 */ DUNGEON_INDEX_WOODFALL_TEMPLE, /* 1 */ DUNGEON_INDEX_SNOWHEAD_TEMPLE, @@ -498,10 +1539,8 @@ void func_80147198(SramContext* sramCtx); extern s32 D_801C6798[]; extern u8 gAmmoItems[]; extern s32 D_801C67C8[]; -extern s32 D_801C67E8[]; extern s32 D_801C67F0[]; extern s32 D_801C6818[]; -extern s32 D_801C6838[]; extern s32 D_801C6840[]; extern s32 D_801C6850[]; diff --git a/include/z64scene.h b/include/z64scene.h index 088565c0c..41198af71 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -119,7 +119,7 @@ typedef struct { /* 0x2 */ UNK_TYPE1 pad2[2]; /* 0x4 */ u8 hour; /* 0x5 */ u8 min; - /* 0x6 */ u8 unk6; + /* 0x6 */ u8 timeSpeed; } SCmdTimeSettings; // size = 0x7 typedef struct { @@ -341,6 +341,7 @@ typedef struct { /* 0xA */ u8 unk_A; /* 0xB */ u8 drawConfig; /* 0xC */ u8 unk_C; + /* 0xD */ u8 unk_D; } SceneTableEntry; // size = 0x10 typedef struct { @@ -477,7 +478,7 @@ typedef struct { typedef struct { /* 0x0 */ MinimapEntry* entry; - /* 0x4 */ UNK_TYPE unk4; + /* 0x4 */ s16 unk4; } MinimapList; // size = 0x8 typedef struct { diff --git a/include/z64schedule.h b/include/z64schedule.h index 69906e584..f3a703f3c 100644 --- a/include/z64schedule.h +++ b/include/z64schedule.h @@ -28,7 +28,7 @@ */ // Macro to convert the time format used in the save struct into the format used in Schedule -#define SCHEDULE_CONVERT_TIME(time) ((time) - 0x10000 / 360 * 90) +#define SCHEDULE_CONVERT_TIME(time) ((u16)((time) - 0x10000 / 360 * 90)) #define SCHEDULE_TIME_NOW SCHEDULE_CONVERT_TIME(gSaveContext.save.time) typedef enum { @@ -196,11 +196,11 @@ typedef struct { #define SCHEDULE_PACK_S16(val) \ ((val) >> 8) & 0xFF, (val) & 0xFF -#define SCHEDULE_CMD_CHECK_FLAG_S(index, mask, offset) \ - SCHEDULE_CMD_ID_CHECK_FLAG_S, (index), (mask), (offset) +#define SCHEDULE_CMD_CHECK_FLAG_S(flag, offset) \ + SCHEDULE_CMD_ID_CHECK_FLAG_S, SCHEDULE_PACK_S16(flag), (offset) -#define SCHEDULE_CMD_CHECK_FLAG_L(index, mask, offset) \ - SCHEDULE_CMD_ID_CHECK_FLAG_L, (index), (mask), SCHEDULE_PACK_S16(offset) +#define SCHEDULE_CMD_CHECK_FLAG_L(flag, offset) \ + SCHEDULE_CMD_ID_CHECK_FLAG_L, SCHEDULE_PACK_S16(flag), SCHEDULE_PACK_S16(offset) #define SCHEDULE_CMD_CHECK_TIME_RANGE_S(startHr, startMin, endHr, endMin, offset) \ SCHEDULE_CMD_ID_CHECK_TIME_RANGE_S, (startHr), (startMin), (endHr), (endMin), (offset) diff --git a/include/z64snap.h b/include/z64snap.h index fb3f86186..4f9dca9d4 100644 --- a/include/z64snap.h +++ b/include/z64snap.h @@ -11,36 +11,36 @@ typedef struct { /* 0x144 */ PictoValidationFunc validationFunc; } PictoActor; -// Picto box flags +// Picto validation flags typedef enum { // Used externally, set and read by actors - /* 0x00 */ PICTOGRAPH_0, - /* 0x01 */ PICTOGRAPH_IN_SWAMP, - /* 0x02 */ PICTOGRAPH_MONKEY, - /* 0x03 */ PICTOGRAPH_BIG_OCTO, - /* 0x04 */ PICTOGRAPH_LULU_HEAD, - /* 0x05 */ PICTOGRAPH_LULU_RIGHT_ARM, - /* 0x06 */ PICTOGRAPH_LULU_LEFT_ARM, // Need all three of these to qualify as a good picture - /* 0x07 */ PICTOGRAPH_SCARECROW, - /* 0x08 */ PICTOGRAPH_TINGLE, - /* 0x09 */ PICTOGRAPH_PIRATE_GOOD, - /* 0x0A */ PICTOGRAPH_DEKU_KING, - /* 0x0B */ PICTOGRAPH_PIRATE_TOO_FAR, // overlaps with PICTOGRAPH_PIRATE_GOOD, but that is checked first + /* 0x00 */ PICTO_VALID_0, + /* 0x01 */ PICTO_VALID_IN_SWAMP, + /* 0x02 */ PICTO_VALID_MONKEY, + /* 0x03 */ PICTO_VALID_BIG_OCTO, + /* 0x04 */ PICTO_VALID_LULU_HEAD, + /* 0x05 */ PICTO_VALID_LULU_RIGHT_ARM, + /* 0x06 */ PICTO_VALID_LULU_LEFT_ARM, // Need all three of these to qualify as a good picture + /* 0x07 */ PICTO_VALID_SCARECROW, + /* 0x08 */ PICTO_VALID_TINGLE, + /* 0x09 */ PICTO_VALID_PIRATE_GOOD, + /* 0x0A */ PICTO_VALID_DEKU_KING, + /* 0x0B */ PICTO_VALID_PIRATE_TOO_FAR, // overlaps with PICTO_VALID_PIRATE_GOOD, but that is checked first // Used internally, test for failures of position, angle etc. - /* 0x3B */ PICTOGRAPH_BEHIND_COLLISION = 0x3B, - /* 0x3C */ PICTOGRAPH_BEHIND_BG, - /* 0x3D */ PICTOGRAPH_NOT_IN_VIEW, - /* 0x3E */ PICTOGRAPH_BAD_ANGLE, - /* 0x3F */ PICTOGRAPH_BAD_DISTANCE -} PictographFlag; + /* 0x3B */ PICTO_VALID_BEHIND_COLLISION = 0x3B, + /* 0x3C */ PICTO_VALID_BEHIND_BG, + /* 0x3D */ PICTO_VALID_NOT_IN_VIEW, + /* 0x3E */ PICTO_VALID_BAD_ANGLE, + /* 0x3F */ PICTO_VALID_BAD_DISTANCE +} PictoValidFlag; -// The following macros are subject to renaming once the capture system is better understood -#define PICTO_RESOLUTION_HORIZONTAL 150 -#define PICTO_RESOLUTION_VERTICAL 105 -#define PICTO_CAPTURE_REGION_TOPLEFT_X ((SCREEN_WIDTH - PICTO_RESOLUTION_HORIZONTAL) / 2) -#define PICTO_CAPTURE_REGION_TOPLEFT_Y ((SCREEN_HEIGHT - PICTO_RESOLUTION_VERTICAL) / 2) +// The subregion of the picto photo that will set the flag for an actor being in the photo +#define PICTO_VALID_WIDTH 150 +#define PICTO_VALID_HEIGHT 105 +#define PICTO_VALID_TOPLEFT_X ((SCREEN_WIDTH - PICTO_VALID_WIDTH) / 2) +#define PICTO_VALID_TOPLEFT_Y ((SCREEN_HEIGHT - PICTO_VALID_HEIGHT) / 2) s32 Snap_RecordPictographedActors(PlayState* play); void Snap_SetFlag(s32 flag); diff --git a/include/z64transition.h b/include/z64transition.h index 45178ba8e..98720e9a7 100644 --- a/include/z64transition.h +++ b/include/z64transition.h @@ -1,8 +1,14 @@ -#ifndef _Z64_TRANSITION_H_ -#define _Z64_TRANSITION_H_ +#ifndef Z64_TRANSITION_H +#define Z64_TRANSITION_H #include "ultra64.h" +#include "overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.h" +#include "overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h" +#include "overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h" +#include "overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.h" +#include "overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.h" + #define TC_SET_PARAMS (1 << 7) typedef struct { @@ -32,22 +38,6 @@ typedef struct { /* 0x14 */ TransitionInit* initInfo; /* 0x18 */ size_t size; } TransitionOverlay; - -typedef struct { - /* 0x000 */ s16 transitionType; - /* 0x002 */ s8 fbdemoType; - /* 0x003 */ char unk_003[0x22B]; - /* 0x230 */ void* (*init)(void* transition); - /* 0x234 */ void (*destroy)(void* transition); - /* 0x238 */ void (*update)(void* transition, s32 updateRate); - /* 0x23C */ void (*draw)(void* transition, Gfx** gfxP); - /* 0x240 */ void (*start)(void* transition); - /* 0x244 */ void (*setType)(void* transition, s32 type); - /* 0x248 */ void (*setColor)(void* transition, u32 color); - /* 0x24C */ void (*setEnvColor)(void* transition, u32 color); - /* 0x250 */ s32 (*isDone)(void* transition); - /* 0x254 */ char unk_254[0x4]; -} TransitionContext; // size = 0x258 typedef struct { /* 0x0 */ char unk_0[0xC]; @@ -76,4 +66,107 @@ typedef struct { /* 0x1F */ s8 unk_1F; // Set to 0 and never used } TransitionCircle; // size = 0x20 +#define TRANS_TRIGGER_OFF 0 // transition is not active +#define TRANS_TRIGGER_START 20 // start transition (exiting an area) +#define TRANS_TRIGGER_END -20 // transition is ending (arriving in a new area) + +typedef enum { + /* 0 */ TRANS_MODE_OFF, + /* 1 */ TRANS_MODE_SETUP, + /* 2 */ TRANS_MODE_INSTANCE_INIT, + /* 3 */ TRANS_MODE_INSTANCE_RUNNING, + /* 4 */ TRANS_MODE_FILL_WHITE_INIT, + /* 5 */ TRANS_MODE_FILL_IN, + /* 6 */ TRANS_MODE_FILL_OUT, + /* 7 */ TRANS_MODE_FILL_BROWN_INIT, + /* 8 */ TRANS_MODE_08, // unused + /* 9 */ TRANS_MODE_09, // unused + /* 10 */ TRANS_MODE_INSTANT, + /* 11 */ TRANS_MODE_INSTANCE_WAIT, + /* 12 */ TRANS_MODE_SANDSTORM_INIT, + /* 13 */ TRANS_MODE_SANDSTORM, + /* 14 */ TRANS_MODE_SANDSTORM_END_INIT, + /* 15 */ TRANS_MODE_SANDSTORM_END, + /* 16 */ TRANS_MODE_CS_BLACK_FILL_INIT, + /* 17 */ TRANS_MODE_CS_BLACK_FILL +} TransitionMode; + +#define TRANS_TYPE_WIPE4 (1 << 5) +#define TRANS_TYPE_WIPE3 (1 << 6) +#define TRANS_TYPE_SET_PARAMS (1 << 7) + +typedef enum { + /* 0 */ TRANS_TYPE_WIPE, + /* 1 */ TRANS_TYPE_TRIFORCE, + /* 2 */ TRANS_TYPE_FADE_BLACK, + /* 3 */ TRANS_TYPE_FADE_WHITE, + /* 4 */ TRANS_TYPE_FADE_BLACK_FAST, + /* 5 */ TRANS_TYPE_FADE_WHITE_FAST, + /* 6 */ TRANS_TYPE_FADE_BLACK_SLOW, + /* 7 */ TRANS_TYPE_FADE_WHITE_SLOW, + /* 8 */ TRANS_TYPE_WIPE_FAST, + /* 9 */ TRANS_TYPE_FILL_WHITE_FAST, // Not actually fast due to bug in Play_UpdateTransition + /* 10 */ TRANS_TYPE_FILL_WHITE, + /* 11 */ TRANS_TYPE_INSTANT, + /* 12 */ TRANS_TYPE_FILL_BROWN, + /* 13 */ TRANS_TYPE_FADE_WHITE_CS_DELAYED, + /* 14 */ TRANS_TYPE_SANDSTORM_PERSIST, + /* 15 */ TRANS_TYPE_SANDSTORM_END, + /* 16 */ TRANS_TYPE_CS_BLACK_FILL, + /* 17 */ TRANS_TYPE_FADE_WHITE_INSTANT, + /* 18 */ TRANS_TYPE_FADE_GREEN, + /* 19 */ TRANS_TYPE_FADE_BLUE, + /* 20 */ TRANS_TYPE_FADE_DYNAMIC, // Chooses Black or White based on time of day + /* 21 */ TRANS_TYPE_CIRCLE, + /* 22 */ TRANS_TYPE_WIPE5, + // transition types 23 - 31 are unused + // transition types 32 - 39 are Wipe4 TODO needs macro + // transition types 40 - 63 are unused + // transition types 64 - 127 are Wipe3 TODO needs macro + /* 64 */ TRANS_TYPE_64 = 64, + /* 70 */ TRANS_TYPE_70 = 70, + /* 72 */ TRANS_TYPE_72 = 72, + /* 73 */ TRANS_TYPE_73, + /* 80 */ TRANS_TYPE_80 = 80, + /* 86 */ TRANS_TYPE_86 = 86 +} TransitionType; + +typedef enum { + /* 0 */ FBDEMO_FADE, + /* 1 */ FBDEMO_TRIFORCE, + /* 2 */ FBDEMO_WIPE1, + /* 3 */ FBDEMO_WIPE3, + /* 4 */ FBDEMO_WIPE4, + /* 5 */ FBDEMO_CIRCLE, + /* 6 */ FBDEMO_WIPE5 +} FbDemoType; + +#define TRANS_NEXT_TYPE_DEFAULT 0xFF + +typedef struct { + /* 0x000 */ s16 transitionType; + /* 0x002 */ s8 fbdemoType; + /* 0x003 */ char unk_003[0x5]; + /* 0x008 */ union { + TransitionFade fade; + TransitionCircle circle; + TransitionTriforce triforce; + TransitionWipe1 wipe1; + TransitionWipe3 wipe3; + TransitionWipe4 wipe4; + TransitionWipe5 wipe5; + } instanceData; + /* 0x220 */ char unk_220[0x10]; + /* 0x230 */ void* (*init)(void* transition); + /* 0x234 */ void (*destroy)(void* transition); + /* 0x238 */ void (*update)(void* transition, s32 updateRate); + /* 0x23C */ void (*draw)(void* transition, Gfx** gfxP); + /* 0x240 */ void (*start)(void* transition); + /* 0x244 */ void (*setType)(void* transition, s32 type); + /* 0x248 */ void (*setColor)(void* transition, u32 color); + /* 0x24C */ void (*setEnvColor)(void* transition, u32 color); + /* 0x250 */ s32 (*isDone)(void* transition); + /* 0x254 */ char unk_254[0x4]; +} TransitionContext; // size = 0x258 + #endif diff --git a/requirements.txt b/requirements.txt index d410bc853..6b391b170 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,6 +5,9 @@ colorama>=0.4.3 # disasm rabbitizer>=1.0.0,<2.0.0 +# Compression +pyelftools>=0.26 + # diff watchdog>=0.10.2 argcomplete diff --git a/spec b/spec index 90e749b6c..5db19f145 100644 --- a/spec +++ b/spec @@ -424,11 +424,10 @@ beginseg name "code" compress after "dmadata" - include "build/src/code/z_en_a_keep.o" include "build/data/code/aspMain.data.o" include "build/data/code/gspS2DEX2.fifo.data.o" include "build/data/code/njpgdspMain.data.o" - include "build/data/code/code_801ADE60.data.o" + include "build/src/code/z_en_a_keep.o" include "build/data/code/code_801E3FA0.bss.o" include "build/src/code/z_en_item00.o" include "build/src/code/z_eff_blure.o" @@ -528,7 +527,8 @@ beginseg include "build/src/code/z_rumble.o" include "build/src/code/z_view.o" include "build/src/code/z_vimode.o" - include "build/data/code/z_vimode.data.o" + include "build/src/code/code_80140CE0.o" + include "build/data/code/code_80140CE0.data.o" include "build/src/code/code_80140E80.o" include "build/src/code/z_vismono.o" include "build/src/code/code_801420C0.o" @@ -554,8 +554,6 @@ beginseg include "build/src/code/z_fbdemo_circle.o" include "build/src/code/z_overlay.o" include "build/src/code/z_play.o" - include "build/data/code/z_play.data.o" - include "build/data/code/z_play.bss.o" include "build/src/code/z_play_hireso.o" include "build/data/code/z_play_hireso.data.o" include "build/src/code/PreRender.o" @@ -580,9 +578,10 @@ beginseg include "build/src/code/speed_meter.o" include "build/data/code/speed_meter.data.o" include "build/data/code/speed_meter.bss.o" + include "build/src/code/su_mtx.o" + include "build/src/code/sys_cfb.o" include "build/data/code/sys_cfb.bss.o" include "build/src/code/sys_cmpdma.o" - include "build/data/code/sys_cmpdma.bss.o" include "build/src/code/sys_initial_check.o" include "build/src/code/sys_math.o" include "build/src/code/sys_math3d.o" @@ -608,8 +607,7 @@ beginseg include "build/src/code/audio/audio_heap.o" include "build/data/code/audio_heap.bss.o" include "build/src/code/audio/audio_load.o" - include "build/src/code/audio/code_80192BE0.o" - include "build/data/code/code_80192BE0.data.o" + include "build/src/code/audio/audio_thread.o" include "build/src/code/audio/audio_dcache.o" include "build/src/code/audio/aisetnextbuf.o" include "build/src/code/audio/audio_playback.o" @@ -2670,9 +2668,7 @@ beginseg name "ovl_En_Test3" compress include "build/src/overlays/actors/ovl_En_Test3/z_en_test3.o" - include "build/data/ovl_En_Test3/ovl_En_Test3.data.o" - include "build/data/ovl_En_Test3/ovl_En_Test3.bss.o" - include "build/data/ovl_En_Test3/ovl_En_Test3.reloc.o" + include "build/src/overlays/actors/ovl_En_Test3/ovl_En_Test3_reloc.o" endseg beginseg @@ -2948,8 +2944,7 @@ beginseg name "ovl_En_Egol" compress include "build/src/overlays/actors/ovl_En_Egol/z_en_egol.o" - include "build/data/ovl_En_Egol/ovl_En_Egol.data.o" - include "build/data/ovl_En_Egol/ovl_En_Egol.reloc.o" + include "build/src/overlays/actors/ovl_En_Egol/ovl_En_Egol_reloc.o" endseg beginseg @@ -3011,8 +3006,7 @@ beginseg name "ovl_En_Estone" compress include "build/src/overlays/actors/ovl_En_Estone/z_en_estone.o" - include "build/data/ovl_En_Estone/ovl_En_Estone.data.o" - include "build/data/ovl_En_Estone/ovl_En_Estone.reloc.o" + include "build/src/overlays/actors/ovl_En_Estone/ovl_En_Estone_reloc.o" endseg beginseg @@ -3125,8 +3119,7 @@ beginseg name "ovl_En_Egblock" compress include "build/src/overlays/actors/ovl_En_Egblock/z_en_egblock.o" - include "build/data/ovl_En_Egblock/ovl_En_Egblock.data.o" - include "build/data/ovl_En_Egblock/ovl_En_Egblock.reloc.o" + include "build/src/overlays/actors/ovl_En_Egblock/ovl_En_Egblock_reloc.o" endseg beginseg @@ -4022,8 +4015,7 @@ beginseg name "ovl_En_Kaizoku" compress include "build/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.o" - include "build/data/ovl_En_Kaizoku/ovl_En_Kaizoku.data.o" - include "build/data/ovl_En_Kaizoku/ovl_En_Kaizoku.reloc.o" + include "build/src/overlays/actors/ovl_En_Kaizoku/ovl_En_Kaizoku_reloc.o" endseg beginseg @@ -4214,8 +4206,7 @@ beginseg name "ovl_En_Zod" compress include "build/src/overlays/actors/ovl_En_Zod/z_en_zod.o" - include "build/data/ovl_En_Zod/ovl_En_Zod.data.o" - include "build/data/ovl_En_Zod/ovl_En_Zod.reloc.o" + include "build/src/overlays/actors/ovl_En_Zod/ovl_En_Zod_reloc.o" endseg beginseg @@ -4419,11 +4410,7 @@ beginseg name "ovl_Bg_Ikana_Bombwall" compress include "build/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.o" -#ifdef NON_MATCHING include "build/src/overlays/actors/ovl_Bg_Ikana_Bombwall/ovl_Bg_Ikana_Bombwall_reloc.o" -#else - include "build/data/ovl_Bg_Ikana_Bombwall/ovl_Bg_Ikana_Bombwall.reloc.o" -#endif endseg beginseg @@ -4444,11 +4431,7 @@ beginseg name "ovl_Bg_Haka_Bombwall" compress include "build/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.o" - #ifdef NON_MATCHING - include "build/src/overlays/actors/ovl_Bg_Haka_Bombwall/ovl_Bg_Haka_Bombwall_reloc.o" - #else - include "build/data/ovl_Bg_Haka_Bombwall/ovl_Bg_Haka_Bombwall.reloc.o" - #endif + include "build/src/overlays/actors/ovl_Bg_Haka_Bombwall/ovl_Bg_Haka_Bombwall_reloc.o" endseg beginseg diff --git a/src/boot_O2_g3/boot_main.c b/src/boot_O2_g3/boot_main.c index 04bb9a33a..87bee5da4 100644 --- a/src/boot_O2_g3/boot_main.c +++ b/src/boot_O2_g3/boot_main.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" StackEntry sBootThreadInfo; diff --git a/src/boot_O2_g3/idle.c b/src/boot_O2_g3/idle.c index 942435fa7..da93f13fd 100644 --- a/src/boot_O2_g3/idle.c +++ b/src/boot_O2_g3/idle.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" u8 D_80096B20 = 1; diff --git a/src/boot_O2_g3/yaz0.c b/src/boot_O2_g3/yaz0.c index 63260e885..aa7ecdfe1 100644 --- a/src/boot_O2_g3/yaz0.c +++ b/src/boot_O2_g3/yaz0.c @@ -6,7 +6,7 @@ u8* sYaz0CurDataEnd; uintptr_t sYaz0CurRomStart; u32 sYaz0CurSize; u8* sYaz0MaxPtr; -u8* D_8009BE20; +void* gYaz0DecompressDstEnd; void* Yaz0_FirstDMA() { u32 pad0; @@ -118,7 +118,7 @@ s32 Yaz0_DecompressImpl(u8* src, u8* dst) { bitIdx--; } while (dst != dstEnd); - D_8009BE20 = dstEnd; + gYaz0DecompressDstEnd = dstEnd; return 0; } diff --git a/src/code/PreRender.c b/src/code/PreRender.c index 46fd8ee6b..599f4c8d3 100644 --- a/src/code/PreRender.c +++ b/src/code/PreRender.c @@ -229,14 +229,11 @@ void func_80170798(PreRender* this, Gfx** gfxp) { gDPLoadMultiTile(gfx++, this->fbufSave, 0x0000, G_TX_RENDERTILE, G_IM_FMT_RGBA, G_IM_SIZ_16b, this->width, this->height, uls, ult, lrs, lrt, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - if (1) {} gDPLoadMultiTile(gfx++, this->cvgSave, 0x0160, rtile, G_IM_FMT_I, G_IM_SIZ_8b, this->width, this->height, uls, ult, lrs, lrt, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); //! FAKE if (1) {} - // The two if (1) {}'s above can be removed with do {} while(0) around macros - if (1) {} if (1) {} gSPTextureRectangle(gfx++, uls << 2, ult << 2, (lrs + 1) << 2, (lrt + 1) << 2, G_TX_RENDERTILE, uls << 5, ult << 5, 1 << 10, 1 << 10); diff --git a/src/code/audio/audio_effects.c b/src/code/audio/audio_effects.c index 3f50f003c..0dcdcda88 100644 --- a/src/code/audio/audio_effects.c +++ b/src/code/audio/audio_effects.c @@ -63,7 +63,7 @@ void AudioEffects_SequencePlayerProcessSound(SequencePlayer* seqPlayer) { } seqPlayer->fadeTimer--; - if ((seqPlayer->fadeTimer == 0) && (seqPlayer->state == SEQPLAYER_STATE_2)) { + if ((seqPlayer->fadeTimer == 0) && (seqPlayer->state == SEQPLAYER_STATE_FADE_OUT)) { AudioSeq_SequencePlayerDisable(seqPlayer); return; } @@ -112,10 +112,10 @@ f32 AudioEffects_GetVibratoFreqScale(VibratoState* vib) { static f32 activeVibratoFreqScaleSum = 0.0f; static s32 activeVibratoCount = 0; f32 pitchChange; - f32 extent; - f32 invExtent; + f32 depth; + f32 invDepth; f32 result; - f32 scaledExtent; + f32 scaledDepth; VibratoSubStruct* subVib = vib->vibSubStruct; if (vib->delay != 0) { @@ -124,17 +124,17 @@ f32 AudioEffects_GetVibratoFreqScale(VibratoState* vib) { } if (subVib != NULL) { - if (vib->extentChangeTimer) { - if (vib->extentChangeTimer == 1) { - vib->extent = (s32)subVib->vibratoExtentTarget; + if (vib->depthChangeTimer) { + if (vib->depthChangeTimer == 1) { + vib->depth = (s32)subVib->vibratoDepthTarget; } else { - vib->extent += ((s32)subVib->vibratoExtentTarget - vib->extent) / (s32)vib->extentChangeTimer; + vib->depth += ((s32)subVib->vibratoDepthTarget - vib->depth) / (s32)vib->depthChangeTimer; } - vib->extentChangeTimer--; - } else if (subVib->vibratoExtentTarget != (s32)vib->extent) { - if ((vib->extentChangeTimer = subVib->vibratoExtentChangeDelay) == 0) { - vib->extent = (s32)subVib->vibratoExtentTarget; + vib->depthChangeTimer--; + } else if (subVib->vibratoDepthTarget != (s32)vib->depth) { + if ((vib->depthChangeTimer = subVib->vibratoDepthChangeDelay) == 0) { + vib->depth = (s32)subVib->vibratoDepthTarget; } } @@ -153,17 +153,17 @@ f32 AudioEffects_GetVibratoFreqScale(VibratoState* vib) { } } - if (vib->extent == 0.0f) { + if (vib->depth == 0.0f) { return 1.0f; } pitchChange = AudioEffects_GetVibratoPitchChange(vib) + 32768.0f; - scaledExtent = vib->extent / 4096.0f; - extent = scaledExtent + 1.0f; - invExtent = 1.0f / extent; + scaledDepth = vib->depth / 4096.0f; + depth = scaledDepth + 1.0f; + invDepth = 1.0f / depth; // inverse linear interpolation - result = 1.0f / ((extent - invExtent) * pitchChange / 65536.0f + invExtent); + result = 1.0f / ((depth - invDepth) * pitchChange / 65536.0f + invDepth); activeVibratoFreqScaleSum += result; activeVibratoCount++; @@ -196,10 +196,10 @@ void AudioEffects_NoteVibratoInit(Note* note) { subVib = vib->vibSubStruct; - if ((vib->extentChangeTimer = subVib->vibratoExtentChangeDelay) == 0) { - vib->extent = (s32)subVib->vibratoExtentTarget; + if ((vib->depthChangeTimer = subVib->vibratoDepthChangeDelay) == 0) { + vib->depth = (s32)subVib->vibratoDepthTarget; } else { - vib->extent = (s32)subVib->vibratoExtentStart; + vib->depth = (s32)subVib->vibratoDepthStart; } if ((vib->rateChangeTimer = subVib->vibratoRateChangeDelay) == 0) { diff --git a/src/code/audio/audio_heap.c b/src/code/audio/audio_heap.c index 1c05e9441..d767f7de3 100644 --- a/src/code/audio/audio_heap.c +++ b/src/code/audio/audio_heap.c @@ -836,7 +836,7 @@ void AudioHeap_ClearAiBuffers(void) { s32 curAiBufferIndex = gAudioCtx.curAiBufferIndex; s32 i; - gAudioCtx.aiBufNumSamples[curAiBufferIndex] = gAudioCtx.audioBufferParameters.numSamplesPerFrameMin; + gAudioCtx.numSamplesPerFrame[curAiBufferIndex] = gAudioCtx.audioBufferParameters.numSamplesPerFrameMin; for (i = 0; i < AIBUF_LEN; i++) { gAudioCtx.aiBuffers[curAiBufferIndex][i] = 0; @@ -905,8 +905,8 @@ s32 AudioHeap_ResetStep(void) { case 1: AudioHeap_Init(); gAudioCtx.resetStatus = 0; - for (i = 0; i < ARRAY_COUNT(gAudioCtx.aiBufNumSamples); i++) { - gAudioCtx.aiBufNumSamples[i] = gAudioCtx.audioBufferParameters.numSamplesPerFrameMax; + for (i = 0; i < ARRAY_COUNT(gAudioCtx.numSamplesPerFrame); i++) { + gAudioCtx.numSamplesPerFrame[i] = gAudioCtx.audioBufferParameters.numSamplesPerFrameMax; for (j = 0; j < AIBUF_LEN; j++) { gAudioCtx.aiBuffers[i][j] = 0; } @@ -932,7 +932,7 @@ void AudioHeap_Init(void) { s32 reverbIndex; s32 i; s32 pad2; - AudioSpec* spec = &gAudioSpecs[gAudioCtx.audioResetSpecIdToLoad]; // Audio Specifications + AudioSpec* spec = &gAudioSpecs[gAudioCtx.specId]; // Audio Specifications gAudioCtx.sampleDmaCount = 0; @@ -970,15 +970,15 @@ void AudioHeap_Init(void) { gAudioCtx.audioBufferParameters.numSequencePlayers = 5; } - gAudioCtx.unk_29BC = 8; + gAudioCtx.numAbiCmdsMax = 8; gAudioCtx.unk_2 = spec->unk_14; - gAudioCtx.tempoInternalToExternal = + gAudioCtx.maxTempo = (u32)(gAudioCtx.audioBufferParameters.updatesPerFrame * 2880000.0f / gTatumsPerBeat / gAudioCtx.unk_2960); gAudioCtx.unk_2870 = gAudioCtx.refreshRate; gAudioCtx.unk_2870 *= gAudioCtx.audioBufferParameters.updatesPerFrame; gAudioCtx.unk_2870 /= gAudioCtx.audioBufferParameters.aiSamplingFreq; - gAudioCtx.unk_2870 /= gAudioCtx.tempoInternalToExternal; + gAudioCtx.unk_2870 /= gAudioCtx.maxTempo; gAudioCtx.audioBufferParameters.specUnk4 = spec->unk_04; gAudioCtx.audioBufferParameters.numSamplesPerFrameTarget *= gAudioCtx.audioBufferParameters.specUnk4; diff --git a/src/code/audio/audio_load.c b/src/code/audio/audio_load.c index d101b53f5..28c27d2cc 100644 --- a/src/code/audio/audio_load.c +++ b/src/code/audio/audio_load.c @@ -1212,12 +1212,12 @@ void AudioLoad_Init(void* heap, size_t heapSize) { s32 i; s32 j; - gCustomAudioUpdateFunction = NULL; - gCustomAudioReverbFunction = NULL; - gCustomAudioSynthFunction = NULL; + gAudioCustomUpdateFunction = NULL; + gAudioCustomReverbFunction = NULL; + gAudioCustomSynthFunction = NULL; - for (i = 0; i < ARRAY_COUNT(gAudioCtx.unk_29A8); i++) { - gAudioCtx.unk_29A8[i] = NULL; + for (i = 0; i < ARRAY_COUNT(gAudioCtx.customSeqFunctions); i++) { + gAudioCtx.customSeqFunctions[i] = NULL; } gAudioCtx.resetTimer = 0; @@ -1248,8 +1248,8 @@ void AudioLoad_Init(void* heap, size_t heapSize) { AudioThread_InitMesgQueues(); - for (i = 0; i < ARRAY_COUNT(gAudioCtx.aiBufNumSamples); i++) { - gAudioCtx.aiBufNumSamples[i] = 0xA0; + for (i = 0; i < ARRAY_COUNT(gAudioCtx.numSamplesPerFrame); i++) { + gAudioCtx.numSamplesPerFrame[i] = 0xA0; } gAudioCtx.totalTaskCount = 0; @@ -1301,7 +1301,7 @@ void AudioLoad_Init(void* heap, size_t heapSize) { gAudioCtx.numSequences = gAudioCtx.sequenceTable->numEntries; - gAudioCtx.audioResetSpecIdToLoad = 0; + gAudioCtx.specId = 0; gAudioCtx.resetStatus = 1; // Set reset to immediately initialize the audio heap AudioHeap_ResetStep(); diff --git a/src/code/audio/audio_playback.c b/src/code/audio/audio_playback.c index 07315d56e..9f3c6f8ed 100644 --- a/src/code/audio/audio_playback.c +++ b/src/code/audio/audio_playback.c @@ -309,7 +309,7 @@ void AudioPlayback_ProcessNotes(void) { subAttrs.combFilterGain = channel->combFilterGain; bookOffset = channel->bookOffset & 0x7; - if (channel->seqPlayer->muted && (channel->muteFlags & MUTE_FLAGS_3)) { + if (channel->seqPlayer->muted && (channel->muteFlags & MUTE_FLAGS_STOP_SAMPLES)) { subAttrs.frequency = 0.0f; subAttrs.velocity = 0.0f; } @@ -531,7 +531,7 @@ void AudioPlayback_SeqLayerDecayRelease(SequenceLayer* layer, s32 target) { attrs->combFilterGain = channel->combFilterGain; attrs->combFilterSize = channel->combFilterSize; - if (channel->seqPlayer->muted && (channel->muteFlags & MUTE_FLAGS_3)) { + if (channel->seqPlayer->muted && (channel->muteFlags & MUTE_FLAGS_STOP_SAMPLES)) { note->sampleState.bitField0.finished = true; } diff --git a/src/code/audio/audio_seqplayer.c b/src/code/audio/audio_seqplayer.c index 099f646fe..a8c54420a 100644 --- a/src/code/audio/audio_seqplayer.c +++ b/src/code/audio/audio_seqplayer.c @@ -123,7 +123,7 @@ u8 sSeqInstructionArgsTable[] = { CMD_ARGS_1(u8), // 0xD5 () CMD_ARGS_1(u8), // 0xD6 () CMD_ARGS_1(u8), // 0xD7 (channel: set vibrato rate) - CMD_ARGS_1(u8), // 0xD8 (channel: set vibrato extent) + CMD_ARGS_1(u8), // 0xD8 (channel: set vibrato depth) CMD_ARGS_1(u8), // 0xD9 (channel: set decay index) CMD_ARGS_1(s16), // 0xDA (channel: set envelope) CMD_ARGS_1(u8), // 0xDB (channel: transpose) @@ -133,7 +133,7 @@ u8 sSeqInstructionArgsTable[] = { CMD_ARGS_1(u8), // 0xDF (channel: set volume) CMD_ARGS_1(u8), // 0xE0 (channel: set volume scale) CMD_ARGS_3(u8, u8, u8), // 0xE1 (channel: set vibratorate linear) - CMD_ARGS_3(u8, u8, u8), // 0xE2 (channel: set vibrato extent linear) + CMD_ARGS_3(u8, u8, u8), // 0xE2 (channel: set vibrato depth linear) CMD_ARGS_1(u8), // 0xE3 (channel: set vibrato delay) CMD_ARGS_0(), // 0xE4 (channel: dyncall) CMD_ARGS_1(u8), // 0xE5 (channel: set reverb index) @@ -276,7 +276,7 @@ void AudioSeq_InitSequenceChannel(SequenceChannel* channel) { channel->enabled = false; channel->finished = false; channel->stopScript = false; - channel->stopSomething2 = false; + channel->muted = false; channel->hasInstrument = false; channel->stereoHeadsetEffects = false; channel->transposition = 0; @@ -302,10 +302,10 @@ void AudioSeq_InitSequenceChannel(SequenceChannel* channel) { channel->adsr.sustain = 0; channel->vibrato.vibratoRateTarget = 0x800; channel->vibrato.vibratoRateStart = 0x800; - channel->vibrato.vibratoExtentTarget = 0; - channel->vibrato.vibratoExtentStart = 0; + channel->vibrato.vibratoDepthTarget = 0; + channel->vibrato.vibratoDepthStart = 0; channel->vibrato.vibratoRateChangeDelay = 0; - channel->vibrato.vibratoExtentChangeDelay = 0; + channel->vibrato.vibratoDepthChangeDelay = 0; channel->vibrato.vibratoDelay = 0; channel->filter = NULL; channel->combFilterGain = 0; @@ -314,8 +314,8 @@ void AudioSeq_InitSequenceChannel(SequenceChannel* channel) { channel->volumeScale = 1.0f; channel->freqScale = 1.0f; - for (i = 0; i < ARRAY_COUNT(channel->soundScriptIO); i++) { - channel->soundScriptIO[i] = SEQ_IO_VAL_NONE; + for (i = 0; i < ARRAY_COUNT(channel->seqScriptIO); i++) { + channel->seqScriptIO[i] = SEQ_IO_VAL_NONE; } channel->unused = false; @@ -348,7 +348,7 @@ s32 AudioSeq_SeqChannelSetLayer(SequenceChannel* channel, s32 layerIndex) { layer->targetReverbVol = channel->targetReverbVol; layer->enabled = true; layer->finished = false; - layer->stopSomething = false; + layer->muted = false; layer->continuousNotes = false; layer->bit3 = false; layer->ignoreDrumPan = false; @@ -370,10 +370,10 @@ s32 AudioSeq_SeqChannelSetLayer(SequenceChannel* channel, s32 layerIndex) { layer->unk_0A.asByte = 0xFFFF; layer->vibrato.vibratoRateTarget = 0x800; layer->vibrato.vibratoRateStart = 0x800; - layer->vibrato.vibratoExtentTarget = 0; - layer->vibrato.vibratoExtentStart = 0; + layer->vibrato.vibratoDepthTarget = 0; + layer->vibrato.vibratoDepthStart = 0; layer->vibrato.vibratoRateChangeDelay = 0; - layer->vibrato.vibratoExtentChangeDelay = 0; + layer->vibrato.vibratoDepthChangeDelay = 0; layer->vibrato.vibratoDelay = 0; layer->freqScale = 1.0f; layer->bend = 1.0f; @@ -562,9 +562,9 @@ void AudioSeq_SeqLayerProcessScript(SequenceLayer* layer) { if (layer->delay > 1) { layer->delay--; - if (!layer->stopSomething && (layer->delay <= layer->gateDelay)) { + if (!layer->muted && (layer->delay <= layer->gateDelay)) { AudioPlayback_SeqLayerNoteDecay(layer); - layer->stopSomething = true; + layer->muted = true; } return; } @@ -590,7 +590,7 @@ void AudioSeq_SeqLayerProcessScript(SequenceLayer* layer) { AudioSeq_SeqLayerProcessScriptStep5(layer, cmd); } - if (layer->stopSomething == true) { + if (layer->muted == true) { if ((layer->note != NULL) || layer->continuousNotes) { AudioPlayback_SeqLayerNoteDecay(layer); } @@ -856,7 +856,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) { drum = AudioPlayback_GetDrum(channel->fontId, semitone); if (drum == NULL) { - layer->stopSomething = true; + layer->muted = true; layer->delay2 = layer->delay; return PROCESS_SCRIPT_END; } @@ -879,7 +879,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) { soundEffect = AudioPlayback_GetSoundEffect(channel->fontId, sfxId); if (soundEffect == NULL) { - layer->stopSomething = true; + layer->muted = true; layer->delay2 = layer->delay + 1; return PROCESS_SCRIPT_END; } @@ -895,7 +895,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) { layer->semitone = semitone; if (semitone >= 0x80) { - layer->stopSomething = true; + layer->muted = true; return PROCESS_SCRIPT_END; } @@ -948,7 +948,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) { portamento->extent = (freqScale2 / freqScale) - 1.0f; if (PORTAMENTO_IS_SPECIAL(*portamento)) { - speed = seqPlayer->tempo * 0x8000 / gAudioCtx.tempoInternalToExternal; + speed = seqPlayer->tempo * 0x8000 / gAudioCtx.maxTempo; if (layer->delay != 0) { speed = speed * 0x100 / (layer->delay * layer->portamentoTime); } @@ -1011,7 +1011,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) { // (It's a bit unclear if 'portamento' has actually always been // set when this is reached...) if (PORTAMENTO_IS_SPECIAL(*portamento)) { - speed2 = seqPlayer->tempo * 0x8000 / gAudioCtx.tempoInternalToExternal; + speed2 = seqPlayer->tempo * 0x8000 / gAudioCtx.maxTempo; speed2 = speed2 * 0x100 / (layer->delay * layer->portamentoTime); if (speed2 >= 0x7FFF) { speed2 = 0x7FFF; @@ -1036,12 +1036,12 @@ s32 AudioSeq_SeqLayerProcessScriptStep3(SequenceLayer* layer, s32 cmd) { if (cmd == 0xC0) { // layer: delay layer->delay = AudioSeq_ScriptReadCompressedU16(state); - layer->stopSomething = true; + layer->muted = true; layer->bit1 = false; return PROCESS_SCRIPT_END; } - layer->stopSomething = false; + layer->muted = false; if (channel->largeNotes == true) { switch (cmd & 0xC0) { @@ -1124,14 +1124,14 @@ s32 AudioSeq_SeqLayerProcessScriptStep3(SequenceLayer* layer, s32 cmd) { } } - if ((seqPlayer->muted && (channel->muteFlags & (MUTE_FLAGS_STOP_NOTES | MUTE_FLAGS_4))) || - channel->stopSomething2) { - layer->stopSomething = true; + if ((seqPlayer->muted && (channel->muteFlags & (MUTE_FLAGS_STOP_NOTES | MUTE_FLAGS_STOP_LAYER))) || + channel->muted) { + layer->muted = true; return PROCESS_SCRIPT_END; } if (seqPlayer->skipTicks != 0) { - layer->stopSomething = true; + layer->muted = true; return PROCESS_SCRIPT_END; } @@ -1380,11 +1380,11 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) { channel->adsr.decayIndex = cmd; break; - case 0xD8: // channel: set vibrato extent + case 0xD8: // channel: set vibrato depth cmd = (u8)cmdArgs[0]; - channel->vibrato.vibratoExtentTarget = cmd * 8; - channel->vibrato.vibratoExtentStart = 0; - channel->vibrato.vibratoExtentChangeDelay = 0; + channel->vibrato.vibratoDepthTarget = cmd * 8; + channel->vibrato.vibratoDepthStart = 0; + channel->vibrato.vibratoDepthChangeDelay = 0; break; case 0xD7: // channel: set vibrato rate @@ -1394,13 +1394,13 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) { channel->vibrato.vibratoRateStart = cmd * 32; break; - case 0xE2: // channel: set vibrato extent linear + case 0xE2: // channel: set vibrato depth linear cmd = (u8)cmdArgs[0]; - channel->vibrato.vibratoExtentStart = cmd * 8; + channel->vibrato.vibratoDepthStart = cmd * 8; cmd = (u8)cmdArgs[1]; - channel->vibrato.vibratoExtentTarget = cmd * 8; + channel->vibrato.vibratoDepthTarget = cmd * 8; cmd = (u8)cmdArgs[2]; - channel->vibrato.vibratoExtentChangeDelay = cmd * 16; + channel->vibrato.vibratoDepthChangeDelay = cmd * 16; break; case 0xE1: // channel: set vibratorate linear @@ -1559,9 +1559,9 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) { break; case 0xEC: // channel: reset vibrato - channel->vibrato.vibratoExtentTarget = 0; - channel->vibrato.vibratoExtentStart = 0; - channel->vibrato.vibratoExtentChangeDelay = 0; + channel->vibrato.vibratoDepthTarget = 0; + channel->vibrato.vibratoDepthStart = 0; + channel->vibrato.vibratoDepthChangeDelay = 0; channel->vibrato.vibratoRateTarget = 0; channel->vibrato.vibratoRateStart = 0; channel->vibrato.vibratoRateChangeDelay = 0; @@ -1667,9 +1667,9 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) { case 0xBE: // channel: if (cmdArgs[0] < 5) { if (1) {} - if (gAudioCtx.unk_29A8[cmdArgs[0]] != NULL) { - gCustomAudioSeqFunction = gAudioCtx.unk_29A8[cmdArgs[0]]; - scriptState->value = gCustomAudioSeqFunction(scriptState->value, channel); + if (gAudioCtx.customSeqFunctions[cmdArgs[0]] != NULL) { + gAudioCustomSeqFunction = gAudioCtx.customSeqFunctions[cmdArgs[0]]; + scriptState->value = gAudioCustomSeqFunction(scriptState->value, channel); } } break; @@ -1698,13 +1698,13 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) { break; case 0xA5: // channel: - scriptState->value += channel->unk_11; + scriptState->value += channel->channelIndex; break; case 0xA6: // channel: cmd = (u8)cmdArgs[0]; cmdArgU16 = (u16)cmdArgs[1]; - seqData = seqPlayer->seqData + (u32)(cmdArgU16 + channel->unk_11); + seqData = seqPlayer->seqData + (u32)(cmdArgU16 + channel->channelIndex); seqData[0] = (u8)scriptState->value + cmd; break; @@ -1766,7 +1766,7 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) { break; case 0x70: // channel: io write value - channel->soundScriptIO[lowBits] = scriptState->value; + channel->seqScriptIO[lowBits] = scriptState->value; break; case 0x78: // channel: set layer relative @@ -1792,26 +1792,26 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) { case 0x10: // channel: load sample if (lowBits < 8) { - channel->soundScriptIO[lowBits] = SEQ_IO_VAL_NONE; - if (AudioLoad_SlowLoadSample(channel->fontId, scriptState->value, - &channel->soundScriptIO[lowBits]) == -1) {} + channel->seqScriptIO[lowBits] = SEQ_IO_VAL_NONE; + if (AudioLoad_SlowLoadSample(channel->fontId, scriptState->value, &channel->seqScriptIO[lowBits]) == + -1) {} } else { lowBits -= 8; - channel->soundScriptIO[lowBits] = SEQ_IO_VAL_NONE; + channel->seqScriptIO[lowBits] = SEQ_IO_VAL_NONE; if (AudioLoad_SlowLoadSample(channel->fontId, channel->unk_22 + 0x100, - &channel->soundScriptIO[lowBits]) == -1) {} + &channel->seqScriptIO[lowBits]) == -1) {} } break; case 0x60: // channel: io read value - scriptState->value = channel->soundScriptIO[lowBits]; + scriptState->value = channel->seqScriptIO[lowBits]; if (lowBits < 2) { - channel->soundScriptIO[lowBits] = SEQ_IO_VAL_NONE; + channel->seqScriptIO[lowBits] = SEQ_IO_VAL_NONE; } break; case 0x50: // channel: io read value subtract - scriptState->value -= channel->soundScriptIO[lowBits]; + scriptState->value -= channel->seqScriptIO[lowBits]; break; case 0x20: // channel: start channel @@ -1821,12 +1821,12 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) { case 0x30: // channel: io write value 2 cmd = AudioSeq_ScriptReadU8(scriptState); - seqPlayer->channels[lowBits]->soundScriptIO[cmd] = scriptState->value; + seqPlayer->channels[lowBits]->seqScriptIO[cmd] = scriptState->value; break; case 0x40: // channel: io read value 2 cmd = AudioSeq_ScriptReadU8(scriptState); - scriptState->value = seqPlayer->channels[lowBits]->soundScriptIO[cmd]; + scriptState->value = seqPlayer->channels[lowBits]->seqScriptIO[cmd]; break; } } @@ -1879,18 +1879,18 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) { seqPlayer->scriptCounter++; - tempoChange = seqPlayer->tempo + seqPlayer->unk_0C; - if (tempoChange > gAudioCtx.tempoInternalToExternal) { - tempoChange = gAudioCtx.tempoInternalToExternal; + tempoChange = seqPlayer->tempo + seqPlayer->tempoChange; + if (tempoChange > gAudioCtx.maxTempo) { + tempoChange = gAudioCtx.maxTempo; } seqPlayer->tempoAcc += tempoChange; - if (seqPlayer->tempoAcc < gAudioCtx.tempoInternalToExternal) { + if (seqPlayer->tempoAcc < gAudioCtx.maxTempo) { return; } - seqPlayer->tempoAcc -= (u16)gAudioCtx.tempoInternalToExternal; + seqPlayer->tempoAcc -= (u16)gAudioCtx.maxTempo; seqPlayer->unk_16++; if (seqPlayer->stopScript == true) { @@ -1943,8 +1943,8 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) { case 0xDD: // seqPlayer: set tempo seqPlayer->tempo = AudioSeq_ScriptReadU8(seqScript) * TATUMS_PER_BEAT; - if (seqPlayer->tempo > gAudioCtx.tempoInternalToExternal) { - seqPlayer->tempo = gAudioCtx.tempoInternalToExternal; + if (seqPlayer->tempo > gAudioCtx.maxTempo) { + seqPlayer->tempo = gAudioCtx.maxTempo; } if ((s16)seqPlayer->tempo <= 0) { @@ -1953,7 +1953,7 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) { break; case 0xDC: // seqPlayer: add tempo - seqPlayer->unk_0C = (s8)AudioSeq_ScriptReadU8(seqScript) * TATUMS_PER_BEAT; + seqPlayer->tempoChange = (s8)AudioSeq_ScriptReadU8(seqScript) * TATUMS_PER_BEAT; break; case 0xDA: // seqPlayer: change volume @@ -1961,14 +1961,14 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) { temp = AudioSeq_ScriptReadS16(seqScript); switch (cmd) { case SEQPLAYER_STATE_0: - case SEQPLAYER_STATE_1: - if (seqPlayer->state != SEQPLAYER_STATE_2) { - seqPlayer->fadeTimerUnkEu = temp; + case SEQPLAYER_STATE_FADE_IN: + if (seqPlayer->state != SEQPLAYER_STATE_FADE_OUT) { + seqPlayer->storedFadeTimer = temp; seqPlayer->state = cmd; } break; - case SEQPLAYER_STATE_2: + case SEQPLAYER_STATE_FADE_OUT: seqPlayer->fadeTimer = temp; seqPlayer->state = cmd; seqPlayer->fadeVelocity = (0.0f - seqPlayer->fadeVolume) / (s32)seqPlayer->fadeTimer; @@ -1979,13 +1979,13 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) { case 0xDB: // seqPlayer: set volume value = AudioSeq_ScriptReadU8(seqScript); switch (seqPlayer->state) { - case SEQPLAYER_STATE_1: + case SEQPLAYER_STATE_FADE_IN: seqPlayer->state = SEQPLAYER_STATE_0; seqPlayer->fadeVolume = 0.0f; // fallthrough case SEQPLAYER_STATE_0: - seqPlayer->fadeTimer = seqPlayer->fadeTimerUnkEu; - if (seqPlayer->fadeTimerUnkEu != 0) { + seqPlayer->fadeTimer = seqPlayer->storedFadeTimer; + if (seqPlayer->storedFadeTimer != 0) { seqPlayer->fadeVelocity = ((value / 127.0f) - seqPlayer->fadeVolume) / (s32)seqPlayer->fadeTimer; } else { @@ -1993,7 +1993,7 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) { } break; - case SEQPLAYER_STATE_2: + case SEQPLAYER_STATE_FADE_OUT: break; } break; @@ -2104,7 +2104,7 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) { cmd = AudioSeq_ScriptReadU8(seqScript); if (cmd == 0xFF) { cmd = seqPlayer->playerIndex; - if (seqPlayer->state == SEQPLAYER_STATE_2) { + if (seqPlayer->state == SEQPLAYER_STATE_FADE_OUT) { break; } } @@ -2123,7 +2123,7 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) { temp = *new_var; for (i = 0; i < ARRAY_COUNT(seqPlayer->channels); i++) { - seqPlayer->channels[i]->stopSomething2 = temp & 1; + seqPlayer->channels[i]->muted = temp & 1; temp = temp >> 1; } } @@ -2141,17 +2141,17 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) { break; case 0x50: // seqPlayer: io read value subtract - seqScript->value -= seqPlayer->soundScriptIO[cmdLowBits]; + seqScript->value -= seqPlayer->seqScriptIO[cmdLowBits]; break; case 0x70: // seqPlayer: io write value - seqPlayer->soundScriptIO[cmdLowBits] = seqScript->value; + seqPlayer->seqScriptIO[cmdLowBits] = seqScript->value; break; case 0x80: // seqPlayer: io read value - seqScript->value = seqPlayer->soundScriptIO[cmdLowBits]; + seqScript->value = seqPlayer->seqScriptIO[cmdLowBits]; if (cmdLowBits < 2) { - seqPlayer->soundScriptIO[cmdLowBits] = SEQ_IO_VAL_NONE; + seqPlayer->seqScriptIO[cmdLowBits] = SEQ_IO_VAL_NONE; } break; @@ -2173,14 +2173,14 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) { cmd = AudioSeq_ScriptReadU8(seqScript); temp = AudioSeq_ScriptReadS16(seqScript); data2 = &seqPlayer->seqData[temp]; - AudioLoad_SlowLoadSeq(cmd, data2, &seqPlayer->soundScriptIO[cmdLowBits]); + AudioLoad_SlowLoadSeq(cmd, data2, &seqPlayer->seqScriptIO[cmdLowBits]); break; case 0x60: // seqPlayer: async load cmd = AudioSeq_ScriptReadU8(seqScript); value = cmd; temp = AudioSeq_ScriptReadU8(seqScript); - AudioLoad_ScriptLoad(value, temp, &seqPlayer->soundScriptIO[cmdLowBits]); + AudioLoad_ScriptLoad(value, temp, &seqPlayer->seqScriptIO[cmdLowBits]); break; } } @@ -2220,17 +2220,17 @@ void AudioSeq_SkipForwardSequence(SequencePlayer* seqPlayer) { } void AudioSeq_ResetSequencePlayer(SequencePlayer* seqPlayer) { - s32 i; + s32 channelIndex; AudioSeq_SequencePlayerDisable(seqPlayer); seqPlayer->stopScript = false; seqPlayer->delay = 0; - seqPlayer->state = SEQPLAYER_STATE_1; + seqPlayer->state = SEQPLAYER_STATE_FADE_IN; seqPlayer->fadeTimer = 0; - seqPlayer->fadeTimerUnkEu = 0; + seqPlayer->storedFadeTimer = 0; seqPlayer->tempoAcc = 0; seqPlayer->tempo = 120 * TATUMS_PER_BEAT; // 120 BPM - seqPlayer->unk_0C = 0; + seqPlayer->tempoChange = 0; seqPlayer->transposition = 0; seqPlayer->noteAllocPolicy = 0; seqPlayer->shortNoteVelocityTable = gDefaultShortNoteVelocityTable; @@ -2242,32 +2242,32 @@ void AudioSeq_ResetSequencePlayer(SequencePlayer* seqPlayer) { seqPlayer->volume = 0.0f; seqPlayer->muteVolumeScale = 0.5f; - for (i = 0; i < SEQ_NUM_CHANNELS; i++) { - AudioSeq_InitSequenceChannel(seqPlayer->channels[i]); + for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) { + AudioSeq_InitSequenceChannel(seqPlayer->channels[channelIndex]); } } -void AudioSeq_InitSequencePlayerChannels(s32 playerIndex) { +void AudioSeq_InitSequencePlayerChannels(s32 seqPlayerIndex) { SequenceChannel* channel; - SequencePlayer* seqPlayer = &gAudioCtx.seqPlayers[playerIndex]; - s32 i; - s32 j; + SequencePlayer* seqPlayer = &gAudioCtx.seqPlayers[seqPlayerIndex]; + s32 channelIndex; + s32 layerIndex; - for (i = 0; i < SEQ_NUM_CHANNELS; i++) { - seqPlayer->channels[i] = AudioHeap_AllocZeroed(&gAudioCtx.miscPool, sizeof(SequenceChannel)); - if (seqPlayer->channels[i] == NULL) { - seqPlayer->channels[i] = &gAudioCtx.sequenceChannelNone; + for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) { + seqPlayer->channels[channelIndex] = AudioHeap_AllocZeroed(&gAudioCtx.miscPool, sizeof(SequenceChannel)); + if (seqPlayer->channels[channelIndex] == NULL) { + seqPlayer->channels[channelIndex] = &gAudioCtx.sequenceChannelNone; } else { - channel = seqPlayer->channels[i]; + channel = seqPlayer->channels[channelIndex]; channel->seqPlayer = seqPlayer; channel->enabled = false; - channel->unk_11 = i; - for (j = 0; j < ARRAY_COUNT(channel->layers); j++) { - channel->layers[j] = NULL; + channel->channelIndex = channelIndex; + for (layerIndex = 0; layerIndex < ARRAY_COUNT(channel->layers); layerIndex++) { + channel->layers[layerIndex] = NULL; } } - AudioSeq_InitSequenceChannel(seqPlayer->channels[i]); + AudioSeq_InitSequenceChannel(seqPlayer->channels[channelIndex]); } } @@ -2285,8 +2285,8 @@ void AudioSeq_InitSequencePlayer(SequencePlayer* seqPlayer) { seqPlayer->seqDmaInProgress = false; seqPlayer->applyBend = false; - for (j = 0; j < ARRAY_COUNT(seqPlayer->soundScriptIO); j++) { - seqPlayer->soundScriptIO[j] = SEQ_IO_VAL_NONE; + for (j = 0; j < ARRAY_COUNT(seqPlayer->seqScriptIO); j++) { + seqPlayer->seqScriptIO[j] = SEQ_IO_VAL_NONE; } seqPlayer->muteFlags = MUTE_FLAGS_SOFTEN | MUTE_FLAGS_STOP_NOTES; diff --git a/src/code/audio/audio_synthesis.c b/src/code/audio/audio_synthesis.c index 5c72c4452..057668f37 100644 --- a/src/code/audio/audio_synthesis.c +++ b/src/code/audio/audio_synthesis.c @@ -866,8 +866,8 @@ Acmd* AudioSynth_ProcessSamples(s16* aiBuf, s32 numSamplesPerUpdate, Acmd* cmd, size = numSamplesPerUpdate * SAMPLE_SIZE; aInterleave(cmd++, DMEM_TEMP, DMEM_LEFT_CH, DMEM_RIGHT_CH, size); - if (gCustomAudioSynthFunction != NULL) { - cmd = gCustomAudioSynthFunction(cmd, 2 * size, updateIndex); + if (gAudioCustomSynthFunction != NULL) { + cmd = gAudioCustomSynthFunction(cmd, 2 * size, updateIndex); } aSaveBuffer(cmd++, DMEM_TEMP, aiBuf, 2 * size); @@ -1109,8 +1109,8 @@ Acmd* AudioSynth_ProcessSample(s32 noteIndex, NoteSampleState* sampleState, Note case CODEC_REVERB: reverbAddrSrc = (void*)0xFFFFFFFF; - if (gCustomAudioReverbFunction != NULL) { - reverbAddrSrc = gCustomAudioReverbFunction(sample, numSamplesToLoadAdj, flags, noteIndex); + if (gAudioCustomReverbFunction != NULL) { + reverbAddrSrc = gAudioCustomReverbFunction(sample, numSamplesToLoadAdj, flags, noteIndex); } if (reverbAddrSrc == (void*)0xFFFFFFFF) { diff --git a/src/code/audio/audio_thread.c b/src/code/audio/audio_thread.c new file mode 100644 index 000000000..2b06281cc --- /dev/null +++ b/src/code/audio/audio_thread.c @@ -0,0 +1,977 @@ +/** + * @file audio_thread.c + * + * Top-level file that coordinates all audio code on the audio thread. + */ +#include "global.h" + +AudioTask* AudioThread_UpdateImpl(void); +void AudioThread_SetFadeOutTimer(s32 seqPlayerIndex, s32 fadeTimer); +void AudioThread_SetFadeInTimer(s32 seqPlayerIndex, s32 fadeTimer); +void AudioThread_ProcessCmds(u32 msg); +void AudioThread_ProcessSeqPlayerCmd(SequencePlayer* seqPlayer, AudioCmd* cmd); +void AudioThread_ProcessChannelCmd(SequenceChannel* channel, AudioCmd* cmd); +s32 AudioThread_GetSamplePos(s32 seqPlayerIndex, s32 channelIndex, s32 layerIndex, s32* loopEnd, s32* samplePosInt); +s32 AudioThread_CountAndReleaseNotes(s32 flags); + +AudioTask* AudioThread_Update(void) { + return AudioThread_UpdateImpl(); +} + +AudioTask* AudioThread_UpdateImpl(void) { + static AudioTask* sWaitingAudioTask = NULL; + u32 numSamplesRemainingInAi; + s32 numAbiCmds; + s32 pad; + s32 j; + s32 dmaCount; + s16* curAiBuffer; + OSTask_t* task; + s32 index; + u32 msg; + s32 validCount; + s32 i; + + gAudioCtx.totalTaskCount++; + if ((gAudioCtx.totalTaskCount % gAudioCtx.audioBufferParameters.specUnk4) != 0) { + if (gAudioCustomUpdateFunction != NULL) { + gAudioCustomUpdateFunction(); + } + + if (((gAudioCtx.totalTaskCount % gAudioCtx.audioBufferParameters.specUnk4) + 1) == + gAudioCtx.audioBufferParameters.specUnk4) { + return sWaitingAudioTask; + } + + return NULL; + } + + osSendMesg(gAudioCtx.taskStartQueueP, gAudioCtx.totalTaskCount, OS_MESG_NOBLOCK); + gAudioCtx.rspTaskIndex ^= 1; + gAudioCtx.curAiBufferIndex++; + gAudioCtx.curAiBufferIndex %= 3; + index = (gAudioCtx.curAiBufferIndex + 1) % 3; + + // Division converts size to numSamples: 2 channels (left/right) * 2 bytes per sample + numSamplesRemainingInAi = osAiGetLength() / (2 * SAMPLE_SIZE); + + if (gAudioCtx.resetTimer < 16) { + if (gAudioCtx.numSamplesPerFrame[index] != 0) { + osAiSetNextBuffer(gAudioCtx.aiBuffers[index], 2 * gAudioCtx.numSamplesPerFrame[index] * (s32)SAMPLE_SIZE); + if (gAudioCtx.aiBuffers[index]) {} + if (gAudioCtx.numSamplesPerFrame[index]) {} + } + } + + if (gAudioCustomUpdateFunction != NULL) { + gAudioCustomUpdateFunction(); + } + + dmaCount = gAudioCtx.curAudioFrameDmaCount; + for (i = 0; i < gAudioCtx.curAudioFrameDmaCount; i++) { + if (osRecvMesg(&gAudioCtx.curAudioFrameDmaQueue, NULL, OS_MESG_NOBLOCK) == 0) { + dmaCount--; + } + } + + if (dmaCount != 0) { + for (i = 0; i < dmaCount; i++) { + osRecvMesg(&gAudioCtx.curAudioFrameDmaQueue, NULL, OS_MESG_BLOCK); + } + } + + validCount = gAudioCtx.curAudioFrameDmaQueue.validCount; + if (validCount != 0) { + for (i = 0; i < validCount; i++) { + osRecvMesg(&gAudioCtx.curAudioFrameDmaQueue, NULL, OS_MESG_NOBLOCK); + } + } + + gAudioCtx.curAudioFrameDmaCount = 0; + AudioLoad_DecreaseSampleDmaTtls(); + AudioLoad_ProcessLoads(gAudioCtx.resetStatus); + AudioLoad_ProcessScriptLoads(); + + if (gAudioCtx.resetStatus != 0) { + if (AudioHeap_ResetStep() == 0) { + if (gAudioCtx.resetStatus == 0) { + osSendMesg(gAudioCtx.audioResetQueueP, gAudioCtx.specId, OS_MESG_NOBLOCK); + } + + sWaitingAudioTask = NULL; + return NULL; + } + } + + if (gAudioCtx.resetTimer > 16) { + return NULL; + } + if (gAudioCtx.resetTimer != 0) { + gAudioCtx.resetTimer++; + } + + gAudioCtx.curTask = &gAudioCtx.rspTask[gAudioCtx.rspTaskIndex]; + gAudioCtx.curAbiCmdBuf = gAudioCtx.abiCmdBufs[gAudioCtx.rspTaskIndex]; + + index = gAudioCtx.curAiBufferIndex; + curAiBuffer = gAudioCtx.aiBuffers[index]; + + gAudioCtx.numSamplesPerFrame[index] = + (s16)((((gAudioCtx.audioBufferParameters.numSamplesPerFrameTarget - numSamplesRemainingInAi) + + (8 * SAMPLES_PER_FRAME)) & + ~0xF) + + (1 * SAMPLES_PER_FRAME)); + + // Clamp numSamplesPerFrame between numSamplesPerFrameMin and numSamplesPerFrameMax + if (gAudioCtx.numSamplesPerFrame[index] < gAudioCtx.audioBufferParameters.numSamplesPerFrameMin) { + gAudioCtx.numSamplesPerFrame[index] = gAudioCtx.audioBufferParameters.numSamplesPerFrameMin; + } + if (gAudioCtx.numSamplesPerFrame[index] > gAudioCtx.audioBufferParameters.numSamplesPerFrameMax) { + gAudioCtx.numSamplesPerFrame[index] = gAudioCtx.audioBufferParameters.numSamplesPerFrameMax; + } + + j = 0; + if (gAudioCtx.resetStatus == 0) { + // msg = 0000RREE R = read pos, E = End Pos + while (osRecvMesg(gAudioCtx.threadCmdProcQueueP, (OSMesg*)&msg, OS_MESG_NOBLOCK) != -1) { + //! FAKE: + if (1) {} + AudioThread_ProcessCmds(msg); + j++; + } + if ((j == 0) && gAudioCtx.threadCmdQueueFinished) { + AudioThread_ScheduleProcessCmds(); + } + } + + if (gAudioSPDataPtr == (u64*)gAudioCtx.curAbiCmdBuf) { + return -1; + } + + gAudioCtx.curAbiCmdBuf = + AudioSynth_Update(gAudioCtx.curAbiCmdBuf, &numAbiCmds, curAiBuffer, gAudioCtx.numSamplesPerFrame[index]); + + // Update audioRandom to the next random number + gAudioCtx.audioRandom = (gAudioCtx.audioRandom + gAudioCtx.totalTaskCount) * osGetCount(); + gAudioCtx.audioRandom = gAudioCtx.audioRandom + gAudioCtx.aiBuffers[index][gAudioCtx.totalTaskCount & 0xFF]; + + // gWaveSamples[8] interprets compiled assembly code as s16 samples as a way to generate sound with noise. + // Start with the address of AudioThread_Update(), and offset it by a random number between 0 - 0xFFF0 + // Use the resulting address as the starting address to interpret an array of samples i.e. `s16 samples[]` + gWaveSamples[8] = (s16*)((u8*)AudioThread_Update + (gAudioCtx.audioRandom & 0xFFF0)); + + index = gAudioCtx.rspTaskIndex; + gAudioCtx.curTask->taskQueue = NULL; + gAudioCtx.curTask->unk_44 = NULL; + + task = &gAudioCtx.curTask->task.t; + task->type = M_AUDTASK; + task->flags = 0; + task->ucodeBoot = aspMainTextStart; + task->ucodeBootSize = SP_UCODE_SIZE; + task->ucodeDataSize = ((aspMainDataEnd - aspMainDataStart) * sizeof(u64)) - 1; + task->ucode = aspMainTextStart; + task->ucodeData = aspMainDataStart; + task->ucodeSize = SP_UCODE_SIZE; + task->dramStack = (u64*)D_801D6200; + task->dramStackSize = 0; + task->outputBuff = NULL; + task->outputBuffSize = NULL; + if (1) {} + task->dataPtr = (u64*)gAudioCtx.abiCmdBufs[index]; + task->dataSize = numAbiCmds * sizeof(Acmd); + task->yieldDataPtr = NULL; + task->yieldDataSize = 0; + + if (gAudioCtx.numAbiCmdsMax < numAbiCmds) { + gAudioCtx.numAbiCmdsMax = numAbiCmds; + } + + if (gAudioCtx.audioBufferParameters.specUnk4 == 1) { + return gAudioCtx.curTask; + } else { + sWaitingAudioTask = gAudioCtx.curTask; + return NULL; + } +} + +void AudioThread_ProcessGlobalCmd(AudioCmd* cmd) { + s32 i; + s32 pad; + + switch (cmd->op) { + case AUDIOCMD_OP_GLOBAL_SYNC_LOAD_SEQ_PARTS: + AudioLoad_SyncLoadSeqParts(cmd->arg1, cmd->arg2, cmd->asInt, &gAudioCtx.externalLoadQueue); + break; + + case AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER: + AudioLoad_SyncInitSeqPlayer(cmd->arg0, cmd->arg1, cmd->arg2); + AudioThread_SetFadeInTimer(cmd->arg0, cmd->asInt); + break; + + case AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER_SKIP_TICKS: + AudioLoad_SyncInitSeqPlayerSkipTicks(cmd->arg0, cmd->arg1, cmd->asInt); + AudioThread_SetFadeInTimer(cmd->arg0, 500); + AudioSeq_SkipForwardSequence(&gAudioCtx.seqPlayers[cmd->arg0]); + break; + + case AUDIOCMD_OP_GLOBAL_DISABLE_SEQPLAYER: + if (gAudioCtx.seqPlayers[cmd->arg0].enabled) { + if (cmd->asInt == 0) { + AudioSeq_SequencePlayerDisableAsFinished(&gAudioCtx.seqPlayers[cmd->arg0]); + } else { + AudioThread_SetFadeOutTimer(cmd->arg0, cmd->asInt); + } + } + break; + + case AUDIOCMD_OP_GLOBAL_SET_SOUND_MODE: + gAudioCtx.soundMode = cmd->asInt; + break; + + case AUDIOCMD_OP_GLOBAL_MUTE: + if (cmd->arg0 == AUDIOCMD_ALL_SEQPLAYERS) { + for (i = 0; i < gAudioCtx.audioBufferParameters.numSequencePlayers; i++) { + gAudioCtx.seqPlayers[i].muted = true; + gAudioCtx.seqPlayers[i].recalculateVolume = true; + } + } else { + gAudioCtx.seqPlayers[cmd->arg0].muted = true; + gAudioCtx.seqPlayers[cmd->arg0].recalculateVolume = true; + } + break; + + case AUDIOCMD_OP_GLOBAL_UNMUTE: + if (cmd->asInt == true) { + for (i = 0; i < gAudioCtx.numNotes; i++) { + Note* note = &gAudioCtx.notes[i]; + NoteSampleState* noteSampleState = ¬e->sampleState; + + if (noteSampleState->bitField0.enabled && (note->playbackState.status == PLAYBACK_STATUS_0) && + (note->playbackState.parentLayer->channel->muteFlags & MUTE_FLAGS_STOP_SAMPLES)) { + noteSampleState->bitField0.finished = true; + } + } + } + + if (cmd->arg0 == AUDIOCMD_ALL_SEQPLAYERS) { + for (i = 0; i < gAudioCtx.audioBufferParameters.numSequencePlayers; i++) { + gAudioCtx.seqPlayers[i].muted = false; + gAudioCtx.seqPlayers[i].recalculateVolume = true; + } + } else { + gAudioCtx.seqPlayers[cmd->arg0].muted = false; + gAudioCtx.seqPlayers[cmd->arg0].recalculateVolume = true; + } + + break; + + case AUDIOCMD_OP_GLOBAL_SYNC_LOAD_INSTRUMENT: + AudioLoad_SyncLoadInstrument(cmd->arg0, cmd->arg1, cmd->arg2); + break; + + case AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_SAMPLE_BANK: + AudioLoad_AsyncLoadSampleBank(cmd->arg0, cmd->arg1, cmd->arg2, &gAudioCtx.externalLoadQueue); + break; + + case AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_FONT: + AudioLoad_AsyncLoadFont(cmd->arg0, cmd->arg1, cmd->arg2, &gAudioCtx.externalLoadQueue); + break; + + case AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_SEQ: + AudioLoad_AsyncLoadSeq(cmd->arg0, cmd->arg1, cmd->arg2, &gAudioCtx.externalLoadQueue); + break; + + case AUDIOCMD_OP_GLOBAL_DISCARD_SEQ_FONTS: + AudioLoad_DiscardSeqFonts(cmd->arg1); + break; + + case AUDIOCMD_OP_GLOBAL_SET_CHANNEL_MASK: + gAudioCtx.threadCmdChannelMask[cmd->arg0] = cmd->asUShort; + break; + + case AUDIOCMD_OP_GLOBAL_RESET_AUDIO_HEAP: + gAudioCtx.resetStatus = 5; + gAudioCtx.specId = cmd->asUInt; + break; + + case AUDIOCMD_OP_GLOBAL_SET_CUSTOM_UPDATE_FUNCTION: + gAudioCustomUpdateFunction = cmd->asUInt; + break; + + case AUDIOCMD_OP_GLOBAL_SET_CUSTOM_FUNCTION: + if (cmd->arg2 == AUDIO_CUSTOM_FUNCTION_REVERB) { + gAudioCustomReverbFunction = cmd->asUInt; + } else if (cmd->arg2 == AUDIO_CUSTOM_FUNCTION_SYNTH) { + gAudioCustomSynthFunction = cmd->asUInt; + } else { + gAudioCtx.customSeqFunctions[cmd->arg2] = cmd->asUInt; + } + break; + + case AUDIOCMD_OP_GLOBAL_SET_DRUM_FONT: + case AUDIOCMD_OP_GLOBAL_SET_SFX_FONT: + case AUDIOCMD_OP_GLOBAL_SET_INSTRUMENT_FONT: + if (AudioPlayback_SetFontInstrument(cmd->op - AUDIOCMD_OP_GLOBAL_SET_DRUM_FONT, cmd->arg1, cmd->arg2, + cmd->asInt)) {} + break; + + case AUDIOCMD_OP_GLOBAL_DISABLE_ALL_SEQPLAYERS: { + u32 flags = cmd->asUInt; + + if (flags == AUDIO_NOTE_RELEASE) { + for (i = 0; i < gAudioCtx.audioBufferParameters.numSequencePlayers; i++) { + if (gAudioCtx.seqPlayers[i].enabled) { + AudioSeq_SequencePlayerDisableAsFinished(&gAudioCtx.seqPlayers[i]); + } + } + } + AudioThread_CountAndReleaseNotes(flags); + break; + } + + case AUDIOCMD_OP_GLOBAL_POP_PERSISTENT_CACHE: + AudioHeap_PopPersistentCache(cmd->asInt); + break; + + case AUDIOCMD_OP_GLOBAL_E5: + func_8018FA60(cmd->arg0, cmd->arg1, cmd->arg2, cmd->asInt); + break; + + case AUDIOCMD_OP_GLOBAL_SET_REVERB_DATA: + AudioHeap_SetReverbData(cmd->arg1, cmd->arg0, cmd->asInt, false); + break; + + default: + break; + } +} + +void AudioThread_SetFadeOutTimer(s32 seqPlayerIndex, s32 fadeTimer) { + SequencePlayer* seqPlayer = &gAudioCtx.seqPlayers[seqPlayerIndex]; + + if (fadeTimer == 0) { + fadeTimer = 1; + } + + seqPlayer->fadeVelocity = -(seqPlayer->fadeVolume / fadeTimer); + seqPlayer->state = SEQPLAYER_STATE_FADE_OUT; + seqPlayer->fadeTimer = fadeTimer; +} + +void AudioThread_SetFadeInTimer(s32 seqPlayerIndex, s32 fadeTimer) { + SequencePlayer* seqPlayer; + + if (fadeTimer != 0) { + seqPlayer = &gAudioCtx.seqPlayers[seqPlayerIndex]; + seqPlayer->state = SEQPLAYER_STATE_FADE_IN; + seqPlayer->storedFadeTimer = fadeTimer; + seqPlayer->fadeTimer = fadeTimer; + seqPlayer->fadeVolume = 0.0f; + seqPlayer->fadeVelocity = 0.0f; + } +} + +void AudioThread_InitMesgQueuesInternal(void) { + gAudioCtx.threadCmdWritePos = 0; + gAudioCtx.threadCmdReadPos = 0; + gAudioCtx.threadCmdQueueFinished = false; + + gAudioCtx.taskStartQueueP = &gAudioCtx.taskStartQueue; + gAudioCtx.threadCmdProcQueueP = &gAudioCtx.threadCmdProcQueue; + gAudioCtx.audioResetQueueP = &gAudioCtx.audioResetQueue; + + osCreateMesgQueue(gAudioCtx.taskStartQueueP, gAudioCtx.taskStartMsgs, ARRAY_COUNT(gAudioCtx.taskStartMsgs)); + osCreateMesgQueue(gAudioCtx.threadCmdProcQueueP, gAudioCtx.threadCmdProcMsgBuf, + ARRAY_COUNT(gAudioCtx.threadCmdProcMsgBuf)); + osCreateMesgQueue(gAudioCtx.audioResetQueueP, gAudioCtx.audioResetMesgs, ARRAY_COUNT(gAudioCtx.audioResetMesgs)); +} + +void AudioThread_QueueCmd(u32 opArgs, void** data) { + AudioCmd* cmd = &gAudioCtx.threadCmdBuf[gAudioCtx.threadCmdWritePos & 0xFF]; + + cmd->opArgs = opArgs; + cmd->data = *data; + + gAudioCtx.threadCmdWritePos++; + + if (gAudioCtx.threadCmdWritePos == gAudioCtx.threadCmdReadPos) { + gAudioCtx.threadCmdWritePos--; + } +} + +void AudioThread_QueueCmdF32(u32 opArgs, f32 data) { + AudioThread_QueueCmd(opArgs, (void**)&data); +} + +void AudioThread_QueueCmdS32(u32 opArgs, s32 data) { + AudioThread_QueueCmd(opArgs, (void**)&data); +} + +void AudioThread_QueueCmdS8(u32 opArgs, s8 data) { + u32 uData = data << 0x18; + + AudioThread_QueueCmd(opArgs, (void**)&uData); +} + +void AudioThread_QueueCmdU16(u32 opArgs, u16 data) { + u32 uData = data << 0x10; + + AudioThread_QueueCmd(opArgs, (void**)&uData); +} + +s32 AudioThread_ScheduleProcessCmds(void) { + static s32 sMaxWriteReadDiff = 0; + s32 ret; + + if (sMaxWriteReadDiff < (u8)((gAudioCtx.threadCmdWritePos - gAudioCtx.threadCmdReadPos) + 0x100)) { + sMaxWriteReadDiff = (u8)((gAudioCtx.threadCmdWritePos - gAudioCtx.threadCmdReadPos) + 0x100); + } + + ret = osSendMesg(gAudioCtx.threadCmdProcQueueP, + (void*)(((gAudioCtx.threadCmdReadPos & 0xFF) << 8) | (gAudioCtx.threadCmdWritePos & 0xFF)), + OS_MESG_NOBLOCK); + if (ret != -1) { + gAudioCtx.threadCmdReadPos = gAudioCtx.threadCmdWritePos; + ret = 0; + } else { + return -1; + } + + return ret; +} + +void AudioThread_ResetCmdQueue(void) { + gAudioCtx.threadCmdQueueFinished = false; + gAudioCtx.threadCmdReadPos = gAudioCtx.threadCmdWritePos; +} + +void AudioThread_ProcessCmd(AudioCmd* cmd) { + SequencePlayer* seqPlayer; + u16 threadCmdChannelMask; + s32 channelIndex; + + if ((cmd->op & 0xF0) >= 0xE0) { + AudioThread_ProcessGlobalCmd(cmd); + return; + } + + if (cmd->arg0 < gAudioCtx.audioBufferParameters.numSequencePlayers) { + seqPlayer = &gAudioCtx.seqPlayers[cmd->arg0]; + if (cmd->op & 0x80) { + AudioThread_ProcessGlobalCmd(cmd); + return; + } + + if (cmd->op & 0x40) { + AudioThread_ProcessSeqPlayerCmd(seqPlayer, cmd); + return; + } + + if (cmd->arg1 < SEQ_NUM_CHANNELS) { + AudioThread_ProcessChannelCmd(seqPlayer->channels[cmd->arg1], cmd); + return; + } + + if (cmd->arg1 == AUDIOCMD_ALL_CHANNELS) { + threadCmdChannelMask = gAudioCtx.threadCmdChannelMask[cmd->arg0]; + for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) { + if (threadCmdChannelMask & 1) { + AudioThread_ProcessChannelCmd(seqPlayer->channels[channelIndex], cmd); + } + threadCmdChannelMask = threadCmdChannelMask >> 1; + } + } + } +} + +void AudioThread_ProcessCmds(u32 msg) { + static u8 sCurCmdRdPos = 0; + AudioCmd* cmd; + u8 endPos; + + if (!gAudioCtx.threadCmdQueueFinished) { + sCurCmdRdPos = msg >> 8; + } + + while (true) { + endPos = msg & 0xFF; + if (sCurCmdRdPos == endPos) { + gAudioCtx.threadCmdQueueFinished = false; + break; + } + + cmd = &gAudioCtx.threadCmdBuf[sCurCmdRdPos++ & 0xFF]; + if (cmd->op == AUDIOCMD_OP_GLOBAL_STOP_AUDIOCMDS) { + gAudioCtx.threadCmdQueueFinished = true; + break; + } + + AudioThread_ProcessCmd(cmd); + cmd->op = AUDIOCMD_OP_NOOP; + } +} + +u32 AudioThread_GetExternalLoadQueueMsg(u32* retMsg) { + u32 msg; + + if (osRecvMesg(&gAudioCtx.externalLoadQueue, (OSMesg*)&msg, OS_MESG_NOBLOCK) == -1) { + *retMsg = 0; + return 0; + } + + *retMsg = msg & 0xFFFFFF; + return msg >> 0x18; +} + +u8* AudioThread_GetFontsForSequence(s32 seqId, u32* outNumFonts) { + return AudioLoad_GetFontsForSequence(seqId, outNumFonts); +} + +void AudioThread_GetSampleBankIdsOfFont(s32 fontId, u32* sampleBankId1, u32* sampleBankId2) { + *sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1; + *sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2; +} + +s32 func_80193C5C(void) { + s32 pad; + s32 specId; + + if (osRecvMesg(gAudioCtx.audioResetQueueP, (OSMesg*)&specId, OS_MESG_NOBLOCK) == -1) { + return 0; + } else if (gAudioCtx.specId != specId) { + return -1; + } else { + return 1; + } +} + +void AudioThread_WaitForAudioResetQueueP(void) { + // macro? + // clang-format off + s32 chk = -1; s32 msg; do {} while (osRecvMesg(gAudioCtx.audioResetQueueP, (OSMesg*)&msg, OS_MESG_NOBLOCK) != chk); + // clang-format on +} + +s32 AudioThread_ResetAudioHeap(s32 specId) { + s32 resetStatus; + OSMesg msg; + s32 pad; + + AudioThread_WaitForAudioResetQueueP(); + resetStatus = gAudioCtx.resetStatus; + if (resetStatus != 0) { + AudioThread_ResetCmdQueue(); + if (gAudioCtx.specId == specId) { + return -2; + } else if (resetStatus > 2) { + gAudioCtx.specId = specId; + return -3; + } else { + osRecvMesg(gAudioCtx.audioResetQueueP, &msg, OS_MESG_BLOCK); + } + } + + AudioThread_WaitForAudioResetQueueP(); + AUDIOCMD_GLOBAL_RESET_AUDIO_HEAP(specId); + + return AudioThread_ScheduleProcessCmds(); +} + +void AudioThread_PreNMIInternal(void) { + gAudioCtx.resetTimer = 1; + if (gAudioCtxInitalized) { + AudioThread_ResetAudioHeap(0); + gAudioCtx.resetStatus = 0; + } +} + +// Unused +s8 AudioThread_GetChannelIO(s32 seqPlayerIndex, s32 channelIndex, s32 ioPort) { + SequencePlayer* seqPlayer = &gAudioCtx.seqPlayers[seqPlayerIndex]; + SequenceChannel* channel; + + if (seqPlayer->enabled) { + channel = seqPlayer->channels[channelIndex]; + return channel->seqScriptIO[ioPort]; + } else { + return SEQ_IO_VAL_NONE; + } +} + +// Unused +s8 AudioThread_GetSeqPlayerIO(s32 seqPlayerIndex, s32 ioPort) { + return gAudioCtx.seqPlayers[seqPlayerIndex].seqScriptIO[ioPort]; +} + +// Unused +void AudioThread_InitExternalPool(void* addr, size_t size) { + AudioHeap_InitPool(&gAudioCtx.externalPool, addr, size); +} + +// Unused +void AudioThread_ResetExternalPool(void) { + gAudioCtx.externalPool.startAddr = NULL; +} + +void AudioThread_ProcessSeqPlayerCmd(SequencePlayer* seqPlayer, AudioCmd* cmd) { + f32 fadeVolume; + + switch (cmd->op) { + case AUDIOCMD_OP_SEQPLAYER_FADE_VOLUME_SCALE: + if (seqPlayer->fadeVolumeScale != cmd->asFloat) { + seqPlayer->fadeVolumeScale = cmd->asFloat; + seqPlayer->recalculateVolume = true; + } + break; + + case AUDIOCMD_OP_SEQPLAYER_SET_TEMPO: + seqPlayer->tempo = cmd->asInt * TATUMS_PER_BEAT; + break; + + case AUDIOCMD_OP_SEQPLAYER_CHANGE_TEMPO: + seqPlayer->tempoChange = cmd->asInt * TATUMS_PER_BEAT; + break; + + case AUDIOCMD_OP_SEQPLAYER_CHANGE_TEMPO_TICKS: + seqPlayer->tempoChange = cmd->asInt; + break; + + case AUDIOCMD_OP_SEQPLAYER_SET_TRANSPOSITION: + seqPlayer->transposition = cmd->asSbyte; + break; + + case AUDIOCMD_OP_SEQPLAYER_SET_IO: + seqPlayer->seqScriptIO[cmd->arg2] = cmd->asSbyte; + break; + + case AUDIOCMD_OP_SEQPLAYER_FADE_TO_SET_VOLUME: + fadeVolume = (s32)cmd->arg1 / 127.0f; + goto apply_fade; + + case AUDIOCMD_OP_SEQPLAYER_FADE_TO_SCALED_VOLUME: + fadeVolume = ((s32)cmd->arg1 / 100.0f) * seqPlayer->fadeVolume; + apply_fade: + if (seqPlayer->state != SEQPLAYER_STATE_FADE_OUT) { + seqPlayer->volume = seqPlayer->fadeVolume; + if (cmd->asInt == 0) { + seqPlayer->fadeVolume = fadeVolume; + } else { + s32 fadeTimer = cmd->asInt; + + seqPlayer->state = SEQPLAYER_STATE_0; + seqPlayer->fadeTimer = fadeTimer; + seqPlayer->fadeVelocity = (fadeVolume - seqPlayer->fadeVolume) / fadeTimer; + } + } + break; + + case AUDIOCMD_OP_SEQPLAYER_RESET_VOLUME: + if (seqPlayer->state != SEQPLAYER_STATE_FADE_OUT) { + if (cmd->asInt == 0) { + seqPlayer->fadeVolume = seqPlayer->volume; + } else { + s32 fadeTimer = cmd->asInt; + + seqPlayer->state = SEQPLAYER_STATE_0; + seqPlayer->fadeTimer = fadeTimer; + seqPlayer->fadeVelocity = (seqPlayer->volume - seqPlayer->fadeVolume) / fadeTimer; + } + } + break; + + case AUDIOCMD_OP_SEQPLAYER_SET_BEND: + seqPlayer->bend = cmd->asFloat; + if (seqPlayer->bend == 1.0f) { + seqPlayer->applyBend = false; + } else { + seqPlayer->applyBend = true; + } + break; + + default: + break; + } +} + +void AudioThread_ProcessChannelCmd(SequenceChannel* channel, AudioCmd* cmd) { + u8 filterCutoff; + + switch (cmd->op) { + case AUDIOCMD_OP_CHANNEL_SET_VOL_SCALE: + if (channel->volumeScale != cmd->asFloat) { + channel->volumeScale = cmd->asFloat; + channel->changes.s.volume = true; + } + break; + + case AUDIOCMD_OP_CHANNEL_SET_VOL: + if (channel->volume != cmd->asFloat) { + channel->volume = cmd->asFloat; + channel->changes.s.volume = true; + } + break; + + case AUDIOCMD_OP_CHANNEL_SET_PAN: + if (channel->newPan != cmd->asSbyte) { + channel->newPan = cmd->asSbyte; + channel->changes.s.pan = true; + } + break; + + case AUDIOCMD_OP_CHANNEL_SET_PAN_WEIGHT: + if (channel->newPan != cmd->asSbyte) { + channel->panChannelWeight = cmd->asSbyte; + channel->changes.s.pan = true; + } + break; + + case AUDIOCMD_OP_CHANNEL_SET_FREQ_SCALE: + if (channel->freqScale != cmd->asFloat) { + channel->freqScale = cmd->asFloat; + channel->changes.s.freqScale = true; + } + break; + + case AUDIOCMD_OP_CHANNEL_SET_REVERB_VOLUME: + if (channel->targetReverbVol != cmd->asSbyte) { + channel->targetReverbVol = cmd->asSbyte; + } + break; + + case AUDIOCMD_OP_CHANNEL_SET_REVERB_INDEX: + if (channel->reverbIndex != cmd->asSbyte) { + channel->reverbIndex = cmd->asSbyte; + } + break; + + case AUDIOCMD_OP_CHANNEL_SET_SURROUND_EFFECT_INDEX: + channel->surroundEffectIndex = cmd->asSbyte; + break; + + case AUDIOCMD_OP_CHANNEL_SET_IO: + if (cmd->arg2 < ARRAY_COUNT(channel->seqScriptIO)) { + channel->seqScriptIO[cmd->arg2] = cmd->asSbyte; + } + break; + + case AUDIOCMD_OP_CHANNEL_SET_MUTE: + channel->muted = cmd->asSbyte; + break; + + case AUDIOCMD_OP_CHANNEL_SET_MUTE_FLAGS: + channel->muteFlags = cmd->asSbyte; + break; + + case AUDIOCMD_OP_CHANNEL_SET_VIBRATO_DEPTH: + channel->vibrato.vibratoDepthTarget = cmd->asUbyte * 8; + channel->vibrato.vibratoDepthChangeDelay = 1; + break; + + case AUDIOCMD_OP_CHANNEL_SET_VIBRATO_RATE: + channel->vibrato.vibratoRateTarget = cmd->asUbyte * 32; + channel->vibrato.vibratoRateChangeDelay = 1; + break; + + case AUDIOCMD_OP_CHANNEL_SET_COMB_FILTER_SIZE: + channel->combFilterSize = cmd->asUbyte; + break; + + case AUDIOCMD_OP_CHANNEL_SET_COMB_FILTER_GAIN: + channel->combFilterGain = cmd->asUShort; + break; + + case AUDIOCMD_OP_CHANNEL_SET_STEREO: + channel->stereoData.asByte = cmd->asUbyte; + break; + + case AUDIOCMD_OP_CHANNEL_SET_SET_START_POS: + channel->startSamplePos = cmd->asInt; + break; + + case AUDIOCMD_OP_CHANNEL_SET_SFX_STATE: + channel->sfxState = cmd->asUInt; + break; + + case AUDIOCMD_OP_CHANNEL_SET_FILTER: + filterCutoff = cmd->arg2; + if (cmd->asUInt != 0) { + channel->filter = cmd->asUInt; + } + if (channel->filter != NULL) { + AudioHeap_LoadFilter(channel->filter, filterCutoff >> 4, filterCutoff & 0xF); + } + break; + + case AUDIOCMD_OP_CHANNEL_SET_GAIN: + channel->gain = cmd->asUbyte; + break; + + default: + break; + } +} + +/** + * Call an audio-thread command that has no code to process it. Unused. + */ +void AudioThread_Noop1Cmd(s32 arg0, s32 arg1, s32 arg2) { + AUDIOCMD_GLOBAL_NOOP_1(arg0, arg1, arg2, 1); +} + +/** + * Call an audio-thread command that has no code to process it. Unused. + */ +void AudioThread_Noop1CmdZeroed(void) { + AUDIOCMD_GLOBAL_NOOP_1(0, 0, 0, 0); +} + +/** + * Call an audio-thread command that has no code to process it. Unused. + */ +void AudioThread_Noop2Cmd(u32 arg0, s32 arg1) { + AUDIOCMD_GLOBAL_NOOP_2(0, 0, arg1, arg0); +} + +// Unused +void AudioThread_WaitForAudioTask(void) { + osRecvMesg(gAudioCtx.taskStartQueueP, NULL, OS_MESG_NOBLOCK); + osRecvMesg(gAudioCtx.taskStartQueueP, NULL, OS_MESG_BLOCK); +} + +/** + * Get the number of s16-samples from the start of the sample to the current sample position. + * Unused + */ +s32 AudioThread_GetSamplePosFromStart(s32 seqPlayerIndex, s32 channelIndex, s32 layerIndex) { + s32 pad; + s32 loopEnd; + s32 samplePosInt; + + if (!AudioThread_GetSamplePos(seqPlayerIndex, channelIndex, layerIndex, &loopEnd, &samplePosInt)) { + return 0; + } + return samplePosInt; +} + +/** + * Get the number of s16-samples from the current sample position to the end of the sample. + * Unused + */ +s32 AudioThread_GetSamplePosUntilEnd(s32 seqPlayerIndex, s32 channelIndex, s32 layerIndex) { + s32 pad; + s32 loopEnd; + s32 samplePosInt; + + if (!AudioThread_GetSamplePos(seqPlayerIndex, channelIndex, layerIndex, &loopEnd, &samplePosInt)) { + return 0; + } + return loopEnd - samplePosInt; +} + +// Only used in unused functions +s32 AudioThread_GetSamplePos(s32 seqPlayerIndex, s32 channelIndex, s32 layerIndex, s32* loopEnd, s32* samplePosInt) { + SequencePlayer* seqPlayer = &gAudioCtx.seqPlayers[seqPlayerIndex]; + SequenceLayer* layer; + Note* note; + TunedSample* tunedSample; + + if (seqPlayer->enabled && seqPlayer->channels[channelIndex]->enabled) { + layer = seqPlayer->channels[channelIndex]->layers[layerIndex]; + if (layer == NULL) { + return false; + } + + if (layer->enabled) { + if (layer->note == NULL) { + return false; + } + + if (!layer->bit3) { + return false; + } + + note = layer->note; + if (layer == note->playbackState.parentLayer) { + + if (note->sampleState.bitField1.isSyntheticWave == true) { + return false; + } + + tunedSample = note->sampleState.tunedSample; + if (tunedSample == NULL) { + return false; + } + *loopEnd = tunedSample->sample->loop->loopEnd; + *samplePosInt = note->synthesisState.samplePosInt; + return true; + } + return false; + } + } + return false; +} + +s32 AudioThread_GetEnabledNotesCount(void) { + return AudioThread_CountAndReleaseNotes(0); +} + +s32 AudioThread_GetEnabledSampledNotesCount(void) { + return AudioThread_CountAndReleaseNotes(AUDIO_NOTE_SAMPLE_NOTES); +} + +/** + * @param flags 0: count notes. 1: release all notes. 2: count sample notes 3: release sample notes + * @return s32 number of notes + */ +s32 AudioThread_CountAndReleaseNotes(s32 flags) { + s32 noteCount; + NotePlaybackState* playbackState; + NoteSampleState* noteSampleState; + s32 i; + Note* note; + TunedSample* tunedSample; + + noteCount = 0; + for (i = 0; i < gAudioCtx.numNotes; i++) { + note = &gAudioCtx.notes[i]; + playbackState = ¬e->playbackState; + if (note->sampleState.bitField0.enabled) { + noteSampleState = ¬e->sampleState; + if (playbackState->adsr.action.s.state != ADSR_STATE_DISABLED) { + if (flags >= AUDIO_NOTE_SAMPLE_NOTES) { + tunedSample = noteSampleState->tunedSample; + if ((tunedSample == NULL) || noteSampleState->bitField1.isSyntheticWave) { + continue; + } + if (tunedSample->sample->medium == MEDIUM_RAM) { + continue; + } + } + + noteCount++; + if ((flags & AUDIO_NOTE_RELEASE) == AUDIO_NOTE_RELEASE) { + playbackState->adsr.fadeOutVel = gAudioCtx.audioBufferParameters.updatesPerFrameInv; + playbackState->adsr.action.s.release = true; + } + } + } + } + return noteCount; +} + +u32 AudioThread_NextRandom(void) { + static u32 sAudioRandom = 0x12345678; + static u32 sAudioOsCount = 0x11111111; + u32 count = osGetCount(); + + sAudioRandom = (gAudioCtx.totalTaskCount + sAudioRandom + count) * (gAudioCtx.audioRandom + 0x1234567); + sAudioRandom = (sAudioRandom & 1) + (sAudioRandom * 2) + sAudioOsCount; + sAudioOsCount = count; + + return sAudioRandom; +} + +void AudioThread_InitMesgQueues(void) { + AudioThread_InitMesgQueuesInternal(); +} diff --git a/src/code/audio/code_80192BE0.c b/src/code/audio/code_80192BE0.c deleted file mode 100644 index e69f678ff..000000000 --- a/src/code/audio/code_80192BE0.c +++ /dev/null @@ -1,81 +0,0 @@ -#include "global.h" - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80192BE0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80192C00.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_8019319C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_801936D8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_8019372C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193774.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_8019380C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193858.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/AudioThread_QueueCmdS32.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/AudioThread_QueueCmdS8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_801938D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/AudioThread_ScheduleProcessCmds.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193990.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_801939A8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193AEC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193BA0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193C04.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193C24.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193C5C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193CB4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193D08.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193DA4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193DF0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193E44.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193E6C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193E9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193EA8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80194080.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_801942BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80194304.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80194328.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_8019435C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_8019439C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_801943D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_8019440C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80194528.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80194548.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80194568.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/AudioThread_NextRandom.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/AudioThread_InitMesgQueues.s") diff --git a/src/code/audio/code_8019AF00.c b/src/code/audio/code_8019AF00.c index 5fd58a487..801e2b076 100644 --- a/src/code/audio/code_8019AF00.c +++ b/src/code/audio/code_8019AF00.c @@ -2640,7 +2640,7 @@ void AudioOcarina_PlayControllerInput(u8 isOcarinaSfxSuppressedWhenCancelled) { // Add vibrato of the ocarina note based on the x control stick sCurOcarinaVibrato = ABS_ALT(sOcarinaInputStickRel.x) >> 2; // Sets vibrato to io port 6 - AudioThread_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 6, sCurOcarinaVibrato); + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 6, sCurOcarinaVibrato); } else { // no bending or vibrato for recording state OCARINA_RECORD_SCARECROW_SPAWN sCurOcarinaBendIndex = 0; @@ -2652,10 +2652,9 @@ void AudioOcarina_PlayControllerInput(u8 isOcarinaSfxSuppressedWhenCancelled) { if ((sCurOcarinaPitch != OCARINA_PITCH_NONE) && (sPrevOcarinaPitch != sCurOcarinaPitch)) { // Sets ocarina instrument Id to io port 7, which is used // as an index in seq 0 to get the true instrument Id - AudioThread_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 7, - sOcarinaInstrumentId - 1); + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 7, sOcarinaInstrumentId - 1); // Sets pitch to io port 5 - AudioThread_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 5, sCurOcarinaPitch); + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 5, sCurOcarinaPitch); AudioSfx_PlaySfx(NA_SE_OC_OCARINA, &gSfxDefaultPos, 4, &sCurOcarinaBendFreq, &sDefaultOcarinaVolume, &gSfxDefaultReverb); } else if ((sPrevOcarinaPitch != OCARINA_PITCH_NONE) && (sCurOcarinaPitch == OCARINA_PITCH_NONE) && @@ -2862,7 +2861,7 @@ void AudioOcarina_PlaybackSong(void) { // Update vibrato sNotePlaybackVibrato = sPlaybackSong[sPlaybackNotePos].vibrato; // Sets vibrato to io port 6 - AudioThread_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 6, sNotePlaybackVibrato); + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 6, sNotePlaybackVibrato); // Update bend if (sNotePlaybackBend != sPlaybackSong[sPlaybackNotePos].bend) { @@ -2892,10 +2891,9 @@ void AudioOcarina_PlaybackSong(void) { sPlaybackStaffPos++; // Sets ocarina instrument Id to io port 7, which is used // as an index in seq 0 to get the true instrument Id - AudioThread_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 7, - sOcarinaInstrumentId - 1); - AudioThread_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 5, - sPlaybackPitch & OCARINA_BUTTON_MASK_PITCH); + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 7, sOcarinaInstrumentId - 1); + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 5, + sPlaybackPitch & OCARINA_BUTTON_MASK_PITCH); AudioSfx_PlaySfx(NA_SE_OC_OCARINA, &gSfxDefaultPos, 4, &sRelativeNotePlaybackBend, &sRelativeNotePlaybackVolume, &gSfxDefaultReverb); } else { @@ -3400,7 +3398,7 @@ u8 sRequestCustomSequence = false; void AudioOcarina_SetCustomSequence(void) { // Never passes true as sRequestCustomSequence is never set true if (sRequestCustomSequence && gAudioCtx.seqPlayers[SEQ_PLAYER_FANFARE].enabled && - ((u8)gAudioCtx.seqPlayers[SEQ_PLAYER_FANFARE].soundScriptIO[0] == (u8)SEQ_IO_VAL_NONE)) { + ((u8)gAudioCtx.seqPlayers[SEQ_PLAYER_FANFARE].seqScriptIO[0] == (u8)SEQ_IO_VAL_NONE)) { gAudioCtx.seqPlayers[SEQ_PLAYER_FANFARE].seqData = sCustomSequenceScript; sRequestCustomSequence = false; } @@ -3754,8 +3752,8 @@ s8 AudioSfx_ComputeReverb(u8 bankId, u8 entryIndex, u8 channelIndex) { } if (IS_SEQUENCE_CHANNEL_VALID(gAudioCtx.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex])) { - scriptAdd = gAudioCtx.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex]->soundScriptIO[1]; - if (gAudioCtx.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex]->soundScriptIO[1] <= SEQ_IO_VAL_NONE) { + scriptAdd = gAudioCtx.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex]->seqScriptIO[1]; + if (gAudioCtx.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex]->seqScriptIO[1] <= SEQ_IO_VAL_NONE) { scriptAdd = 0; } } @@ -4051,8 +4049,8 @@ void AudioSfx_SetProperties(u8 bankId, u8 entryIndex, u8 channelIndex) { //! FAKE: if (1) {} - // CHAN_UPD_SCRIPT_IO (slot 2, sets volume) - AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | (channelIndex << 8) | 2, volumeS8); + // ioPort 2, sets volume + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, channelIndex, 2, volumeS8); if (sSfxChannelState[channelIndex].reverb != reverb) { sSfxChannelState[channelIndex].reverb = reverb; @@ -4307,16 +4305,16 @@ f32 sBigBellsVolume[8] = { */ void Audio_SetGanonsTowerBgmVolumeLevel(u8 ganonsTowerLevel) { u8 channelIndex; - s8 pan = 0; + s8 panChannelWeight = 0; // Ganondorfs's Lair if (ganonsTowerLevel == 0) { - pan = 0x7F; + // Pan comes entirely from the SequenceChannel + panChannelWeight = 0x7F; } - for (channelIndex = 0; channelIndex < 16; channelIndex++) { - // CHAN_UPD_PAN_UNSIGNED - AudioThread_QueueCmdS8(((u8)(u32)channelIndex << 8) | 0x7000000, pan); + for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) { + AUDIOCMD_CHANNEL_SET_PAN_WEIGHT(SEQ_PLAYER_BGM_MAIN, channelIndex, panChannelWeight); } // Lowest room in Ganon's Tower (Entrance Room) @@ -4359,11 +4357,12 @@ s32 Audio_SetGanonsTowerBgmVolume(u8 targetVolume) { for (channelIndex = 0; channelIndex < ARRAY_COUNT(gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels); channelIndex++) { if (&gAudioCtx.sequenceChannelNone != gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]) { - // soundScriptIO[5] was set to 0x40 in channels 0, 1, and 4 (BGM no longer in OoT) - if ((u8)gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]->soundScriptIO[5] != + // seqScriptIO[5] was originally set to 0x40 in channels 0, 1, and 4 by OoT's Ganon's Tower BGM, + // which was removed in MM + if ((u8)gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]->seqScriptIO[5] != (u8)SEQ_IO_VAL_NONE) { // Higher volume leads to lower reverb - reverb = (((u16)gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]->soundScriptIO[5] - + reverb = (((u16)gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]->seqScriptIO[5] - targetVolume) + 0x7F); @@ -4371,10 +4370,7 @@ s32 Audio_SetGanonsTowerBgmVolume(u8 targetVolume) { reverb = 0x7F; } - // CHAN_UPD_REVERB - AudioThread_QueueCmdS8(_SHIFTL(5, 24, 8) | _SHIFTL(SEQ_PLAYER_BGM_MAIN, 16, 8) | - _SHIFTL(channelIndex, 8, 8), - (u8)reverb); + AUDIOCMD_CHANNEL_SET_REVERB_VOLUME(SEQ_PLAYER_BGM_MAIN, channelIndex, (u8)reverb); } } } @@ -4445,9 +4441,7 @@ void AudioSfx_SetChannelIO(Vec3f* pos, u16 sfxId, u8 ioData) { if (entryIndex != 0xFF) { if ((sfxId == gSfxBanks[bankId][entryIndex].sfxId) && (&pos->x == gSfxBanks[bankId][entryIndex].posX)) { - AudioThread_QueueCmdS8(_SHIFTL(6, 24, 8) | _SHIFTL(SEQ_PLAYER_SFX, 16, 8) | - _SHIFTL(channelIndex, 8, 8) | _SHIFTL(6, 0, 8), - ioData); + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, channelIndex, 6, ioData); } } channelIndex++; @@ -4498,7 +4492,7 @@ void func_801A09D4(Vec3f* pos, f32 xzDistToPlayer) { if (channelIndex != 9) { Audio_QueueSeqCmd(((u32)(6) << 28) | ((u32)(SEQ_PLAYER_BGM_MAIN) << 24) | ((u32)(2) << 16) | ((u32)(channelIndex) << 8) | ((u8)(127.0f * volumeRel))); - AudioThread_QueueCmdS8(0x03000000 | ((u8)((u32)channelIndex) << 8), pan); + AUDIOCMD_CHANNEL_SET_PAN(SEQ_PLAYER_BGM_MAIN, channelIndex, pan); } } } @@ -4721,7 +4715,7 @@ void Audio_UpdateSceneSequenceResumePoint(void) { if ((seqId != NA_BGM_DISABLED) && (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_RESUME)) { if (sSeqResumePoint != SEQ_RESUME_POINT_NONE) { // Get the current point to resume from - sSeqResumePoint = gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].soundScriptIO[3]; + sSeqResumePoint = gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].seqScriptIO[3]; } else { // Initialize the point to resume from to the start of the sequence sSeqResumePoint = 0; @@ -5089,7 +5083,7 @@ void Audio_StartAmbience(u16 initChannelMask, u16 initMuteChannelMask) { if ((Audio_GetActiveSequence(SEQ_PLAYER_AMBIENCE) != NA_BGM_DISABLED) && (Audio_GetActiveSequence(SEQ_PLAYER_AMBIENCE) != NA_BGM_AMBIENCE)) { Audio_StopSequence(SEQ_PLAYER_AMBIENCE, 0); - AudioThread_QueueCmdS32(0xF8 << 24, 0); + AUDIOCMD_GLOBAL_STOP_AUDIOCMDS(); } if (Audio_GetActiveSequence(SEQ_PLAYER_BGM_SUB) == (NA_BGM_ENEMY | 0x800)) { @@ -5164,12 +5158,11 @@ void AudioSfx_Init(u16 fadeTimer) { Audio_StartSequence(SEQ_PLAYER_SFX, NA_BGM_GENERAL_SFX, 0x70, fadeTimer); for (channelIndex = 0; channelIndex < ARRAY_COUNT(sSfxChannelState); channelIndex++) { - AudioThread_QueueCmdS32(0x10 << 24 | SEQ_PLAYER_SFX << 16 | ((u8)(u32)channelIndex << 8), - &sSfxChannelState[channelIndex]); + AUDIOCMD_CHANNEL_SET_SFX_STATE(SEQ_PLAYER_SFX, channelIndex, &sSfxChannelState[channelIndex]); } - AudioThread_QueueCmdS32(0xE4000000, AudioSfx_SetFreqAndStereoBits); - AudioThread_QueueCmdS32(0xE4000001, Audio_SetAmbienceRandomBend); + AUDIOCMD_GLOBAL_SET_CUSTOM_FUNCTION(AUDIO_CUSTOM_FUNCTION_SEQ_0, AudioSfx_SetFreqAndStereoBits); + AUDIOCMD_GLOBAL_SET_CUSTOM_FUNCTION(AUDIO_CUSTOM_FUNCTION_SEQ_1, Audio_SetAmbienceRandomBend); } #pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A4D00.s") diff --git a/src/code/audio/code_801A5BD0.c b/src/code/audio/code_801A5BD0.c index 0e509670b..76597f5f3 100644 --- a/src/code/audio/code_801A5BD0.c +++ b/src/code/audio/code_801A5BD0.c @@ -410,9 +410,8 @@ void AudioSfx_ChooseActiveSfx(u8 bankId) { // If a "one-frame" sfx is still in "SFX_STATE_PLAYING_ONE_FRAME", then remove the sfx } else if (!(gSfxBanks[bankId][entryIndex].sfxId & SFX_FLAG_MASK) && (gSfxBanks[bankId][entryIndex].state == SFX_STATE_PLAYING_ONE_FRAME)) { - // CHAN_UPD_SCRIPT_IO (ioPort 0, force stop sfx in seq 0) - AudioThread_QueueCmdS8( - (0x6 << 24) | (SEQ_PLAYER_SFX << 16) | (gSfxBanks[bankId][entryIndex].channelIndex << 8), 0); + // ioPort 0, force stop sfx in seq 0 + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, gSfxBanks[bankId][entryIndex].channelIndex, 0, 0); AudioSfx_RemoveBankEntry(bankId, entryIndex); } @@ -459,8 +458,8 @@ void AudioSfx_ChooseActiveSfx(u8 bankId) { // If too far away and also playing, stop playing if (entry->state == SFX_STATE_PLAYING) { - // CHAN_UPD_SCRIPT_IO (ioPort 0, force stop sfx in seq 0) - AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | (entry->channelIndex << 8), 0); + // ioPort 0, force stop sfx in seq 0 + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, entry->channelIndex, 0, 0); if (entry->sfxId & SFX_FLAG_MASK) { AudioSfx_RemoveBankEntry(bankId, entryIndex); entryIndex = k; @@ -632,15 +631,11 @@ void AudioSfx_PlayActiveSfx(u8 bankId) { // Calculate all the properties of sfx AudioSfx_SetProperties(bankId, entryIndex, sCurSfxPlayerChannelIndex); - // CHAN_UPD_SCRIPT_IO (ioPort 0, enable the sfx to play in seq 0) - AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | ((sCurSfxPlayerChannelIndex & 0xFF) << 8), - 1); + // ioPort 0, enable the sfx to play in `NA_BGM_GENERAL_SFX` + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, sCurSfxPlayerChannelIndex, 0, 1); - // CHAN_UPD_SCRIPT_IO (ioPort 4, write the lower bits sfx index to seq 0 so it can find the right code - // to execute) - AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | - ((sCurSfxPlayerChannelIndex & 0xFF) << 8) | 4, - entry->sfxId & 0xFF); + // ioPort 4, write the lower bits sfx index for `NA_BGM_GENERAL_SFX` to find the right code to execute + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, sCurSfxPlayerChannelIndex, 4, entry->sfxId & 0xFF); // If the sfx bank has more than 255 entries (greater than a u8 can store), // then store the Id in upper and lower bits @@ -656,11 +651,9 @@ void AudioSfx_PlayActiveSfx(u8 bankId) { } if (D_801D6608[bankId]) { - // CHAN_UPD_SCRIPT_IO (ioPort 5, write the upper bits sfx index and a flag to seq 0, for banks with - // > 0xFF entries) - AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | - ((sCurSfxPlayerChannelIndex & 0xFF) << 8) | 5, - ioPort5Data); + // ioPort 5, write the upper bits sfx index and a flag for `NA_BGM_GENERAL_SFX`, + // for banks with > 0xFF entries + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, sCurSfxPlayerChannelIndex, 5, ioPort5Data); } // Update playing state @@ -671,7 +664,7 @@ void AudioSfx_PlayActiveSfx(u8 bankId) { // "one-frame" sfx entry->state = SFX_STATE_PLAYING_ONE_FRAME; } - } else if ((u8)channel->soundScriptIO[1] == (u8)SEQ_IO_VAL_NONE) { + } else if ((u8)channel->seqScriptIO[1] == (u8)SEQ_IO_VAL_NONE) { // Signal from seq 0 that the sfx is finished playing. Remove entry AudioSfx_RemoveBankEntry(bankId, entryIndex); } else if (entry->state == SFX_STATE_PLAYING_REFRESH) { @@ -702,7 +695,7 @@ void AudioSfx_StopByBank(u8 bankId) { while (entryIndex != 0xFF) { entry = &gSfxBanks[bankId][entryIndex]; if (entry->state >= SFX_STATE_PLAYING_REFRESH) { - AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | ((entry->channelIndex & 0xFF) << 8), 0); + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, entry->channelIndex, 0, 0); } if (entry->state != SFX_STATE_EMPTY) { @@ -724,7 +717,7 @@ void AudioSfx_StopByPosAndBankImpl(u8 bankId, Vec3f* pos) { entry = &gSfxBanks[bankId][entryIndex]; if (entry->posX == &pos->x) { if (entry->state >= SFX_STATE_PLAYING_REFRESH) { - AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | ((entry->channelIndex & 0xFF) << 8), 0); + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, entry->channelIndex, 0, 0); } if (entry->state != SFX_STATE_EMPTY) { @@ -769,7 +762,7 @@ void AudioSfx_StopByPosAndId(Vec3f* pos, u16 sfxId) { entry = &gSfxBanks[SFX_BANK(sfxId)][entryIndex]; if ((entry->posX == &pos->x) && (entry->sfxId == sfxId)) { if (entry->state >= SFX_STATE_PLAYING_REFRESH) { - AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | ((entry->channelIndex & 0xFF) << 8), 0); + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, entry->channelIndex, 0, 0); } if (entry->state != SFX_STATE_EMPTY) { @@ -800,7 +793,7 @@ void AudioSfx_StopByTokenAndId(u8 token, u16 sfxId) { entry = &gSfxBanks[SFX_BANK(sfxId)][entryIndex]; if ((entry->token == token) && (entry->sfxId == sfxId)) { if (entry->state >= SFX_STATE_PLAYING_REFRESH) { - AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | ((entry->channelIndex & 0xFF) << 8), 0); + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, entry->channelIndex, 0, 0); } if (entry->state != SFX_STATE_EMPTY) { @@ -830,7 +823,7 @@ void AudioSfx_StopById(u32 sfxId) { entry = &gSfxBanks[SFX_BANK(sfxId)][entryIndex]; if (entry->sfxId == sfxId) { if (entry->state >= SFX_STATE_PLAYING_REFRESH) { - AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | ((entry->channelIndex & 0xFF) << 8), 0); + AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, entry->channelIndex, 0, 0); } if (entry->state != SFX_STATE_EMPTY) { AudioSfx_RemoveBankEntry(SFX_BANK(sfxId), entryIndex); diff --git a/src/code/audioMgr.c b/src/code/audioMgr.c index ce21bda37..eca7ddd83 100644 --- a/src/code/audioMgr.c +++ b/src/code/audioMgr.c @@ -39,7 +39,7 @@ void AudioMgr_HandleRetrace(AudioMgr* audioMgr) { if (SREG(20) >= 2) { rspTask = NULL; } else { - rspTask = func_80192BE0(); + rspTask = AudioThread_Update(); } if (audioMgr->rspTask != NULL) { diff --git a/src/code/code_80140CE0.c b/src/code/code_80140CE0.c new file mode 100644 index 000000000..f3d487fab --- /dev/null +++ b/src/code/code_80140CE0.c @@ -0,0 +1,7 @@ +#include "global.h" + +#pragma GLOBAL_ASM("asm/non_matchings/code/code_80140CE0/func_80140CE0.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/code_80140CE0/func_80140D04.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/code_80140CE0/func_80140D10.s") diff --git a/src/code/graph.c b/src/code/graph.c index 8edc979d4..1c29029b0 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -50,7 +50,7 @@ void Graph_SetNextGfxPool(GraphicsContext* gfxCtx) { gfxCtx->workBuffer = pool->workBuffer; gfxCtx->debugBuffer = pool->debugBuffer; - gfxCtx->curFrameBuffer = (u16*)SysCfb_GetFbPtr(gfxCtx->framebufferIdx % 2); + gfxCtx->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx->framebufferIndex % 2); gSegments[0x0F] = gfxCtx->curFrameBuffer; gfxCtx->zbuffer = SysCfb_GetZBuffer(); @@ -116,7 +116,7 @@ void* Graph_FaultAddrConvFunc(void* address, void* param) { void Graph_Init(GraphicsContext* gfxCtx) { bzero(gfxCtx, sizeof(GraphicsContext)); gfxCtx->gfxPoolIdx = 0; - gfxCtx->framebufferIdx = 0; + gfxCtx->framebufferIndex = 0; gfxCtx->viMode = NULL; gfxCtx->viConfigFeatures = gViConfigFeatures; gfxCtx->xScale = gViConfigXScale; @@ -165,7 +165,7 @@ retry: gfxCtx->masterList = gGfxMasterDL; if (gfxCtx->callback != NULL) { - gfxCtx->callback(gfxCtx, gfxCtx->callbackParam); + gfxCtx->callback(gfxCtx, gfxCtx->callbackArg); } task->type = M_GFXTASK; @@ -191,7 +191,7 @@ retry: if (SREG(33) & 1) { SREG(33) &= ~1; scTask->flags &= ~OS_SC_SWAPBUFFER; - gfxCtx->framebufferIdx--; + gfxCtx->framebufferIndex--; } scTask->msgQ = &gfxCtx->queue; @@ -305,7 +305,7 @@ void Graph_ExecuteAndDraw(GraphicsContext* gfxCtx, GameState* gameState) { if (!problem) { Graph_TaskSet00(gfxCtx, gameState); gfxCtx->gfxPoolIdx++; - gfxCtx->framebufferIdx++; + gfxCtx->framebufferIndex++; } { diff --git a/src/code/speed_meter.c b/src/code/speed_meter.c index 5ad1cdbe0..780a02c62 100644 --- a/src/code/speed_meter.c +++ b/src/code/speed_meter.c @@ -15,9 +15,3 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_80177AC8.s") #pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_DrawAllocEntries.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_801780F0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_801781EC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_8017842C.s") diff --git a/src/code/su_mtx.c b/src/code/su_mtx.c new file mode 100644 index 000000000..09cbda90e --- /dev/null +++ b/src/code/su_mtx.c @@ -0,0 +1,361 @@ +/** + * @file su_mtx.c + * @brief "Fast" functions for constructing RSP-compatible matrices directly + * + * The three functions in this file construct scaling, rotation, and translation matrices, and combinations thereof. The + * intention appears to be to exploit the peculiar structure of the RSP's fixed-point matrix format, which we recall is + * + * typedef long int Mtx_t[4][4]; + * typedef union { + * Mtx_t m; + * struct { + * u16 intPart[4][4]; + * u16 fracPart[4][4]; + * }; + * long long int forc_structure_alignment; + * } Mtx; // size = 0x40 + * + * This means it can be written to as either words or two sets of shorts; the latter is the correct format for + * interpreting it the way the RSP does, but the first is likely faster to access and write to. The functions save + * writing halves by + * + * - writing a word 0 if two adjacent elements are 0 in a convenient place, or 1 if they are 0 and 1, + * - writing a word using a shift and overwriting the dirty half afterwards. + * + * Examples of both of these are seen in Mtx_SetTranslateScaleMtx(); we explain there in full detail due to the + * function's relative simplicity. The other two functions we merely point out the interesting parts rather than + * explaining the whole process. + * + * We use the following notation throughout: round brackets denote the word-sized elements, square the pairs they cover. + * The integer and fractional parts of a fixed-point number are denoted by i and f respectively, and these letters are + * also used to represent which half each of the pairs belongs to. + * + * (00) [i00,i01], (01) [i02,i03] + * (02) [i10,i11], (03) [i12,i13] + * (10) [i20,i21], (11) [i22,i23] + * (12) [i30,i31], (13) [i32,i33] + * (20) [f00,f01], (21) [f02,f03] + * (22) [f10,f11], (23) [f12,f13] + * (30) [f20,f21], (31) [f22,f23] + * (32) [f30,f31], (33) [f32,f33] + * + * We keep the RSP's column-major convention; this file is confusing enough without attempting to transpose everything. + * Bear in mind therefore that we are acting on *row vectors* on the *right*. + * + * @warning The behaviour of the output of the functions in this file is undefined in C89, since both members of the + * union are used to set the mtxs. (C99+ allow type-punning, but the behaviour is still implementation-defined because + * it relies on the storage being big-endian.) + * + * @remark Name inferred from shared Animal Forest functions, meaning of "su" is unclear. + */ + +#include "global.h" + +/** + * Constructs a matrix \$f ST \$f, i.e. a scaling \$f S \$f followed by a translation \$f T \$f. + * + * The final result is + * + * \f[ + * \begin{bmatrix} + * s_x & 0 & 0 & 0 \\ + * 0 & s_y & 0 & 0 \\ + * 0 & 0 & s_z & 0 \\ + * t_x & t_y & t_z & 1 + * \end{bmatrix} + * \f] + * + * @param[out] mtx Fixed-point matrix pointer to output to + * @param[in] scaleX Scale in the X direction + * @param[in] scaleY Scale in the Y direction + * @param[in] scaleZ Scale in the Z direction + * @param[in] translateX X component of translation + * @param[in] translateY Y component of translation + * @param[in] translateZ Z component of translation + * + * @remark Original name: "suMtxMakeTS" + */ +void Mtx_SetTranslateScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, f32 translateX, f32 translateY, + f32 translateZ) { + Mtx* m = mtx; + s32 fixedPoint; + + m->m[0][1] = 0; // [i02, i03] == [0, 0] + m->m[2][1] = 0; // [f02, f03] == [0, 0] + m->m[0][3] = 0; // [i12, i13] == [0, 0] + m->m[2][3] = 0; // [f22, f23] == [0, 0] + m->m[1][0] = 0; // [i20, i21] == [0, 0] + // + fixedPoint = scaleX * 0x10000; // + m->m[0][0] = fixedPoint; // [i00, i01] == [scaleX.i, scaleX.f]; i01 is now "dirty" + m->intPart[0][1] = 0; // Clean i01 by zeroing it: [i00, i01] == [scaleX.i, 0] + m->m[2][0] = (u32)fixedPoint << 16; // [f00, f01] == [scaleX.f, 0] + // + fixedPoint = scaleY * 0x10000; // + m->m[0][2] = (u32)fixedPoint >> 16; // [i10, i11] == [0, scaleY.i] + m->m[2][2] = fixedPoint & 0xFFFF; // [f10, f11] == [0, scaleY.f] + // + fixedPoint = scaleZ * 0x10000; // + m->m[1][1] = fixedPoint; // [i22, i23] == [scaleZ.i, scaleZ.f] + m->intPart[2][3] = 0; // [i22, i23] == [scaleZ.i, 0] + m->m[3][1] = (u32)fixedPoint << 16; // [f22, f23] == [scaleZ.f, 0] + // + m->m[3][0] = 0; // [f20, f21] == [0, 0] + // + fixedPoint = translateX * 0x10000; // + m->intPart[3][0] = ((u32)fixedPoint >> 16) & 0xFFFF; // [i30, i31] == [translateX.i, ?] + m->fracPart[3][0] = fixedPoint & 0xFFFF; // [f30, f31] == [translateX.f, ?] + // + fixedPoint = translateY * 0x10000; // + m->intPart[3][1] = ((u32)fixedPoint >> 16) & 0xFFFF; // [i30, i31] == [translateX.i, translateY.i] + m->fracPart[3][1] = fixedPoint & 0xFFFF; // [f30, f31] == [translateX.f, translateY.f] + // + fixedPoint = translateZ * 0x10000; // + m->intPart[3][2] = ((u32)fixedPoint >> 16) & 0xFFFF; // [i30, i31] == [translateZ.i, ?] + m->intPart[3][3] = 1; // [i32, i33] == [translateZ.i, 1] + m->m[3][3] = (u32)fixedPoint << 16; // [f32, f33] == [translateZ.f, 0] + + // So we end up with + // [scaleX.i, 0], [0, 0], + // [0, scaleY.i], [0, 0], + // [0, 0], [scaleZ.i, 0], + // [translateX.i, translateY.i], [translateZ.i, 1] + // + // [scaleX.f, 0], [0, 0], + // [0, scaleY.f], [0, 0], + // [0, 0], [scaleZ.f, 0] + // [translateX.f, translateY.f], [translateZ.f, 0] +} + +// Unused +/** + * Should create an axis-angle rotation matrix. + * + * @note The axis vector is expected to be normalised. + * + * The result should be: + * + * \f[ + * \begin{bmatrix} + * (1-a_x^2) \cos \theta + a_x^2 & a_x a_y (1 - \cos \theta) + a_z \sin \theta & a_z a_x (1 - \cos \theta) - a_y + * \sin \theta & 0 \\ + * a_x a_y (1 - \cos \theta) - a_z \sin \theta & (1-a_y^2) \cos \theta + a_y^2 & a_y a_z (1 - \cos \theta) + a_x + * \sin \theta & 0 \\ + * a_z a_x (1 - \cos \theta) + a_y \sin \theta & a_y a_z (1 - \cos \theta) - a_x \sin \theta & (1-a_z^2) \cos + * \theta + * + a_z^2 & 0 \\ + * t_x & t_y & t_z & 1 + * \end{bmatrix} + * \f] + * + * @warning There is a significant bug in this function, which means it does not actually produce this correct rotation + * matrix; see inline for details. + * + * @param[out] mtx Fixed-point matrix pointer to output to + * @param[in] angle angle to rotate about axis + * @param[in] axisX X component of axis to rotate about + * @param[in] axisY Y component of axis to rotate about + * @param[in] axisZ Z component of axis to rotate about + * + * @remark Original name: probably something like "suMtxMakeR" or "suMtxMakeRotateVector" + */ +void Mtx_SetRotationMtx(Mtx* mtx, s32 angle, f32 axisX, f32 axisY, f32 axisZ) { + //! FAKE? The somewhat peculiar distribution of temps in this function seems necessary to match? + f32 tempX; + f32 tempZ; + f32 tempY; + f32 sin = Math_SinS(angle); + f32 cos = Math_CosS(angle); + f32 tempXX; + f32 tempYY; + f32 tempZZ; + + s32 fixedPoint; + + mtx->m[1][2] = 0; // [i30, i31] == [0, 0] + mtx->m[1][3] = 1; // [i32, i33] == [0, 1] + mtx->m[3][2] = 0; // [f30, f31] == [0, 0] + mtx->m[3][3] = 0; // [f31, f32] == [0, 0] + + tempXX = axisX * axisX; + tempX = (axisY * axisZ) * (1.0f - cos); + + // i00 and f00 + fixedPoint = (((1.0f - tempXX) * cos) + tempXX) * 0x10000; + mtx->intPart[0][0] = ((u32)fixedPoint >> 0x10) & 0xFFFF; + mtx->fracPart[0][0] = fixedPoint & 0xFFFF; + + tempZ = ((axisX * axisY) * (1.0f - cos)); + tempZZ = axisZ * axisZ; + + // i21 and f21 + fixedPoint = (tempX - (axisX * sin)) * 0x10000; + mtx->intPart[2][1] = ((u32)fixedPoint >> 0x10) & 0xFFFF; + mtx->fracPart[2][1] = fixedPoint & 0xFFFF; + + tempY = (axisZ * axisX) * (1.0f - cos); + tempYY = axisY * axisY; + + // [i12, i13] and [f12, f13] + fixedPoint = (tempX + (axisX * sin)) * 0x10000; + mtx->m[0][3] = fixedPoint; // i13 dirty + mtx->intPart[1][3] = 0; // clean i13 + mtx->m[2][3] = fixedPoint << 0x10; + + // i11 and f11 + fixedPoint = ((((1.0f - tempYY) * cos) + tempYY) * 0x10000); + mtx->intPart[1][1] = ((u32)fixedPoint >> 0x10) & 0xFFFF; + mtx->fracPart[1][1] = fixedPoint & 0xFFFF; + + //! @bug The sign of the `axisY * sin` term is wrong on the next two elements (i/f20 and i/f02), which causes the + //! matrix to not be a rotation matrix (and indeed not even necessarily invertible). + // i20 and f20 + fixedPoint = (tempY - (axisY * sin)) * 0x10000; + mtx->intPart[2][0] = ((u32)fixedPoint >> 0x10) & 0xFFFF; + mtx->fracPart[2][0] = fixedPoint & 0xFFFF; + + // [i02, i03] and [f02, f03] + fixedPoint = (tempY + (axisY * sin)) * 0x10000; + mtx->m[0][1] = fixedPoint; // i03 dirty + mtx->intPart[0][3] = 0; // clean i03 + mtx->m[2][1] = fixedPoint << 0x10; + + // [i22, i23] and [f22, f23] + fixedPoint = ((((1.0f - tempZZ) * cos) + tempZZ) * 0x10000); + mtx->m[1][1] = fixedPoint; // i23 dirty + mtx->intPart[2][3] = 0; // clean i23 + mtx->m[3][1] = fixedPoint << 0x10; + + // i10 and f10 + fixedPoint = (tempZ - axisZ * sin) * 0x10000; + mtx->intPart[1][0] = ((u32)fixedPoint >> 0x10) & 0xFFFF; + mtx->fracPart[1][0] = fixedPoint & 0xFFFF; + + // i01 and f01 + fixedPoint = (tempZ + axisZ * sin) * 0x10000; + mtx->intPart[0][1] = ((u32)fixedPoint >> 0x10) & 0xFFFF; + mtx->fracPart[0][1] = fixedPoint & 0xFFFF; +} + +/** + * Creates a general scale, rotation, translation matrix. + * + * @note The axis vector is expected to be normalised. + * + * The transformations are applied in the order scale, rotate, translate: \$f SRT \$f + * + * The result should be + * \f[ + * \begin{bmatrix} + * s_x((1-a_x^2) \cos \theta + a_x^2) & s_x(a_x a_y (1 - \cos \theta) + a_z \sin \theta) & s_x(a_z a_x (1 - \cos + * \theta) - a_y \sin \theta & 0) \\ + * s_y(a_x a_y (1 - \cos \theta) - a_z \sin \theta) & s_y((1-a_y^2) \cos \theta + a_y^2) & s_z(a_y a_z (1 - \cos + * \theta) + a_x \sin \theta) & 0 \\ + * s_z(a_z a_x (1 - \cos \theta) + a_y \sin \theta) & s_z(a_y a_z (1 - \cos \theta) - a_x \sin \theta) & + * s_z((1-a_z^2) \cos \theta + a_z^2) & 0 \\ + * 0 & 0 & 0 & 1 + * \end{bmatrix} . + * \f] + * + * @warning There is a significant bug in this function, which means it does not actually produce a proper rotation + * matrix; see inline for details. + * + * @param[out] mtx Fixed-point matrix pointer to output to + * @param[in] scaleX Scale in the X direction + * @param[in] scaleY Scale in the Y direction + * @param[in] scaleZ Scale in the Z direction + * @param[in] angle angle to rotate about axis + * @param[in] axisX X component of axis to rotate about + * @param[in] axisY Y component of axis to rotate about + * @param[in] axisZ Z component of axis to rotate about + * @param[in] translateX X component of translation + * @param[in] translateY Y component of translation + * @param[in] translateZ Z component of translation + * + * @remark Original name: probably something like "suMtxMakeSRT", although Animal Forest function is a Tait-Bryan + * rotation rather than axis-angle. + */ +void Mtx_SetTranslationRotationScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, s32 angle, f32 axisX, f32 axisY, + f32 axisZ, f32 translateX, f32 translateY, f32 translateZ) { + f32 tempX; + f32 tempY; + f32 tempZ; + f32 sin = Math_SinS(angle); + f32 cos = Math_CosS(angle); + f32 tempXX = axisX * axisX; + f32 tempYY = axisY * axisY; + f32 tempZZ = axisZ * axisZ; + s32 fixedPoint; + + tempX = axisY * axisZ * (1.0f - cos); + + // i00 and f00 + fixedPoint = (tempXX + (1.0f - tempXX) * cos) * scaleX * 0x10000; + mtx->intPart[0][0] = ((u32)fixedPoint >> 0x10) & 0xFFFF; + mtx->fracPart[0][0] = fixedPoint & 0xFFFF; + + tempY = axisZ * axisX * (1.0f - cos); + + // i21 and f21 + fixedPoint = (tempX - axisX * sin) * scaleZ * 0x10000; + mtx->intPart[2][1] = ((u32)fixedPoint >> 0x10) & 0xFFFF; + mtx->fracPart[2][1] = fixedPoint & 0xFFFF; + + tempZ = axisX * axisY * (1.0f - cos); + + // [i12, i13] and [f12, f13] + fixedPoint = (tempX + axisX * sin) * scaleY * 0x10000; + mtx->m[0][3] = fixedPoint; // i13 dirty + mtx->intPart[1][3] = 0; // clean i13 + mtx->m[2][3] = fixedPoint << 0x10; + + // i11 and f11 + fixedPoint = (tempYY + (1.0f - tempYY) * cos) * scaleY * 0x10000; + mtx->intPart[1][1] = ((u32)fixedPoint >> 0x10) & 0xFFFF; + mtx->fracPart[1][1] = fixedPoint & 0xFFFF; + + //! @bug The sign of the `axisY * sin` term is wrong on the next two elements (i/f20 and i/f02), which causes the + //! matrix to not be a rotation matrix (and indeed not even necessarily invertible). + // i20, f20 + fixedPoint = (tempY - axisY * sin) * scaleZ * 0x10000; + mtx->intPart[2][0] = ((u32)fixedPoint >> 0x10) & 0xFFFF; + mtx->fracPart[2][0] = fixedPoint & 0xFFFF; + + // [i02, i03] and [f02, f03] + fixedPoint = (tempY + axisY * sin) * scaleX * 0x10000; + mtx->m[0][1] = fixedPoint; // [i03, i03], i03 dirty + mtx->intPart[0][3] = 0; // clean i03 + mtx->m[2][1] = fixedPoint << 0x10; // [f02, f03] + + // [i22, i23] and [f22, f23] + fixedPoint = (tempZZ + (1.0f - tempZZ) * cos) * scaleZ * 0x10000; + mtx->m[1][1] = fixedPoint; + mtx->intPart[2][3] = 0; + mtx->m[3][1] = fixedPoint << 0x10; + + // i10 and f10 + fixedPoint = (tempZ - axisZ * sin) * scaleY * 0x10000; + mtx->intPart[1][0] = ((u32)fixedPoint >> 0x10) & 0xFFFF; + mtx->fracPart[1][0] = fixedPoint & 0xFFFF; + + // i01 and f01 + fixedPoint = (tempZ + axisZ * sin) * scaleX * 0x10000; + mtx->intPart[0][1] = ((u32)fixedPoint >> 0x10) & 0xFFFF; + mtx->fracPart[0][1] = fixedPoint & 0xFFFF; + + // [i30, i31] and f30 + fixedPoint = translateX * 0x10000; + mtx->m[1][2] = fixedPoint; // [i30, i31], i31 dirty + mtx->fracPart[3][0] = fixedPoint & 0xFFFF; // f30 + + // i31 and f31 + fixedPoint = translateY * 0x10000; + mtx->intPart[3][1] = ((u32)fixedPoint >> 0x10) & 0xFFFF; // overwrite i31 + mtx->fracPart[3][1] = fixedPoint & 0xFFFF; // overwrite f31 + + // [i32, i33] and [f32, f33] + fixedPoint = translateZ * 0x10000; + mtx->m[1][3] = fixedPoint; // [i32, i33] + mtx->intPart[3][3] = 1; // clean i33 + mtx->m[3][3] = (fixedPoint << 0x10); // [f32, f33] +} diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c new file mode 100644 index 000000000..3f198ce8f --- /dev/null +++ b/src/code/sys_cfb.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "system_malloc.h" + +#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178750.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178818.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178978.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_801789D4.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/SysCfb_GetFbPtr.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/SysCfb_GetZBuffer.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A24.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A34.s") + +#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A94.s") diff --git a/src/code/sys_cmpdma.c b/src/code/sys_cmpdma.c index 2533c44f5..b2a17d547 100644 --- a/src/code/sys_cmpdma.c +++ b/src/code/sys_cmpdma.c @@ -1,32 +1,117 @@ #include "global.h" #include "system_malloc.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178750.s") +typedef struct { + union { + u32 dmaWord[2]; + u32 dataStart; + u32 dataSize; + struct { + u32 start; + u32 end; + } offset; + }; +} CmpDmaBuffer; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178818.s") +CmpDmaBuffer sDmaBuffer; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178978.s") +void func_80178AC0(u16* src, void* dst, size_t size) { + Color_RGBA8_u32 spC; + Color_RGBA16_2 tc; + Color_RGBA14 tc2; + u32* dstCur = dst; + u16* src16 = src; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_801789D4.s") + while (((uintptr_t)dstCur) - size < ((uintptr_t)dst)) { + tc.rgba = *(src16++); + if (tc.a == 1) { + spC.r = (tc.r * 255) / 31; + spC.g = (tc.g * 255) / 31; + spC.b = (tc.b * 255) / 31; + spC.a = 255; + } else if (tc.rgba == 0) { + spC.rgba = 0; + } else { + tc2.rgba = tc.rgba; + tc.rgba = *(src16++); + spC.r = (tc.r << 3) | tc2.r; + spC.g = (tc.g << 3) | tc2.g; + spC.b = (tc.b << 3) | tc2.b; + spC.a = ((tc.rgba & 1) << 7) | ((tc2.a * 127) / 63); + } + *(dstCur++) = spC.rgba; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/SysCfb_GetFbPtr.s") +void CmpDma_GetFileInfo(u8* segmentRom, s32 id, uintptr_t* outFileRom, size_t* size, s32* flag) { + u32 dataStart; + u32 refOff; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/SysCfb_GetZBuffer.s") + DmaMgr_DmaRomToRam(segmentRom, &sDmaBuffer.dataStart, sizeof(sDmaBuffer.dataStart)); -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178A24.s") + dataStart = sDmaBuffer.dataStart; + refOff = id * sizeof(u32); -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178A34.s") + // if id is >= idMax + if (refOff > (dataStart - 4)) { + *outFileRom = segmentRom; + *size = 0; + } else if (refOff == 0) { + // get offset start of next file, i.e. size of first file + DmaMgr_DmaRomToRam(segmentRom + 4, &sDmaBuffer.dataSize, sizeof(sDmaBuffer.dataSize)); + *outFileRom = segmentRom + dataStart; + *size = sDmaBuffer.dataSize; + } else { + // get offset start, end from dataStart + DmaMgr_DmaRomToRam(refOff + segmentRom, &sDmaBuffer.offset, sizeof(sDmaBuffer.offset)); + *outFileRom = sDmaBuffer.offset.start + segmentRom + dataStart; + *size = sDmaBuffer.offset.end - sDmaBuffer.offset.start; + } + *flag = 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178A94.s") +void CmpDma_Decompress(uintptr_t romStart, size_t size, void* dst) { + if (size != 0) { + Yaz0_Decompress(romStart, dst, size); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178AC0.s") +void CmpDma_LoadFileImpl(uintptr_t segmentRom, s32 id, void* dst, size_t size) { + uintptr_t romStart; + size_t compressedSize; + s32 flag; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178C80.s") + CmpDma_GetFileInfo(segmentRom, id, &romStart, &compressedSize, &flag); + if (flag & 1) { + void* tempBuf = SystemArena_Malloc(0x1000); -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178D7C.s") + CmpDma_Decompress(romStart, compressedSize, tempBuf); + func_80178AC0(tempBuf, dst, size); + SystemArena_Free(tempBuf); + } else { + CmpDma_Decompress(romStart, compressedSize, dst); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178DAC.s") +void CmpDma_LoadFile(uintptr_t segmentVrom, s32 id, void* dst, size_t size) { + CmpDma_LoadFileImpl(DmaMgr_TranslateVromToRom(segmentVrom), id, dst, size); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178E3C.s") +void CmpDma_LoadAllFiles(uintptr_t segmentVrom, void* dst, size_t size) { + uintptr_t rom = DmaMgr_TranslateVromToRom(segmentVrom); + u32 i; + u32 end; + void* nextDst; + u32 dataStart; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178E7C.s") + DmaMgr_DmaRomToRam(rom, &sDmaBuffer.dataStart, sizeof(sDmaBuffer.dataStart)); + + dataStart = sDmaBuffer.dataStart; + nextDst = dst; + end = (dataStart / sizeof(u32)) - 1; + + for (i = 0; i < end; i++) { + CmpDma_LoadFileImpl(rom, i, nextDst, 0); + nextDst = gYaz0DecompressDstEnd; + } +} diff --git a/src/code/sys_math_atan.c b/src/code/sys_math_atan.c index d68e1e293..72383b6b9 100644 --- a/src/code/sys_math_atan.c +++ b/src/code/sys_math_atan.c @@ -130,10 +130,12 @@ f32 Math_Atan2F(f32 y, f32 x) { return Math_Atan2S(y, x) * (M_PI / 0x8000); } -s16 Math_FAtan2F(f32 adjacent, f32 opposite) { - return Math_Atan2S(opposite, adjacent); +// Match the OoT implementation of Math_Atan2S +s16 Math_Atan2S_XY(f32 x, f32 y) { + return Math_Atan2S(y, x); } -f32 Math_Acot2F(f32 adjacent, f32 opposite) { - return Math_Atan2F(opposite, adjacent); +// Match the OoT implementation of Math_Atan2F +f32 Math_Atan2F_XY(f32 x, f32 y) { + return Math_Atan2F(y, x); } diff --git a/src/code/sys_matrix.c b/src/code/sys_matrix.c index 4e517c810..f2ed19c38 100644 --- a/src/code/sys_matrix.c +++ b/src/code/sys_matrix.c @@ -38,7 +38,7 @@ * Throughout this file, `mode` indicates whether to multiply the matrix on top of the stack by the new construction * (APPLY), or to just overwrite it (NEW). */ -#include "prevent_bss_reordering.h" + #include "global.h" /* data */ diff --git a/src/code/title_setup.c b/src/code/title_setup.c index 8ba6f9b56..4e9293ce7 100644 --- a/src/code/title_setup.c +++ b/src/code/title_setup.c @@ -7,12 +7,13 @@ void Setup_SetRegs(void) { XREG(11) = 0x14; XREG(12) = 0xE; XREG(13) = 0; - XREG(31) = 0; + R_A_BTN_Y_OFFSET = 0; R_MAGIC_CONSUME_TIMER_GIANTS_MASK = 80; - XREG(43) = 0xFC54; - XREG(44) = 0xD7; - XREG(45) = 0xDA; + R_THREE_DAY_CLOCK_Y_POS = 64596; + R_THREE_DAY_CLOCK_SUN_MOON_CUTOFF = 215; + R_THREE_DAY_CLOCK_HOUR_DIGIT_CUTOFF = 218; + XREG(68) = 0x61; XREG(69) = 0x93; XREG(70) = 0x28; @@ -27,22 +28,23 @@ void Setup_SetRegs(void) { XREG(88) = 0x56; XREG(89) = 0x258; XREG(90) = 0x1C2; + R_STORY_FILL_SCREEN_ALPHA = 0; R_REVERSE_FLOOR_INDEX = 0; R_MINIMAP_DISABLED = false; - YREG(32) = 0x50; - YREG(33) = 0x3C; - YREG(34) = 0xDC; - YREG(35) = 0x3C; - YREG(36) = 0x50; - YREG(37) = 0xA0; - YREG(38) = 0xDC; - YREG(39) = 0xA0; - YREG(40) = 0x8E; - YREG(41) = 0x6C; - YREG(42) = 0xCC; - YREG(43) = 0xB1; + R_PICTO_FOCUS_BORDER_TOPLEFT_X = 80; + R_PICTO_FOCUS_BORDER_TOPLEFT_Y = 60; + R_PICTO_FOCUS_BORDER_TOPRIGHT_X = 220; + R_PICTO_FOCUS_BORDER_TOPRIGHT_Y = 60; + R_PICTO_FOCUS_BORDER_BOTTOMLEFT_X = 80; + R_PICTO_FOCUS_BORDER_BOTTOMLEFT_Y = 160; + R_PICTO_FOCUS_BORDER_BOTTOMRIGHT_X = 220; + R_PICTO_FOCUS_BORDER_BOTTOMRIGHT_Y = 160; + R_PICTO_FOCUS_ICON_X = 142; + R_PICTO_FOCUS_ICON_Y = 108; + R_PICTO_FOCUS_TEXT_X = 204; + R_PICTO_FOCUS_TEXT_Y = 177; } void Setup_InitImpl(SetupState* this) { diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 147a98775..2e2b8c5f8 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -151,7 +151,7 @@ void ActorShadow_DrawFoot(PlayState* play, Light* light, MtxF* arg2, s32 lightNu dir0 = light->l.dir[0]; dir2 = light->l.dir[2]; - sp58 = Math_FAtan2F(dir2, dir0); + sp58 = Math_Atan2S_XY(dir2, dir0); shadowScaleZ *= (4.5f - (light->l.dir[1] * 0.035f)); shadowScaleZ = CLAMP_MIN(shadowScaleZ, 1.0f); Matrix_Put(arg2); @@ -224,7 +224,7 @@ void ActorShadow_DrawFeet(Actor* actor, Lights* mapper, PlayState* play) { for (i = 0; i < ARRAY_COUNT(floorHeight); i++, spB8 >>= 1) { feetPosPtr->y += 50.0f; - *floorHeightPtr = func_80169100(play, &sp13C, &spF8, &bgId, feetPosPtr); + *floorHeightPtr = Play_GetFloorSurfaceImpl(play, &sp13C, &spF8, &bgId, feetPosPtr); feetPosPtr->y -= 50.0f; distToFloor = feetPosPtr->y - *floorHeightPtr; @@ -520,7 +520,7 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) { Target_SetPos(targetCtx, targetCtx->unk4C, projectedPos.x, projectedPos.y, projectedPos.z); - if ((!(player->stateFlags1 & PLAYER_STATE1_40)) || (actor != player->unk_730)) { + if ((!(player->stateFlags1 & PLAYER_STATE1_40)) || (actor != player->targetedActor)) { OVERLAY_DISP = Gfx_CallSetupDL(OVERLAY_DISP, 0x39); for (spB0 = 0, spAC = targetCtx->unk4C; spB0 < spB8; spB0++, spAC = (spAC + 1) % 3) { @@ -589,7 +589,7 @@ void func_800B5814(TargetContext* targetCtx, Player* player, Actor* actor, GameS Vec3f projectedPos; f32 invW; - if ((player->unk_730 != 0) && (player->unk_AE3[player->unk_ADE] == 2)) { + if ((player->targetedActor != NULL) && (player->unk_AE3[player->unk_ADE] == 2)) { targetCtx->unk_94 = NULL; } else { func_800BB8EC(gameState, &play->actorCtx, &sp68, &D_801ED920, player); @@ -1328,7 +1328,7 @@ s32 func_800B7118(Player* player) { } s32 func_800B7128(Player* player) { - return func_800B7118(player) && player->unk_ACC; + return func_800B7118(player) && (player->unk_ACC != 0); } s32 func_800B715C(PlayState* play) { @@ -1354,7 +1354,7 @@ void Actor_MountHorse(PlayState* play, Player* player, Actor* horse) { } s32 func_800B7200(Player* player) { - return (player->stateFlags1 & (PLAYER_STATE1_20000000 | PLAYER_STATE1_80)) || (player->csMode != 0); + return (player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) || (player->csMode != PLAYER_CSMODE_0); } void func_800B722C(GameState* gameState, Player* player) { @@ -1364,7 +1364,7 @@ void func_800B722C(GameState* gameState, Player* player) { s32 func_800B724C(PlayState* play, Actor* actor, u8 csMode) { Player* player = GET_PLAYER(play); - if ((player->csMode == 5) || ((csMode == 6) && (player->csMode == 0))) { + if ((player->csMode == PLAYER_CSMODE_5) || ((csMode == PLAYER_CSMODE_6) && (player->csMode == PLAYER_CSMODE_0))) { return false; } @@ -1374,7 +1374,7 @@ s32 func_800B724C(PlayState* play, Actor* actor, u8 csMode) { return true; } -u32 func_800B7298(PlayState* play, Actor* actor, u8 csMode) { +s32 func_800B7298(PlayState* play, Actor* actor, u8 csMode) { Player* player = GET_PLAYER(play); if (func_800B724C(play, actor, csMode)) { @@ -1489,11 +1489,11 @@ s32 Actor_ActorAIsFacingAndNearActorB(Actor* actorA, Actor* actorB, f32 range, s /* Start of BgCheck related section */ -void func_800B75A0(CollisionPoly* poly, Vec3f* normal, s16* azimuth) { - normal->x = COLPOLY_GET_NORMAL(poly->normal.x); - normal->y = COLPOLY_GET_NORMAL(poly->normal.y); - normal->z = COLPOLY_GET_NORMAL(poly->normal.z); - *azimuth = Math_FAtan2F(normal->z, normal->x); +void Actor_GetSlopeDirection(CollisionPoly* floorPoly, Vec3f* slopeNormal, s16* downwardSlopeYaw) { + slopeNormal->x = COLPOLY_GET_NORMAL(floorPoly->normal.x); + slopeNormal->y = COLPOLY_GET_NORMAL(floorPoly->normal.y); + slopeNormal->z = COLPOLY_GET_NORMAL(floorPoly->normal.z); + *downwardSlopeYaw = Math_Atan2S_XY(slopeNormal->z, slopeNormal->x); } s32 func_800B761C(Actor* actor, f32 arg1, s32 arg2) { @@ -1590,7 +1590,7 @@ void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, Math_Vec3f_Copy(&actor->world.pos, &pos); } - actor->wallYaw = Math_FAtan2F(sp7C->normal.z, sp7C->normal.x); + actor->wallYaw = Math_Atan2S_XY(sp7C->normal.z, sp7C->normal.x); actor->wallBgId = bgId; } else { actor->bgCheckFlags &= ~8; @@ -1721,16 +1721,14 @@ void func_800B8050(Actor* actor, PlayState* play, s32 flag) { Hilite* hilite = func_800BCBF4(&actor->world.pos, play); if (flag != 0) { - Gfx* displayListHead; - Gfx* displayList = GRAPH_ALLOC(play->state.gfxCtx, 2 * sizeof(Gfx)); - - displayListHead = displayList; + Gfx* gfxHead = GRAPH_ALLOC(play->state.gfxCtx, 2 * sizeof(Gfx)); + Gfx* gfx = gfxHead; OPEN_DISPS(play->state.gfxCtx); - gDPSetHilite1Tile(displayListHead++, 1, hilite, 0x10, 0x10); - gSPEndDisplayList(displayListHead); - gSPSegment(POLY_OPA_DISP++, 0x07, displayList); + gDPSetHilite1Tile(gfx++, 1, hilite, 0x10, 0x10); + gSPEndDisplayList(gfx++); + gSPSegment(POLY_OPA_DISP++, 0x07, gfxHead); CLOSE_DISPS(play->state.gfxCtx); } @@ -1740,16 +1738,14 @@ void func_800B8118(Actor* actor, PlayState* play, s32 flag) { Hilite* hilite = func_800BCC68(&actor->world.pos, play); if (flag != 0) { - Gfx* displayListHead; - Gfx* displayList = GRAPH_ALLOC(play->state.gfxCtx, 2 * sizeof(Gfx)); - - displayListHead = displayList; + Gfx* gfxHead = GRAPH_ALLOC(play->state.gfxCtx, 2 * sizeof(Gfx)); + Gfx* gfx = gfxHead; OPEN_DISPS(play->state.gfxCtx); - gDPSetHilite1Tile(displayListHead++, 1, hilite, 0x10, 0x10); - gSPEndDisplayList(displayListHead); - gSPSegment(POLY_XLU_DISP++, 0x07, displayList); + gDPSetHilite1Tile(gfx++, 1, hilite, 0x10, 0x10); + gSPEndDisplayList(gfx++); + gSPSegment(POLY_XLU_DISP++, 0x07, gfxHead); CLOSE_DISPS(play->state.gfxCtx); } @@ -1787,7 +1783,7 @@ f32 func_800B82EC(Actor* actor, Player* player, s16 angle) { s16 temp_v0 = BINANG_SUB(BINANG_SUB(actor->yawTowardsPlayer, 0x8000), angle); s16 yaw = ABS_ALT(temp_v0); - if (player->unk_730 != NULL) { + if (player->targetedActor != NULL) { if ((yaw > 0x4000) || ((actor->flags & ACTOR_FLAG_8000000))) { return FLT_MAX; } @@ -1825,7 +1821,7 @@ s32 func_800B83F8(Actor* actor, Player* player, s32 flag) { s16 phi_v1 = ABS_ALT(yaw); f32 dist; - if ((player->unk_730 == NULL) && (phi_v1 >= 0x2AAB)) { + if ((player->targetedActor == NULL) && (phi_v1 >= 0x2AAB)) { dist = FLT_MAX; } else { dist = actor->xyzDistToPlayerSq; @@ -1852,30 +1848,30 @@ s32 Actor_ProcessTalkRequest(Actor* actor, GameState* gameState) { // Actor_PickUpExchange? Seems to be called with exchangeItemId -1 if the same actor used Actor_PickUp // This function is also used to toggle the "Speak" action on the A button -s32 func_800B8500(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, PlayerActionParam exchangeItemId) { +s32 func_800B8500(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, PlayerItemAction exchangeItemId) { Player* player = GET_PLAYER(play); - if ((player->actor.flags & ACTOR_FLAG_100) || ((exchangeItemId > PLAYER_AP_NONE) && Player_InCsMode(play)) || + if ((player->actor.flags & ACTOR_FLAG_100) || ((exchangeItemId > PLAYER_IA_NONE) && Player_InCsMode(play)) || (!actor->isTargeted && - ((fabsf(actor->playerHeightRel) > fabsf(yRange)) || ((actor->xzDistToPlayer > player->targetActorDistance)) || + ((fabsf(actor->playerHeightRel) > fabsf(yRange)) || (actor->xzDistToPlayer > player->talkActorDistance) || (xzRange < actor->xzDistToPlayer)))) { return false; } - player->targetActor = actor; - player->targetActorDistance = actor->xzDistToPlayer; + player->talkActor = actor; + player->talkActorDistance = actor->xzDistToPlayer; player->exchangeItemId = exchangeItemId; ActorCutscene_SetIntentToPlay(0x7C); return true; } -s32 func_800B85E0(Actor* actor, PlayState* play, f32 radius, PlayerActionParam exchangeItemId) { +s32 func_800B85E0(Actor* actor, PlayState* play, f32 radius, PlayerItemAction exchangeItemId) { return func_800B8500(actor, play, radius, radius, exchangeItemId); } s32 func_800B8614(Actor* actor, PlayState* play, f32 radius) { - return func_800B85E0(actor, play, radius, PLAYER_AP_NONE); + return func_800B85E0(actor, play, radius, PLAYER_IA_NONE); } s32 func_800B863C(Actor* actor, PlayState* play) { @@ -1898,21 +1894,21 @@ s32 Actor_TextboxIsClosing(Actor* actor, PlayState* play) { * Fails if Player is not already focussing on an actor or in a talking state */ s32 Actor_ChangeFocus(Actor* actor1, PlayState* play, Actor* actor2) { - Actor* targetActor; + Actor* talkActor; Player* player = GET_PLAYER(play); - targetActor = player->targetActor; + talkActor = player->talkActor; - if ((player->actor.flags & ACTOR_FLAG_100) && (targetActor != NULL)) { - player->targetActor = actor2; - player->unk_730 = actor2; + if ((player->actor.flags & ACTOR_FLAG_100) && (talkActor != NULL)) { + player->talkActor = actor2; + player->targetedActor = actor2; return true; } return false; } -s32 Player_GetExchangeItemId(PlayState* play) { +PlayerItemAction Player_GetExchangeItemId(PlayState* play) { Player* player = GET_PLAYER(play); return player->exchangeItemId; @@ -1996,7 +1992,7 @@ s32 Actor_HasParent(Actor* actor, PlayState* play) { * GI_NONE is usually used as a special case to lift an actor * GI_MAX is usually used to catch an actor in a bottle */ -s32 Actor_PickUp(Actor* actor, PlayState* play, s32 getItemId, f32 xzRange, f32 yRange) { +s32 Actor_PickUp(Actor* actor, PlayState* play, GetItemId getItemId, f32 xzRange, f32 yRange) { Player* player = GET_PLAYER(play); if (!(player->stateFlags1 & @@ -2006,7 +2002,7 @@ s32 Actor_PickUp(Actor* actor, PlayState* play, s32 getItemId, f32 xzRange, f32 if ((actor->xzDistToPlayer <= xzRange) && (fabsf(actor->playerHeightRel) <= fabsf(yRange))) { if ((getItemId == GI_MASK_CIRCUS_LEADER || getItemId == GI_PENDANT_OF_MEMORIES || getItemId == GI_DEED_LAND || - ((player->heldActor != NULL || actor == player->targetActor) && + ((player->heldActor != NULL || actor == player->talkActor) && (getItemId > GI_NONE && getItemId < GI_MAX))) || !(player->stateFlags1 & (PLAYER_STATE1_800 | PLAYER_STATE1_20000000))) { s16 yawDiff = actor->yawTowardsPlayer - player->actor.shape.rot.y; @@ -2030,7 +2026,7 @@ s32 Actor_PickUp(Actor* actor, PlayState* play, s32 getItemId, f32 xzRange, f32 return false; } -s32 Actor_PickUpNearby(Actor* actor, PlayState* play, s32 getItemId) { +s32 Actor_PickUpNearby(Actor* actor, PlayState* play, GetItemId getItemId) { return Actor_PickUp(actor, play, getItemId, 50.0f, 10.0f); } @@ -2038,7 +2034,7 @@ s32 Actor_LiftActor(Actor* actor, PlayState* play) { return Actor_PickUpNearby(actor, play, GI_NONE); } -s32 Actor_PickUpFar(Actor* actor, PlayState* play, s32 getItemId) { +s32 Actor_PickUpFar(Actor* actor, PlayState* play, GetItemId getItemId) { return Actor_PickUp(actor, play, getItemId, 9999.9f, 9999.9f); } @@ -2065,11 +2061,15 @@ void func_800B8C20(Actor* actorA, Actor* actorB, PlayState* play) { actorA->parent = NULL; } +/** + * Sets closest secret distance to the distance to the actor. Calling this function on `actor` is the way to make it a + * 'secret' for that update cycle, i.e. something that the controller will rumble for. + */ void func_800B8C50(Actor* actor, PlayState* play) { Player* player = GET_PLAYER(play); - if (actor->xyzDistToPlayerSq < player->unk_AA0) { - player->unk_AA0 = actor->xyzDistToPlayerSq; + if (actor->xyzDistToPlayerSq < player->closestSecretDistSq) { + player->closestSecretDistSq = actor->xyzDistToPlayerSq; } } @@ -2211,7 +2211,7 @@ void func_800B9098(Actor* actor) { actor->audioFlags |= 0x40; } -s32 func_800B90AC(PlayState* play, Actor* actor, CollisionPoly* polygon, s32 bgId, s32 arg4) { +s32 func_800B90AC(PlayState* play, Actor* actor, CollisionPoly* polygon, s32 bgId, Vec3f* arg4) { if (func_800C99D4(&play->colCtx, polygon, bgId) == 8) { return true; } @@ -2241,7 +2241,7 @@ void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* acto CycleSceneFlags* cycleFlags; s32 i; - gSaveContext.save.weekEventReg[92] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_92_80); cycleFlags = &gSaveContext.cycleSceneFlags[Play_GetOriginalSceneId(play->sceneId)]; bzero(actorCtx, sizeof(ActorContext)); @@ -2301,7 +2301,7 @@ void Actor_SpawnSetupActors(PlayState* play, ActorContext* actorCtx) { } if (!(phi_v0 & temp_fp) && (phi_v0 & actorCtx->unkC) && - (!(gSaveContext.eventInf[1] & 0x80) || !(phi_v0 & temp_s1) || !(actorEntry->id & 0x800))) { + (!CHECK_EVENTINF(EVENTINF_17) || !(phi_v0 & temp_s1) || !(actorEntry->id & 0x800))) { Actor_SpawnEntry(&play->actorCtx, actorEntry, play); } actorEntry++; @@ -2353,10 +2353,8 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) { if (!Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) { Actor_Kill(actor); } else { - s32 tmp = (params->unk_08 == 0); - if (((params->unk_08) && !(actor->flags & params->unk_08)) || - ((tmp = (params->unk_08 == 0)) && + ((((!params->unk_08) != 0)) && (!(actor->flags & ACTOR_FLAG_100000) || ((actor->category == ACTORCAT_EXPLOSIVES) && (params->player->stateFlags1 & PLAYER_STATE1_200))) && (params->unkC != 0) && (actor != params->unk10) && ((actor != params->player->heldActor)) && @@ -2372,13 +2370,13 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) { actor->flags &= ~ACTOR_FLAG_1000000; if ((DECR(actor->freezeTimer) == 0) && (actor->flags & params->unk_18)) { - if (actor == params->player->unk_730) { + if (actor == params->player->targetedActor) { actor->isTargeted = true; } else { actor->isTargeted = false; } - if ((actor->targetPriority != 0) && (params->player->unk_730 == 0)) { + if ((actor->targetPriority != 0) && (params->player->targetedActor == NULL)) { actor->targetPriority = 0; } @@ -2444,7 +2442,7 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) { params.player = player; params.play = play; - if (play->unk_18844 != 0) { + if (play->unk_18844) { params.unk_18 = ACTOR_FLAG_200000; } else { params.unk_18 = ACTOR_FLAG_200000 | ACTOR_FLAG_40 | ACTOR_FLAG_10; @@ -2465,7 +2463,7 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) { } if ((player->stateFlags1 & PLAYER_STATE1_40) && ((player->actor.textId & 0xFF00) != 0x1900)) { - params.unk10 = player->targetActor; + params.unk10 = player->talkActor; } else { params.unk10 = NULL; } @@ -2503,7 +2501,7 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) { } } - actor = player->unk_730; + actor = player->targetedActor; if ((actor != NULL) && (actor->update == NULL)) { actor = NULL; func_80123DA4(player); @@ -2700,7 +2698,7 @@ void Actor_DrawLensActors(PlayState* play, s32 numInvisibleActors, Actor** invis spAC = tmp; Actor_DrawLensOverlay(&spAC, play->actorCtx.lensMaskSize); - tmp = func_801660B8(play, spAC); + tmp = Play_SetFog(play, spAC); for (spB4 = 0, invisibleActor = invisibleActors; spB4 < numInvisibleActors; spB4++, invisibleActor++) { POLY_XLU_DISP = tmp; @@ -2781,9 +2779,9 @@ s32 func_800BA2FC(PlayState* play, Actor* actor, Vec3f* projectedPos, f32 projec f32 phi_f16; if (play->view.fovy != 60.0f) { - phi_f12 = actor->uncullZoneScale * play->unk_187F0.x * 0.76980036f; // sqrt(16/27) + phi_f12 = actor->uncullZoneScale * play->projectionMtxFDiagonal.x * 0.76980036f; // sqrt(16/27) - phi_f14 = play->unk_187F0.y * 0.57735026f; // 1 / sqrt(3) + phi_f14 = play->projectionMtxFDiagonal.y * 0.57735026f; // 1 / sqrt(3) phi_f16 = actor->uncullZoneScale * phi_f14; phi_f14 *= actor->uncullZoneDownward; } else { @@ -2811,7 +2809,7 @@ void Actor_DrawAll(PlayState* play, ActorContext* actorCtx) { s32 actorFlags; s32 i; - if (play->unk_18844 != 0) { + if (play->unk_18844) { actorFlags = ACTOR_FLAG_200000; } else { actorFlags = ACTOR_FLAG_200000 | ACTOR_FLAG_40 | ACTOR_FLAG_20; @@ -2882,7 +2880,7 @@ void Actor_DrawAll(PlayState* play, ActorContext* actorCtx) { gSPBranchList(ref2, &tmp2[1]); POLY_XLU_DISP = &tmp2[1]; - if (play->unk_18844 == 0) { + if (!play->unk_18844) { Lights_DrawGlow(play); } @@ -3284,9 +3282,9 @@ Actor* Actor_Delete(ActorContext* actorCtx, Actor* actor, PlayState* play) { Actor* newHead; ActorOverlay* overlayEntry = actor->overlayEntry; - if ((player != NULL) && (actor == player->unk_730)) { + if ((player != NULL) && (actor == player->targetedActor)) { func_80123DA4(player); - Camera_ChangeMode(Play_GetCamera(play, Play_GetActiveCamId(play)), 0); + Camera_ChangeMode(Play_GetCamera(play, Play_GetActiveCamId(play)), CAM_MODE_NORMAL); } if (actor == actorCtx->targetContext.arrowPointedActor) { @@ -3327,7 +3325,7 @@ s32 func_800BB59C(PlayState* play, Actor* actor) { void func_800BB604(GameState* gameState, ActorContext* actorCtx, Player* player, s32 actorCategory) { PlayState* play = (PlayState*)gameState; f32 temp_f0_2; - Actor* sp8C; + Actor* targetedActor; Actor* actor; s32 phi_s2; CollisionPoly* sp80; @@ -3336,7 +3334,7 @@ void func_800BB604(GameState* gameState, ActorContext* actorCtx, Player* player, s32 phi_s2_2; actor = actorCtx->actorLists[actorCategory].first; - sp8C = player->unk_730; + targetedActor = player->targetedActor; while (actor != NULL) { if ((actor->update != NULL) && ((Player*)actor != player)) { if (actor->flags & (ACTOR_FLAG_40000000 | ACTOR_FLAG_1)) { @@ -3347,7 +3345,7 @@ void func_800BB604(GameState* gameState, ActorContext* actorCtx, Player* player, } } - if ((actor != sp8C) || (actor->flags & ACTOR_FLAG_80000)) { + if ((actor != targetedActor) || (actor->flags & ACTOR_FLAG_80000)) { temp_f0_2 = func_800B82EC(actor, player, D_801ED8DC); phi_s2_2 = (actor->flags & 1) != 0; if (phi_s2_2) { @@ -4190,19 +4188,16 @@ Gfx D_801AEFA0[] = { }; Gfx* func_800BD9A0(GraphicsContext* gfxCtx) { - Gfx* displayListHead; - Gfx* displayList; + Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, 2 * sizeof(Gfx)); + Gfx* gfx = gfxHead; - displayListHead = displayList = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2); + gDPSetRenderMode( + gfx++, AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | G_RM_FOG_SHADE_A, + AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)); + gSPEndDisplayList(gfx++); - gDPSetRenderMode(displayListHead++, - AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | - G_RM_FOG_SHADE_A, - AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | - GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)); - gSPEndDisplayList(displayListHead++); - - return displayList; + return gfxHead; } // unused @@ -4237,7 +4232,7 @@ s16 func_800BDB6C(Actor* actor, PlayState* play, s16 arg2, f32 arg3) { Player* player = GET_PLAYER(play); f32 phi_f2; - if ((play->csCtx.state != 0) || gDbgCamEnabled) { + if ((play->csCtx.state != CS_STATE_0) || gDbgCamEnabled) { phi_f2 = Math_Vec3f_DistXYZ(&actor->world.pos, &play->view.eye) * 0.25f; } else { phi_f2 = Math_Vec3f_DistXYZ(&actor->world.pos, &player->actor.world.pos); @@ -4382,8 +4377,8 @@ void func_800BE33C(Vec3f* arg0, Vec3f* arg1, Vec3s* arg2, s32 arg3) { f32 zDiff = arg1->z - arg0->z; f32 yDiff = arg3 ? (arg1->y - arg0->y) : (arg0->y - arg1->y); - arg2->y = Math_FAtan2F(zDiff, xDiff); - arg2->x = Math_FAtan2F(sqrtf(SQ(xDiff) + SQ(zDiff)), yDiff); + arg2->y = Math_Atan2S_XY(zDiff, xDiff); + arg2->x = Math_Atan2S_XY(sqrtf(SQ(xDiff) + SQ(zDiff)), yDiff); } void func_800BE3D0(Actor* actor, s16 angle, Vec3s* arg2) { @@ -4545,7 +4540,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 gDPSetColorDither(POLY_XLU_DISP++, G_CD_BAYER); gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_PATTERN); - gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamDL); + gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamMaterialDL); alpha = effectAlpha * 100.0f; if (alpha > 100.0f) { @@ -4568,7 +4563,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamModelDL); } break; @@ -4627,7 +4622,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 lightOrbsScale = ((KREG(19) * 0.01f) + 4.0f) * effectScale; - gSPDisplayList(POLY_XLU_DISP++, gLightOrb1DL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL); alpha = effectAlpha * 255.0f; if (alpha > 255.0f) { @@ -4658,7 +4653,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); } break; @@ -4676,7 +4671,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sElectricSparkTextures[play->gameplayFrames % 4])); - gSPDisplayList(POLY_XLU_DISP++, gElectricSparkDL); + gSPDisplayList(POLY_XLU_DISP++, gElectricSparkMaterialDL); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, (u8)(sREG(16) + 255), (u8)(sREG(17) + 255), (u8)(sREG(18) + 150), (u8)(sREG(19) + 255)); @@ -4698,7 +4693,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gElectricSparkVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gElectricSparkModelDL); // second electric spark Matrix_RotateXFApply(Rand_ZeroFloat(2 * M_PI)); @@ -4710,7 +4705,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gElectricSparkVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gElectricSparkModelDL); } break; diff --git a/src/code/z_actor_dlftbls.c b/src/code/z_actor_dlftbls.c index 02b7a8b5d..5d7f30ea8 100644 --- a/src/code/z_actor_dlftbls.c +++ b/src/code/z_actor_dlftbls.c @@ -36,7 +36,7 @@ ActorOverlay gActorOverlayTable[] = { #undef DEFINE_ACTOR_INTERNAL #undef DEFINE_ACTOR_UNSET -s32 gMaxActorId = 0; +ActorId gMaxActorId = 0; FaultClient D_801ED930; FaultAddrConvClient D_801ED940; @@ -44,7 +44,7 @@ FaultAddrConvClient D_801ED940; void ActorOverlayTable_FaultPrint(void* arg0, void* arg1) { ActorOverlay* overlayEntry; u32 overlaySize; - s32 i; + ActorId i; FaultDrawer_SetCharPad(-2, 0); @@ -63,7 +63,7 @@ void ActorOverlayTable_FaultPrint(void* arg0, void* arg1) { void* ActorOverlayTable_FaultAddrConv(void* arg0, void* arg1) { u8* ptr = arg0; ActorOverlay* overlayEntry = &gActorOverlayTable[0]; - s32 i; + ActorId i; u8* ramStart; u8* ramEnd; size_t size; diff --git a/src/code/z_camera.c b/src/code/z_camera.c index b4b6e5785..f54fc93da 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "z64quake.h" #include "z64shrink_window.h" diff --git a/src/code/z_construct.c b/src/code/z_construct.c index 5e92d4958..3d2621c9c 100644 --- a/src/code/z_construct.c +++ b/src/code/z_construct.c @@ -1,4 +1,5 @@ #include "global.h" -void func_801AAAA0(PlayState* play) { +// Remnant from OoT +void Regs_InitData(PlayState* play) { } diff --git a/src/code/z_debug_display.c b/src/code/z_debug_display.c index e7c9dd0be..f98b8636e 100644 --- a/src/code/z_debug_display.c +++ b/src/code/z_debug_display.c @@ -148,9 +148,9 @@ Gfx* DebugDisplay_PathDisplayList(GraphicsContext* gfxCtx, Path* path) { s32 segment; // of path ending at the current point, 1-indexed if (path != NULL) { - // count - 1 segments, 1 gSPVertex and 3 gSP2Triangles for each, plus a gSPEndDisplayList - gfx = GRAPH_ALLOC(gfxCtx, ALIGN16(((path->count - 1) * 4 + 1) * sizeof(Gfx))); - curVtx = GRAPH_ALLOC(gfxCtx, ALIGN16(path->count * 6 * sizeof(Vtx))); + // (count - 1) segments, 1 gSPVertex and 3 gSP2Triangles for each, plus a gSPEndDisplayList + gfx = GRAPH_ALLOC(gfxCtx, ((path->count - 1) * 4 + 1) * sizeof(Gfx)); + curVtx = GRAPH_ALLOC(gfxCtx, path->count * 6 * sizeof(Vtx)); gfxHead = gfx; curBaseVtx = curVtx; @@ -202,7 +202,7 @@ Gfx* DebugDisplay_PathDisplayList(GraphicsContext* gfxCtx, Path* path) { gSPEndDisplayList(gfx++); } else { // No path, trivial displaylist - gfxHead = gfx = GRAPH_ALLOC(gfxCtx, ALIGN16(sizeof(Gfx))); + gfx = gfxHead = GRAPH_ALLOC(gfxCtx, sizeof(Gfx)); gSPEndDisplayList(gfx++); } return gfxHead; diff --git a/src/code/z_demo.c b/src/code/z_demo.c index 646b91522..7d0c1ade3 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -161,8 +161,8 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c } break; case 0x3: - if (play->envCtx.lightSettings.fogFar < 12800) { - play->envCtx.lightSettings.fogFar += 35; + if (play->envCtx.lightSettings.zFar < 12800) { + play->envCtx.lightSettings.zFar += 35; } break; case 0x4: @@ -206,16 +206,16 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c } break; case 0xA: - D_801F6D30.r = 255; - D_801F6D30.g = 255; - D_801F6D30.b = 255; - D_801F6D30.a = 255 * progress; + gVisMonoColor.r = 255; + gVisMonoColor.g = 255; + gVisMonoColor.b = 255; + gVisMonoColor.a = 255 * progress; break; case 0xB: - D_801F6D30.r = 255; - D_801F6D30.g = 180; - D_801F6D30.b = 100; - D_801F6D30.a = 255 * progress; + gVisMonoColor.r = 255; + gVisMonoColor.g = 180; + gVisMonoColor.b = 100; + gVisMonoColor.a = 255 * progress; break; case 0xC: play->roomCtx.curRoom.segment = NULL; @@ -236,10 +236,10 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c } break; case 0xE: - play->unk_18845 = 1; + play->haltAllActors = true; break; case 0xF: - play->unk_18845 = 0; + play->haltAllActors = false; break; case 0x10: if (isStartFrame) { @@ -252,9 +252,9 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c break; case 0x12: if (!gSaveContext.save.isNight) { - gSaveContext.save.time = ((void)0, gSaveContext.save.time) - (u16)REG(15); + gSaveContext.save.time = ((void)0, gSaveContext.save.time) - (u16)R_TIME_SPEED; } else { - gSaveContext.save.time = ((void)0, gSaveContext.save.time) - (u16)(2 * REG(15)); + gSaveContext.save.time = ((void)0, gSaveContext.save.time) - (u16)(2 * R_TIME_SPEED); } break; case 0x13: @@ -295,7 +295,7 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c play->nextEntrance = ENTRANCE(CUTSCENE, 0); gSaveContext.nextCutsceneIndex = 0xFFF8; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; } break; case 0x1C: @@ -326,10 +326,10 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c if (csCtx->frames != D_801BB15C) { D_801BB15C = csCtx->frames; - if (REG(15) != 0) { - gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)REG(15); + if (R_TIME_SPEED != 0) { + gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED; gSaveContext.save.time = - ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.daySpeed); + ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.timeSpeedOffset); } } break; @@ -555,7 +555,7 @@ void Cutscene_Command_SetTime(PlayState* play, CutsceneContext* csCtx, CsCmdDayT void Cutscene_TerminatorImpl(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) { csCtx->state = CS_STATE_4; - func_80165690(); + Play_DisableMotionBlur(); Audio_SetCutsceneFlag(false); gSaveContext.cutsceneTransitionControl = 1; @@ -575,7 +575,7 @@ void Cutscene_TerminatorImpl(PlayState* play, CutsceneContext* csCtx, CsCmdBase* if (D_801BB12C >= 2) { D_801BB12C = 0; } - play->transitionType = TRANS_TYPE_04; + play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; } if ((play->nextEntrance & 0xF) > 0) { @@ -594,49 +594,49 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB } } else if (cmd->base == 2) { if (csCtx->frames == cmd->startFrame) { - func_80165690(); + Play_DisableMotionBlur(); switch (D_801F4DE2) { case 0x1F: - if (gSaveContext.save.weekEventReg[20] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { play->nextEntrance = ENTRANCE(WOODFALL_TEMPLE, 1); play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; } else { play->nextEntrance = ENTRANCE(WOODFALL, 0); gSaveContext.nextCutsceneIndex = 0xFFF0; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; } break; case 0x44: - if (gSaveContext.save.weekEventReg[33] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { play->nextEntrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 7); play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; } else { play->nextEntrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 0); gSaveContext.nextCutsceneIndex = 0xFFF0; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; } break; case 0x5F: - gSaveContext.save.weekEventReg[55] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_55_80); play->nextEntrance = ENTRANCE(ZORA_CAPE, 8); gSaveContext.nextCutsceneIndex = 0xFFF0; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; break; case 0x36: - gSaveContext.save.weekEventReg[52] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_52_20); play->nextEntrance = ENTRANCE(IKANA_CANYON, 0); gSaveContext.nextCutsceneIndex = 0xFFF1; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; break; } } @@ -764,16 +764,16 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt void Cutscene_Command_MotionBlur(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) { if ((csCtx->frames >= cmd->startFrame) && (cmd->endFrame >= csCtx->frames)) { if ((csCtx->frames == cmd->startFrame) && (cmd->base == 1)) { - func_8016566C(180); + Play_EnableMotionBlur(180); } if (cmd->base == 2) { f32 progress = Environment_LerpWeight(cmd->endFrame, cmd->startFrame, csCtx->frames); if (progress >= 0.9f) { - func_80165690(); + Play_DisableMotionBlur(); } else { - func_80165658((1.0f - progress) * 180.0f); + Play_SetMotionBlurAlpha((1.0f - progress) * 180.0f); } } } @@ -1482,6 +1482,7 @@ void func_800EDBE0(PlayState* play) { } else if (!(((void)0, gSaveContext.save.weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)]) & (1 << (play->csCtx.sceneCsList[temp_v0_3].unk7 % 8)))) { + // TODO: macros for this kind of weekEventReg access gSaveContext.save.weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)] = ((void)0, gSaveContext.save.weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)]) | (1 << (play->csCtx.sceneCsList[temp_v0_3].unk7 % 8)); diff --git a/src/code/z_draw.c b/src/code/z_draw.c index 4167b4cea..a2686be8e 100644 --- a/src/code/z_draw.c +++ b/src/code/z_draw.c @@ -837,7 +837,7 @@ void GetItem_DrawRemains(PlayState* play, s16 drawId) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/code/z_eff_blure.c b/src/code/z_eff_blure.c index 6ab70f1ef..5f0221969 100644 --- a/src/code/z_eff_blure.c +++ b/src/code/z_eff_blure.c @@ -408,7 +408,7 @@ void EffectBlure_DrawElemNoInterpolation(EffectBlure* this, EffectBlureElement* Math_Vec3s_ToVec3f(&sp6C, &this->elements[0].p2); - vtx = GRAPH_ALLOC(gfxCtx, sizeof(Vtx[4])); + vtx = GRAPH_ALLOC(gfxCtx, 4 * sizeof(Vtx)); if (vtx == NULL) { } else { vtx[0].v = baseVtx; @@ -559,7 +559,7 @@ void EffectBlure_DrawElemHermiteInterpolation(EffectBlure* this, EffectBlureElem Math_Vec3f_Scale(&sp174, 0.5f); Math_Vec3f_Scale(&sp168, 0.5f); - vtx = GRAPH_ALLOC(gfxCtx, sizeof(Vtx[16])); + vtx = GRAPH_ALLOC(gfxCtx, 16 * sizeof(Vtx)); if (vtx == NULL) { } else { Math_Vec3f_Diff(&sp1CC, &sp138, &sp158); @@ -849,7 +849,7 @@ void EffectBlure_DrawSimple(EffectBlure* this2, GraphicsContext* gfxCtx) { if (this->numElements >= 2) { vtxCount = this->numElements * 4; - vtx = GRAPH_ALLOC(gfxCtx, ALIGN16(vtxCount * sizeof(Vtx))); + vtx = GRAPH_ALLOC(gfxCtx, vtxCount * sizeof(Vtx)); if (vtx == NULL) { return; } @@ -941,7 +941,7 @@ void EffectBlure_Draw(void* thisx, GraphicsContext* gfxCtx) { func_8012C560(gfxCtx); gDPPipeSync(POLY_XLU_DISP++); - vtx = GRAPH_ALLOC(gfxCtx, sizeof(Vtx[32])); + vtx = GRAPH_ALLOC(gfxCtx, 32 * sizeof(Vtx)); if (vtx == NULL) { } else { j = 0; diff --git a/src/code/z_eff_spark.c b/src/code/z_eff_spark.c index fd92516df..fdd25a6b4 100644 --- a/src/code/z_eff_spark.c +++ b/src/code/z_eff_spark.c @@ -120,7 +120,7 @@ s32 EffectSpark_Update(void* thisx) { } void EffectSpark_Draw(void* thisx, GraphicsContext* gfxCtx) { - Vtx* vertices; + Vtx* vtx; EffectSpark* this = (EffectSpark*)thisx; PlayState* play = Effect_GetPlayState(); s32 i; @@ -162,8 +162,8 @@ void EffectSpark_Draw(void* thisx, GraphicsContext* gfxCtx) { gSPSetGeometryMode(POLY_XLU_DISP++, G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH); gDPPipeSync(POLY_XLU_DISP++); - vertices = GRAPH_ALLOC(gfxCtx, ALIGN16(this->numElements * sizeof(Vtx[4]))); - if (vertices == NULL) { + vtx = GRAPH_ALLOC(gfxCtx, this->numElements * (4 * sizeof(Vtx))); + if (vtx == NULL) { goto end; } @@ -202,49 +202,49 @@ void EffectSpark_Draw(void* thisx, GraphicsContext* gfxCtx) { SkinMatrix_MtxFMtxFMult(&spEC, &play->billboardMtxF, &sp6C); SkinMatrix_MtxFMtxFMult(&sp6C, &spAC, &sp12C); - vertices[j].v.ob[0] = -32; - vertices[j].v.ob[1] = -32; - vertices[j].v.ob[2] = 0; - vertices[j].v.cn[0] = sp1D3; - vertices[j].v.cn[1] = sp1D2; - vertices[j].v.cn[2] = sp1D1; - vertices[j].v.cn[3] = sp1D0; - vertices[j].v.tc[0] = 0; - vertices[j].v.tc[1] = 1024; - vertices[j].v.flag = 0; + vtx[j].v.ob[0] = -32; + vtx[j].v.ob[1] = -32; + vtx[j].v.ob[2] = 0; + vtx[j].v.cn[0] = sp1D3; + vtx[j].v.cn[1] = sp1D2; + vtx[j].v.cn[2] = sp1D1; + vtx[j].v.cn[3] = sp1D0; + vtx[j].v.tc[0] = 0; + vtx[j].v.tc[1] = 1024; + vtx[j].v.flag = 0; - vertices[j + 1].v.ob[0] = 32; - vertices[j + 1].v.ob[1] = 32; - vertices[j + 1].v.ob[2] = 0; - vertices[j + 1].v.cn[0] = sp1CF; - vertices[j + 1].v.cn[1] = sp1CE; - vertices[j + 1].v.cn[2] = sp1CD; - vertices[j + 1].v.cn[3] = sp1CC; - vertices[j + 1].v.tc[0] = 1024; - vertices[j + 1].v.tc[1] = 0; - vertices[j + 1].v.flag = 0; + vtx[j + 1].v.ob[0] = 32; + vtx[j + 1].v.ob[1] = 32; + vtx[j + 1].v.ob[2] = 0; + vtx[j + 1].v.cn[0] = sp1CF; + vtx[j + 1].v.cn[1] = sp1CE; + vtx[j + 1].v.cn[2] = sp1CD; + vtx[j + 1].v.cn[3] = sp1CC; + vtx[j + 1].v.tc[0] = 1024; + vtx[j + 1].v.tc[1] = 0; + vtx[j + 1].v.flag = 0; - vertices[j + 2].v.ob[0] = -32; - vertices[j + 2].v.ob[1] = 32; - vertices[j + 2].v.ob[2] = 0; - vertices[j + 2].v.cn[0] = sp1CB; - vertices[j + 2].v.cn[1] = sp1CA; - vertices[j + 2].v.cn[2] = sp1C9; - vertices[j + 2].v.cn[3] = sp1C8; - vertices[j + 2].v.tc[0] = 0; - vertices[j + 2].v.tc[1] = 0; - vertices[j + 2].v.flag = 0; + vtx[j + 2].v.ob[0] = -32; + vtx[j + 2].v.ob[1] = 32; + vtx[j + 2].v.ob[2] = 0; + vtx[j + 2].v.cn[0] = sp1CB; + vtx[j + 2].v.cn[1] = sp1CA; + vtx[j + 2].v.cn[2] = sp1C9; + vtx[j + 2].v.cn[3] = sp1C8; + vtx[j + 2].v.tc[0] = 0; + vtx[j + 2].v.tc[1] = 0; + vtx[j + 2].v.flag = 0; - vertices[j + 3].v.ob[0] = 32; - vertices[j + 3].v.ob[1] = -32; - vertices[j + 3].v.ob[2] = 0; - vertices[j + 3].v.cn[0] = sp1C7; - vertices[j + 3].v.cn[1] = sp1C6; - vertices[j + 3].v.cn[2] = sp1C5; - vertices[j + 3].v.cn[3] = sp1C4; - vertices[j + 3].v.tc[0] = 1024; - vertices[j + 3].v.tc[1] = 1024; - vertices[j + 3].v.flag = 0; + vtx[j + 3].v.ob[0] = 32; + vtx[j + 3].v.ob[1] = -32; + vtx[j + 3].v.ob[2] = 0; + vtx[j + 3].v.cn[0] = sp1C7; + vtx[j + 3].v.cn[1] = sp1C6; + vtx[j + 3].v.cn[2] = sp1C5; + vtx[j + 3].v.cn[3] = sp1C4; + vtx[j + 3].v.tc[0] = 1024; + vtx[j + 3].v.tc[1] = 1024; + vtx[j + 3].v.flag = 0; j += 4; @@ -254,7 +254,7 @@ void EffectSpark_Draw(void* thisx, GraphicsContext* gfxCtx) { } gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPVertex(POLY_XLU_DISP++, &vertices[4 * i], 4, 0); + gSPVertex(POLY_XLU_DISP++, &vtx[4 * i], 4, 0); gSP2Triangles(POLY_XLU_DISP++, 2, 0, 3, 0, 2, 3, 1, 0); } diff --git a/src/code/z_eff_ss_dead.c b/src/code/z_eff_ss_dead.c index b7c6af97e..6c416e3c8 100644 --- a/src/code/z_eff_ss_dead.c +++ b/src/code/z_eff_ss_dead.c @@ -50,7 +50,7 @@ void func_800AE5A0(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); CLOSE_DISPS(play->state.gfxCtx); } @@ -105,7 +105,7 @@ void func_800AE8EC(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); gDPPipeSync(POLY_XLU_DISP++); - POLY_XLU_DISP = func_801660B8(play, POLY_XLU_DISP); + POLY_XLU_DISP = Play_SetFog(play, POLY_XLU_DISP); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/code/z_eff_tire_mark.c b/src/code/z_eff_tire_mark.c index 532e8e2fb..f19eb1289 100644 --- a/src/code/z_eff_tire_mark.c +++ b/src/code/z_eff_tire_mark.c @@ -1,8 +1,8 @@ #include "global.h" #include "objects/gameplay_keep/gameplay_keep.h" -void func_800AE930(CollisionContext* colCtx, EffectTireMark* this, Vec3f* pos, f32 arg3, s16 arg4, - CollisionPoly* colPoly, s32 arg6) { +void func_800AE930(CollisionContext* colCtx, EffectTireMark* this, Vec3f* pos, f32 arg3, s16 angle, + CollisionPoly* colPoly, s32 bgId) { Vec3s spB8; Vec3s spB0; EffectTireMarkElement* spAC; @@ -11,17 +11,17 @@ void func_800AE930(CollisionContext* colCtx, EffectTireMark* this, Vec3f* pos, f u32 spA0; Vec3s* vtxList = colCtx->colHeader->vtxList; - if ((arg6 != 50) || (this->numElements >= (ARRAY_COUNT(this->elements) - 1)) || (colPoly == NULL)) { + if ((bgId != 50) || (this->numElements >= (ARRAY_COUNT(this->elements) - 1)) || (colPoly == NULL)) { func_800AEF44(this); return; } - spB8.x = (Math_SinS(arg4 - 0x4000) * arg3) + pos->x; - spB8.z = (Math_CosS(arg4 - 0x4000) * arg3) + pos->z; + spB8.x = (Math_SinS(angle - 0x4000) * arg3) + pos->x; + spB8.z = (Math_CosS(angle - 0x4000) * arg3) + pos->z; spB8.y = func_800BFD84(colPoly, spB8.x, spB8.z) + 2.0f; - spB0.x = (Math_SinS(arg4 + 0x4000) * arg3) + pos->x; - spB0.z = (Math_CosS(arg4 + 0x4000) * arg3) + pos->z; + spB0.x = (Math_SinS(angle + 0x4000) * arg3) + pos->x; + spB0.z = (Math_CosS(angle + 0x4000) * arg3) + pos->z; spB0.y = func_800BFD84(colPoly, spB0.x, spB0.z) + 2.0f; spAC = &this->elements[this->numElements - 1]; @@ -226,7 +226,7 @@ void EffectTireMark_Draw(void* thisx, GraphicsContext* gfxCtx) { OPEN_DISPS(gfxCtx); if (this->numElements >= 2) { - vtx = GRAPH_ALLOC(gfxCtx, ALIGN16(this->numElements * sizeof(Vtx[2]))); + vtx = GRAPH_ALLOC(gfxCtx, this->numElements * (2 * sizeof(Vtx))); if (vtx != NULL) { gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/code/z_elf_message.c b/src/code/z_elf_message.c index a5a4890a7..830824024 100644 --- a/src/code/z_elf_message.c +++ b/src/code/z_elf_message.c @@ -21,20 +21,20 @@ u16 QuestHint_GetTatlTextId(PlayState* play) { return 0; } - if (gSaveContext.save.weekEventReg[88] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_88_20)) { return 0; } - if (gSaveContext.save.weekEventReg[79] & 0x10) { - if (gSaveContext.save.weekEventReg[8] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_10)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) { return 0; } return 0x224; } - if (!(gSaveContext.save.weekEventReg[8] & 0x80)) { - if (gSaveContext.save.weekEventReg[9] & 1) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_08_80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_09_01)) { return 0x21E; } @@ -58,34 +58,34 @@ u16 QuestHint_GetTatlTextId(PlayState* play) { } if (INV_CONTENT(ITEM_MOON_TEAR) == ITEM_MOON_TEAR) { - if (gSaveContext.save.weekEventReg[86] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_86_04)) { return 0x242; } return 0x243; } - if (gSaveContext.save.weekEventReg[74] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_74_20)) { return 0x223; } - if (gSaveContext.save.weekEventReg[73] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_80)) { return 0x222; } - if (gSaveContext.save.weekEventReg[73] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_20)) { return 0x221; } - if (gSaveContext.save.weekEventReg[77] & 2) { - if (gSaveContext.save.weekEventReg[73] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_02)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10)) { return 0x240; } return 0x241; } - if ((gSaveContext.save.weekEventReg[86] & 2) || (gSaveContext.save.weekEventReg[73] & 0x40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_86_02) || CHECK_WEEKEVENTREG(WEEKEVENTREG_73_40)) { return 0x23F; } diff --git a/src/code/z_en_a_keep.c b/src/code/z_en_a_keep.c index 267da4e40..a9bd49f6f 100644 --- a/src/code/z_en_a_keep.c +++ b/src/code/z_en_a_keep.c @@ -1,21 +1,65 @@ #include "global.h" +#include "assets/objects/gameplay_keep/gameplay_keep.h" + +#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) #define THIS ((EnAObj*)thisx) -void EnAObj_Update1(EnAObj* this, PlayState* play); -void EnAObj_Update2(EnAObj* this, PlayState* play); +void EnAObj_Init(Actor* thisx, PlayState* play); +void EnAObj_Destroy(Actor* thisx, PlayState* play); +void EnAObj_Update(Actor* thisx, PlayState* play); +void EnAObj_Draw(Actor* thisx, PlayState* play); + +void EnAObj_Idle(EnAObj* this, PlayState* play); +void EnAObj_Talk(EnAObj* this, PlayState* play); + +ActorInit En_A_Obj_InitVars = { + ACTOR_EN_A_OBJ, + ACTORCAT_PROP, + FLAGS, + GAMEPLAY_KEEP, + sizeof(EnAObj), + (ActorFunc)EnAObj_Init, + (ActorFunc)EnAObj_Destroy, + (ActorFunc)EnAObj_Update, + (ActorFunc)EnAObj_Draw, +}; + +static ColliderCylinderInit sCylinderInit = { + { + COLTYPE_NONE, + AT_NONE, + AC_NONE, + OC1_ON | OC1_TYPE_ALL, + OC2_TYPE_2, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK0, + { 0x00000000, 0x00, 0x00 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_NONE, + BUMP_NONE, + OCELEM_ON, + }, + { 25, 60, 0, { 0, 0, 0 } }, +}; + +static InitChainEntry sInitChain[] = { + ICHAIN_U8(targetMode, 0, ICHAIN_STOP), +}; void EnAObj_Init(Actor* thisx, PlayState* play) { EnAObj* this = THIS; - this->actor.textId = ((this->actor.params >> 8) & 0xFF) | 0x300; - this->actor.params = (this->actor.params & 0xFF) - 9; - Actor_ProcessInitChain(&this->actor, &enAObjInitVar); + this->actor.textId = AOBJ_GET_TEXTID(&this->actor); + this->actor.params = AOBJ_GET_TYPE(&this->actor); + Actor_ProcessInitChain(&this->actor, sInitChain); ActorShape_Init(&this->actor.shape, 0, ActorShadow_DrawCircle, 12); - Collider_InitAndSetCylinder(play, &this->collision, &this->actor, &enAObjCylinderInit); + Collider_InitAndSetCylinder(play, &this->collision, &this->actor, &sCylinderInit); Collider_UpdateCylinder(&this->actor, &this->collision); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actionFunc = EnAObj_Update1; + this->actionFunc = EnAObj_Idle; } void EnAObj_Destroy(Actor* thisx, PlayState* play) { @@ -24,23 +68,23 @@ void EnAObj_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collision); } -void EnAObj_Update1(EnAObj* this, PlayState* play) { +void EnAObj_Idle(EnAObj* this, PlayState* play) { s32 yawDiff; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - this->actionFunc = EnAObj_Update2; + this->actionFunc = EnAObj_Talk; } else { yawDiff = ABS_ALT((s16)(this->actor.yawTowardsPlayer - this->actor.shape.rot.y)); - if ((yawDiff < 0x2800) || ((this->actor.params == 1) && (yawDiff > 0x5800))) { + if ((yawDiff < 0x2800) || ((this->actor.params == AOBJ_SIGNPOST_ARROW) && (yawDiff > 0x5800))) { func_800B863C(&this->actor, play); } } } -void EnAObj_Update2(EnAObj* this, PlayState* play) { +void EnAObj_Talk(EnAObj* this, PlayState* play) { if (Actor_TextboxIsClosing(&this->actor, play)) { - this->actionFunc = EnAObj_Update1; + this->actionFunc = EnAObj_Idle; } } @@ -52,6 +96,11 @@ void EnAObj_Update(Actor* thisx, PlayState* play) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->collision.base); } +static Gfx* sDLists[] = { + gSignRectangularDL, // AOBJ_SIGNPOST_OBLONG + gSignDirectionalDL, // AOBJ_SIGNPOST_ARROW +}; + void EnAObj_Draw(Actor* thisx, PlayState* play) { - Gfx_DrawDListOpa(play, enAObjDisplayLists[thisx->params]); + Gfx_DrawDListOpa(play, sDLists[thisx->params]); } diff --git a/src/code/z_en_hy_code.c b/src/code/z_en_hy_code.c index 19a52c1b4..01ec9eca3 100644 --- a/src/code/z_en_hy_code.c +++ b/src/code/z_en_hy_code.c @@ -140,7 +140,7 @@ void func_800F0BB4(EnHy* enHy, PlayState* play, EnDoor* door, s16 arg3, s16 arg4 EnHy_ChangeObjectAndAnim(enHy, play, (animIndex == 0) ? arg3 : arg4); enHy->skelAnime.baseTransl = *enHy->skelAnime.jointTable; enHy->skelAnime.prevTransl = *enHy->skelAnime.jointTable; - enHy->skelAnime.moveFlags |= 3; + enHy->skelAnime.moveFlags |= (ANIM_FLAG_UPDATEY | ANIM_FLAG_1); AnimationContext_SetMoveActor(play, &enHy->actor, &enHy->skelAnime, 1.0f); door->unk_1A1 = 1; door->animIndex = animIndex; diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index 944e650a0..f450db014 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -819,7 +819,7 @@ void EnItem00_DrawSprite(EnItem00* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); if (this->actor.params == ITEM00_NUTS_10) { texIndex = 6; diff --git a/src/code/z_fbdemo.c b/src/code/z_fbdemo.c index 3d33399e5..c145087a2 100644 --- a/src/code/z_fbdemo.c +++ b/src/code/z_fbdemo.c @@ -5,13 +5,13 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo/func_8016418C.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo/func_8016424C.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo/TransitionUnk_Destroy.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo/func_801642D8.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo/TransitionUnk_Init.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo/func_80164438.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo/func_8016454C.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo/TransitionUnk_Draw.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo/func_80164678.s") diff --git a/src/code/z_fireobj.c b/src/code/z_fireobj.c index d0b88b3db..e4f014ffa 100644 --- a/src/code/z_fireobj.c +++ b/src/code/z_fireobj.c @@ -118,7 +118,7 @@ void FireObj_UpdateStateTransitions(PlayState* play, FireObj* fire) { (waterY - fire->position.y > 6500.0f * fire->yScale)) { FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_3); } - if ((fire->flags & 2) && (player->itemActionParam == PLAYER_AP_STICK)) { + if ((fire->flags & 2) && (player->heldItemAction == PLAYER_IA_STICK)) { Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, &fire->position, &dist); if (Math3D_LengthSquared(&dist) < 400.0f) { sp40 = true; diff --git a/src/code/z_game_over.c b/src/code/z_game_over.c index 857250eec..1e87a6a17 100644 --- a/src/code/z_game_over.c +++ b/src/code/z_game_over.c @@ -29,7 +29,7 @@ void GameOver_Update(PlayState* play) { gSaveContext.timerStates[timerId] = TIMER_STATE_OFF; } - gSaveContext.eventInf[1] &= ~1; + CLEAR_EVENTINF_ALT(EVENTINF_10); if (CUR_FORM == 0) { if (CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_SWORD_KOKIRI && @@ -73,7 +73,7 @@ void GameOver_Update(PlayState* play) { if (gSaveContext.respawnFlag != -7) { gSaveContext.respawnFlag = -6; } - gSaveContext.nextTransitionType = TRANS_TYPE_02; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; gSaveContext.save.playerData.health = 0x30; gameOverCtx->state++; if (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU) { diff --git a/src/code/z_kaleido_scope_call.c b/src/code/z_kaleido_scope_call.c index 5ab466ddc..59fde2f2d 100644 --- a/src/code/z_kaleido_scope_call.c +++ b/src/code/z_kaleido_scope_call.c @@ -50,7 +50,7 @@ void KaleidoScopeCall_Update(PlayState* play) { pauseCtx->state = (pauseCtx->state & 0xFFFF) + 1; } else if ((pauseCtx->state == PAUSE_STATE_OPENING_1) || (pauseCtx->state == PAUSE_STATE_GAMEOVER_1) || (pauseCtx->state == PAUSE_STATE_OWLWARP_1)) { - if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_DONE) { + if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_READY) { pauseCtx->state++; } } else if (pauseCtx->state != PAUSE_STATE_OFF) { @@ -77,7 +77,7 @@ void KaleidoScopeCall_Update(PlayState* play) { void KaleidoScopeCall_Draw(PlayState* play) { KaleidoMgrOverlay* kaleidoScopeOvl = &gKaleidoMgrOverlayTable[KALEIDO_OVL_KALEIDO_SCOPE]; - if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_DONE) { + if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_READY) { if (((play->pauseCtx.state >= PAUSE_STATE_OPENING_3) && (play->pauseCtx.state <= PAUSE_STATE_SAVEPROMPT)) || ((play->pauseCtx.state >= PAUSE_STATE_GAMEOVER_3) && (play->pauseCtx.state <= PAUSE_STATE_UNPAUSE_SETUP))) { if (gKaleidoMgrCurOvl == kaleidoScopeOvl) { diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c index 475de9819..dac0d8300 100644 --- a/src/code/z_kaleido_setup.c +++ b/src/code/z_kaleido_setup.c @@ -96,9 +96,9 @@ void KaleidoSetup_Update(PlayState* play) { if (!Play_InCsMode(play) || ((msgCtx->msgMode != 0) && (msgCtx->currentTextId == 0xFF))) { if ((play->unk_1887C < 2) && (gSaveContext.magicState != MAGIC_STATE_STEP_CAPACITY) && (gSaveContext.magicState != MAGIC_STATE_FILL)) { - if (!(gSaveContext.eventInf[1] & 0x80) && !(player->stateFlags1 & PLAYER_STATE1_20)) { + if (!CHECK_EVENTINF(EVENTINF_17) && !(player->stateFlags1 & PLAYER_STATE1_20)) { if (!(play->actorCtx.flags & ACTORCTX_FLAG_1) && - !(play->actorCtx.flags & ACTORCTX_FLAG_2)) { + !(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) { if ((play->actorCtx.unk268 == 0) && CHECK_BTN_ALL(input->press.button, BTN_START)) { gSaveContext.prevHudVisibility = gSaveContext.hudVisibility; pauseCtx->itemDescriptionOn = false; diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c index ad66fe4a1..d6d38f9d6 100644 --- a/src/code/z_kankyo.c +++ b/src/code/z_kankyo.c @@ -4,7 +4,7 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F50D4.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_Init.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Init.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5954.s") @@ -12,7 +12,7 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5B10.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5CD0.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateSkybox.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6834.s") @@ -42,11 +42,11 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8A9C.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8CD4.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Update.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8D84.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F9728.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSunLensFlare.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F9824.s") @@ -54,7 +54,7 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FA3C4.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FA9FC.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawRain.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FAAB4.s") @@ -72,7 +72,7 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB9B4.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FBCBC.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawCustomLensFlare.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_InitGameOverLights.s") @@ -82,9 +82,9 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FC3DC.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FC444.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_FillScreen.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FC64C.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSandstorm.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD2B4.s") @@ -124,11 +124,11 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE3E0.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE484.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StopTime.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE498.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StartTime.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE4A8.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_IsTimeStopped.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE4B8.s") diff --git a/src/code/z_lib.c b/src/code/z_lib.c index 6466b337c..136918765 100644 --- a/src/code/z_lib.c +++ b/src/code/z_lib.c @@ -251,7 +251,7 @@ void func_800FF3A0(f32* distOut, s16* angleOut, Input* input) { if (dist > 0.0f) { x = input->cur.stick_x; y = input->cur.stick_y; - *angleOut = Math_FAtan2F(y, -x); + *angleOut = Math_Atan2S_XY(y, -x); } else { *angleOut = 0; } @@ -420,11 +420,11 @@ f32 Math_Vec3f_DiffY(Vec3f* a, Vec3f* b) { s16 Math_Vec3f_Yaw(Vec3f* a, Vec3f* b) { f32 f14 = b->x - a->x; f32 f12 = b->z - a->z; - return Math_FAtan2F(f12, f14); + return Math_Atan2S_XY(f12, f14); } s16 Math_Vec3f_Pitch(Vec3f* a, Vec3f* b) { - return Math_FAtan2F(Math_Vec3f_DistXZ(a, b), a->y - b->y); + return Math_Atan2S_XY(Math_Vec3f_DistXZ(a, b), a->y - b->y); } void IChain_Apply_u8(u8* ptr, InitChainEntry* ichain); diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c index d4927ae97..b123baab6 100644 --- a/src/code/z_lifemeter.c +++ b/src/code/z_lifemeter.c @@ -36,7 +36,7 @@ TexturePtr HeartDDTextures[] = { void LifeMeter_Init(PlayState* play) { InterfaceContext* interfaceCtx = &play->interfaceCtx; - interfaceCtx->unkTimer = 320; + interfaceCtx->healthTimer = 320; interfaceCtx->health = gSaveContext.save.playerData.health; @@ -167,39 +167,44 @@ void LifeMeter_UpdateColors(PlayState* play) { sBeatingHeartsDDEnv[2] = (u8)(bFactor + 0) & 0xFF; } +// Unused s32 LifeMeter_SaveInterfaceHealth(PlayState* play) { - gSaveContext.save.playerData.health = play->interfaceCtx.health; + InterfaceContext* interfaceCtx = &play->interfaceCtx; + + gSaveContext.save.playerData.health = interfaceCtx->health; return 1; } +// Unused s32 LifeMeter_IncreaseInterfaceHealth(PlayState* play) { InterfaceContext* interfaceCtx = &play->interfaceCtx; - interfaceCtx->unkTimer = 320; + interfaceCtx->healthTimer = 320; interfaceCtx->health += 0x10; if (play->interfaceCtx.health >= gSaveContext.save.playerData.health) { play->interfaceCtx.health = gSaveContext.save.playerData.health; - return 1; + return true; } - return 0; + return false; } +// Unused s32 LifeMeter_DecreaseInterfaceHealth(PlayState* play) { InterfaceContext* interfaceCtx = &play->interfaceCtx; - if (interfaceCtx->unkTimer != 0) { - interfaceCtx->unkTimer--; + if (interfaceCtx->healthTimer != 0) { + interfaceCtx->healthTimer--; } else { - interfaceCtx->unkTimer = 320; + interfaceCtx->healthTimer = 320; interfaceCtx->health -= 0x10; if (interfaceCtx->health <= 0) { interfaceCtx->health = 0; play->damagePlayer(play, -(((void)0, gSaveContext.save.playerData.health) + 1)); - return 1; + return true; } } - return 0; + return false; } void LifeMeter_Draw(PlayState* play) { @@ -230,6 +235,7 @@ void LifeMeter_Draw(PlayState* play) { if ((gSaveContext.save.playerData.health % 0x10) == 0) { fullHeartCount--; } + offsetY = 0.0f; offsetX = 0.0f; curColorSet = -1; @@ -376,12 +382,13 @@ void LifeMeter_Draw(PlayState* play) { } } mtx = GRAPH_ALLOC(gfxCtx, sizeof(Mtx)); - func_801780F0(mtx, 1.0f - (0.32f * lifesize), 1.0f - (0.32f * lifesize), 1.0f - (0.32f * lifesize), - -130.0f + offsetX, 94.5f - offsetY, 0.0f); + Mtx_SetTranslateScaleMtx(mtx, 1.0f - (0.32f * lifesize), 1.0f - (0.32f * lifesize), + 1.0f - (0.32f * lifesize), -130.0f + offsetX, 94.5f - offsetY, 0.0f); gSPMatrix(OVERLAY_DISP++, mtx, G_MTX_LOAD | G_MTX_MODELVIEW); gSPVertex(OVERLAY_DISP++, beatingHeartVtx, 4, 0); gSP1Quadrangle(OVERLAY_DISP++, 0, 2, 3, 1, 0); } + offsetX += 10.0f; if (i == 9) { offsetY += 10.0f; @@ -418,10 +425,8 @@ u32 LifeMeter_IsCritical(void) { if (gSaveContext.save.playerData.healthCapacity <= 0x50) { criticalThreshold = 0x10; - } else if (gSaveContext.save.playerData.healthCapacity <= 0xA0) { criticalThreshold = 0x18; - } else if (gSaveContext.save.playerData.healthCapacity <= 0xF0) { criticalThreshold = 0x20; } else { diff --git a/src/code/z_lights.c b/src/code/z_lights.c index e3e732eb3..6a31c7e94 100644 --- a/src/code/z_lights.c +++ b/src/code/z_lights.c @@ -251,7 +251,7 @@ void Lights_FreeNode(LightNode* light) { void LightContext_Init(PlayState* play, LightContext* lightCtx) { LightContext_InitList(play, lightCtx); LightContext_SetAmbientColor(lightCtx, 80, 80, 80); - func_80102544(lightCtx, 0, 0, 0, 0x3E4, 0x3200); + LightContext_SetFog(lightCtx, 0, 0, 0, 996, 12800); bzero(&sLightsBuffer, sizeof(LightsBuffer)); } @@ -261,12 +261,12 @@ void LightContext_SetAmbientColor(LightContext* lightCtx, u8 r, u8 g, u8 b) { lightCtx->ambient.b = b; } -void func_80102544(LightContext* lightCtx, u8 a1, u8 a2, u8 a3, s16 numLights, s16 sp16) { - lightCtx->unk7 = a1; - lightCtx->unk8 = a2; - lightCtx->unk9 = a3; - lightCtx->unkA = numLights; - lightCtx->unkC = sp16; +void LightContext_SetFog(LightContext* lightCtx, u8 r, u8 g, u8 b, s16 near, s16 far) { + lightCtx->fogColor.r = r; + lightCtx->fogColor.g = g; + lightCtx->fogColor.b = b; + lightCtx->fogNear = near; + lightCtx->zFar = far; } /** diff --git a/src/code/z_message.c b/src/code/z_message.c index 5b3598617..97db5e72d 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -322,9 +322,9 @@ void func_80151938(PlayState* play, u16 textId) { if (interfaceCtx->unk_222 == 0) { if (textId != 0x1B93) { - func_8011552C(play, 0x10); + func_8011552C(play, DO_ACTION_NEXT); } else if (textId != 0xF8) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); } } msgCtx->unk1203C = msgCtx->unk1203A; @@ -370,12 +370,12 @@ void func_80151BB4(PlayState* play, u8 arg1) { u8 temp = arg1; if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { - if ((gSaveContext.save.weekEventReg[D_801C6B28[arg1] >> 8] & (u8)D_801C6B28[arg1]) == 0) { + if (!CHECK_WEEKEVENTREG(D_801C6B28[arg1])) { msgCtx->unk120B2[msgCtx->unk120B1] = temp; msgCtx->unk120B1++; } } else if (arg1 >= 20) { - if ((gSaveContext.save.weekEventReg[D_801C6B28[arg1] >> 8] & (u8)D_801C6B28[arg1]) == 0) { + if (!CHECK_WEEKEVENTREG(D_801C6B28[arg1])) { msgCtx->unk120B2[msgCtx->unk120B1] = temp; msgCtx->unk120B1++; } @@ -391,11 +391,8 @@ u32 func_80151C9C(PlayState* play) { } msgCtx->unk120B1--; - if ((gSaveContext.save.weekEventReg[D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]] >> 8] & - (u8)D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]]) == 0) { - gSaveContext.save.weekEventReg[D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]] >> 8] = - ((void)0, gSaveContext.save.weekEventReg[D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]] >> 8]) | - (u8)D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]]; + if (!CHECK_WEEKEVENTREG(D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]])) { + SET_WEEKEVENTREG(D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]]); if ((D_801C6AB8[msgCtx->unk120B2[msgCtx->unk120B1]] != 0) && CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { func_80151938(play, D_801C6AB8[msgCtx->unk120B2[msgCtx->unk120B1]]); @@ -534,7 +531,7 @@ void func_80153E7C(PlayState* play, void* arg1) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801541D4.s") -void func_80156758(PlayState* play) { +void Message_Draw(PlayState* play) { Gfx* nextDisplayList; Gfx* polyOpa; GraphicsContext* gfxCtx = play->state.gfxCtx; @@ -554,7 +551,7 @@ void func_80156758(PlayState* play) { CLOSE_DISPS(gfxCtx); } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8015680C.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_Update.s") void func_801586A4(PlayState* play) { play->msgCtx.messageEntryTableNes = D_801C6B98; diff --git a/src/code/z_message_nes.c b/src/code/z_message_nes.c index fb8dbfcbf..759c3d611 100644 --- a/src/code/z_message_nes.c +++ b/src/code/z_message_nes.c @@ -212,13 +212,9 @@ void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16* s16 i; if (arg1 == 0xCF) { - // Calculates the time left before the moon crashes. - // The day begins at CLOCK_TIME(6, 0) so it must be offset. - timeLeft = (4 - CURRENT_DAY) * DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0)); + timeLeft = TIME_UNTIL_MOON_CRASH; } else { - // Calculates the time left before a new day. - // The day begins at CLOCK_TIME(6, 0) so it must be offset. - timeLeft = DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0)); + timeLeft = TIME_UNTIL_NEW_DAY; } timeLeftInMinutes = TIME_TO_MINUTES_F(timeLeft); diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index a49844e5b..f3bfb530f 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -7,6 +7,13 @@ #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" #include "overlays/actors/ovl_En_Mm3/z_en_mm3.h" +typedef enum { + /* 0 */ PICTO_BOX_STATE_OFF, // Not using the pictograph + /* 1 */ PICTO_BOX_STATE_LENS, // Looking through the lens of the pictograph + /* 2 */ PICTO_BOX_STATE_SETUP_PHOTO, // Looking at the photo currently taken + /* 3 */ PICTO_BOX_STATE_PHOTO +} PictoBoxState; + typedef struct { /* 0x00 */ u8 scene; /* 0x01 */ u8 flags1; @@ -16,124 +23,169 @@ typedef struct { Input sPostmanTimerInput[4]; -RestrictionFlags sRestrictionFlags[] = { - { SCENE_20SICHITAI2, 0x00, 0x00, 0x00 }, - { SCENE_UNSET_1, 0x00, 0x00, 0x00 }, - { SCENE_UNSET_2, 0x00, 0x00, 0x00 }, - { SCENE_UNSET_3, 0x00, 0x00, 0x00 }, - { SCENE_UNSET_4, 0x00, 0x00, 0x00 }, - { SCENE_UNSET_5, 0x00, 0x00, 0x00 }, - { SCENE_UNSET_6, 0x00, 0x00, 0x00 }, - { SCENE_KAKUSIANA, 0x00, 0x00, 0x00 }, - { SCENE_SPOT00, 0x00, 0x00, 0x00 }, - { SCENE_UNSET_9, 0x00, 0x00, 0x00 }, - { SCENE_WITCH_SHOP, 0x10, 0x30, 0xC1 }, - { SCENE_LAST_BS, 0x00, 0x3F, 0x00 }, - { SCENE_HAKASHITA, 0x00, 0x00, 0x00 }, - { SCENE_AYASHIISHOP, 0x10, 0x30, 0xC1 }, - { SCENE_UNSET_E, 0x00, 0x00, 0x00 }, - { SCENE_UNSET_F, 0x00, 0x00, 0x00 }, - { SCENE_OMOYA, 0x00, 0x33, 0x00 }, - { SCENE_BOWLING, 0x10, 0x30, 0xC1 }, - { SCENE_SONCHONOIE, 0x10, 0x30, 0xC1 }, - { SCENE_IKANA, 0x00, 0x00, 0x00 }, - { SCENE_KAIZOKU, 0x00, 0x00, 0x00 }, - { SCENE_MILK_BAR, 0x10, 0x30, 0xC1 }, - { SCENE_INISIE_N, 0x00, 0x00, 0x00 }, - { SCENE_TAKARAYA, 0x10, 0x30, 0xC1 }, - { SCENE_INISIE_R, 0x00, 0x00, 0x00 }, - { SCENE_OKUJOU, 0x00, 0x3F, 0xF0 }, - { SCENE_OPENINGDAN, 0x00, 0x00, 0x00 }, - { SCENE_MITURIN, 0x00, 0x00, 0x00 }, - { SCENE_13HUBUKINOMITI, 0x00, 0x00, 0x00 }, - { SCENE_CASTLE, 0x00, 0x00, 0x00 }, - { SCENE_DEKUTES, 0x10, 0x30, 0x01 }, - { SCENE_MITURIN_BS, 0x00, 0x00, 0x00 }, - { SCENE_SYATEKI_MIZU, 0x10, 0x30, 0xC1 }, - { SCENE_HAKUGIN, 0x00, 0x00, 0x00 }, - { SCENE_ROMANYMAE, 0x00, 0x00, 0x00 }, - { SCENE_PIRATE, 0x00, 0x00, 0x00 }, - { SCENE_SYATEKI_MORI, 0x10, 0x30, 0xC1 }, - { SCENE_SINKAI, 0x00, 0x00, 0x00 }, - { SCENE_YOUSEI_IZUMI, 0x00, 0x00, 0x00 }, - { SCENE_KINSTA1, 0x00, 0x30, 0x00 }, - { SCENE_KINDAN2, 0x00, 0x30, 0x00 }, - { SCENE_TENMON_DAI, 0x00, 0x03, 0xC0 }, - { SCENE_LAST_DEKU, 0x00, 0x3F, 0x00 }, - { SCENE_22DEKUCITY, 0x00, 0x00, 0x00 }, - { SCENE_KAJIYA, 0x00, 0x30, 0xC0 }, - { SCENE_00KEIKOKU, 0x00, 0x00, 0x00 }, - { SCENE_POSTHOUSE, 0x00, 0x30, 0xC1 }, - { SCENE_LABO, 0x00, 0x30, 0xC1 }, - { SCENE_DANPEI2TEST, 0x00, 0x30, 0x00 }, - { SCENE_UNSET_31, 0x00, 0x00, 0x00 }, - { SCENE_16GORON_HOUSE, 0x00, 0x00, 0x00 }, - { SCENE_33ZORACITY, 0x00, 0x00, 0xC0 }, - { SCENE_8ITEMSHOP, 0x00, 0x30, 0xC1 }, - { SCENE_F01, 0x00, 0x00, 0x00 }, - { SCENE_INISIE_BS, 0x00, 0x00, 0x00 }, - { SCENE_30GYOSON, 0x00, 0x00, 0x00 }, - { SCENE_31MISAKI, 0x00, 0x00, 0x00 }, - { SCENE_TAKARAKUJI, 0x00, 0x30, 0xC1 }, - { SCENE_UNSET_3A, 0x00, 0x00, 0x00 }, - { SCENE_TORIDE, 0x00, 0x00, 0x00 }, - { SCENE_FISHERMAN, 0x00, 0x30, 0xC1 }, - { SCENE_GORONSHOP, 0x10, 0x30, 0xC1 }, - { SCENE_DEKU_KING, 0x00, 0x30, 0xC0 }, - { SCENE_LAST_GORON, 0x00, 0x3F, 0x00 }, - { SCENE_24KEMONOMITI, 0x00, 0x00, 0x00 }, - { SCENE_F01_B, 0x00, 0x30, 0x00 }, - { SCENE_F01C, 0x00, 0x30, 0x00 }, - { SCENE_BOTI, 0x00, 0x00, 0x00 }, - { SCENE_HAKUGIN_BS, 0x00, 0x00, 0x00 }, - { SCENE_20SICHITAI, 0x00, 0x00, 0x00 }, - { SCENE_21MITURINMAE, 0x00, 0x00, 0x00 }, - { SCENE_LAST_ZORA, 0x00, 0x3F, 0x00 }, - { SCENE_11GORONNOSATO2, 0x00, 0x00, 0x00 }, - { SCENE_SEA, 0x00, 0x00, 0x00 }, - { SCENE_35TAKI, 0x00, 0x00, 0x00 }, - { SCENE_REDEAD, 0x00, 0x00, 0x00 }, - { SCENE_BANDROOM, 0x00, 0x30, 0xC0 }, - { SCENE_11GORONNOSATO, 0x00, 0x00, 0x00 }, - { SCENE_GORON_HAKA, 0x00, 0x00, 0x00 }, - { SCENE_SECOM, 0x00, 0x3C, 0xC0 }, - { SCENE_10YUKIYAMANOMURA, 0x00, 0x00, 0x00 }, - { SCENE_TOUGITES, 0x00, 0x3F, 0xF0 }, - { SCENE_DANPEI, 0x00, 0x30, 0x00 }, - { SCENE_IKANAMAE, 0x00, 0x00, 0x00 }, - { SCENE_DOUJOU, 0x00, 0x30, 0xC1 }, - { SCENE_MUSICHOUSE, 0x00, 0x30, 0xC0 }, - { SCENE_IKNINSIDE, 0x00, 0x3F, 0xC0 }, - { SCENE_MAP_SHOP, 0x10, 0x30, 0xC1 }, - { SCENE_F40, 0x00, 0x00, 0x00 }, - { SCENE_F41, 0x00, 0x00, 0x00 }, - { SCENE_10YUKIYAMANOMURA2, 0x00, 0x00, 0x00 }, - { SCENE_14YUKIDAMANOMITI, 0x00, 0x00, 0x00 }, - { SCENE_12HAKUGINMAE, 0x00, 0x00, 0x00 }, - { SCENE_17SETUGEN, 0x00, 0x00, 0x00 }, - { SCENE_17SETUGEN2, 0x00, 0x00, 0x00 }, - { SCENE_SEA_BS, 0x00, 0x00, 0x00 }, - { SCENE_RANDOM, 0x00, 0x00, 0x00 }, - { SCENE_YADOYA, 0x10, 0x30, 0xC1 }, - { SCENE_KONPEKI_ENT, 0x00, 0x00, 0x00 }, - { SCENE_INSIDETOWER, 0x00, 0xFF, 0xC0 }, - { SCENE_26SARUNOMORI, 0x00, 0x30, 0x00 }, - { SCENE_LOST_WOODS, 0x00, 0x00, 0x00 }, - { SCENE_LAST_LINK, 0x00, 0x3F, 0x00 }, - { SCENE_SOUGEN, 0x00, 0x3F, 0x00 }, - { SCENE_BOMYA, 0x10, 0x30, 0xC1 }, - { SCENE_KYOJINNOMA, 0x00, 0x00, 0x00 }, - { SCENE_KOEPONARACE, 0x00, 0x30, 0x00 }, - { SCENE_GORONRACE, 0x00, 0x00, 0x00 }, - { SCENE_TOWN, 0x00, 0x00, 0x00 }, - { SCENE_ICHIBA, 0x00, 0x00, 0x00 }, - { SCENE_BACKTOWN, 0x00, 0x00, 0x00 }, - { SCENE_CLOCKTOWER, 0x00, 0x00, 0x00 }, - { SCENE_ALLEY, 0x00, 0x00, 0x00 }, -}; +#define RESTRICTIONS_TABLE_END 0xFF -s16 D_801BF884 = 0; // pictoBox related -s16 D_801BF888 = false; // pictoBox related +#define RESTRICTIONS_GET_BITS(flags, s) (((flags) & (3 << (s))) >> (s)) + +// does nothing +#define RESTRICTIONS_GET_HGAUGE(flags) RESTRICTIONS_GET_BITS((flags)->flags1, 6) +// 0 = usable, !0 = unusable +#define RESTRICTIONS_GET_B_BUTTON(flags) RESTRICTIONS_GET_BITS((flags)->flags1, 4) +// does nothing +#define RESTRICTIONS_GET_A_BUTTON(flags) RESTRICTIONS_GET_BITS((flags)->flags1, 2) +// 0 = usable, !0 = unusable +#define RESTRICTIONS_GET_TRADE_ITEMS(flags) RESTRICTIONS_GET_BITS((flags)->flags1, 0) +// 0 = usable, !0 = unusable +#define RESTRICTIONS_GET_SONG_OF_TIME(flags) RESTRICTIONS_GET_BITS((flags)->flags2, 6) +// 0 = usable, !0 = unusable +#define RESTRICTIONS_GET_SONG_OF_DOUBLE_TIME(flags) RESTRICTIONS_GET_BITS((flags)->flags2, 4) +// 0 = usable, !0 = unusable +#define RESTRICTIONS_GET_INV_SONG_OF_TIME(flags) RESTRICTIONS_GET_BITS((flags)->flags2, 2) +// 0 = usable, !0 = unusable +#define RESTRICTIONS_GET_SONG_OF_SOARING(flags) RESTRICTIONS_GET_BITS((flags)->flags2, 0) +// 0 = usable, !0 = unusable +#define RESTRICTIONS_GET_SONG_OF_STORMS(flags) RESTRICTIONS_GET_BITS((flags)->flags3, 6) +// 0 = usable, !0 = unusable +#define RESTRICTIONS_GET_MASKS(flags) RESTRICTIONS_GET_BITS((flags)->flags3, 4) +// 0 = usable, !0 = unusable +#define RESTRICTIONS_GET_PICTO_BOX(flags) RESTRICTIONS_GET_BITS((flags)->flags3, 2) +// 0 = usable, !0 = unusable +#define RESTRICTIONS_GET_ALL(flags) RESTRICTIONS_GET_BITS((flags)->flags3, 0) + +#define RESTRICTIONS_SET(hGauge, bButton, aButton, tradeItems, songOfTime, songOfDoubleTime, invSongOfTime, \ + songOfSoaring, songOfStorms, masks, pictoBox, all) \ + ((((hGauge)&3) << 6) | (((bButton)&3) << 4) | (((aButton)&3) << 2) | (((tradeItems)&3) << 0)), \ + ((((songOfTime)&3) << 6) | (((songOfDoubleTime)&3) << 4) | (((invSongOfTime)&3) << 2) | \ + (((songOfSoaring)&3) << 0)), \ + ((((songOfStorms)&3) << 6) | (((masks)&3) << 4) | (((pictoBox)&3) << 2) | (((all)&3) << 0)) + +// Common patterns +#define RESTRICTIONS_NONE RESTRICTIONS_SET(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) +#define RESTRICTIONS_INDOORS RESTRICTIONS_SET(0, 1, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) +#define RESTRICTIONS_MOON RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0) +#define RESTRICTIONS_NO_DOUBLE_TIME RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0) + +RestrictionFlags sRestrictionFlags[] = { + { SCENE_20SICHITAI2, RESTRICTIONS_NONE }, + { SCENE_UNSET_1, RESTRICTIONS_NONE }, + { SCENE_UNSET_2, RESTRICTIONS_NONE }, + { SCENE_UNSET_3, RESTRICTIONS_NONE }, + { SCENE_UNSET_4, RESTRICTIONS_NONE }, + { SCENE_UNSET_5, RESTRICTIONS_NONE }, + { SCENE_UNSET_6, RESTRICTIONS_NONE }, + { SCENE_KAKUSIANA, RESTRICTIONS_NONE }, + { SCENE_SPOT00, RESTRICTIONS_NONE }, + { SCENE_UNSET_9, RESTRICTIONS_NONE }, + { SCENE_WITCH_SHOP, RESTRICTIONS_INDOORS }, + { SCENE_LAST_BS, RESTRICTIONS_MOON }, + { SCENE_HAKASHITA, RESTRICTIONS_NONE }, + { SCENE_AYASHIISHOP, RESTRICTIONS_INDOORS }, + { SCENE_UNSET_E, RESTRICTIONS_NONE }, + { SCENE_UNSET_F, RESTRICTIONS_NONE }, + { SCENE_OMOYA, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0) }, + { SCENE_BOWLING, RESTRICTIONS_INDOORS }, + { SCENE_SONCHONOIE, RESTRICTIONS_INDOORS }, + { SCENE_IKANA, RESTRICTIONS_NONE }, + { SCENE_KAIZOKU, RESTRICTIONS_NONE }, + { SCENE_MILK_BAR, RESTRICTIONS_INDOORS }, + { SCENE_INISIE_N, RESTRICTIONS_NONE }, + { SCENE_TAKARAYA, RESTRICTIONS_INDOORS }, + { SCENE_INISIE_R, RESTRICTIONS_NONE }, + { SCENE_OKUJOU, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0) }, + { SCENE_OPENINGDAN, RESTRICTIONS_NONE }, + { SCENE_MITURIN, RESTRICTIONS_NONE }, + { SCENE_13HUBUKINOMITI, RESTRICTIONS_NONE }, + { SCENE_CASTLE, RESTRICTIONS_NONE }, + { SCENE_DEKUTES, RESTRICTIONS_SET(0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1) }, + { SCENE_MITURIN_BS, RESTRICTIONS_NONE }, + { SCENE_SYATEKI_MIZU, RESTRICTIONS_INDOORS }, + { SCENE_HAKUGIN, RESTRICTIONS_NONE }, + { SCENE_ROMANYMAE, RESTRICTIONS_NONE }, + { SCENE_PIRATE, RESTRICTIONS_NONE }, + { SCENE_SYATEKI_MORI, RESTRICTIONS_INDOORS }, + { SCENE_SINKAI, RESTRICTIONS_NONE }, + { SCENE_YOUSEI_IZUMI, RESTRICTIONS_NONE }, + { SCENE_KINSTA1, RESTRICTIONS_NO_DOUBLE_TIME }, + { SCENE_KINDAN2, RESTRICTIONS_NO_DOUBLE_TIME }, + { SCENE_TENMON_DAI, RESTRICTIONS_SET(0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0) }, + { SCENE_LAST_DEKU, RESTRICTIONS_MOON }, + { SCENE_22DEKUCITY, RESTRICTIONS_NONE }, + { SCENE_KAJIYA, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0) }, + { SCENE_00KEIKOKU, RESTRICTIONS_NONE }, + { SCENE_POSTHOUSE, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, + { SCENE_LABO, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, + { SCENE_DANPEI2TEST, RESTRICTIONS_NO_DOUBLE_TIME }, + { SCENE_UNSET_31, RESTRICTIONS_NONE }, + { SCENE_16GORON_HOUSE, RESTRICTIONS_NONE }, + { SCENE_33ZORACITY, RESTRICTIONS_SET(0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0) }, + { SCENE_8ITEMSHOP, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, + { SCENE_F01, RESTRICTIONS_NONE }, + { SCENE_INISIE_BS, RESTRICTIONS_NONE }, + { SCENE_30GYOSON, RESTRICTIONS_NONE }, + { SCENE_31MISAKI, RESTRICTIONS_NONE }, + { SCENE_TAKARAKUJI, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, + { SCENE_UNSET_3A, RESTRICTIONS_NONE }, + { SCENE_TORIDE, RESTRICTIONS_NONE }, + { SCENE_FISHERMAN, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, + { SCENE_GORONSHOP, RESTRICTIONS_INDOORS }, + { SCENE_DEKU_KING, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0) }, + { SCENE_LAST_GORON, RESTRICTIONS_MOON }, + { SCENE_24KEMONOMITI, RESTRICTIONS_NONE }, + { SCENE_F01_B, RESTRICTIONS_NO_DOUBLE_TIME }, + { SCENE_F01C, RESTRICTIONS_NO_DOUBLE_TIME }, + { SCENE_BOTI, RESTRICTIONS_NONE }, + { SCENE_HAKUGIN_BS, RESTRICTIONS_NONE }, + { SCENE_20SICHITAI, RESTRICTIONS_NONE }, + { SCENE_21MITURINMAE, RESTRICTIONS_NONE }, + { SCENE_LAST_ZORA, RESTRICTIONS_MOON }, + { SCENE_11GORONNOSATO2, RESTRICTIONS_NONE }, + { SCENE_SEA, RESTRICTIONS_NONE }, + { SCENE_35TAKI, RESTRICTIONS_NONE }, + { SCENE_REDEAD, RESTRICTIONS_NONE }, + { SCENE_BANDROOM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0) }, + { SCENE_11GORONNOSATO, RESTRICTIONS_NONE }, + { SCENE_GORON_HAKA, RESTRICTIONS_NONE }, + { SCENE_SECOM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 0, 3, 0, 0, 0) }, + { SCENE_10YUKIYAMANOMURA, RESTRICTIONS_NONE }, + { SCENE_TOUGITES, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0) }, + { SCENE_DANPEI, RESTRICTIONS_NO_DOUBLE_TIME }, + { SCENE_IKANAMAE, RESTRICTIONS_NONE }, + { SCENE_DOUJOU, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, + { SCENE_MUSICHOUSE, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0) }, + { SCENE_IKNINSIDE, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0) }, + { SCENE_MAP_SHOP, RESTRICTIONS_INDOORS }, + { SCENE_F40, RESTRICTIONS_NONE }, + { SCENE_F41, RESTRICTIONS_NONE }, + { SCENE_10YUKIYAMANOMURA2, RESTRICTIONS_NONE }, + { SCENE_14YUKIDAMANOMITI, RESTRICTIONS_NONE }, + { SCENE_12HAKUGINMAE, RESTRICTIONS_NONE }, + { SCENE_17SETUGEN, RESTRICTIONS_NONE }, + { SCENE_17SETUGEN2, RESTRICTIONS_NONE }, + { SCENE_SEA_BS, RESTRICTIONS_NONE }, + { SCENE_RANDOM, RESTRICTIONS_NONE }, + { SCENE_YADOYA, RESTRICTIONS_INDOORS }, + { SCENE_KONPEKI_ENT, RESTRICTIONS_NONE }, + { SCENE_INSIDETOWER, RESTRICTIONS_SET(0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0) }, + { SCENE_26SARUNOMORI, RESTRICTIONS_NO_DOUBLE_TIME }, + { SCENE_LOST_WOODS, RESTRICTIONS_NONE }, + { SCENE_LAST_LINK, RESTRICTIONS_MOON }, + { SCENE_SOUGEN, RESTRICTIONS_MOON }, + { SCENE_BOMYA, RESTRICTIONS_INDOORS }, + { SCENE_KYOJINNOMA, RESTRICTIONS_NONE }, + { SCENE_KOEPONARACE, RESTRICTIONS_NO_DOUBLE_TIME }, + { SCENE_GORONRACE, RESTRICTIONS_NONE }, + { SCENE_TOWN, RESTRICTIONS_NONE }, + { SCENE_ICHIBA, RESTRICTIONS_NONE }, + { SCENE_BACKTOWN, RESTRICTIONS_NONE }, + { SCENE_CLOCKTOWER, RESTRICTIONS_NONE }, + { SCENE_ALLEY, RESTRICTIONS_NONE }, + // { RESTRICTIONS_TABLE_END, RESTRICTIONS_NONE }, // See note below +}; +//! @note: in `Interface_SetSceneRestrictions`, `RESTRICTIONS_TABLE_END` act as a terminating value to +// stop looping through the array. If a scene is missing, then this will cause issues. + +s16 sPictoState = PICTO_BOX_STATE_OFF; +s16 sPictoPhotoBeingTaken = false; s16 sHBAScoreTier = 0; // Remnant of OoT, non-functional @@ -170,7 +222,7 @@ s16 sExtraItemBases[] = { ITEM_NUT, // ITEM_NUT_UPGRADE_30 }; -s16 sEnvTimerType = PLAYER_ENV_TIMER_NONE; +s16 sEnvHazard = PLAYER_ENV_HAZARD_NONE; s16 sEnvTimerActive = false; s16 sPostmanBunnyHoodState = POSTMAN_MINIGAME_BUNNY_HOOD_OFF; OSTime sTimerPausedOsTime = 0; @@ -191,7 +243,7 @@ s16 D_801BF97C = 255; f32 D_801BF980 = 1.0f; s32 D_801BF984 = 0; -Gfx D_801BF988[] = { +Gfx sScreenFillSetupDL[] = { gsDPPipeSync(), gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), @@ -222,48 +274,608 @@ s16 sFinalHoursClockFrameEnvBlue = 0; s16 sFinalHoursClockColorTimer = 15; s16 sFinalHoursClockColorTargetIndex = 0; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010CB80.s") +/** + * Draw a RGBA16 texture on a rectangle + * + * @param gfx the display list pointer + * @param texture + * @param textureWidth texture image width in texels + * @param textureHeight texture image height in texels + * @param rectLeft the x-coordinate of upper-left corner of rectangle + * @param rectTop the y-coordinate of upper-left corner of rectangle + * @param rectWidth rectangle width in texels + * @param rectHeight rectangle height in texels + * @param dsdx the change in s for each change in x (s5.10) + * @param dtdy the change in t for each change in y (s5.10) + * @return Gfx* the display list pointer + */ +Gfx* Gfx_DrawTexRectRGBA16(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, + s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy) { + gDPLoadTextureBlock(gfx++, texture, G_IM_FMT_RGBA, G_IM_SIZ_16b, textureWidth, textureHeight, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010CD98.s") + gSPTextureRectangle(gfx++, rectLeft << 2, rectTop << 2, (rectLeft + rectWidth) << 2, (rectTop + rectHeight) << 2, + G_TX_RENDERTILE, 0, 0, dsdx, dtdy); -Gfx* func_8010CFBC(Gfx* displayListHead, void* texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, - s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy, s16 r, s16 g, s16 b, s16 a); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010CFBC.s") + return gfx; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010D2D4.s") +/** + * Draw an IA8 texture on a rectangle + * + * @param gfx the display list pointer + * @param texture + * @param textureWidth texture image width in texels + * @param textureHeight texture image height in texels + * @param rectLeft the x-coordinate of upper-left corner of rectangle + * @param rectTop the y-coordinate of upper-left corner of rectangle + * @param rectWidth rectangle width in texels + * @param rectHeight rectangle height in texels + * @param dsdx the change in s for each change in x (s5.10) + * @param dtdy the change in t for each change in y (s5.10) + * @return Gfx* the display list pointer + */ +Gfx* Gfx_DrawTexRectIA8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, + s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy) { + gDPLoadTextureBlock(gfx++, texture, G_IM_FMT_IA, G_IM_SIZ_8b, textureWidth, textureHeight, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); -Gfx* func_8010D480(Gfx* displayListHead, void* texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, - s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy, s16 r, s16 g, s16 b, s16 a, s32 argE, s32 argF); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010D480.s") + gSPTextureRectangle(gfx++, rectLeft << 2, rectTop << 2, (rectLeft + rectWidth) << 2, (rectTop + rectHeight) << 2, + G_TX_RENDERTILE, 0, 0, dsdx, dtdy); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010D7D0.s") + return gfx; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010D9F4.s") +/** + * Draw an IA8 texture on a rectangle with a shadow slightly offset to the bottom-right + * + * @param gfx the display list pointer + * @param texture + * @param textureWidth texture image width in texels + * @param textureHeight texture image height in texels + * @param rectLeft the x-coordinate of upper-left corner of rectangle + * @param rectTop the y-coordinate of upper-left corner of rectangle + * @param rectWidth rectangle width in texels + * @param rectHeight rectangle height in texels + * @param dsdx the change in s for each change in x (s5.10) + * @param dtdy the change in t for each change in y (s5.10) + * @param r texture red + * @param g texture green + * @param b texture blue + * @param a texture alpha + * @return Gfx* the display list pointer + */ +Gfx* Gfx_DrawTexRectIA8_DropShadow(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, + s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy, s16 r, s16 g, s16 b, + s16 a) { + s16 dropShadowAlpha = a; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010DC58.s") + if (a > 100) { + dropShadowAlpha = 100; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010DE38.s") + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, dropShadowAlpha); -s16 D_801BFA04[] = { - -14, -14, -24, -8, -12, -12, -7, -8, -7, -8, -12, 0, -}; -s16 D_801BFA1C[] = { - 0x1C, 0x1C, 0x30, 0x10, 0x18, 0x18, 0x10, 0x10, 0x10, 0x10, 0x18, 0, -}; -s16 D_801BFA34[] = { - 14, 14, 8, 24, -82, -82, 58, 59, 58, 59, 32, 0, -}; -s16 D_801BFA4C[] = { - 0x1C, 0x1C, 0x10, 0x10, 0x18, 0x18, 0xB, 0xB, 0xB, 0xB, 0x20, 0, -}; -s16 D_801BFA64[] = { - -61, -45, 29, 104, -117, -42, 32, 55, -}; -s16 D_801BFA74[] = { - 1, -70, -99, -70, 71, 101, 72, 1, + gDPLoadTextureBlock(gfx++, texture, G_IM_FMT_IA, G_IM_SIZ_8b, textureWidth, textureHeight, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + + gSPTextureRectangle(gfx++, (rectLeft + 2) * 4, (rectTop + 2) * 4, (rectLeft + rectWidth + 2) * 4, + (rectTop + rectHeight + 2) * 4, G_TX_RENDERTILE, 0, 0, dsdx, dtdy); + + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, r, g, b, a); + + gSPTextureRectangle(gfx++, rectLeft * 4, rectTop * 4, (rectLeft + rectWidth) * 4, (rectTop + rectHeight) * 4, + G_TX_RENDERTILE, 0, 0, dsdx, dtdy); + + return gfx; +} + +/** + * Draw a colored rectangle with a shadow slightly offset to the bottom-right + * + * @param gfx the display list pointer + * @param rectLeft the x-coordinate of upper-left corner of rectangle + * @param rectTop the y-coordinate of upper-left corner of rectangle + * @param rectWidth rectangle width in texels + * @param rectHeight rectangle height in texels + * @param dsdx the change in s for each change in x (s5.10) + * @param dtdy the change in t for each change in y (s5.10) + * @param r // rectangle red + * @param g // rectangle green + * @param b // rectangle blue + * @param a // rectangle alpha + * @return Gfx* the display list pointer + */ +Gfx* Gfx_DrawRect_DropShadow(Gfx* gfx, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy, + s16 r, s16 g, s16 b, s16 a) { + s16 dropShadowAlpha = a; + + if (a > 100) { + dropShadowAlpha = 100; + } + + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, dropShadowAlpha); + gSPTextureRectangle(gfx++, (rectLeft + 2) * 4, (rectTop + 2) * 4, (rectLeft + rectWidth + 2) * 4, + (rectTop + rectHeight + 2) * 4, G_TX_RENDERTILE, 0, 0, dsdx, dtdy); + + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, r, g, b, a); + + gSPTextureRectangle(gfx++, rectLeft * 4, rectTop * 4, (rectLeft + rectWidth) * 4, (rectTop + rectHeight) * 4, + G_TX_RENDERTILE, 0, 0, dsdx, dtdy); + + return gfx; +} + +/** + * Draw an IA8 texture on a rectangle with a shadow slightly offset to the bottom-right with additional texture offsets + * + * @param gfx the display list pointer + * @param texture + * @param textureWidth texture image width in texels + * @param textureHeight texture image height in texels + * @param rectLeft the x-coordinate of upper-left corner of rectangle + * @param rectTop the y-coordinate of upper-left corner of rectangle + * @param rectWidth rectangle width in texels + * @param rectHeight rectangle height in texels + * @param dsdx the change in s for each change in x (s5.10) + * @param dtdy the change in t for each change in y (s5.10) + * @param r // texture red + * @param g // texture green + * @param b // texture blue + * @param a // texture alpha + * @param masks specify the mask for the s axis + * @param rects the texture coordinate s of upper-left corner of rectangle (s10.5) + * @return Gfx* the display list pointer + */ +Gfx* Gfx_DrawTexRectIA8_DropShadowOffset(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, + s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy, + s16 r, s16 g, s16 b, s16 a, s32 masks, s32 rects) { + s16 dropShadowAlpha = a; + + if (a > 100) { + dropShadowAlpha = 100; + } + + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, dropShadowAlpha); + + gDPLoadTextureBlock(gfx++, texture, G_IM_FMT_IA, G_IM_SIZ_8b, textureWidth, textureHeight, 0, + G_TX_MIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, masks, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + gSPTextureRectangle(gfx++, (rectLeft + 2) * 4, (rectTop + 2) * 4, (rectLeft + rectWidth + 2) * 4, + (rectTop + rectHeight + 2) * 4, G_TX_RENDERTILE, rects, 0, dsdx, dtdy); + + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, r, g, b, a); + + gSPTextureRectangle(gfx++, rectLeft * 4, rectTop * 4, (rectLeft + rectWidth) * 4, (rectTop + rectHeight) * 4, + G_TX_RENDERTILE, rects, 0, dsdx, dtdy); + + return gfx; +} + +/** + * Draw an I8 texture on a rectangle + * + * @param gfx the display list pointer + * @param texture + * @param textureWidth texture image width in texels + * @param textureHeight texture image height in texels + * @param rectLeft the x-coordinate of upper-left corner of rectangle + * @param rectTop the y-coordinate of upper-left corner of rectangle + * @param rectWidth rectangle width in texels + * @param rectHeight rectangle height in texels + * @param dsdx the change in s for each change in x (s5.10) + * @param dtdy the change in t for each change in y (s5.10) + * @return Gfx* the display list pointer + */ +Gfx* Gfx_DrawTexRectI8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, + s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy) { + gDPLoadTextureBlock(gfx++, texture, G_IM_FMT_I, G_IM_SIZ_8b, textureWidth, textureHeight, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + + gSPTextureRectangle(gfx++, rectLeft << 2, rectTop << 2, (rectLeft + rectWidth) << 2, (rectTop + rectHeight) << 2, + G_TX_RENDERTILE, 0, 0, dsdx, dtdy); + + return gfx; +} + +/** + * Draw a 4b texture on a rectangle + * + * @param gfx the display list pointer + * @param texture + * @param fmt texture image format + * @param textureWidth texture image width in texels + * @param textureHeight texture image height in texels + * @param rectLeft the x-coordinate of upper-left corner of rectangle + * @param rectTop the y-coordinate of upper-left corner of rectangle + * @param rectWidth rectangle width in texels + * @param rectHeight rectangle height in texels + * @param cms gives the clamp, wrap, and mirror flag for the s axis + * @param masks specify the mask for the s axis + * @param rects the texture coordinate s of upper-left corner of rectangle (s10.5) + * @param dsdx the change in s for each change in x (s5.10) + * @param dtdy the change in t for each change in y (s5.10) + * @return Gfx* the display list pointer + */ +Gfx* Gfx_DrawTexRect4b(Gfx* gfx, TexturePtr texture, s32 fmt, s16 textureWidth, s16 textureHeight, s16 rectLeft, + s16 rectTop, s16 rectWidth, s16 rectHeight, s32 cms, s32 masks, s32 rects, u16 dsdx, u16 dtdy) { + gDPLoadTextureBlock_4b(gfx++, texture, fmt, textureWidth, textureHeight, 0, cms, G_TX_NOMIRROR | G_TX_WRAP, masks, + G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + gSPTextureRectangle(gfx++, rectLeft << 2, rectTop << 2, (rectLeft + rectWidth) << 2, (rectTop + rectHeight) << 2, + G_TX_RENDERTILE, rects, 0, dsdx, dtdy); + + return gfx; +} + +/** + * Draw an I8 texture on a Quadrangle + * + * @param gfx the display list pointer + * @param texture + * @param textureWidth texture image width in texels + * @param textureHeight texture image height in texels + * @param point index of the first point to draw the Quadrangle + * @return Gfx* the display list pointer + */ +Gfx* Gfx_DrawTexQuadIA8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, u16 point) { + gDPLoadTextureBlock(gfx++, texture, G_IM_FMT_IA, G_IM_SIZ_8b, textureWidth, textureHeight, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + + gSP1Quadrangle(gfx++, point, point + 2, point + 3, point + 1, 0); + + return gfx; +} + +/** + * Draw a 4b texture on a Quadrangle + * + * @param gfx the display list pointer + * @param texture + * @param fmt texture image format + * @param textureWidth texture image width in texels + * @param textureHeight texture image height in texels + * @param point index of the first point to draw the Quadrangle + * @return Gfx* the display list pointer + */ +Gfx* Gfx_DrawTexQuad4b(Gfx* gfx, TexturePtr texture, s32 fmt, s16 textureWidth, s16 textureHeight, u16 point) { + gDPLoadTextureBlock_4b(gfx++, texture, fmt, textureWidth, textureHeight, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + gSP1Quadrangle(gfx++, point, point + 2, point + 3, point + 1, 0); + + return gfx; +} + +// Total number of non-minigame-perfect action quads +#define ACTION_QUAD_BASE_COUNT 11 + +s16 sActionVtxPosX[ACTION_QUAD_BASE_COUNT] = { + -14, // A Button + -14, // A Button Background + -24, // A Button Do-Action + -8, // Three-Day Clock's Star (for the Minute Tracker) + -12, // Three-Day Clock's Sun (for the Day-Time Hours Tracker) + -12, // Three-Day Clock's Moon (for the Night-Time Hours Tracker) + -7, // Three-Day Clock's Hour Digit Above the Sun + -8, // Three-Day Clock's Hour Digit Above the Sun + -7, // Three-Day Clock's Hour Digit Above the Moon + -8, // Three-Day Clock's Hour Digit Above the Moon + -12, // Minigame Countdown Textures }; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010E028.s") +s16 sActionVtxWidths[ACTION_QUAD_BASE_COUNT] = { + 28, // A Button + 28, // A Button Background + 48, // A Button Do-Action + 16, // Three-Day Clock's Star (for the Minute Tracker) + 24, // Three-Day Clock's Sun (for the Day-Time Hours Tracker) + 24, // Three-Day Clock's Moon (for the Night-Time Hours Tracker) + 16, // Three-Day Clock's Hour Digit Above the Sun + 16, // Three-Day Clock's Hour Digit Above the Sun + 16, // Three-Day Clock's Hour Digit Above the Moon + 16, // Three-Day Clock's Hour Digit Above the Moon + 24, // Minigame Countdown Textures +}; + +s16 sActionVtxPosY[ACTION_QUAD_BASE_COUNT] = { + 14, // A Button + 14, // A Button Background + 8, // A Button Do-Action + 24, // Three-Day Clock's Star (for the Minute Tracker) + -82, // Three-Day Clock's Sun (for the Day-Time Hours Tracker) + -82, // Three-Day Clock's Moon (for the Night-Time Hours Tracker) + 58, // Three-Day Clock's Hour Digit Above the Sun + 59, // Three-Day Clock's Hour Digit Above the Sun + 58, // Three-Day Clock's Hour Digit Above the Moon + 59, // Three-Day Clock's Hour Digit Above the Moon + 32, // Minigame Countdown Textures +}; + +s16 sActionVtxHeights[ACTION_QUAD_BASE_COUNT] = { + 28, // A Button + 28, // A Button Background + 16, // A Button Do-Action + 16, // Three-Day Clock's Star (for the Minute Tracker) + 24, // Three-Day Clock's Sun (for the Day-Time Hours Tracker) + 24, // Three-Day Clock's Moon (for the Night-Time Hours Tracker) + 11, // Three-Day Clock's Hour Digit Above the Sun + 11, // Three-Day Clock's Hour Digit Above the Sun + 11, // Three-Day Clock's Hour Digit Above the Moon + 11, // Three-Day Clock's Hour Digit Above the Moon + 32, // Minigame Countdown Textures +}; + +#define PERFECT_LETTERS_VTX_WIDTH 32 +#define PERFECT_LETTERS_VTX_HEIGHT 33 + +// Used for PERFECT_LETTERS_TYPE_1 and only part of PERFECT_LETTERS_TYPE_3 +// Both PERFECT_LETTERS_TYPE_2 and PERFECT_LETTERS_TYPE_2 have (0, 0) as the center for all letters +s16 sPerfectLettersCenterX[PERFECT_LETTERS_NUM_LETTERS] = { + -61, // P + -45, // E + 29, // R + 104, // F + -117, // E + -42, // C + 32, // T + 55, // ! +}; + +s16 sPerfectLettersCenterY[PERFECT_LETTERS_NUM_LETTERS] = { + 1, // P + -70, // E + -99, // R + -70, // F + 71, // E + 101, // C + 72, // T + 1, // ! +}; + +/** + * interfaceCtx->actionVtx[0] -> A Button + * interfaceCtx->actionVtx[4] -> A Button Shadow + * interfaceCtx->actionVtx[8] -> A Button Do-Action + * interfaceCtx->actionVtx[12] -> Three-Day Clock's Star (for the Minute Tracker) + * interfaceCtx->actionVtx[16] -> Three-Day Clock's Sun (for the Day Hours Tracker) + * interfaceCtx->actionVtx[20] -> Three-Day Clock's Moon (for the Night Hours Tracker) + * interfaceCtx->actionVtx[24] -> Three-Day Clock's Hour Digit Above the Sun (uses 8 vertices) + * interfaceCtx->actionVtx[32] -> Three-Day Clock's Hour Digit Above the Moon (uses 8 vertices) + * interfaceCtx->actionVtx[40] -> Minigame Countdown Textures + * interfaceCtx->actionVtx[44] -> Minigame Perfect Letter P Shadow + * interfaceCtx->actionVtx[48] -> Minigame Perfect Letter E Shadow + * interfaceCtx->actionVtx[52] -> Minigame Perfect Letter R Shadow + * interfaceCtx->actionVtx[56] -> Minigame Perfect Letter F Shadow + * interfaceCtx->actionVtx[60] -> Minigame Perfect Letter E Shadow + * interfaceCtx->actionVtx[64] -> Minigame Perfect Letter C Shadow + * interfaceCtx->actionVtx[68] -> Minigame Perfect Letter T Shadow + * interfaceCtx->actionVtx[72] -> Minigame Perfect Letter ! Shadow + * interfaceCtx->actionVtx[76] -> Minigame Perfect Letter P Colored + * interfaceCtx->actionVtx[80] -> Minigame Perfect Letter E Colored + * interfaceCtx->actionVtx[84] -> Minigame Perfect Letter R Colored + * interfaceCtx->actionVtx[88] -> Minigame Perfect Letter F Colored + * interfaceCtx->actionVtx[92] -> Minigame Perfect Letter E Colored + * interfaceCtx->actionVtx[96] -> Minigame Perfect Letter C Colored + * interfaceCtx->actionVtx[100] -> Minigame Perfect Letter T Colored + * interfaceCtx->actionVtx[104] -> Minigame Perfect Letter ! Colored + */ + +#define BEATING_HEART_VTX_X -8 +#define BEATING_HEART_VTX_Y -8 +#define BEATING_HEART_VTX_WIDTH 16 + +void Interface_SetVertices(PlayState* play) { + InterfaceContext* interfaceCtx = &play->interfaceCtx; + s16 i; + s16 j; + s16 k; + s16 shadowOffset; + + play->interfaceCtx.actionVtx = + GRAPH_ALLOC(play->state.gfxCtx, (ACTION_QUAD_BASE_COUNT + (2 * PERFECT_LETTERS_NUM_LETTERS)) * 4 * sizeof(Vtx)); + + // Loop over all non-minigame perfect vertices + // where (i) is the actionVtx index, (k) is the iterator + for (k = 0, i = 0; i < (ACTION_QUAD_BASE_COUNT * 4); i += 4, k++) { + // Left vertices x Pos + interfaceCtx->actionVtx[i + 0].v.ob[0] = interfaceCtx->actionVtx[i + 2].v.ob[0] = sActionVtxPosX[k]; + + // Right vertices x Pos + interfaceCtx->actionVtx[i + 1].v.ob[0] = interfaceCtx->actionVtx[i + 3].v.ob[0] = + interfaceCtx->actionVtx[i + 0].v.ob[0] + sActionVtxWidths[k]; + + // Top vertices y Pos + interfaceCtx->actionVtx[i + 0].v.ob[1] = interfaceCtx->actionVtx[i + 1].v.ob[1] = sActionVtxPosY[k]; + + // Bottom vertices y Pos + interfaceCtx->actionVtx[i + 2].v.ob[1] = interfaceCtx->actionVtx[i + 3].v.ob[1] = + interfaceCtx->actionVtx[i + 0].v.ob[1] - sActionVtxHeights[k]; + + // All vertices z Pos + interfaceCtx->actionVtx[i + 0].v.ob[2] = interfaceCtx->actionVtx[i + 1].v.ob[2] = + interfaceCtx->actionVtx[i + 2].v.ob[2] = interfaceCtx->actionVtx[i + 3].v.ob[2] = 0; + + // Unused flag + interfaceCtx->actionVtx[i + 0].v.flag = interfaceCtx->actionVtx[i + 1].v.flag = + interfaceCtx->actionVtx[i + 2].v.flag = interfaceCtx->actionVtx[i + 3].v.flag = 0; + + // Left and Top texture coordinates + interfaceCtx->actionVtx[i + 0].v.tc[0] = interfaceCtx->actionVtx[i + 0].v.tc[1] = + interfaceCtx->actionVtx[i + 1].v.tc[1] = interfaceCtx->actionVtx[i + 2].v.tc[0] = 0; + + // Right vertices texture coordinates + interfaceCtx->actionVtx[i + 1].v.tc[0] = interfaceCtx->actionVtx[i + 3].v.tc[0] = sActionVtxWidths[k] << 5; + + // Bottom vertices texture coordinates + interfaceCtx->actionVtx[i + 2].v.tc[1] = interfaceCtx->actionVtx[i + 3].v.tc[1] = sActionVtxHeights[k] << 5; + + // Set color + interfaceCtx->actionVtx[i + 0].v.cn[0] = interfaceCtx->actionVtx[i + 1].v.cn[0] = + interfaceCtx->actionVtx[i + 2].v.cn[0] = interfaceCtx->actionVtx[i + 3].v.cn[0] = + interfaceCtx->actionVtx[i + 0].v.cn[1] = interfaceCtx->actionVtx[i + 1].v.cn[1] = + interfaceCtx->actionVtx[i + 2].v.cn[1] = interfaceCtx->actionVtx[i + 3].v.cn[1] = + interfaceCtx->actionVtx[i + 0].v.cn[2] = interfaceCtx->actionVtx[i + 1].v.cn[2] = + interfaceCtx->actionVtx[i + 2].v.cn[2] = interfaceCtx->actionVtx[i + 3].v.cn[2] = 255; + + // Set alpha + interfaceCtx->actionVtx[i + 0].v.cn[3] = interfaceCtx->actionVtx[i + 1].v.cn[3] = + interfaceCtx->actionVtx[i + 2].v.cn[3] = interfaceCtx->actionVtx[i + 3].v.cn[3] = 255; + } + + // A button right and top texture coordinates + interfaceCtx->actionVtx[1].v.tc[0] = interfaceCtx->actionVtx[3].v.tc[0] = interfaceCtx->actionVtx[2].v.tc[1] = + interfaceCtx->actionVtx[3].v.tc[1] = 32 << 5; + + // A button background right and top texture coordinates + interfaceCtx->actionVtx[5].v.tc[0] = interfaceCtx->actionVtx[7].v.tc[0] = interfaceCtx->actionVtx[6].v.tc[1] = + interfaceCtx->actionVtx[7].v.tc[1] = 32 << 5; + + // Loop over vertices for the minigame-perfect letters + // Outer loop is to loop over 2 sets of letters: shadowed letters (j = 0) and colored letters (j = 1) + for (j = 0, shadowOffset = 2; j < 2; j++, shadowOffset -= 2) { + // Inner loop is to loop over letters (k) and actionVtx index (i) + for (k = 0; k < PERFECT_LETTERS_NUM_LETTERS; k++, i += 4) { + if ((interfaceCtx->perfectLettersType == PERFECT_LETTERS_TYPE_1) || + ((interfaceCtx->perfectLettersType == PERFECT_LETTERS_TYPE_3) && + (interfaceCtx->perfectLettersState[0] == PERFECT_LETTERS_STATE_EXIT))) { + // Left vertices x Pos + interfaceCtx->actionVtx[i + 0].v.ob[0] = interfaceCtx->actionVtx[i + 2].v.ob[0] = + -((sPerfectLettersCenterX[k] - shadowOffset) + 16); + + // Right vertices x Pos + interfaceCtx->actionVtx[i + 1].v.ob[0] = interfaceCtx->actionVtx[i + 3].v.ob[0] = + interfaceCtx->actionVtx[i + 0].v.ob[0] + PERFECT_LETTERS_VTX_WIDTH; + + // Top vertices y Pos + interfaceCtx->actionVtx[i + 0].v.ob[1] = interfaceCtx->actionVtx[i + 1].v.ob[1] = + (sPerfectLettersCenterY[k] - shadowOffset) + 16; + + // Bottom vertices y Pos + interfaceCtx->actionVtx[i + 2].v.ob[1] = interfaceCtx->actionVtx[i + 3].v.ob[1] = + interfaceCtx->actionVtx[i + 0].v.ob[1] - PERFECT_LETTERS_VTX_HEIGHT; + + } else if ((interfaceCtx->perfectLettersType == PERFECT_LETTERS_TYPE_2) || + (interfaceCtx->perfectLettersType == PERFECT_LETTERS_TYPE_3)) { + // Left vertices x Pos + interfaceCtx->actionVtx[i + 0].v.ob[0] = interfaceCtx->actionVtx[i + 2].v.ob[0] = + -(interfaceCtx->perfectLettersOffsetX[k] - shadowOffset + 16); + + // Right vertices x Pos + interfaceCtx->actionVtx[i + 1].v.ob[0] = interfaceCtx->actionVtx[i + 3].v.ob[0] = + interfaceCtx->actionVtx[i + 0].v.ob[0] + PERFECT_LETTERS_VTX_WIDTH; + + // Top vertices y Pos + interfaceCtx->actionVtx[i + 0].v.ob[1] = interfaceCtx->actionVtx[i + 1].v.ob[1] = 16 - shadowOffset; + + // Bottom vertices y Pos + interfaceCtx->actionVtx[i + 2].v.ob[1] = interfaceCtx->actionVtx[i + 3].v.ob[1] = + interfaceCtx->actionVtx[i + 0].v.ob[1] - PERFECT_LETTERS_VTX_HEIGHT; + + } else { + // Left vertices x Pos + interfaceCtx->actionVtx[i + 0].v.ob[0] = interfaceCtx->actionVtx[i + 2].v.ob[0] = -(216 - shadowOffset); + + // Right vertices x Pos + interfaceCtx->actionVtx[i + 1].v.ob[0] = interfaceCtx->actionVtx[i + 3].v.ob[0] = + interfaceCtx->actionVtx[i + 0].v.ob[0] + PERFECT_LETTERS_VTX_WIDTH; + + // Top vertices y Pos + interfaceCtx->actionVtx[i + 0].v.ob[1] = interfaceCtx->actionVtx[i + 1].v.ob[1] = 24 - shadowOffset; + + // Bottom vertices y Pos + interfaceCtx->actionVtx[i + 2].v.ob[1] = interfaceCtx->actionVtx[i + 3].v.ob[1] = + interfaceCtx->actionVtx[i + 0].v.ob[1] - PERFECT_LETTERS_VTX_HEIGHT; + } + + // All vertices z Pos + interfaceCtx->actionVtx[i + 0].v.ob[2] = interfaceCtx->actionVtx[i + 1].v.ob[2] = + interfaceCtx->actionVtx[i + 2].v.ob[2] = interfaceCtx->actionVtx[i + 3].v.ob[2] = 0; + + // Unused flag + interfaceCtx->actionVtx[i + 0].v.flag = interfaceCtx->actionVtx[i + 1].v.flag = + interfaceCtx->actionVtx[i + 2].v.flag = interfaceCtx->actionVtx[i + 3].v.flag = 0; + + // Left and Top texture coordinates + interfaceCtx->actionVtx[i + 0].v.tc[0] = interfaceCtx->actionVtx[i + 0].v.tc[1] = + interfaceCtx->actionVtx[i + 1].v.tc[1] = interfaceCtx->actionVtx[i + 2].v.tc[0] = 0; + + // Right vertices texture coordinates + interfaceCtx->actionVtx[i + 1].v.tc[0] = interfaceCtx->actionVtx[i + 3].v.tc[0] = PERFECT_LETTERS_VTX_WIDTH + << 5; + + // Bottom vertices texture coordinates + interfaceCtx->actionVtx[i + 2].v.tc[1] = interfaceCtx->actionVtx[i + 3].v.tc[1] = PERFECT_LETTERS_VTX_HEIGHT + << 5; + + // Set color + interfaceCtx->actionVtx[i + 0].v.cn[0] = interfaceCtx->actionVtx[i + 1].v.cn[0] = + interfaceCtx->actionVtx[i + 2].v.cn[0] = interfaceCtx->actionVtx[i + 3].v.cn[0] = + interfaceCtx->actionVtx[i + 0].v.cn[1] = interfaceCtx->actionVtx[i + 1].v.cn[1] = + interfaceCtx->actionVtx[i + 2].v.cn[1] = interfaceCtx->actionVtx[i + 3].v.cn[1] = + interfaceCtx->actionVtx[i + 0].v.cn[2] = interfaceCtx->actionVtx[i + 1].v.cn[2] = + interfaceCtx->actionVtx[i + 2].v.cn[2] = interfaceCtx->actionVtx[i + 3].v.cn[2] = 255; + + // Set alpha + interfaceCtx->actionVtx[i + 0].v.cn[3] = interfaceCtx->actionVtx[i + 1].v.cn[3] = + interfaceCtx->actionVtx[i + 2].v.cn[3] = interfaceCtx->actionVtx[i + 3].v.cn[3] = 255; + } + } + + // Beating Hearts Vertices + interfaceCtx->beatingHeartVtx = GRAPH_ALLOC(play->state.gfxCtx, 4 * sizeof(Vtx)); + + // Left vertices x Pos + interfaceCtx->beatingHeartVtx[0].v.ob[0] = interfaceCtx->beatingHeartVtx[2].v.ob[0] = BEATING_HEART_VTX_X; + + // Right vertices x Pos + interfaceCtx->beatingHeartVtx[1].v.ob[0] = interfaceCtx->beatingHeartVtx[3].v.ob[0] = + BEATING_HEART_VTX_X + BEATING_HEART_VTX_WIDTH; + + // Top vertices y Pos + interfaceCtx->beatingHeartVtx[0].v.ob[1] = interfaceCtx->beatingHeartVtx[1].v.ob[1] = + BEATING_HEART_VTX_Y + BEATING_HEART_VTX_WIDTH; + + // Bottom vertices y Pos + interfaceCtx->beatingHeartVtx[2].v.ob[1] = interfaceCtx->beatingHeartVtx[3].v.ob[1] = BEATING_HEART_VTX_Y; + + // All vertices z Pos + interfaceCtx->beatingHeartVtx[0].v.ob[2] = interfaceCtx->beatingHeartVtx[1].v.ob[2] = + interfaceCtx->beatingHeartVtx[2].v.ob[2] = interfaceCtx->beatingHeartVtx[3].v.ob[2] = 0; + + // unused flag + interfaceCtx->beatingHeartVtx[0].v.flag = interfaceCtx->beatingHeartVtx[1].v.flag = + interfaceCtx->beatingHeartVtx[2].v.flag = interfaceCtx->beatingHeartVtx[3].v.flag = 0; + + // Texture Coordinates + interfaceCtx->beatingHeartVtx[0].v.tc[0] = interfaceCtx->beatingHeartVtx[0].v.tc[1] = + interfaceCtx->beatingHeartVtx[1].v.tc[1] = interfaceCtx->beatingHeartVtx[2].v.tc[0] = 0; + interfaceCtx->beatingHeartVtx[1].v.tc[0] = interfaceCtx->beatingHeartVtx[2].v.tc[1] = + interfaceCtx->beatingHeartVtx[3].v.tc[0] = interfaceCtx->beatingHeartVtx[3].v.tc[1] = + BEATING_HEART_VTX_WIDTH << 5; + + // Set color + interfaceCtx->beatingHeartVtx[0].v.cn[0] = interfaceCtx->beatingHeartVtx[1].v.cn[0] = + interfaceCtx->beatingHeartVtx[2].v.cn[0] = interfaceCtx->beatingHeartVtx[3].v.cn[0] = + interfaceCtx->beatingHeartVtx[0].v.cn[1] = interfaceCtx->beatingHeartVtx[1].v.cn[1] = + interfaceCtx->beatingHeartVtx[2].v.cn[1] = interfaceCtx->beatingHeartVtx[3].v.cn[1] = + interfaceCtx->beatingHeartVtx[0].v.cn[2] = interfaceCtx->beatingHeartVtx[1].v.cn[2] = + interfaceCtx->beatingHeartVtx[2].v.cn[2] = interfaceCtx->beatingHeartVtx[3].v.cn[2] = + interfaceCtx->beatingHeartVtx[0].v.cn[3] = interfaceCtx->beatingHeartVtx[1].v.cn[3] = + interfaceCtx->beatingHeartVtx[2].v.cn[3] = interfaceCtx->beatingHeartVtx[3].v.cn[3] = + 255; +} s32 sPostmanTimerInputBtnAPressed = false; @@ -322,7 +934,7 @@ void Interface_StartPostmanTimer(s16 seconds, s16 bunnyHoodState) { void Interface_StartGoronRaceTimer(s32 arg0) { if (gSaveContext.timerStates[TIMER_ID_GORON_RACE_UNUSED] != TIMER_STATE_OFF) { // Goron race started - if (gSaveContext.eventInf[1] & 1) { + if (CHECK_EVENTINF(EVENTINF_10)) { gSaveContext.timerCurTimes[TIMER_ID_GORON_RACE_UNUSED] = SECONDS_TO_TIMER_PRECISE(2, 39); } else { gSaveContext.timerCurTimes[TIMER_ID_GORON_RACE_UNUSED] = SECONDS_TO_TIMER_PRECISE(0, 1); @@ -372,7 +984,28 @@ u32 Interface_GetCompressedTimerDigits(s16 timerId) { (timerArr[4] << 4) | timerArr[5]; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010EE74.s") +void Interface_NewDay(PlayState* play, s32 day) { + s32 pad; + s16 i = day - 1; + + // i is used to store dayMinusOne + if ((i < 0) || (i >= 3)) { + i = 0; + } + + // Loads day number from week_static for the three-day clock + DmaMgr_SendRequest0((u32)play->interfaceCtx.doActionSegment + 0x780, + (u32)SEGMENT_ROM_START(week_static) + i * 0x510, 0x510); + + // i is used to store sceneId + for (i = 0; i < ARRAY_COUNT(gSaveContext.save.permanentSceneFlags); i++) { + gSaveContext.save.permanentSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest; + gSaveContext.save.permanentSceneFlags[i].switch0 = gSaveContext.cycleSceneFlags[i].switch0; + gSaveContext.save.permanentSceneFlags[i].switch1 = gSaveContext.cycleSceneFlags[i].switch1; + gSaveContext.save.permanentSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom; + gSaveContext.save.permanentSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible; + } +} void Interface_SetHudVisibility(u16 hudVisibility) { if (gSaveContext.hudVisibility != hudVisibility) { @@ -1141,13 +1774,50 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80110038.s") +void func_80111CB4(PlayState* play); #pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80111CB4.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_801129E4.s") +void Interface_SetSceneRestrictions(PlayState* play) { + InterfaceContext* interfaceCtx = &play->interfaceCtx; + s16 i = 0; + u8 currentScene; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80112AF4.s") + do { + currentScene = (u8)play->sceneId; + if (currentScene == sRestrictionFlags[i].scene) { + interfaceCtx->restrictions.hGauge = RESTRICTIONS_GET_HGAUGE(&sRestrictionFlags[i]); + interfaceCtx->restrictions.bButton = RESTRICTIONS_GET_B_BUTTON(&sRestrictionFlags[i]); + interfaceCtx->restrictions.aButton = RESTRICTIONS_GET_A_BUTTON(&sRestrictionFlags[i]); + interfaceCtx->restrictions.tradeItems = RESTRICTIONS_GET_TRADE_ITEMS(&sRestrictionFlags[i]); + interfaceCtx->restrictions.songOfTime = RESTRICTIONS_GET_SONG_OF_TIME(&sRestrictionFlags[i]); + interfaceCtx->restrictions.songOfDoubleTime = RESTRICTIONS_GET_SONG_OF_DOUBLE_TIME(&sRestrictionFlags[i]); + interfaceCtx->restrictions.invSongOfTime = RESTRICTIONS_GET_INV_SONG_OF_TIME(&sRestrictionFlags[i]); + interfaceCtx->restrictions.songOfSoaring = RESTRICTIONS_GET_SONG_OF_SOARING(&sRestrictionFlags[i]); + interfaceCtx->restrictions.songOfStorms = RESTRICTIONS_GET_SONG_OF_STORMS(&sRestrictionFlags[i]); + interfaceCtx->restrictions.masks = RESTRICTIONS_GET_MASKS(&sRestrictionFlags[i]); + interfaceCtx->restrictions.pictoBox = RESTRICTIONS_GET_PICTO_BOX(&sRestrictionFlags[i]); + interfaceCtx->restrictions.all = RESTRICTIONS_GET_ALL(&sRestrictionFlags[i]); + break; + } + i++; + } while (sRestrictionFlags[i].scene != RESTRICTIONS_TABLE_END); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80112AFC.s") +void Interface_Noop(void) { +} + +void Interface_InitMinigame(PlayState* play) { + InterfaceContext* interfaceCtx = &play->interfaceCtx; + + gSaveContext.minigameStatus = MINIGAME_STATUS_ACTIVE; + gSaveContext.minigameScore = 0; + gSaveContext.minigameHiddenScore = 0; + + sHBAScoreTier = 0; + interfaceCtx->minigamePoints = interfaceCtx->minigameHiddenPoints = interfaceCtx->minigameUnusedPoints = 0; + + interfaceCtx->minigameAmmo = 20; +} #pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/Interface_LoadItemIconImpl.s") @@ -1205,7 +1875,7 @@ u8 Item_Give(PlayState* play, u8 item) { } else if ((item >= ITEM_SWORD_KOKIRI) && (item <= ITEM_SWORD_GILDED)) { SET_EQUIP_VALUE(EQUIP_TYPE_SWORD, item - ITEM_SWORD_KOKIRI + EQUIP_VALUE_SWORD_KOKIRI); - BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = item; + CUR_FORM_EQUIP(EQUIP_SLOT_B) = item; Interface_LoadItemIconImpl(play, EQUIP_SLOT_B); if (item == ITEM_SWORD_RAZOR) { gSaveContext.save.playerData.swordHealth = 100; @@ -1457,16 +2127,16 @@ u8 Item_Give(PlayState* play, u8 item) { } else if (item == ITEM_MAGIC_SMALL) { Magic_Add(play, MAGIC_NORMAL_METER / 2); - if (!(gSaveContext.save.weekEventReg[12] & 0x80)) { - gSaveContext.save.weekEventReg[12] |= 0x80; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_80)) { + SET_WEEKEVENTREG(WEEKEVENTREG_12_80); return ITEM_NONE; } return item; } else if (item == ITEM_MAGIC_LARGE) { Magic_Add(play, MAGIC_NORMAL_METER); - if (!(gSaveContext.save.weekEventReg[12] & 0x80)) { - gSaveContext.save.weekEventReg[12] |= 0x80; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_80)) { + SET_WEEKEVENTREG(WEEKEVENTREG_12_80); return ITEM_NONE; } return item; @@ -1676,7 +2346,7 @@ u8 Item_CheckObtainabilityImpl(u8 item) { return ITEM_RECOVERY_HEART; } else if ((item == ITEM_MAGIC_SMALL) || (item == ITEM_MAGIC_LARGE)) { - if (!(gSaveContext.save.weekEventReg[12] & 0x80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_80)) { return ITEM_NONE; } return item; @@ -1799,12 +2469,12 @@ void Inventory_UpdateDeitySwordEquip(PlayState* play) { if ((((gSaveContext.save.playerForm > 0) && (gSaveContext.save.playerForm < 4)) ? 1 : gSaveContext.save.playerForm >> 1) == 0) { - BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_SWORD_DEITY; - } else if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_SWORD_DEITY) { + CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_SWORD_DEITY; + } else if (CUR_FORM_EQUIP(EQUIP_SLOT_B) == ITEM_SWORD_DEITY) { if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_NONE) { - BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_NONE; + CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_NONE; } else { - BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = + CUR_FORM_EQUIP(EQUIP_SLOT_B) = GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) - EQUIP_VALUE_SWORD_KOKIRI + ITEM_SWORD_KOKIRI; } } @@ -1900,6 +2570,7 @@ TexturePtr sDoActionTextures[] = { gDoActionCheckENGTex, }; +void func_80115428(InterfaceContext* interfaceCtx, u16 doAction, s16 loadOffset); #pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80115428.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8011552C.s") @@ -2047,8 +2718,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) { play->actorCtx.lensActive = false; } - if (gSaveContext.save.weekEventReg[14] & 8) { - // Drank Chateau Romani + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { magicToConsume = 0; } gSaveContext.magicToConsume = magicToConsume; @@ -2067,8 +2737,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) { play->actorCtx.lensActive = false; } - if (gSaveContext.save.weekEventReg[14] & 8) { - // Drank Chateau Romani + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { magicToConsume = 0; } gSaveContext.magicToConsume = magicToConsume; @@ -2144,8 +2813,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) { play->actorCtx.lensActive = false; } - if (gSaveContext.save.weekEventReg[14] & 8) { - // Drank Chateau Romani + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { magicToConsume = 0; } gSaveContext.save.playerData.magic -= magicToConsume; @@ -2233,8 +2901,7 @@ void Magic_Update(PlayState* play) { InterfaceContext* interfaceCtx = &play->interfaceCtx; s16 magicCapacityTarget; - if (gSaveContext.save.weekEventReg[14] & 8) { - // Drank Chateau Romani + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { Magic_FlashMeterBorder(); } @@ -2284,7 +2951,7 @@ void Magic_Update(PlayState* play) { case MAGIC_STATE_CONSUME: // Consume magic until target is reached or no more magic is available - if (!(gSaveContext.save.weekEventReg[14] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { gSaveContext.save.playerData.magic = ((void)0, gSaveContext.save.playerData.magic) - ((void)0, gSaveContext.magicToConsume); if (gSaveContext.save.playerData.magic <= 0) { @@ -2297,7 +2964,7 @@ void Magic_Update(PlayState* play) { case MAGIC_STATE_METER_FLASH_1: case MAGIC_STATE_METER_FLASH_2: case MAGIC_STATE_METER_FLASH_3: - if (!(gSaveContext.save.weekEventReg[14] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { Magic_FlashMeterBorder(); } break; @@ -2315,8 +2982,8 @@ void Magic_Update(PlayState* play) { !Play_InCsMode(play)) { if ((gSaveContext.save.playerData.magic == 0) || - ((Player_GetEnvTimerType(play) >= PLAYER_ENV_TIMER_UNDERWATER_FLOOR) && - (Player_GetEnvTimerType(play) <= PLAYER_ENV_TIMER_UNDERWATER_FREE)) || + ((Player_GetEnvironmentalHazard(play) >= PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) && + (Player_GetEnvironmentalHazard(play) <= PLAYER_ENV_HAZARD_UNDERWATER_FREE)) || ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) != ITEM_LENS) && (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) != ITEM_LENS) && (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) != ITEM_LENS)) || @@ -2331,19 +2998,19 @@ void Magic_Update(PlayState* play) { interfaceCtx->magicConsumptionTimer--; if (interfaceCtx->magicConsumptionTimer == 0) { - if (!(gSaveContext.save.weekEventReg[14] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { gSaveContext.save.playerData.magic--; } interfaceCtx->magicConsumptionTimer = 80; } } - if (!(gSaveContext.save.weekEventReg[14] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { Magic_FlashMeterBorder(); } break; case MAGIC_STATE_CONSUME_GORON_ZORA_SETUP: - if (!(gSaveContext.save.weekEventReg[14] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { gSaveContext.save.playerData.magic -= 2; } if (gSaveContext.save.playerData.magic <= 0) { @@ -2358,7 +3025,7 @@ void Magic_Update(PlayState* play) { if (!Play_InCsMode(play)) { interfaceCtx->magicConsumptionTimer--; if (interfaceCtx->magicConsumptionTimer == 0) { - if (!(gSaveContext.save.weekEventReg[14] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { gSaveContext.save.playerData.magic--; } if (gSaveContext.save.playerData.magic <= 0) { @@ -2368,7 +3035,7 @@ void Magic_Update(PlayState* play) { } } } - if (!(gSaveContext.save.weekEventReg[14] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { Magic_FlashMeterBorder(); } break; @@ -2380,7 +3047,7 @@ void Magic_Update(PlayState* play) { if (!Play_InCsMode(play)) { interfaceCtx->magicConsumptionTimer--; if (interfaceCtx->magicConsumptionTimer == 0) { - if (!(gSaveContext.save.weekEventReg[14] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { gSaveContext.save.playerData.magic--; } if (gSaveContext.save.playerData.magic <= 0) { @@ -2390,7 +3057,7 @@ void Magic_Update(PlayState* play) { } } } - if (!(gSaveContext.save.weekEventReg[14] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { Magic_FlashMeterBorder(); } break; @@ -2418,17 +3085,17 @@ void Magic_DrawMeter(PlayState* play) { gDPSetEnvColor(OVERLAY_DISP++, 100, 50, 50, 255); - OVERLAY_DISP = func_8010CFBC(OVERLAY_DISP, gMagicMeterEndTex, 8, 16, 18, magicBarY, 8, 16, 1 << 10, 1 << 10, - sMagicMeterOutlinePrimRed, sMagicMeterOutlinePrimGreen, sMagicMeterOutlinePrimBlue, - interfaceCtx->magicAlpha); - OVERLAY_DISP = - func_8010CFBC(OVERLAY_DISP, gMagicMeterMidTex, 24, 16, 26, magicBarY, ((void)0, gSaveContext.magicCapacity), - 16, 1 << 10, 1 << 10, sMagicMeterOutlinePrimRed, sMagicMeterOutlinePrimGreen, - sMagicMeterOutlinePrimBlue, interfaceCtx->magicAlpha); - OVERLAY_DISP = - func_8010D480(OVERLAY_DISP, gMagicMeterEndTex, 8, 16, ((void)0, gSaveContext.magicCapacity) + 26, magicBarY, - 8, 16, 1 << 10, 1 << 10, sMagicMeterOutlinePrimRed, sMagicMeterOutlinePrimGreen, - sMagicMeterOutlinePrimBlue, interfaceCtx->magicAlpha, 3, 0x100); + OVERLAY_DISP = Gfx_DrawTexRectIA8_DropShadow( + OVERLAY_DISP, gMagicMeterEndTex, 8, 16, 18, magicBarY, 8, 16, 1 << 10, 1 << 10, sMagicMeterOutlinePrimRed, + sMagicMeterOutlinePrimGreen, sMagicMeterOutlinePrimBlue, interfaceCtx->magicAlpha); + OVERLAY_DISP = Gfx_DrawTexRectIA8_DropShadow(OVERLAY_DISP, gMagicMeterMidTex, 24, 16, 26, magicBarY, + ((void)0, gSaveContext.magicCapacity), 16, 1 << 10, 1 << 10, + sMagicMeterOutlinePrimRed, sMagicMeterOutlinePrimGreen, + sMagicMeterOutlinePrimBlue, interfaceCtx->magicAlpha); + OVERLAY_DISP = Gfx_DrawTexRectIA8_DropShadowOffset( + OVERLAY_DISP, gMagicMeterEndTex, 8, 16, ((void)0, gSaveContext.magicCapacity) + 26, magicBarY, 8, 16, + 1 << 10, 1 << 10, sMagicMeterOutlinePrimRed, sMagicMeterOutlinePrimGreen, sMagicMeterOutlinePrimBlue, + interfaceCtx->magicAlpha, 3, 0x100); gDPPipeSync(OVERLAY_DISP++); gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, PRIMITIVE, PRIMITIVE, @@ -2446,8 +3113,8 @@ void Magic_DrawMeter(PlayState* play) { // Fill the rest of the meter with the normal magic color gDPPipeSync(OVERLAY_DISP++); - if (gSaveContext.save.weekEventReg[14] & 8) { - // Blue magic (drank Chateau Romani) + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { + // Blue magic gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 200, interfaceCtx->magicAlpha); } else { // Green magic (default) @@ -2460,8 +3127,8 @@ void Magic_DrawMeter(PlayState* play) { (magicBarY + 10) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } else { // Fill the whole meter with the normal magic color - if (gSaveContext.save.weekEventReg[14] & 8) { - // Blue magic (drank Chateau Romani) + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { + // Blue magic gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 200, interfaceCtx->magicAlpha); } else { // Green magic (default) @@ -2481,6 +3148,7 @@ void Magic_DrawMeter(PlayState* play) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80116FD8.s") +void func_801170B8(InterfaceContext* interfaceCtx); #pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_801170B8.s") TexturePtr cUpLabelTextures[] = { @@ -2493,6 +3161,7 @@ s16 startButtonLeftPos[] = { s16 D_801BFAF4[] = { 0x1D, 0x1B }; s16 D_801BFAF8[] = { 0x1B, 0x1B }; +void func_80117100(PlayState* play); #pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80117100.s") s16 D_801BFAFC[] = { 30, 24, 24, 24 }; @@ -2504,10 +3173,13 @@ s16 D_801BFB0C[] = { 0x23, 0x23, 0x33, 0x23 }; #pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80117BD0.s") +void func_80118084(PlayState* play); #pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80118084.s") +void func_80118890(PlayState* play); #pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80118890.s") +void func_80118BA4(PlayState* play); #pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80118BA4.s") extern TexturePtr D_08095AC0; // gMagicArrowEquipEffectTex @@ -2515,19 +3187,553 @@ s16 D_801BFB14[] = { 255, 100, 255, 0 }; // magicArrowEffectsR s16 D_801BFB1C[] = { 0, 100, 255, 0 }; // magicArrowEffectsG s16 D_801BFB24[] = { 0, 255, 100, 0 }; // magicArrowEffectsB +void func_80119030(PlayState* play); #pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80119030.s") -s16 D_801BFB2C = 255; +/** + * Draws either the analog three-day clock or the digital final-hours clock + */ +#ifdef NON_MATCHING +void Interface_DrawClock(PlayState* play) { + static s16 sThreeDayClockAlpha = 255; + static s16 D_801BFB30 = 0; // sClockAlphaTimer1 + static s16 D_801BFB34 = 0; // sClockAlphaTimer2 + static u16 sThreeDayClockHours[] = { + CLOCK_TIME(0, 0), CLOCK_TIME(1, 0), CLOCK_TIME(2, 0), CLOCK_TIME(3, 0), CLOCK_TIME(4, 0), + CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), CLOCK_TIME(7, 0), CLOCK_TIME(8, 0), CLOCK_TIME(9, 0), + CLOCK_TIME(10, 0), CLOCK_TIME(11, 0), CLOCK_TIME(12, 0), CLOCK_TIME(13, 0), CLOCK_TIME(14, 0), + CLOCK_TIME(15, 0), CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), + CLOCK_TIME(20, 0), CLOCK_TIME(21, 0), CLOCK_TIME(22, 0), CLOCK_TIME(23, 0), CLOCK_TIME(24, 0) - 1, + }; + static TexturePtr sThreeDayClockHourTextures[] = { + gThreeDayClockHour12Tex, gThreeDayClockHour1Tex, gThreeDayClockHour2Tex, gThreeDayClockHour3Tex, + gThreeDayClockHour4Tex, gThreeDayClockHour5Tex, gThreeDayClockHour6Tex, gThreeDayClockHour7Tex, + gThreeDayClockHour8Tex, gThreeDayClockHour9Tex, gThreeDayClockHour10Tex, gThreeDayClockHour11Tex, + gThreeDayClockHour12Tex, gThreeDayClockHour1Tex, gThreeDayClockHour2Tex, gThreeDayClockHour3Tex, + gThreeDayClockHour4Tex, gThreeDayClockHour5Tex, gThreeDayClockHour6Tex, gThreeDayClockHour7Tex, + gThreeDayClockHour8Tex, gThreeDayClockHour9Tex, gThreeDayClockHour10Tex, gThreeDayClockHour11Tex, + }; + static s16 D_801BFBCC = 0; // sClockInvDiamondPrimRed + static s16 D_801BFBD0 = 0; // sClockInvDiamondPrimGreen + static s16 D_801BFBD4 = 255; // sClockInvDiamondPrimBlue + static s16 D_801BFBD8 = 0; // sClockInvDiamondEnvRed + static s16 D_801BFBDC = 0; // sClockInvDiamondEnvGreen + static s16 D_801BFBE0 = 0; // sClockInvDiamondEnvBlue + static s16 D_801BFBE4 = 15; // sClockInvDiamondTimer + static s16 D_801BFBE8 = 0; // sClockInvDiamondTargetIndex + static s16 D_801BFBEC[] = { 100, 0 }; // sClockInvDiamondPrimRedTargets + static s16 D_801BFBF0[] = { 205, 155 }; // sClockInvDiamondPrimGreenTargets + static s16 D_801BFBF4[] = { 255, 255 }; // sClockInvDiamondPrimBlueTargets + static s16 D_801BFBF8[] = { 30, 0 }; // sClockInvDiamondEnvRedTargets + static s16 D_801BFBFC[] = { 30, 0 }; // sClockInvDiamondEnvGreenTargets + static s16 D_801BFC00[] = { 100, 0 }; // sClockInvDiamondEnvBlueTargets + static s16 D_801BFC04[] = { 255, 0 }; // sFinalHoursClockDigitsRed + static s16 D_801BFC08[] = { 100, 0 }; // sFinalHoursClockFrameEnvRedTargets + static s16 D_801BFC0C[] = { 30, 0 }; // sFinalHoursClockFrameEnvGreenTargets + static s16 D_801BFC10[] = { 100, 0 }; // sFinalHoursClockFrameEnvBlueTargets + static TexturePtr sFinalHoursDigitTextures[] = { + gFinalHoursClockDigit0Tex, gFinalHoursClockDigit1Tex, gFinalHoursClockDigit2Tex, gFinalHoursClockDigit3Tex, + gFinalHoursClockDigit4Tex, gFinalHoursClockDigit5Tex, gFinalHoursClockDigit6Tex, gFinalHoursClockDigit7Tex, + gFinalHoursClockDigit8Tex, gFinalHoursClockDigit9Tex, gFinalHoursClockColonTex, + }; + // sFinalHoursDigitSlotPosXOffset + static s16 D_801BFC40[] = { + 127, 136, 144, 151, 160, 168, 175, 184, + }; + InterfaceContext* interfaceCtx = &play->interfaceCtx; + MessageContext* msgCtx = &play->msgCtx; + s16 sp1E6; + f32 temp_f14; + u32 timeUntilMoonCrash; + f32 sp1D8; + f32 timeInMinutes; + f32 timeInSeconds; + f32 sp1CC; + s32 new_var; + s16 sp1C6; + s16 currentHour; + u16 time; + s16 temp; + s16 colorStep; + s16 finalHoursClockSlots[8]; // sp1AC + s16 index; + + OPEN_DISPS(play->state.gfxCtx); + + if (R_TIME_SPEED != 0) { + if ((msgCtx->msgMode == 0) || ((play->actorCtx.flags & ACTORCTX_FLAG_1) && !Play_InCsMode(play)) || + (msgCtx->msgMode == 0) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) || + (gSaveContext.gameMode == 3)) { + if (!FrameAdvance_IsEnabled(&play->state) && !Environment_IsTimeStopped() && (gSaveContext.save.day < 4)) { + /** + * Changes Clock's transparancy depending if Player is moving or not and possibly other things + */ + if (gSaveContext.hudVisibility == HUD_VISIBILITY_ALL) { + if (func_801234D4(play)) { + sThreeDayClockAlpha = 80; + D_801BFB30 = 5; + D_801BFB34 = 20; + } else if (D_801BFB34 != 0) { + D_801BFB34--; + } else if (D_801BFB30 != 0) { + colorStep = ABS_ALT(sThreeDayClockAlpha - 255) / D_801BFB30; + sThreeDayClockAlpha += colorStep; + + if (sThreeDayClockAlpha >= 255) { + sThreeDayClockAlpha = 255; + D_801BFB30 = 0; + } + } else { + if (play->actorCtx.flags & ACTORCTX_FLAG_1) { + sThreeDayClockAlpha = 255; + } else { + sThreeDayClockAlpha = interfaceCtx->bAlpha; + } + D_801BFB34 = 0; + D_801BFB30 = 0; + } + } else { + if (play->actorCtx.flags & ACTORCTX_FLAG_1) { + sThreeDayClockAlpha = 255; + } else { + sThreeDayClockAlpha = interfaceCtx->bAlpha; + } + D_801BFB34 = 0; + D_801BFB30 = 0; + } + + if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) { + + func_8012C654(play->state.gfxCtx); + + /** + * Draw Clock's Hour Lines + */ + gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); + gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 130, 130, 130, sThreeDayClockAlpha); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, + TEXEL0, 0, PRIMITIVE, 0); + + OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gThreeDayClockHourLinesTex, 4, 64, 35, 96, 180, 128, + 35, 1, 6, 0, 1 << 10, 1 << 10); + + /** + * Draw Clock's Border + */ + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, sThreeDayClockAlpha); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, + TEXEL0, 0, PRIMITIVE, 0); + + //! @bug A texture height of 50 is given below. The texture is only 48 units height + //! resulting in this reading into the next texture. This results in a white + //! dot in the bottom center of the clock. For the three-day clock, this is + //! covered by the diamond. However, it can be seen by the final-hours clock. + OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gThreeDayClockBorderTex, 4, 64, 50, 96, 168, 128, 50, + 1, 6, 0, 1 << 10, 1 << 10); + + if (((CURRENT_DAY >= 4) || ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= 5) && + (((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0))))) { + func_8012C8D4(play->state.gfxCtx); + gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + } else { + /** + * Draw Three-Day Clock's Diamond + */ + gDPPipeSync(OVERLAY_DISP++); + + // Time is slowed down to half speed with inverted song of time + if (gSaveContext.save.timeSpeedOffset == -2) { + // Clock diamond is blue and flashes white + colorStep = ABS_ALT(D_801BFBCC - D_801BFBEC[D_801BFBE8]) / D_801BFBE4; + if (D_801BFBCC >= D_801BFBEC[D_801BFBE8]) { + D_801BFBCC -= colorStep; + } else { + D_801BFBCC += colorStep; + } + + colorStep = ABS_ALT(D_801BFBD0 - D_801BFBF0[D_801BFBE8]) / D_801BFBE4; + if (D_801BFBD0 >= D_801BFBF0[D_801BFBE8]) { + D_801BFBD0 -= colorStep; + } else { + D_801BFBD0 += colorStep; + } + + colorStep = ABS_ALT(D_801BFBD4 - D_801BFBF4[D_801BFBE8]) / D_801BFBE4; + if (D_801BFBD4 >= D_801BFBF4[D_801BFBE8]) { + D_801BFBD4 -= colorStep; + } else { + D_801BFBD4 += colorStep; + } + + colorStep = ABS_ALT(D_801BFBD8 - D_801BFBF8[D_801BFBE8]) / D_801BFBE4; + if (D_801BFBD8 >= D_801BFBF8[D_801BFBE8]) { + D_801BFBD8 -= colorStep; + } else { + D_801BFBD8 += colorStep; + } + + colorStep = ABS_ALT(D_801BFBDC - D_801BFBFC[D_801BFBE8]) / D_801BFBE4; + if (D_801BFBDC >= D_801BFBFC[D_801BFBE8]) { + D_801BFBDC -= colorStep; + } else { + D_801BFBDC += colorStep; + } + + colorStep = ABS_ALT(D_801BFBE0 - D_801BFC00[D_801BFBE8]) / D_801BFBE4; + if (D_801BFBE0 >= D_801BFC00[D_801BFBE8]) { + D_801BFBE0 -= colorStep; + } else { + D_801BFBE0 += colorStep; + } + + D_801BFBE4--; + + if (D_801BFBE4 == 0) { + D_801BFBCC = D_801BFBEC[D_801BFBE8]; + D_801BFBD0 = D_801BFBF0[D_801BFBE8]; + D_801BFBD4 = D_801BFBF4[D_801BFBE8]; + D_801BFBD8 = D_801BFBF8[D_801BFBE8]; + D_801BFBDC = D_801BFBFC[D_801BFBE8]; + D_801BFBE0 = D_801BFC00[D_801BFBE8]; + D_801BFBE4 = 15; + D_801BFBE8 ^= 1; + } + + gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, + PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, + PRIMITIVE, 0); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BFBCC, D_801BFBD0, 255, sThreeDayClockAlpha); + gDPSetEnvColor(OVERLAY_DISP++, D_801BFBD8, D_801BFBDC, D_801BFBE0, 0); + } else { + // Clock diamond is green for regular timeSpeedOffset + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 170, 100, sThreeDayClockAlpha); + } + + OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, gThreeDayClockDiamondTex, 40, 32, 140, 190, 40, + 32, 1 << 10, 1 << 10); + + /** + * Draw Three-Day Clock's Day-Number over Diamond + */ + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha); + + OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, interfaceCtx->doActionSegment + 0x780, 48, 27, + 137, 192, 48, 27, 1 << 10, 1 << 10); + + /** + * Draw Three-Day Clock's Star (for the Minute Tracker) + */ + gDPPipeSync(OVERLAY_DISP++); + + if (D_801BF974 != 0) { + D_801BF980 += 0.02f; + D_801BF97C += 11; + } else { + D_801BF980 -= 0.02f; + D_801BF97C -= 11; + } + + D_801BF978--; + if (D_801BF978 == 0) { + D_801BF978 = 10; + D_801BF974 ^= 1; + } + + timeInSeconds = TIME_TO_SECONDS_F(gSaveContext.save.time); + timeInSeconds -= ((s16)(timeInSeconds / 3600.0f)) * 3600.0f; + + func_8012C8D4(play->state.gfxCtx); + + gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + if (sThreeDayClockAlpha != 255) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 110, sThreeDayClockAlpha); + } else { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 110, D_801BF97C); + } + + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); + gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + + Matrix_Translate(0.0f, -86.0f, 0.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, D_801BF980, MTXMODE_APPLY); + Matrix_RotateZF(-(timeInSeconds * 0.0175f) / 10.0f, MTXMODE_APPLY); + + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[12], 4, 0); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, gThreeDayClockStarMinuteTex, G_IM_FMT_I, 16, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(OVERLAY_DISP++, 0, 2, 3, 1, 0); + } + + /** + * Cuts off Three-Day Clock's Sun and Moon when they dip below the clock + */ + gDPPipeSync(OVERLAY_DISP++); + gDPSetScissorFrac(OVERLAY_DISP++, G_SC_NON_INTERLACE, 400, 620, 880, + R_THREE_DAY_CLOCK_SUN_MOON_CUTOFF * 4.0f); + + // determines the current hour + for (sp1C6 = 0; sp1C6 <= 24; sp1C6++) { + if (((void)0, gSaveContext.save.time) < sThreeDayClockHours[sp1C6 + 1]) { + break; + } + } + + /** + * Draw Three-Day Clock's Sun (for the Day-Time Hours Tracker) + */ + time = gSaveContext.save.time; + sp1D8 = Math_SinS(time) * -40.0f; + temp_f14 = Math_CosS(time) * -34.0f; + + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 100, 110, sThreeDayClockAlpha); + + Matrix_Translate(sp1D8, temp_f14, 0.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[16], 4, 0); + + OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, gThreeDayClockSunHourTex, 24, 24, 0); + + /** + * Draw Three-Day Clock's Moon (for the Night-Time Hours Tracker) + */ + sp1D8 = Math_SinS(time) * 40.0f; + temp_f14 = Math_CosS(time) * 34.0f; + + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 55, sThreeDayClockAlpha); + + Matrix_Translate(sp1D8, temp_f14, 0.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[20], 4, 0); + + OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, gThreeDayClockMoonHourTex, 24, 24, 0); + + /** + * Cuts off Three-Day Clock's Hour Digits when they dip below the clock + */ + gDPPipeSync(OVERLAY_DISP++); + gDPSetScissorFrac(OVERLAY_DISP++, G_SC_NON_INTERLACE, 400, 620, 880, + R_THREE_DAY_CLOCK_HOUR_DIGIT_CUTOFF * 4.0f); + + /** + * Draws Three-Day Clock's Hour Digit Above the Sun + */ + sp1CC = gSaveContext.save.time * 0.000096131f; + + // Rotates Three-Day Clock's Hour Digit To Above the Sun + Matrix_Translate(0.0f, R_THREE_DAY_CLOCK_Y_POS / 10.0f, 0.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + Matrix_RotateZF(-(sp1CC - 3.15f), MTXMODE_APPLY); + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + // Draws Three-Day Clock's Hour Digit Above the Sun + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, + TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, sThreeDayClockAlpha); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[24], 8, 0); + + OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sThreeDayClockHourTextures[sp1C6], 4, 16, 11, 0); + + // Colours the Three-Day Clocks's Hour Digit Above the Sun + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha); + gSP1Quadrangle(OVERLAY_DISP++, 4, 6, 7, 5, 0); + + /** + * Draws Three-Day Clock's Hour Digit Above the Moon + */ + // Rotates Three-Day Clock's Hour Digit To Above the Moon + Matrix_Translate(0.0f, R_THREE_DAY_CLOCK_Y_POS / 10.0f, 0.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + Matrix_RotateZF(-sp1CC, MTXMODE_APPLY); + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + // Draws Three-Day Clock's Hour Digit Above the Moon + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, + TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, sThreeDayClockAlpha); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[32], 8, 0); + + OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sThreeDayClockHourTextures[sp1C6], 4, 16, 11, 0); + + // Colours the Three-Day Clocks's Hour Digit Above the Moon + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha); + gSP1Quadrangle(OVERLAY_DISP++, 4, 6, 7, 5, 0); + + gSPDisplayList(OVERLAY_DISP++, D_0E000000.setScissor); + + // Final Hours + if ((CURRENT_DAY >= 4) || ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= 5) && + (((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0)))) { + if (((void)0, gSaveContext.save.time) >= CLOCK_TIME(5, 0)) { + // The Final Hours clock will flash red + + colorStep = + ABS_ALT(sFinalHoursClockDigitsRed - D_801BFC04[sFinalHoursClockColorTargetIndex]) / + sFinalHoursClockColorTimer; + if (sFinalHoursClockDigitsRed >= D_801BFC04[sFinalHoursClockColorTargetIndex]) { + sFinalHoursClockDigitsRed -= colorStep; + } else { + sFinalHoursClockDigitsRed += colorStep; + } + + colorStep = + ABS_ALT(sFinalHoursClockFrameEnvRed - D_801BFC08[sFinalHoursClockColorTargetIndex]) / + sFinalHoursClockColorTimer; + if (sFinalHoursClockFrameEnvRed >= D_801BFC08[sFinalHoursClockColorTargetIndex]) { + sFinalHoursClockFrameEnvRed -= colorStep; + } else { + sFinalHoursClockFrameEnvRed += colorStep; + } + + colorStep = + ABS_ALT(sFinalHoursClockFrameEnvGreen - D_801BFC0C[sFinalHoursClockColorTargetIndex]) / + sFinalHoursClockColorTimer; + if (sFinalHoursClockFrameEnvGreen >= D_801BFC0C[sFinalHoursClockColorTargetIndex]) { + sFinalHoursClockFrameEnvGreen -= colorStep; + } else { + sFinalHoursClockFrameEnvGreen += colorStep; + } + + colorStep = + ABS_ALT(sFinalHoursClockFrameEnvBlue - D_801BFC10[sFinalHoursClockColorTargetIndex]) / + sFinalHoursClockColorTimer; + if (sFinalHoursClockFrameEnvBlue >= D_801BFC10[sFinalHoursClockColorTargetIndex]) { + sFinalHoursClockFrameEnvBlue -= colorStep; + } else { + sFinalHoursClockFrameEnvBlue += colorStep; + } + + sFinalHoursClockColorTimer--; + + if (sFinalHoursClockColorTimer == 0) { + sFinalHoursClockDigitsRed = D_801BFC04[sFinalHoursClockColorTargetIndex]; + sFinalHoursClockFrameEnvRed = D_801BFC08[sFinalHoursClockColorTargetIndex]; + sFinalHoursClockFrameEnvGreen = D_801BFC0C[sFinalHoursClockColorTargetIndex]; + sFinalHoursClockFrameEnvBlue = D_801BFC10[sFinalHoursClockColorTargetIndex]; + sFinalHoursClockColorTimer = 6; + sFinalHoursClockColorTargetIndex ^= 1; + } + } + + sp1E6 = sThreeDayClockAlpha; + if (sp1E6 != 0) { + sp1E6 = 255; + } + + func_8012C654(play->state.gfxCtx); + + /** + * Draws Final-Hours Clock's Frame + */ + gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); + gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, + PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, + PRIMITIVE, 0); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 195, sp1E6); + gDPSetEnvColor(OVERLAY_DISP++, sFinalHoursClockFrameEnvRed, sFinalHoursClockFrameEnvGreen, + sFinalHoursClockFrameEnvBlue, 0); + + OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gFinalHoursClockFrameTex, 3, 80, 13, 119, 202, + 80, 13, 0, 0, 0, 1 << 10, 1 << 10); + + finalHoursClockSlots[0] = 0; + + timeUntilMoonCrash = TIME_UNTIL_MOON_CRASH; + + timeInMinutes = TIME_TO_MINUTES_F(timeUntilMoonCrash); + + // digits for hours + finalHoursClockSlots[1] = timeInMinutes / 60.0f; + finalHoursClockSlots[2] = timeInMinutes / 60.0f; + + temp = (s32)timeInMinutes % 60; + + while (finalHoursClockSlots[1] >= 10) { + finalHoursClockSlots[0]++; + finalHoursClockSlots[1] -= 10; + } + + // digits for minutes + finalHoursClockSlots[3] = 0; + finalHoursClockSlots[4] = temp; + + while (finalHoursClockSlots[4] >= 10) { + finalHoursClockSlots[3]++; + finalHoursClockSlots[4] -= 10; + } + + // digits for seconds + finalHoursClockSlots[6] = 0; + finalHoursClockSlots[7] = + timeUntilMoonCrash - (u32)((finalHoursClockSlots[2] * ((f32)0x10000 / 24)) + + (((void)0, temp) * ((f32)0x10000 / (24 * 60)))); + + while (finalHoursClockSlots[7] >= 10) { + finalHoursClockSlots[6]++; + finalHoursClockSlots[7] -= 10; + } + + // Colon separating hours from minutes and minutes from seconds + finalHoursClockSlots[2] = finalHoursClockSlots[5] = 10; + + /** + * Draws Final-Hours Clock's Digits + */ + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sFinalHoursClockDigitsRed, 0, 0, sp1E6); + gDPSetEnvColor(OVERLAY_DISP++, sFinalHoursClockDigitsRed, 0, 0, 0); + + for (sp1C6 = 0; sp1C6 < 8; sp1C6++) { + index = D_801BFC40[sp1C6]; + + OVERLAY_DISP = + Gfx_DrawTexRectI8(OVERLAY_DISP, sFinalHoursDigitTextures[finalHoursClockSlots[sp1C6]], + 8, 8, index, 205, 8, 8, 1 << 10, 1 << 10); + } + } + } + } + } + } + CLOSE_DISPS(play->state.gfxCtx); +} +#else +s16 sThreeDayClockAlpha = 255; s16 D_801BFB30 = 0; s16 D_801BFB34 = 0; -u16 D_801BFB38[] = { +u16 sThreeDayClockHours[] = { CLOCK_TIME(0, 0), CLOCK_TIME(1, 0), CLOCK_TIME(2, 0), CLOCK_TIME(3, 0), CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), CLOCK_TIME(7, 0), CLOCK_TIME(8, 0), CLOCK_TIME(9, 0), CLOCK_TIME(10, 0), CLOCK_TIME(11, 0), CLOCK_TIME(12, 0), CLOCK_TIME(13, 0), CLOCK_TIME(14, 0), CLOCK_TIME(15, 0), CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), CLOCK_TIME(20, 0), CLOCK_TIME(21, 0), CLOCK_TIME(22, 0), CLOCK_TIME(23, 0), CLOCK_TIME(24, 0) - 1, }; -TexturePtr D_801BFB6C[] = { +TexturePtr sThreeDayClockHourTextures[] = { gThreeDayClockHour12Tex, gThreeDayClockHour1Tex, gThreeDayClockHour2Tex, gThreeDayClockHour3Tex, gThreeDayClockHour4Tex, gThreeDayClockHour5Tex, gThreeDayClockHour6Tex, gThreeDayClockHour7Tex, gThreeDayClockHour8Tex, gThreeDayClockHour9Tex, gThreeDayClockHour10Tex, gThreeDayClockHour11Tex, @@ -2553,7 +3759,7 @@ s16 D_801BFC04[] = { 255, 0 }; s16 D_801BFC08[] = { 100, 0 }; s16 D_801BFC0C[] = { 30, 0 }; s16 D_801BFC10[] = { 100, 0 }; -TexturePtr D_801BFC14[] = { +TexturePtr sFinalHoursDigitTextures[] = { gFinalHoursClockDigit0Tex, gFinalHoursClockDigit1Tex, gFinalHoursClockDigit2Tex, gFinalHoursClockDigit3Tex, gFinalHoursClockDigit4Tex, gFinalHoursClockDigit5Tex, gFinalHoursClockDigit6Tex, gFinalHoursClockDigit7Tex, gFinalHoursClockDigit8Tex, gFinalHoursClockDigit9Tex, gFinalHoursClockColonTex, @@ -2561,52 +3767,560 @@ TexturePtr D_801BFC14[] = { s16 D_801BFC40[] = { 127, 136, 144, 151, 160, 168, 175, 184, }; +void Interface_DrawClock(PlayState* play); +#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/Interface_DrawClock.s") +#endif -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80119610.s") +void Interface_SetPerfectLetters(PlayState* play, s16 perfectLettersType) { + InterfaceContext* interfaceCtx = &play->interfaceCtx; + s16 i; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8011B4E0.s") + interfaceCtx->perfectLettersOn = true; + interfaceCtx->perfectLettersType = perfectLettersType; -u16 D_801BFC50[] = { - 0xC000, 0xE000, 0x0000, 0x2000, 0xA000, 0x8000, 0x6000, 0x4000, -}; -s16 D_801BFC60[][3] = { - 255, 255, 255, 255, 165, 55, + interfaceCtx->perfectLettersPrimColor[0] = 255; + interfaceCtx->perfectLettersPrimColor[1] = 165; + interfaceCtx->perfectLettersPrimColor[2] = 55; + interfaceCtx->perfectLettersPrimColor[3] = 255; + interfaceCtx->perfectLettersColorTimer = 20; + + interfaceCtx->perfectLettersColorIndex = 0; + interfaceCtx->perfectLettersCount = 1; + interfaceCtx->perfectLettersTimer = 0; + + for (i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) { + interfaceCtx->perfectLettersAngles[i] = 0; + interfaceCtx->perfectLettersState[i] = interfaceCtx->perfectLettersOffsetX[i] = 0; + if (interfaceCtx->perfectLettersType == PERFECT_LETTERS_TYPE_1) { + interfaceCtx->perfectLettersSemiAxisX[i] = 140.0f; + interfaceCtx->perfectLettersSemiAxisY[i] = 100.0f; + } else { + interfaceCtx->perfectLettersSemiAxisY[i] = 200.0f; + interfaceCtx->perfectLettersSemiAxisX[i] = 200.0f; + } + } + interfaceCtx->perfectLettersState[0] = PERFECT_LETTERS_STATE_INIT; +} + +u16 sPerfectLettersType1OffScreenAngles[PERFECT_LETTERS_NUM_LETTERS] = { + 6 * PERFECT_LETTERS_ANGLE_PER_LETTER, // P + 7 * PERFECT_LETTERS_ANGLE_PER_LETTER, // E + 0 * PERFECT_LETTERS_ANGLE_PER_LETTER, // R + 1 * PERFECT_LETTERS_ANGLE_PER_LETTER, // F + 5 * PERFECT_LETTERS_ANGLE_PER_LETTER, // E + 4 * PERFECT_LETTERS_ANGLE_PER_LETTER, // C + 3 * PERFECT_LETTERS_ANGLE_PER_LETTER, // T + 2 * PERFECT_LETTERS_ANGLE_PER_LETTER, // ! }; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8011B5C0.s") - -s16 D_801BFC6C[] = { - 78, 54, 29, 5, -18, -42, -67, -85, -}; -s16 D_801BFC7C[] = { - 180, 180, 180, 180, -180, -180, -180, -180, -}; -s16 D_801BFC8C[2][3] = { +s16 sPerfectLettersType1PrimColorTargets[2][3] = { { 255, 255, 255 }, { 255, 165, 55 }, }; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8011B9E0.s") +void Interface_UpdatePerfectLettersType1(PlayState* play) { + InterfaceContext* interfaceCtx = &play->interfaceCtx; + s16 i; + s16 count; + s16 colorStepR; + s16 colorStepG; + s16 colorStepB; -s16 D_801BFC98[] = { - 78, 54, 29, 5, -18, -42, -67, -85, + // Update letter positions + for (count = 0, i = 0; i < interfaceCtx->perfectLettersCount; i++, count += 4) { + if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_INIT) { + // Initialize letter positions along the elliptical spirals + interfaceCtx->perfectLettersAngles[i] = sPerfectLettersType1OffScreenAngles[i] + 0xA000; + interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_ENTER; + } else if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_ENTER) { + // Swirl inwards along elliptical spirals to form the spelt-out word + interfaceCtx->perfectLettersAngles[i] -= 0x800; + if (interfaceCtx->perfectLettersAngles[i] == sPerfectLettersType1OffScreenAngles[i]) { + interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_STATIONARY; + } + } else if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_SPREAD) { + // Swirl outwards along elliptical spirals offscreen + interfaceCtx->perfectLettersAngles[i] -= 0x800; + if (interfaceCtx->perfectLettersAngles[i] == (u16)(sPerfectLettersType1OffScreenAngles[i] - 0x8000)) { + interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_OFF; + } + } + } + + // Initialize the next letter in the list + // if `perfectLettersCount == PERFECT_LETTERS_NUM_LETTERS`, + // then perfectLettersState[] is accessed + if ((interfaceCtx->perfectLettersState[interfaceCtx->perfectLettersCount] == PERFECT_LETTERS_STATE_OFF) && + (interfaceCtx->perfectLettersCount < PERFECT_LETTERS_NUM_LETTERS)) { + interfaceCtx->perfectLettersState[interfaceCtx->perfectLettersCount] = PERFECT_LETTERS_STATE_INIT; + + interfaceCtx->perfectLettersSemiAxisX[interfaceCtx->perfectLettersCount] = 140.0f; + interfaceCtx->perfectLettersSemiAxisY[interfaceCtx->perfectLettersCount] = 100.0f; + interfaceCtx->perfectLettersAngles[interfaceCtx->perfectLettersCount] = + sPerfectLettersType1OffScreenAngles[interfaceCtx->perfectLettersCount] + 0xA000; + + interfaceCtx->perfectLettersCount++; + } + + // Update letter colors + if ((interfaceCtx->perfectLettersCount == PERFECT_LETTERS_NUM_LETTERS) && + (interfaceCtx->perfectLettersState[PERFECT_LETTERS_NUM_LETTERS - 1] == PERFECT_LETTERS_STATE_STATIONARY)) { + + colorStepR = ABS_ALT(interfaceCtx->perfectLettersPrimColor[0] - + sPerfectLettersType1PrimColorTargets[interfaceCtx->perfectLettersColorIndex][0]) / + interfaceCtx->perfectLettersColorTimer; + colorStepG = ABS_ALT(interfaceCtx->perfectLettersPrimColor[1] - + sPerfectLettersType1PrimColorTargets[interfaceCtx->perfectLettersColorIndex][1]) / + interfaceCtx->perfectLettersColorTimer; + colorStepB = ABS_ALT(interfaceCtx->perfectLettersPrimColor[2] - + sPerfectLettersType1PrimColorTargets[interfaceCtx->perfectLettersColorIndex][2]) / + interfaceCtx->perfectLettersColorTimer; + + if (interfaceCtx->perfectLettersPrimColor[0] >= + sPerfectLettersType1PrimColorTargets[interfaceCtx->perfectLettersColorIndex][0]) { + interfaceCtx->perfectLettersPrimColor[0] -= colorStepR; + } else { + interfaceCtx->perfectLettersPrimColor[0] += colorStepR; + } + + if (interfaceCtx->perfectLettersPrimColor[1] >= + sPerfectLettersType1PrimColorTargets[interfaceCtx->perfectLettersColorIndex][1]) { + interfaceCtx->perfectLettersPrimColor[1] -= colorStepG; + } else { + interfaceCtx->perfectLettersPrimColor[1] += colorStepG; + } + + if (interfaceCtx->perfectLettersPrimColor[2] >= + sPerfectLettersType1PrimColorTargets[interfaceCtx->perfectLettersColorIndex][2]) { + interfaceCtx->perfectLettersPrimColor[2] -= colorStepB; + } else { + interfaceCtx->perfectLettersPrimColor[2] += colorStepB; + } + + interfaceCtx->perfectLettersColorTimer--; + + if (interfaceCtx->perfectLettersColorTimer == 0) { + interfaceCtx->perfectLettersColorTimer = 20; + interfaceCtx->perfectLettersColorIndex ^= 1; + interfaceCtx->perfectLettersTimer++; + + if (interfaceCtx->perfectLettersTimer == 6) { + for (i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) { + interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_SPREAD; + } + } + } + } + + for (count = 0, i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) { + if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_OFF) { + count++; + } + } + + if (count == PERFECT_LETTERS_NUM_LETTERS) { + interfaceCtx->perfectLettersOn = false; + } +} + +// Targets to offset each letter to properly spell "PERFECT!" +s16 sPerfectLettersType2SpellingOffsetsX[PERFECT_LETTERS_NUM_LETTERS] = { + 78, // P + 54, // E + 29, // R + 5, // F + -18, // E + -42, // C + -67, // T + -85, // ! }; -u16 D_801BFCA8[] = { - 0xC000, 0xE000, 0x0000, 0x2000, 0xA000, 0x8000, 0x6000, 0x4000, + +// Targets to offset each letter to sweep horizontally offscreen +s16 sPerfectLettersType2OffScreenOffsetsX[PERFECT_LETTERS_NUM_LETTERS] = { + 180, // P (offscreen left) + 180, // E (offscreen left) + 180, // R (offscreen left) + 180, // F (offscreen left) + -180, // E (offscreen right) + -180, // C (offscreen right) + -180, // T (offscreen right) + -180, // ! (offscreen right) }; -s16 D_801BFCB8[2][3] = { + +s16 sPerfectLettersType2PrimColorTargets[2][3] = { { 255, 255, 255 }, { 255, 165, 55 }, }; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8011BF70.s") +void Interface_UpdatePerfectLettersType2(PlayState* play) { + s16 i; + InterfaceContext* interfaceCtx = &play->interfaceCtx; + s16 colorStepR; + s16 colorStepG; + s16 colorStepB; + s16 colorStepA; + s16 j = 0; // unused incrementer -TexturePtr D_801BFCC4[] = { - gMinigameLetterPTex, gMinigameLetterETex, gMinigameLetterRTex, gMinigameLetterFTex, - gMinigameLetterETex, gMinigameLetterCTex, gMinigameLetterTTex, gMinigameExclamationTex, + // Update letter positions + for (i = 0; i < interfaceCtx->perfectLettersCount; i++, j += 4) { + if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_INIT) { + // Initialize letter positions along the elliptical spirals + interfaceCtx->perfectLettersAngles[i] = i * (0x10000 / PERFECT_LETTERS_NUM_LETTERS); + interfaceCtx->perfectLettersSemiAxisX[i] = 200.0f; + interfaceCtx->perfectLettersSemiAxisY[i] = 200.0f; + + interfaceCtx->perfectLettersOffsetX[i] = 0; + interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_ENTER; + } else if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_ENTER) { + // Swirl inwards along elliptical spirals to the center of the screen + interfaceCtx->perfectLettersAngles[i] -= 0x800; + interfaceCtx->perfectLettersSemiAxisX[i] -= 8.0f; + interfaceCtx->perfectLettersSemiAxisY[i] -= 8.0f; + + if (interfaceCtx->perfectLettersSemiAxisX[i] <= 0.0f) { + // The letter has reached the center of the screen + interfaceCtx->perfectLettersSemiAxisY[i] = 0.0f; + interfaceCtx->perfectLettersSemiAxisX[i] = 0.0f; + interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_STATIONARY; + + if (i == (PERFECT_LETTERS_NUM_LETTERS - 1)) { + // The last letter has reached the center of the screen + interfaceCtx->perfectLettersColorTimer = 5; + interfaceCtx->perfectLettersState[0] = interfaceCtx->perfectLettersState[1] = + interfaceCtx->perfectLettersState[2] = interfaceCtx->perfectLettersState[3] = + interfaceCtx->perfectLettersState[4] = interfaceCtx->perfectLettersState[5] = + interfaceCtx->perfectLettersState[6] = interfaceCtx->perfectLettersState[7] = + PERFECT_LETTERS_STATE_SPREAD; + } + } + } else if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_SPREAD) { + // Spread out the letters horizontally from the center to the spelt-out word + colorStepR = ABS_ALT(interfaceCtx->perfectLettersOffsetX[i] - sPerfectLettersType2SpellingOffsetsX[i]) / + interfaceCtx->perfectLettersColorTimer; + if (interfaceCtx->perfectLettersOffsetX[i] >= sPerfectLettersType2SpellingOffsetsX[i]) { + interfaceCtx->perfectLettersOffsetX[i] -= colorStepR; + } else { + interfaceCtx->perfectLettersOffsetX[i] += colorStepR; + } + } else if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_EXIT) { + // Spread out the letters horizontally from the spelt-out world to offscreen + colorStepR = ABS_ALT(interfaceCtx->perfectLettersOffsetX[i] - sPerfectLettersType2OffScreenOffsetsX[i]) / + interfaceCtx->perfectLettersColorTimer; + if (interfaceCtx->perfectLettersOffsetX[i] >= sPerfectLettersType2OffScreenOffsetsX[i]) { + interfaceCtx->perfectLettersOffsetX[i] -= colorStepR; + } else { + interfaceCtx->perfectLettersOffsetX[i] += colorStepR; + } + } + } + + if ((interfaceCtx->perfectLettersState[0] == PERFECT_LETTERS_STATE_SPREAD) || + (interfaceCtx->perfectLettersState[0] == PERFECT_LETTERS_STATE_EXIT)) { + if (interfaceCtx->perfectLettersState[0] == PERFECT_LETTERS_STATE_EXIT) { + colorStepA = interfaceCtx->perfectLettersPrimColor[3] / interfaceCtx->perfectLettersColorTimer; + interfaceCtx->perfectLettersPrimColor[3] -= colorStepA; + } + interfaceCtx->perfectLettersColorTimer--; + if (interfaceCtx->perfectLettersColorTimer == 0) { + + if (interfaceCtx->perfectLettersState[0] == PERFECT_LETTERS_STATE_SPREAD) { + for (i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) { + interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_DISPLAY; + } + interfaceCtx->perfectLettersColorTimer = 20; + } else { + for (i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) { + interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_OFF; + } + interfaceCtx->perfectLettersOn = false; + } + } + } + + // Initialize the next letter in the list + if (interfaceCtx->perfectLettersState[interfaceCtx->perfectLettersCount] == PERFECT_LETTERS_STATE_OFF) { + if (interfaceCtx->perfectLettersCount < PERFECT_LETTERS_NUM_LETTERS) { + interfaceCtx->perfectLettersState[interfaceCtx->perfectLettersCount] = PERFECT_LETTERS_STATE_INIT; + interfaceCtx->perfectLettersCount++; + } + } + + // Update letter colors + if (interfaceCtx->perfectLettersCount == PERFECT_LETTERS_NUM_LETTERS) { + if (interfaceCtx->perfectLettersState[PERFECT_LETTERS_NUM_LETTERS - 1] == PERFECT_LETTERS_STATE_DISPLAY) { + + colorStepR = ABS_ALT(interfaceCtx->perfectLettersPrimColor[0] - + sPerfectLettersType2PrimColorTargets[interfaceCtx->perfectLettersColorIndex][0]) / + interfaceCtx->perfectLettersColorTimer; + colorStepG = ABS_ALT(interfaceCtx->perfectLettersPrimColor[1] - + sPerfectLettersType2PrimColorTargets[interfaceCtx->perfectLettersColorIndex][1]) / + interfaceCtx->perfectLettersColorTimer; + colorStepB = ABS_ALT(interfaceCtx->perfectLettersPrimColor[2] - + sPerfectLettersType2PrimColorTargets[interfaceCtx->perfectLettersColorIndex][2]) / + interfaceCtx->perfectLettersColorTimer; + + if (interfaceCtx->perfectLettersPrimColor[0] >= + sPerfectLettersType2PrimColorTargets[interfaceCtx->perfectLettersColorIndex][0]) { + interfaceCtx->perfectLettersPrimColor[0] -= colorStepR; + } else { + interfaceCtx->perfectLettersPrimColor[0] += colorStepR; + } + + if (interfaceCtx->perfectLettersPrimColor[1] >= + sPerfectLettersType2PrimColorTargets[interfaceCtx->perfectLettersColorIndex][1]) { + interfaceCtx->perfectLettersPrimColor[1] -= colorStepG; + } else { + interfaceCtx->perfectLettersPrimColor[1] += colorStepG; + } + + if (interfaceCtx->perfectLettersPrimColor[2] >= + sPerfectLettersType2PrimColorTargets[interfaceCtx->perfectLettersColorIndex][2]) { + interfaceCtx->perfectLettersPrimColor[2] -= colorStepB; + } else { + interfaceCtx->perfectLettersPrimColor[2] += colorStepB; + } + + interfaceCtx->perfectLettersColorTimer--; + if (interfaceCtx->perfectLettersColorTimer == 0) { + interfaceCtx->perfectLettersColorTimer = 20; + interfaceCtx->perfectLettersColorIndex ^= 1; + interfaceCtx->perfectLettersTimer++; + if (interfaceCtx->perfectLettersTimer == 6) { + for (i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) { + interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_EXIT; + } + interfaceCtx->perfectLettersColorTimer = 5; + } + } + } + } +} + +// Targets to offset each letter to properly spell "PERFECT!" +s16 sPerfectLettersType3SpellingOffsetsX[PERFECT_LETTERS_NUM_LETTERS] = { + 78, // P + 54, // E + 29, // R + 5, // F + -18, // E + -42, // C + -67, // T + -85, // ! }; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8011C4C4.s") +// Targets to sweep each letter's angle along an elliptical spiral offscreen +u16 sPerfectLettersType3OffScreenAngles[PERFECT_LETTERS_NUM_LETTERS] = { + 6 * PERFECT_LETTERS_ANGLE_PER_LETTER, // P + 7 * PERFECT_LETTERS_ANGLE_PER_LETTER, // E + 0 * PERFECT_LETTERS_ANGLE_PER_LETTER, // R + 1 * PERFECT_LETTERS_ANGLE_PER_LETTER, // F + 5 * PERFECT_LETTERS_ANGLE_PER_LETTER, // E + 4 * PERFECT_LETTERS_ANGLE_PER_LETTER, // C + 3 * PERFECT_LETTERS_ANGLE_PER_LETTER, // T + 2 * PERFECT_LETTERS_ANGLE_PER_LETTER, // ! +}; + +s16 sPerfectLettersType3PrimColorTargets[2][3] = { + { 255, 255, 255 }, + { 255, 165, 55 }, +}; + +void Interface_UpdatePerfectLettersType3(PlayState* play) { + s16 i; + InterfaceContext* interfaceCtx = &play->interfaceCtx; + s16 colorStepR; + s16 colorStepG; + s16 colorStepB; + s16 j = 0; + + // Update letter positions + for (i = 0; i < interfaceCtx->perfectLettersCount; i++, j += 4) { + if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_INIT) { + // Initialize letter positions along the elliptical spirals + interfaceCtx->perfectLettersAngles[i] = i * (0x10000 / PERFECT_LETTERS_NUM_LETTERS); + interfaceCtx->perfectLettersSemiAxisX[i] = 200.0f; + interfaceCtx->perfectLettersSemiAxisY[i] = 200.0f; + + interfaceCtx->perfectLettersOffsetX[i] = 0; + interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_ENTER; + } else if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_ENTER) { + // Swirl inwards along elliptical spirals to the center of the screen + interfaceCtx->perfectLettersAngles[i] -= 0x800; + interfaceCtx->perfectLettersSemiAxisX[i] -= 8.0f; + interfaceCtx->perfectLettersSemiAxisY[i] -= 8.0f; + + if (interfaceCtx->perfectLettersSemiAxisX[i] <= 0.0f) { + // The letter has reached the center of the screen + interfaceCtx->perfectLettersSemiAxisY[i] = 0.0f; + interfaceCtx->perfectLettersSemiAxisX[i] = 0.0f; + interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_STATIONARY; + + if (i == (PERFECT_LETTERS_NUM_LETTERS - 1)) { + // The last letter has reached the center of the screen + interfaceCtx->perfectLettersColorTimer = 5; + interfaceCtx->perfectLettersState[0] = interfaceCtx->perfectLettersState[1] = + interfaceCtx->perfectLettersState[2] = interfaceCtx->perfectLettersState[3] = + interfaceCtx->perfectLettersState[4] = interfaceCtx->perfectLettersState[5] = + interfaceCtx->perfectLettersState[6] = interfaceCtx->perfectLettersState[7] = + PERFECT_LETTERS_STATE_SPREAD; + } + } + } else if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_SPREAD) { + // Spread out the letters horizontally from the center to the spelt-out word + colorStepR = ABS_ALT(interfaceCtx->perfectLettersOffsetX[i] - sPerfectLettersType3SpellingOffsetsX[i]) / + interfaceCtx->perfectLettersColorTimer; + if (interfaceCtx->perfectLettersOffsetX[i] >= sPerfectLettersType3SpellingOffsetsX[i]) { + interfaceCtx->perfectLettersOffsetX[i] -= colorStepR; + } else { + interfaceCtx->perfectLettersOffsetX[i] += colorStepR; + } + } else if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_EXIT) { + // Swirl outwards along elliptical spirals offscreen + interfaceCtx->perfectLettersAngles[i] -= 0x800; + if (interfaceCtx->perfectLettersAngles[i] == (u16)(sPerfectLettersType3OffScreenAngles[i] - 0x8000)) { + interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_OFF; + } + } + } + + if (interfaceCtx->perfectLettersState[0] == PERFECT_LETTERS_STATE_SPREAD) { + interfaceCtx->perfectLettersColorTimer--; + if (interfaceCtx->perfectLettersColorTimer == 0) { + for (i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) { + interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_DISPLAY; + } + interfaceCtx->perfectLettersColorTimer = 20; + } + } + + // Initialize the next letter in the list + if ((interfaceCtx->perfectLettersState[interfaceCtx->perfectLettersCount] == PERFECT_LETTERS_STATE_OFF) && + (interfaceCtx->perfectLettersCount < PERFECT_LETTERS_NUM_LETTERS)) { + interfaceCtx->perfectLettersState[interfaceCtx->perfectLettersCount] = PERFECT_LETTERS_STATE_INIT; + interfaceCtx->perfectLettersCount++; + } + + // Update letter colors + if ((interfaceCtx->perfectLettersCount == PERFECT_LETTERS_NUM_LETTERS) && + (interfaceCtx->perfectLettersState[PERFECT_LETTERS_NUM_LETTERS - 1] == PERFECT_LETTERS_STATE_DISPLAY)) { + + colorStepR = ABS_ALT(interfaceCtx->perfectLettersPrimColor[0] - + sPerfectLettersType3PrimColorTargets[interfaceCtx->perfectLettersColorIndex][0]) / + interfaceCtx->perfectLettersColorTimer; + colorStepG = ABS_ALT(interfaceCtx->perfectLettersPrimColor[1] - + sPerfectLettersType3PrimColorTargets[interfaceCtx->perfectLettersColorIndex][1]) / + interfaceCtx->perfectLettersColorTimer; + colorStepB = ABS_ALT(interfaceCtx->perfectLettersPrimColor[2] - + sPerfectLettersType3PrimColorTargets[interfaceCtx->perfectLettersColorIndex][2]) / + interfaceCtx->perfectLettersColorTimer; + + if (interfaceCtx->perfectLettersPrimColor[0] >= + sPerfectLettersType3PrimColorTargets[interfaceCtx->perfectLettersColorIndex][0]) { + interfaceCtx->perfectLettersPrimColor[0] -= colorStepR; + } else { + interfaceCtx->perfectLettersPrimColor[0] += colorStepR; + } + + if (interfaceCtx->perfectLettersPrimColor[1] >= + sPerfectLettersType3PrimColorTargets[interfaceCtx->perfectLettersColorIndex][1]) { + interfaceCtx->perfectLettersPrimColor[1] -= colorStepG; + } else { + interfaceCtx->perfectLettersPrimColor[1] += colorStepG; + } + + if (interfaceCtx->perfectLettersPrimColor[2] >= + sPerfectLettersType3PrimColorTargets[interfaceCtx->perfectLettersColorIndex][2]) { + interfaceCtx->perfectLettersPrimColor[2] -= colorStepB; + } else { + interfaceCtx->perfectLettersPrimColor[2] += colorStepB; + } + + interfaceCtx->perfectLettersColorTimer--; + if (interfaceCtx->perfectLettersColorTimer == 0) { + interfaceCtx->perfectLettersColorTimer = 20; + interfaceCtx->perfectLettersColorIndex ^= 1; + interfaceCtx->perfectLettersTimer++; + if (interfaceCtx->perfectLettersTimer == 6) { + for (i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) { + interfaceCtx->perfectLettersSemiAxisX[i] = 140.0f; + interfaceCtx->perfectLettersSemiAxisY[i] = 100.0f; + interfaceCtx->perfectLettersAngles[i] = sPerfectLettersType3OffScreenAngles[i]; + interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_EXIT; + } + interfaceCtx->perfectLettersColorTimer = 5; + } + } + } + + j = 0; + for (i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) { + if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_OFF) { + j++; + } + } + + if (j == PERFECT_LETTERS_NUM_LETTERS) { + interfaceCtx->perfectLettersOn = false; + } +} + +TexturePtr sPerfectLettersTextures[PERFECT_LETTERS_NUM_LETTERS] = { + gPerfectLetterPTex, gPerfectLetterETex, gPerfectLetterRTex, gPerfectLetterFTex, + gPerfectLetterETex, gPerfectLetterCTex, gPerfectLetterTTex, gPerfectLetterExclamationTex, +}; + +void Interface_DrawPerfectLetters(PlayState* play) { + InterfaceContext* interfaceCtx = &play->interfaceCtx; + f32 letterX; + f32 letterY; + s16 i; + s16 vtxOffset; + + OPEN_DISPS(play->state.gfxCtx); + + func_8012C8D4(play->state.gfxCtx); + + gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, + PRIMITIVE, 0); + + for (vtxOffset = 0, i = 0; i < PERFECT_LETTERS_NUM_LETTERS; vtxOffset += 4, i++) { + if (interfaceCtx->perfectLettersState[i] != PERFECT_LETTERS_STATE_OFF) { + + // The positions follow the path of an elliptical spiral + letterX = Math_SinS(interfaceCtx->perfectLettersAngles[i]) * interfaceCtx->perfectLettersSemiAxisX[i]; + letterY = Math_CosS(interfaceCtx->perfectLettersAngles[i]) * interfaceCtx->perfectLettersSemiAxisY[i]; + + // Draw Minigame Perfect Shadows + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, interfaceCtx->perfectLettersPrimColor[3]); + + Matrix_Translate(letterX, letterY, 0.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[44 + vtxOffset], 4, 0); + + OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sPerfectLettersTextures[i], 4, 32, 33, 0); + + // Draw Minigame Perfect Colored Letters + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, interfaceCtx->perfectLettersPrimColor[0], + interfaceCtx->perfectLettersPrimColor[1], interfaceCtx->perfectLettersPrimColor[2], + interfaceCtx->perfectLettersPrimColor[3]); + + Matrix_Translate(letterX, letterY, 0.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[76 + vtxOffset], 4, 0); + + OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sPerfectLettersTextures[i], 4, 32, 33, 0); + } + } + + CLOSE_DISPS(play->state.gfxCtx); +} void Interface_StartMoonCrash(PlayState* play) { if (play->actorCtx.flags & ACTORCTX_FLAG_1) { @@ -2619,7 +4333,7 @@ void Interface_StartMoonCrash(PlayState* play) { play->nextEntrance = ENTRANCE(TERMINA_FIELD, 12); gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; } void Interface_GetTimerDigits(u64 timer, s16* timerArr) { @@ -2673,7 +4387,7 @@ void Interface_DrawTimers(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; Player* player = GET_PLAYER(play); OSTime osTime; - OSTime timerOsTime; + OSTime postmanTimerStopOsTime; s16 j; s16 i; @@ -2723,10 +4437,10 @@ void Interface_DrawTimers(PlayState* play) { break; case TIMER_STATE_POSTMAN_STOP: - timerOsTime = gSaveContext.postmanTimerStopOsTime; - gSaveContext.timerCurTimes[TIMER_ID_POSTMAN] = - OSTIME_TO_TIMER(timerOsTime - ((void)0, gSaveContext.timerStartOsTimes[TIMER_ID_POSTMAN]) - - ((void)0, gSaveContext.timerPausedOsTimes[TIMER_ID_POSTMAN])); + postmanTimerStopOsTime = gSaveContext.postmanTimerStopOsTime; + gSaveContext.timerCurTimes[TIMER_ID_POSTMAN] = OSTIME_TO_TIMER( + postmanTimerStopOsTime - ((void)0, gSaveContext.timerStartOsTimes[TIMER_ID_POSTMAN]) - + ((void)0, gSaveContext.timerPausedOsTimes[TIMER_ID_POSTMAN])); gSaveContext.timerStates[TIMER_ID_POSTMAN] = TIMER_STATE_POSTMAN_END; func_80174F9C(Interface_PostmanTimerCallback, NULL); break; @@ -2743,7 +4457,7 @@ void Interface_DrawTimers(PlayState* play) { case TIMER_STATE_START: case TIMER_STATE_ALT_START: sTimerStateTimer = 20; - if (interfaceCtx->unk_280 != 0) { + if (interfaceCtx->minigameState != MINIGAME_STATE_NONE) { // Set the timer position gSaveContext.timerX[sTimerId] = 26; @@ -2756,7 +4470,8 @@ void Interface_DrawTimers(PlayState* play) { gSaveContext.timerY[sTimerId] = 46; } - if ((interfaceCtx->unk_280 == 8) || (interfaceCtx->unk_280 == 30)) { + if ((interfaceCtx->minigameState == MINIGAME_STATE_COUNTDOWN_GO) || + (interfaceCtx->minigameState == MINIGAME_STATE_PLAYING)) { if (gSaveContext.timerStates[sTimerId] == TIMER_STATE_START) { gSaveContext.timerStates[sTimerId] = TIMER_STATE_COUNTING; } else { @@ -2846,7 +4561,7 @@ void Interface_DrawTimers(PlayState* play) { gSaveContext.timerStates[sTimerId] = TIMER_STATE_COUNTING; break; - case TIMER_STATE_ENV_START: + case TIMER_STATE_ENV_HAZARD_START: gSaveContext.timerCurTimes[sTimerId] = SECONDS_TO_TIMER(gSaveContext.save.playerData.health >> 1); gSaveContext.timerDirections[sTimerId] = TIMER_COUNT_DOWN; gSaveContext.timerTimeLimits[sTimerId] = gSaveContext.timerCurTimes[sTimerId]; @@ -2888,13 +4603,13 @@ void Interface_DrawTimers(PlayState* play) { OSTIME_TO_TIMER(osTime - ((void)0, gSaveContext.timerStartOsTimes[sTimerId]) - ((void)0, gSaveContext.timerPausedOsTimes[sTimerId])); - if ((gSaveContext.minigameState == 1) && + if ((gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) && (gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0))) { if (gSaveContext.timerStopTimes[sTimerId] >= SECONDS_TO_TIMER(120)) { gSaveContext.timerStopTimes[sTimerId] = SECONDS_TO_TIMER(120); gSaveContext.timerCurTimes[sTimerId] = SECONDS_TO_TIMER(120); } - } else if ((gSaveContext.eventInf[3] & 0x10) && (play->sceneId == SCENE_DEKUTES) && + } else if (CHECK_EVENTINF(EVENTINF_34) && (play->sceneId == SCENE_DEKUTES) && (gSaveContext.timerStopTimes[sTimerId] >= SECONDS_TO_TIMER(120))) { gSaveContext.timerCurTimes[sTimerId] = SECONDS_TO_TIMER(120); } @@ -2999,11 +4714,12 @@ void Interface_DrawTimers(PlayState* play) { osTime = SECONDS_TO_TIMER(0); } - if ((gSaveContext.minigameState == 1) && (gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0))) { + if ((gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) && + (gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0))) { if (osTime >= SECONDS_TO_TIMER(120)) { osTime = SECONDS_TO_TIMER(120); } - } else if ((gSaveContext.eventInf[3] & 0x10) && (play->sceneId == SCENE_DEKUTES) && + } else if (CHECK_EVENTINF(EVENTINF_34) && (play->sceneId == SCENE_DEKUTES) && (osTime >= SECONDS_TO_TIMER(120))) { osTime = SECONDS_TO_TIMER(120); } @@ -3014,13 +4730,14 @@ void Interface_DrawTimers(PlayState* play) { Interface_GetTimerDigits(osTime, sTimerDigits); // Use seconds to determine when to beep - if ((gSaveContext.minigameState == 1) && (gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0))) { + if ((gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) && + (gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0))) { if ((gSaveContext.timerCurTimes[sTimerId] > SECONDS_TO_TIMER(110)) && (sTimerBeepSfxSeconds != sTimerDigits[4])) { play_sound(NA_SE_SY_WARNING_COUNT_E); sTimerBeepSfxSeconds = sTimerDigits[4]; } - } else if ((gSaveContext.eventInf[3] & 0x10) && (play->sceneId == SCENE_DEKUTES)) { + } else if (CHECK_EVENTINF(EVENTINF_34) && (play->sceneId == SCENE_DEKUTES)) { if ((((void)0, gSaveContext.timerCurTimes[sTimerId]) > (gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1] - SECONDS_TO_TIMER(9))) && (sTimerBeepSfxSeconds != sTimerDigits[4])) { @@ -3034,9 +4751,9 @@ void Interface_DrawTimers(PlayState* play) { gDPPipeSync(OVERLAY_DISP++); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0); - OVERLAY_DISP = - func_8010CD98(OVERLAY_DISP, gTimerClockIconTex, 0x10, 0x10, ((void)0, gSaveContext.timerX[sTimerId]), - ((void)0, gSaveContext.timerY[sTimerId]) + 2, 0x10, 0x10, 1 << 10, 1 << 10); + OVERLAY_DISP = Gfx_DrawTexRectIA8( + OVERLAY_DISP, gTimerClockIconTex, 0x10, 0x10, ((void)0, gSaveContext.timerX[sTimerId]), + ((void)0, gSaveContext.timerY[sTimerId]) + 2, 0x10, 0x10, 1 << 10, 1 << 10); gDPPipeSync(OVERLAY_DISP++); gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); @@ -3051,14 +4768,14 @@ void Interface_DrawTimers(PlayState* play) { } else { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255); } - } else if ((gSaveContext.minigameState == 1) && + } else if ((gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) && (gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0))) { if (gSaveContext.timerCurTimes[sTimerId] >= SECONDS_TO_TIMER(110)) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255); } else { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255); } - } else if ((gSaveContext.eventInf[3] & 0x10) && (play->sceneId == SCENE_DEKUTES)) { + } else if (CHECK_EVENTINF(EVENTINF_34) && (play->sceneId == SCENE_DEKUTES)) { if (((void)0, gSaveContext.timerCurTimes[sTimerId]) >= gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1]) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255); @@ -3083,7 +4800,7 @@ void Interface_DrawTimers(PlayState* play) { if (sPostmanBunnyHoodState == POSTMAN_MINIGAME_BUNNY_HOOD_ON) { // draw sTimerDigits[3] (10s of seconds) to sTimerDigits[6] (100s of milliseconds) for (j = 0; j < 4; j++) { - OVERLAY_DISP = func_8010D7D0( + OVERLAY_DISP = Gfx_DrawTexRectI8( OVERLAY_DISP, ((u8*)gCounterDigit0Tex + (8 * 16 * sTimerDigits[j + 3])), 8, 0x10, ((void)0, gSaveContext.timerX[sTimerId]) + sTimerDigitsOffsetX[j], ((void)0, gSaveContext.timerY[sTimerId]), sTimerDigitsWidth[j], 0xFA, 0x370, 0x370); @@ -3091,7 +4808,7 @@ void Interface_DrawTimers(PlayState* play) { } else { // draw sTimerDigits[3] (10s of seconds) to sTimerDigits[7] (10s of milliseconds) for (j = 0; j < 5; j++) { - OVERLAY_DISP = func_8010D7D0( + OVERLAY_DISP = Gfx_DrawTexRectI8( OVERLAY_DISP, ((u8*)gCounterDigit0Tex + (8 * 16 * sTimerDigits[j + 3])), 8, 0x10, ((void)0, gSaveContext.timerX[sTimerId]) + sTimerDigitsOffsetX[j], ((void)0, gSaveContext.timerY[sTimerId]), sTimerDigitsWidth[j], 0xFA, 0x370, 0x370); @@ -3100,7 +4817,7 @@ void Interface_DrawTimers(PlayState* play) { } else { // draw sTimerDigits[3] (6s of minutes) to sTimerDigits[7] (10s of milliseconds) for (j = 0; j < 8; j++) { - OVERLAY_DISP = func_8010D7D0( + OVERLAY_DISP = Gfx_DrawTexRectI8( OVERLAY_DISP, ((u8*)gCounterDigit0Tex + (8 * 16 * sTimerDigits[j])), 8, 0x10, ((void)0, gSaveContext.timerX[sTimerId]) + sTimerDigitsOffsetX[j], ((void)0, gSaveContext.timerY[sTimerId]), sTimerDigitsWidth[j], 0xFA, 0x370, 0x370); @@ -3185,66 +4902,1196 @@ void Interface_UpdateBottleTimers(PlayState* play) { } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8011E730.s") +void Interface_DrawMinigameIcons(PlayState* play) { + InterfaceContext* interfaceCtx = &play->interfaceCtx; + s16 i; + s16 numDigitsDrawn; + s16 rectX; + s16 rectY; + s16 width; + s16 height; -// rupeeDigitsFirst -s16 D_801BFD1C[] = { 1, 0, 0, 0 }; -// rupeeDigitsCount -s16 D_801BFD24[] = { 2, 3, 3, 0 }; -// rupeeIconPrimColor -Color_RGB16 D_801BFD2C[] = { + OPEN_DISPS(play->state.gfxCtx); + + func_8012C654(play->state.gfxCtx); + + if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) { + // Carrots rendering if the action corresponds to riding a horse + if (interfaceCtx->unk_212 == DO_ACTION_FASTER) { + // Load Carrot Icon + gDPLoadTextureBlock(OVERLAY_DISP++, gCarrotIconTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 16, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + + rectX = 110; + rectY = (interfaceCtx->minigameState != MINIGAME_STATE_NONE) ? 200 : 56; + + // Draw 6 carrots + for (i = 1; i < 7; i++, rectX += 16) { + // Carrot Color (based on availability) + if ((interfaceCtx->numHorseBoosts == 0) || (interfaceCtx->numHorseBoosts < i)) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 150, 255, interfaceCtx->aAlpha); + } else { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->aAlpha); + } + + gSPTextureRectangle(OVERLAY_DISP++, rectX << 2, rectY << 2, (rectX + 16) << 2, (rectY + 16) << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + } + } + + if (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) { + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + width = 24; + height = 16; + rectX = 20; + if (gSaveContext.save.playerData.healthCapacity > 0xA0) { + rectY = 75; // two rows of hearts + } else { + rectY = 67; // one row of hearts + } + + if (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 1)) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->bAlpha); + gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); + gDPLoadTextureBlock(OVERLAY_DISP++, gBeaverRingIconTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 24, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + } else if (play->sceneId == SCENE_DOUJOU) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 140, 50, interfaceCtx->bAlpha); + gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); + gDPLoadTextureBlock(OVERLAY_DISP++, gSwordTrainingLogIconTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + } else if (play->sceneId == SCENE_30GYOSON) { + width = 16; + height = 30; + rectX = 24; + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 100, 75, interfaceCtx->bAlpha); + gDPSetEnvColor(OVERLAY_DISP++, 55, 55, 0, 255); + gDPLoadTextureBlock(OVERLAY_DISP++, gFishermanMinigameTorchIconTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 30, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + } else { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->bAlpha); + gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); + gDPLoadTextureBlock(OVERLAY_DISP++, gArcheryScoreIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 24, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + } + + gSPTextureRectangle(OVERLAY_DISP++, (rectX << 2), (rectY << 2), ((rectX + width) << 2), + ((rectY + height) << 2), G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->bAlpha); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, + 0, PRIMITIVE, 0); + + if (play->sceneId == SCENE_30GYOSON) { + rectX += 20; + if (gSaveContext.save.playerData.healthCapacity > 0xA0) { + rectY = 87; // two rows of hearts + } else { + rectY = 79; // one row of hearts + } + } else { + rectX += 26; + } + + for (i = 0, numDigitsDrawn = 0; i < 4; i++) { + if ((sMinigameScoreDigits[i] != 0) || (numDigitsDrawn != 0) || (i >= 3)) { + OVERLAY_DISP = + Gfx_DrawTexRectI8(OVERLAY_DISP, ((u8*)gCounterDigit0Tex + (8 * 16 * sMinigameScoreDigits[i])), + 8, 0x10, rectX, rectY - 2, 9, 0xFA, 0x370, 0x370); + rectX += 9; + numDigitsDrawn++; + } + } + + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + } + } + + CLOSE_DISPS(play->state.gfxCtx); +} + +s16 sRupeeDigitsFirst[] = { 1, 0, 0, 0 }; + +s16 sRupeeDigitsCount[] = { 2, 3, 3, 0 }; + +Color_RGB16 sRupeeCounterIconPrimColors[] = { { 200, 255, 100 }, { 170, 170, 255 }, { 255, 105, 105 }, }; -// rupeeIconEnvColor -Color_RGB16 D_801BFD40[] = { + +Color_RGB16 sRupeeCounterIconEnvColors[] = { { 0, 80, 0 }, { 10, 10, 80 }, { 40, 10, 0 }, }; -// minigameCountdownTexs -TexturePtr D_801BFD54[] = { + +TexturePtr sMinigameCountdownTextures[] = { gMinigameCountdown3Tex, gMinigameCountdown2Tex, gMinigameCountdown1Tex, gMinigameCountdownGoTex, }; -// minigameCountdownTexHeights -s16 D_801BFD64[] = { 24, 24, 24, 40 }; -// minigameCountdownPrimColor -Color_RGB16 D_801BFD6C[] = { + +s16 sMinigameCountdownTexWidths[] = { 24, 24, 24, 40 }; + +Color_RGB16 sMinigameCountdownPrimColors[] = { { 100, 255, 100 }, { 255, 255, 60 }, { 255, 100, 0 }, { 120, 170, 255 }, }; -// grandma's story pictures -TexturePtr D_801BFD84[] = { + +TexturePtr sStoryTextures[] = { gStoryMaskFestivalTex, gStoryGiantsLeavingTex, }; -// grandma's story TLUT -TexturePtr D_801BFD8C[] = { + +TexturePtr sStoryTLUTs[] = { gStoryMaskFestivalTLUT, gStoryGiantsLeavingTLUT, }; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8011F0E0.s") +void Interface_Draw(PlayState* play) { + s32 pad; + InterfaceContext* interfaceCtx = &play->interfaceCtx; + Player* player = GET_PLAYER(play); + Gfx* gfx; + s16 sp2CE; + s16 sp2CC; + s16 sp2CA; + s16 sp2C8; + PauseContext* pauseCtx = &play->pauseCtx; + f32 minigameCountdownScale; + s16 counterDigits[4]; + s16 magicAlpha; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80120F90.s") + OPEN_DISPS(play->state.gfxCtx); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80121064.s") + gSPSegment(OVERLAY_DISP++, 0x02, interfaceCtx->parameterSegment); + gSPSegment(OVERLAY_DISP++, 0x09, interfaceCtx->doActionSegment); + gSPSegment(OVERLAY_DISP++, 0x08, interfaceCtx->iconItemSegment); + gSPSegment(OVERLAY_DISP++, 0x0B, interfaceCtx->mapSegment); -u8 D_801BFD94 = 0; -s16 D_801BFD98 = 0; -s16 D_801BFD9C = 0; + if (pauseCtx->debugEditor == DEBUG_EDITOR_NONE) { + Interface_SetVertices(play); + func_801170B8(interfaceCtx); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_801210E0.s") + // Draw Grandma's Story + if (interfaceCtx->storyDmaStatus == STORY_DMA_DONE) { + gSPSegment(OVERLAY_DISP++, 0x07, interfaceCtx->storySegment); + func_8012C628(play->state.gfxCtx); + + gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_POINT); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + + // Load in Grandma's Story + gSPLoadUcodeL(OVERLAY_DISP++, gspS2DEX2_fifo); + gfx = OVERLAY_DISP; + func_80172758(&gfx, sStoryTextures[interfaceCtx->storyType], sStoryTLUTs[interfaceCtx->storyType], + SCREEN_WIDTH, SCREEN_HEIGHT, 2, 1, 0x8000, 0x100, 0.0f, 0.0f, 1.0f, 1.0f, 0); + OVERLAY_DISP = gfx; + gSPLoadUcode(OVERLAY_DISP++, SysUcode_GetUCode(), SysUcode_GetUCodeData()); + + gDPPipeSync(OVERLAY_DISP++); + + // Fill the screen with a black rectangle + gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, R_STORY_FILL_SCREEN_ALPHA); + gDPFillRectangle(OVERLAY_DISP++, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); + } + + LifeMeter_Draw(play); + + func_8012C654(play->state.gfxCtx); + + // Draw Rupee Icon + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sRupeeCounterIconPrimColors[CUR_UPG_VALUE(UPG_WALLET)].r, + sRupeeCounterIconPrimColors[CUR_UPG_VALUE(UPG_WALLET)].g, + sRupeeCounterIconPrimColors[CUR_UPG_VALUE(UPG_WALLET)].b, interfaceCtx->magicAlpha); + gDPSetEnvColor(OVERLAY_DISP++, sRupeeCounterIconEnvColors[CUR_UPG_VALUE(UPG_WALLET)].r, + sRupeeCounterIconEnvColors[CUR_UPG_VALUE(UPG_WALLET)].g, + sRupeeCounterIconEnvColors[CUR_UPG_VALUE(UPG_WALLET)].b, 255); + OVERLAY_DISP = + Gfx_DrawTexRectIA8(OVERLAY_DISP, gRupeeCounterIconTex, 16, 16, 26, 206, 16, 16, 1 << 10, 1 << 10); + + switch (play->sceneId) { + case SCENE_INISIE_N: + case SCENE_INISIE_R: + case SCENE_MITURIN: + case SCENE_HAKUGIN: + case SCENE_SEA: + if (DUNGEON_KEY_COUNT(gSaveContext.mapIndex) >= 0) { + // Small Key Icon + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 230, 255, interfaceCtx->magicAlpha); + gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 20, 255); + OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, gSmallKeyCounterIconTex, 16, 16, 26, 190, 16, 16, + 1 << 10, 1 << 10); + + // Small Key Counter + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, + TEXEL0, 0, PRIMITIVE, 0); + + counterDigits[2] = 0; + counterDigits[3] = DUNGEON_KEY_COUNT(gSaveContext.mapIndex); + + while (counterDigits[3] >= 10) { + counterDigits[2]++; + counterDigits[3] -= 10; + } + + sp2CA = 42; + + if (counterDigits[2] != 0) { + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, interfaceCtx->magicAlpha); + + OVERLAY_DISP = + Gfx_DrawTexRectI8(OVERLAY_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[2]), 8, 16, + 43, 191, 8, 16, 1 << 10, 1 << 10); + + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->magicAlpha); + gSPTextureRectangle(OVERLAY_DISP++, 168, 760, 200, 824, G_TX_RENDERTILE, 0, 0, 1 << 10, + 1 << 10); + + sp2CA += 8; + } + + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, interfaceCtx->magicAlpha); + + OVERLAY_DISP = Gfx_DrawTexRectI8(OVERLAY_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[3]), + 8, 16, sp2CA + 1, 191, 8, 16, 1 << 10, 1 << 10); + + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->magicAlpha); + gSPTextureRectangle(OVERLAY_DISP++, sp2CA * 4, 760, (sp2CA * 4) + 0x20, 824, G_TX_RENDERTILE, 0, 0, + 1 << 10, 1 << 10); + } + break; + + case SCENE_KINSTA1: + case SCENE_KINDAN2: + // Gold Skulltula Icon + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->magicAlpha); + gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); + gDPLoadTextureBlock(OVERLAY_DISP++, gGoldSkulltulaCounterIconTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 24, 24, + 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(OVERLAY_DISP++, 80, 748, 176, 820, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + + // Gold Skulluta Counter + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, + TEXEL0, 0, PRIMITIVE, 0); + + counterDigits[2] = 0; + counterDigits[3] = Inventory_GetSkullTokenCount(play->sceneId); + + while (counterDigits[3] >= 10) { + counterDigits[2]++; + counterDigits[3] -= 10; + } + + sp2CA = 42; + + if (counterDigits[2] != 0) { + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, interfaceCtx->magicAlpha); + + OVERLAY_DISP = Gfx_DrawTexRectI8(OVERLAY_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[2]), + 8, 16, 43, 191, 8, 16, 1 << 10, 1 << 10); + + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->magicAlpha); + gSPTextureRectangle(OVERLAY_DISP++, 168, 760, 200, 824, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + + sp2CA += 8; + } + + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, interfaceCtx->magicAlpha); + + OVERLAY_DISP = Gfx_DrawTexRectI8(OVERLAY_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[3]), 8, + 16, sp2CA + 1, 191, 8, 16, 1 << 10, 1 << 10); + + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->magicAlpha); + gSPTextureRectangle(OVERLAY_DISP++, sp2CA * 4, 760, (sp2CA * 4) + 0x20, 824, G_TX_RENDERTILE, 0, 0, + 1 << 10, 1 << 10); + break; + + default: + break; + } + + // Rupee Counter + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, + PRIMITIVE, 0); + + counterDigits[0] = counterDigits[1] = 0; + counterDigits[2] = gSaveContext.save.playerData.rupees; + + if ((counterDigits[2] > 9999) || (counterDigits[2] < 0)) { + counterDigits[2] &= 0xDDD; + } + + while (counterDigits[2] >= 100) { + counterDigits[0]++; + counterDigits[2] -= 100; + } + + while (counterDigits[2] >= 10) { + counterDigits[1]++; + counterDigits[2] -= 10; + } + + sp2CC = sRupeeDigitsFirst[CUR_UPG_VALUE(UPG_WALLET)]; + sp2C8 = sRupeeDigitsCount[CUR_UPG_VALUE(UPG_WALLET)]; + + magicAlpha = interfaceCtx->magicAlpha; + if (magicAlpha > 180) { + magicAlpha = 180; + } + + for (sp2CE = 0, sp2CA = 42; sp2CE < sp2C8; sp2CE++, sp2CC++, sp2CA += 8) { + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, magicAlpha); + + OVERLAY_DISP = Gfx_DrawTexRectI8(OVERLAY_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[sp2CC]), 8, + 16, sp2CA + 1, 207, 8, 16, 1 << 10, 1 << 10); + + gDPPipeSync(OVERLAY_DISP++); + + if (gSaveContext.save.playerData.rupees == CUR_CAPACITY(UPG_WALLET)) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 120, 255, 0, interfaceCtx->magicAlpha); + } else if (gSaveContext.save.playerData.rupees != 0) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->magicAlpha); + } else { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 100, 100, 100, interfaceCtx->magicAlpha); + } + + gSPTextureRectangle(OVERLAY_DISP++, sp2CA * 4, 824, (sp2CA * 4) + 0x20, 888, G_TX_RENDERTILE, 0, 0, 1 << 10, + 1 << 10); + } + + Magic_DrawMeter(play); + Minimap_Draw(play); + + if ((R_PAUSE_BG_PRERENDER_STATE != 2) && (R_PAUSE_BG_PRERENDER_STATE != 3)) { + Actor_DrawZTarget(&play->actorCtx.targetContext, play); + } + + func_8012C654(play->state.gfxCtx); + + func_80117100(play); + + if (player->transformation == ((void)0, gSaveContext.save.playerForm)) { + func_80118084(play); + } + func_80118890(play); + + func_80118BA4(play); + + func_80119030(play); + + // Draw either the minigame countdown or the three-day clock + if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) { + if ((interfaceCtx->minigameState != MINIGAME_STATE_NONE) && + (interfaceCtx->minigameState < MINIGAME_STATE_NO_COUNTDOWN_SETUP)) { + // Minigame Countdown + if (((u32)interfaceCtx->minigameState % 2) == 0) { + + sp2CE = (interfaceCtx->minigameState >> 1) - 1; + minigameCountdownScale = interfaceCtx->minigameCountdownScale / 100.0f; + + if (sp2CE == 3) { + interfaceCtx->actionVtx[40 + 0].v.ob[0] = interfaceCtx->actionVtx[40 + 2].v.ob[0] = -20; + interfaceCtx->actionVtx[40 + 1].v.ob[0] = interfaceCtx->actionVtx[40 + 3].v.ob[0] = + interfaceCtx->actionVtx[40 + 0].v.ob[0] + 40; + interfaceCtx->actionVtx[40 + 1].v.tc[0] = interfaceCtx->actionVtx[40 + 3].v.tc[0] = 40 << 5; + } + + interfaceCtx->actionVtx[40 + 2].v.tc[1] = interfaceCtx->actionVtx[40 + 3].v.tc[1] = 32 << 5; + + func_8012C8D4(play->state.gfxCtx); + + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sMinigameCountdownPrimColors[sp2CE].r, + sMinigameCountdownPrimColors[sp2CE].g, sMinigameCountdownPrimColors[sp2CE].b, + interfaceCtx->minigameCountdownAlpha); + + Matrix_Translate(0.0f, -40.0f, 0.0f, MTXMODE_NEW); + Matrix_Scale(minigameCountdownScale, minigameCountdownScale, 0.0f, MTXMODE_APPLY); + + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[40], 4, 0); + + OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, sMinigameCountdownTextures[sp2CE], + sMinigameCountdownTexWidths[sp2CE], 32, 0); + } + } else { + Interface_DrawClock(play); + } + } + + // Draw the letters of minigame perfect + if (interfaceCtx->perfectLettersOn) { + Interface_DrawPerfectLetters(play); + } + + Interface_DrawMinigameIcons(play); + Interface_DrawTimers(play); + } + + // Draw pictograph focus icons + if (sPictoState == PICTO_BOX_STATE_LENS) { + + func_8012C654(play->state.gfxCtx); + + gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); + gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, 255); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, gPictoBoxFocusBorderTex, G_IM_FMT_IA, 16, 16, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_MIRROR | G_TX_WRAP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); + + gSPTextureRectangle(OVERLAY_DISP++, R_PICTO_FOCUS_BORDER_TOPLEFT_X << 2, R_PICTO_FOCUS_BORDER_TOPLEFT_Y << 2, + (R_PICTO_FOCUS_BORDER_TOPLEFT_X << 2) + (16 << 2), + (R_PICTO_FOCUS_BORDER_TOPLEFT_Y << 2) + (16 << 2), G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + gSPTextureRectangle(OVERLAY_DISP++, R_PICTO_FOCUS_BORDER_TOPRIGHT_X << 2, R_PICTO_FOCUS_BORDER_TOPRIGHT_Y << 2, + (R_PICTO_FOCUS_BORDER_TOPRIGHT_X << 2) + (16 << 2), + (R_PICTO_FOCUS_BORDER_TOPRIGHT_Y << 2) + (16 << 2), G_TX_RENDERTILE, 512, 0, 1 << 10, + 1 << 10); + gSPTextureRectangle( + OVERLAY_DISP++, R_PICTO_FOCUS_BORDER_BOTTOMLEFT_X << 2, R_PICTO_FOCUS_BORDER_BOTTOMLEFT_Y << 2, + (R_PICTO_FOCUS_BORDER_BOTTOMLEFT_X << 2) + (16 << 2), (R_PICTO_FOCUS_BORDER_BOTTOMLEFT_Y << 2) + (16 << 2), + G_TX_RENDERTILE, 0, 512, 1 << 10, 1 << 10); + gSPTextureRectangle( + OVERLAY_DISP++, R_PICTO_FOCUS_BORDER_BOTTOMRIGHT_X << 2, R_PICTO_FOCUS_BORDER_BOTTOMRIGHT_Y << 2, + (R_PICTO_FOCUS_BORDER_BOTTOMRIGHT_X << 2) + (16 << 2), + (R_PICTO_FOCUS_BORDER_BOTTOMRIGHT_Y << 2) + (16 << 2), G_TX_RENDERTILE, 512, 512, 1 << 10, 1 << 10); + + gDPLoadTextureBlock_4b(OVERLAY_DISP++, gPictoBoxFocusIconTex, G_IM_FMT_I, 32, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + gSPTextureRectangle(OVERLAY_DISP++, R_PICTO_FOCUS_ICON_X << 2, R_PICTO_FOCUS_ICON_Y << 2, + (R_PICTO_FOCUS_ICON_X << 2) + 0x80, (R_PICTO_FOCUS_ICON_Y << 2) + (16 << 2), + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + + gDPLoadTextureBlock_4b(OVERLAY_DISP++, gPictoBoxFocusTextTex, G_IM_FMT_I, 32, 8, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + gSPTextureRectangle(OVERLAY_DISP++, R_PICTO_FOCUS_TEXT_X << 2, R_PICTO_FOCUS_TEXT_Y << 2, + (R_PICTO_FOCUS_TEXT_X << 2) + 0x80, (R_PICTO_FOCUS_TEXT_Y << 2) + 0x20, G_TX_RENDERTILE, 0, + 0, 1 << 10, 1 << 10); + } + + // Draw pictograph photo + if (sPictoState >= PICTO_BOX_STATE_SETUP_PHOTO) { + if (!(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) { + Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90, + (u8*)gSaveContext.pictoPhotoI5, PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT); + + interfaceCtx->unk_222 = interfaceCtx->unk_224 = 0; + + sPictoState = PICTO_BOX_STATE_OFF; + gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; + Interface_SetHudVisibility(HUD_VISIBILITY_ALL); + } else { + s16 pictoRectTop; + s16 pictoRectLeft; + + if (sPictoState == PICTO_BOX_STATE_SETUP_PHOTO) { + sPictoState = PICTO_BOX_STATE_PHOTO; + Message_StartTextbox(play, 0xF8, NULL); + Interface_SetHudVisibility(HUD_VISIBILITY_NONE); + player->stateFlags1 |= PLAYER_STATE1_200; + } + + gDPPipeSync(OVERLAY_DISP++); + gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 200, 200, 250); + gDPFillRectangle(OVERLAY_DISP++, 70, 22, 251, 151); + + func_8012C654(play->state.gfxCtx); + + gDPSetRenderMode(OVERLAY_DISP++, G_RM_OPA_SURF, G_RM_OPA_SURF2); + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 250, 160, 160, 255); + + // Picture is offset up by 33 pixels to give room for the message box at the bottom + pictoRectTop = PICTO_PHOTO_TOPLEFT_Y - 33; + for (sp2CC = 0; sp2CC < (PICTO_PHOTO_HEIGHT / 8); sp2CC++, pictoRectTop += 8) { + pictoRectLeft = PICTO_PHOTO_TOPLEFT_X; + gDPLoadTextureBlock(OVERLAY_DISP++, + (u8*)((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90) + + (0x500 * sp2CC), + G_IM_FMT_I, G_IM_SIZ_8b, PICTO_PHOTO_WIDTH, 8, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + gSPTextureRectangle(OVERLAY_DISP++, pictoRectLeft << 2, pictoRectTop << 2, + (pictoRectLeft + PICTO_PHOTO_WIDTH) << 2, (pictoRectTop << 2) + (8 << 2), + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + } + } + } + + // Draw over the entire screen (used in gameover) + if (interfaceCtx->screenFillAlpha != 0) { + gDPPipeSync(OVERLAY_DISP++); + gSPDisplayList(OVERLAY_DISP++, sScreenFillSetupDL); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, interfaceCtx->screenFillAlpha); + gSPDisplayList(OVERLAY_DISP++, D_0E000000.fillRect); + } + + CLOSE_DISPS(play->state.gfxCtx); +} + +void Interface_LoadStory(PlayState* play, s32 osMesgFlag) { + InterfaceContext* interfaceCtx = &play->interfaceCtx; + + switch (interfaceCtx->storyDmaStatus) { + case STORY_DMA_IDLE: + if (interfaceCtx->storySegment == NULL) { + break; + } + osCreateMesgQueue(&interfaceCtx->storyMsgQueue, &interfaceCtx->storyMsgBuf, 1); + DmaMgr_SendRequestImpl(&interfaceCtx->dmaRequest, interfaceCtx->storySegment, interfaceCtx->storyAddr, + interfaceCtx->storySize, 0, &interfaceCtx->storyMsgQueue, NULL); + interfaceCtx->storyDmaStatus = STORY_DMA_LOADING; + // fallthrough + case STORY_DMA_LOADING: + if (osRecvMesg(&interfaceCtx->storyMsgQueue, NULL, osMesgFlag) == 0) { + interfaceCtx->storyDmaStatus = STORY_DMA_DONE; + } + break; + + default: // STORY_DMA_DONE + break; + } +} + +void Interface_AllocStory(PlayState* play) { + InterfaceContext* interfaceCtx = &play->interfaceCtx; + + interfaceCtx->storyAddr = SEGMENT_ROM_START(story_static); + interfaceCtx->storySize = SEGMENT_ROM_SIZE(story_static); + + if (interfaceCtx->storySegment == NULL) { + interfaceCtx->storySegment = ZeldaArena_Malloc(interfaceCtx->storySize); + } + Interface_LoadStory(play, OS_MESG_NOBLOCK); +} + +void Interface_Update(PlayState* play) { + static u8 sIsSunsPlayedAtDay = false; + static s16 sPrevTimeSpeed = 0; + InterfaceContext* interfaceCtx = &play->interfaceCtx; + MessageContext* msgCtx = &play->msgCtx; + Player* player = GET_PLAYER(play); + s16 dimmingAlpha; + s16 risingAlpha; + u16 aButtonDoAction; + + // Update buttons + if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) { + if (play->gameOverCtx.state == GAMEOVER_INACTIVE) { + func_80111CB4(play); + } + } + + // Update hud visibility + switch (gSaveContext.nextHudVisibility) { + case HUD_VISIBILITY_NONE: + case HUD_VISIBILITY_NONE_ALT: + case HUD_VISIBILITY_B: + dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer << 5); + if (dimmingAlpha < 0) { + dimmingAlpha = 0; + } + + Interface_UpdateHudAlphas(play, dimmingAlpha); + gSaveContext.hudVisibilityTimer += 2; + if (dimmingAlpha == 0) { + gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE; + } + break; + + case HUD_VISIBILITY_HEARTS_WITH_OVERWRITE: + case HUD_VISIBILITY_A: + case HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE: + case HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE: + case HUD_VISIBILITY_ALL_NO_MINIMAP_W_DISABLED: + case HUD_VISIBILITY_HEARTS_MAGIC: + case HUD_VISIBILITY_B_ALT: + case HUD_VISIBILITY_HEARTS: + case HUD_VISIBILITY_A_B_MINIMAP: + case HUD_VISIBILITY_HEARTS_MAGIC_WITH_OVERWRITE: + case HUD_VISIBILITY_HEARTS_MAGIC_C: + case HUD_VISIBILITY_ALL_NO_MINIMAP: + case HUD_VISIBILITY_A_B_C: + case HUD_VISIBILITY_B_MINIMAP: + case HUD_VISIBILITY_HEARTS_MAGIC_MINIMAP: + case HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP: + case HUD_VISIBILITY_B_MAGIC: + case HUD_VISIBILITY_A_B: + case HUD_VISIBILITY_A_B_HEARTS_MAGIC_MINIMAP: + dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer << 5); + if (dimmingAlpha < 0) { + dimmingAlpha = 0; + } + + Interface_UpdateHudAlphas(play, dimmingAlpha); + gSaveContext.hudVisibilityTimer++; + if (dimmingAlpha == 0) { + gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE; + } + break; + + case HUD_VISIBILITY_ALL: + dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer << 5); + if (dimmingAlpha < 0) { + dimmingAlpha = 0; + } + + risingAlpha = 255 - dimmingAlpha; + if (risingAlpha >= 255) { + risingAlpha = 255; + } + + Interface_UpdateButtonAlphasByStatus(play, risingAlpha); + + if (gSaveContext.buttonStatus[5] == BTN_DISABLED) { + if (interfaceCtx->startAlpha != 70) { + interfaceCtx->startAlpha = 70; + } + } else { + if (interfaceCtx->startAlpha != 255) { + interfaceCtx->startAlpha = risingAlpha; + } + } + + if (interfaceCtx->healthAlpha != 255) { + interfaceCtx->healthAlpha = risingAlpha; + } + + if (interfaceCtx->magicAlpha != 255) { + interfaceCtx->magicAlpha = risingAlpha; + } + + if (play->sceneId == SCENE_SPOT00) { + if (interfaceCtx->minimapAlpha < 170) { + interfaceCtx->minimapAlpha = risingAlpha; + } else { + interfaceCtx->minimapAlpha = 170; + } + } else if (interfaceCtx->minimapAlpha != 255) { + interfaceCtx->minimapAlpha = risingAlpha; + } + + gSaveContext.hudVisibilityTimer++; + + if (risingAlpha == 255) { + gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE; + } + + break; + + case HUD_VISIBILITY_NONE_INSTANT: + // Turn off all Hud immediately + gSaveContext.nextHudVisibility = HUD_VISIBILITY_NONE; + Interface_UpdateHudAlphas(play, 0); + gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE; + // fallthrough + default: + break; + } + + Map_Update(play); + + // Update health + if (gSaveContext.healthAccumulator != 0) { + gSaveContext.healthAccumulator -= 4; + gSaveContext.save.playerData.health += 4; + + if ((gSaveContext.save.playerData.health & 0xF) < 4) { + play_sound(NA_SE_SY_HP_RECOVER); + } + + if (((void)0, gSaveContext.save.playerData.health) >= ((void)0, gSaveContext.save.playerData.healthCapacity)) { + gSaveContext.save.playerData.health = gSaveContext.save.playerData.healthCapacity; + gSaveContext.healthAccumulator = 0; + } + } + + LifeMeter_UpdateSizeAndBeep(play); + + // Update environmental hazard (remnant of OoT) + sEnvHazard = Player_GetEnvironmentalHazard(play); + if (sEnvHazard == PLAYER_ENV_HAZARD_HOTROOM) { + if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_TUNIC) == EQUIP_VALUE_TUNIC_GORON) { + sEnvHazard = PLAYER_ENV_HAZARD_NONE; + } + } else if ((Player_GetEnvironmentalHazard(play) >= PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) && + (Player_GetEnvironmentalHazard(play) <= PLAYER_ENV_HAZARD_UNDERWATER_FREE)) { + if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_TUNIC) == EQUIP_VALUE_TUNIC_ZORA) { + sEnvHazard = PLAYER_ENV_HAZARD_NONE; + } + } + + LifeMeter_UpdateColors(play); + + // Update rupees + if (gSaveContext.rupeeAccumulator != 0) { + if (gSaveContext.rupeeAccumulator > 0) { + if (gSaveContext.save.playerData.rupees < CUR_CAPACITY(UPG_WALLET)) { + gSaveContext.rupeeAccumulator--; + gSaveContext.save.playerData.rupees++; + play_sound(NA_SE_SY_RUPY_COUNT); + } else { + // Max rupees + gSaveContext.save.playerData.rupees = CUR_CAPACITY(UPG_WALLET); + gSaveContext.rupeeAccumulator = 0; + } + } else if (gSaveContext.save.playerData.rupees != 0) { + if (gSaveContext.rupeeAccumulator <= -50) { + gSaveContext.rupeeAccumulator += 10; + gSaveContext.save.playerData.rupees -= 10; + if (gSaveContext.save.playerData.rupees < 0) { + gSaveContext.save.playerData.rupees = 0; + } + play_sound(NA_SE_SY_RUPY_COUNT); + } else { + gSaveContext.rupeeAccumulator++; + gSaveContext.save.playerData.rupees--; + play_sound(NA_SE_SY_RUPY_COUNT); + } + } else { + gSaveContext.rupeeAccumulator = 0; + } + } + + // Update perfect letters + if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) { + if (interfaceCtx->perfectLettersOn) { + if (interfaceCtx->perfectLettersType == PERFECT_LETTERS_TYPE_1) { + Interface_UpdatePerfectLettersType1(play); + } else if (interfaceCtx->perfectLettersType == PERFECT_LETTERS_TYPE_2) { + Interface_UpdatePerfectLettersType2(play); + } else if (interfaceCtx->perfectLettersType == PERFECT_LETTERS_TYPE_3) { + Interface_UpdatePerfectLettersType3(play); + } + } + } + + // Update minigame State + if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) { + if ((u32)interfaceCtx->minigameState != MINIGAME_STATE_NONE) { + switch (interfaceCtx->minigameState) { + case MINIGAME_STATE_COUNTDOWN_SETUP_3: + case MINIGAME_STATE_COUNTDOWN_SETUP_2: + case MINIGAME_STATE_COUNTDOWN_SETUP_1: + case MINIGAME_STATE_COUNTDOWN_SETUP_GO: + interfaceCtx->minigameCountdownAlpha = 255; + interfaceCtx->minigameCountdownScale = 100; + interfaceCtx->minigameState++; + if (interfaceCtx->minigameState == MINIGAME_STATE_COUNTDOWN_GO) { + interfaceCtx->minigameCountdownScale = 160; + play_sound(NA_SE_SY_START_SHOT); + } else { + play_sound(NA_SE_SY_WARNING_COUNT_E); + } + break; + + case MINIGAME_STATE_COUNTDOWN_3: + case MINIGAME_STATE_COUNTDOWN_2: + case MINIGAME_STATE_COUNTDOWN_1: + interfaceCtx->minigameCountdownAlpha -= 10; + interfaceCtx->minigameCountdownScale += 3; + if (interfaceCtx->minigameCountdownAlpha < 22) { + interfaceCtx->minigameState++; + } + break; + + case MINIGAME_STATE_COUNTDOWN_GO: + interfaceCtx->minigameCountdownAlpha -= 10; + if (interfaceCtx->minigameCountdownAlpha <= 150) { + interfaceCtx->minigameState = MINIGAME_STATE_PLAYING; + } + break; + + case MINIGAME_STATE_NO_COUNTDOWN_SETUP: + interfaceCtx->minigameCountdownAlpha = 0; + interfaceCtx->minigameState++; + break; + + case MINIGAME_STATE_NO_COUNTDOWN: + interfaceCtx->minigameCountdownAlpha++; + if (interfaceCtx->minigameCountdownAlpha >= 18) { + interfaceCtx->minigameState = MINIGAME_STATE_PLAYING; + } + break; + } + } + } + + // Update A Button + switch (interfaceCtx->aButtonState) { + case A_BTN_STATE_1: + interfaceCtx->aButtonRoll += 10466.667f; + if (interfaceCtx->aButtonRoll >= 15700.0f) { + interfaceCtx->aButtonRoll = -15700.0f; + interfaceCtx->aButtonState = A_BTN_STATE_2; + + if ((msgCtx->msgMode != 0) && (msgCtx->unk12006 == 0x26)) { + R_A_BTN_Y_OFFSET = -14; + } else { + R_A_BTN_Y_OFFSET = 0; + } + } + break; + + case A_BTN_STATE_2: + interfaceCtx->aButtonRoll += 10466.667f; + if (interfaceCtx->aButtonRoll >= 0.0f) { + interfaceCtx->aButtonRoll = 0.0f; + interfaceCtx->aButtonState = A_BTN_STATE_0; + interfaceCtx->unk_212 = interfaceCtx->aButtonDoAction; + aButtonDoAction = interfaceCtx->unk_212; + if ((aButtonDoAction == DO_ACTION_MAX) || (aButtonDoAction == DO_ACTION_MAX + 1)) { + aButtonDoAction = DO_ACTION_NONE; + } + func_80115428(&play->interfaceCtx, aButtonDoAction, 0); + } + break; + + case A_BTN_STATE_3: + interfaceCtx->aButtonRoll += 10466.667f; + if (interfaceCtx->aButtonRoll >= 15700.0f) { + interfaceCtx->aButtonRoll = -15700.0f; + interfaceCtx->aButtonState = A_BTN_STATE_2; + } + break; + + case A_BTN_STATE_4: + interfaceCtx->aButtonRoll += 10466.667f; + if (interfaceCtx->aButtonRoll >= 0.0f) { + interfaceCtx->aButtonRoll = 0.0f; + interfaceCtx->aButtonState = A_BTN_STATE_0; + interfaceCtx->unk_212 = interfaceCtx->aButtonDoAction; + aButtonDoAction = interfaceCtx->unk_212; + if ((aButtonDoAction == DO_ACTION_MAX) || (aButtonDoAction == DO_ACTION_MAX + 1)) { + aButtonDoAction = DO_ACTION_NONE; + } + + func_80115428(&play->interfaceCtx, aButtonDoAction, 0); + } + break; + + default: // A_BTN_STATE_0 + break; + } + + // Update magic + if (!(player->stateFlags1 & PLAYER_STATE1_200)) { + if (R_MAGIC_DBG_SET_UPGRADE == MAGIC_DBG_SET_UPGRADE_DOUBLE_METER) { + // Upgrade to double magic + if (!gSaveContext.save.playerData.isMagicAcquired) { + gSaveContext.save.playerData.isMagicAcquired = true; + } + gSaveContext.save.playerData.isDoubleMagicAcquired = true; + gSaveContext.save.playerData.magic = MAGIC_DOUBLE_METER; + gSaveContext.save.playerData.magicLevel = 0; + R_MAGIC_DBG_SET_UPGRADE = MAGIC_DBG_SET_UPGRADE_NO_ACTION; + } else if (R_MAGIC_DBG_SET_UPGRADE == MAGIC_DBG_SET_UPGRADE_NORMAL_METER) { + // Upgrade to normal magic + if (!gSaveContext.save.playerData.isMagicAcquired) { + gSaveContext.save.playerData.isMagicAcquired = true; + } + gSaveContext.save.playerData.isDoubleMagicAcquired = false; + gSaveContext.save.playerData.magic = MAGIC_NORMAL_METER; + gSaveContext.save.playerData.magicLevel = 0; + R_MAGIC_DBG_SET_UPGRADE = MAGIC_DBG_SET_UPGRADE_NO_ACTION; + } + + if ((gSaveContext.save.playerData.isMagicAcquired) && (gSaveContext.save.playerData.magicLevel == 0)) { + // Prepare to step `magicCapacity` to full capacity + gSaveContext.save.playerData.magicLevel = gSaveContext.save.playerData.isDoubleMagicAcquired + 1; + gSaveContext.magicFillTarget = gSaveContext.save.playerData.magic; + gSaveContext.save.playerData.magic = 0; + gSaveContext.magicState = MAGIC_STATE_STEP_CAPACITY; + BUTTON_ITEM_EQUIP(PLAYER_FORM_DEKU, EQUIP_SLOT_B) = ITEM_NUT; + } + + Magic_Update(play); + Magic_UpdateAddRequest(); + } + + // Update environmental hazard timer + if (gSaveContext.timerStates[TIMER_ID_ENV_HAZARD] == TIMER_STATE_OFF) { + if ((sEnvHazard == PLAYER_ENV_HAZARD_HOTROOM) || (sEnvHazard == PLAYER_ENV_HAZARD_UNDERWATER_FREE)) { + if (CUR_FORM != PLAYER_FORM_ZORA) { + if (play->gameOverCtx.state == GAMEOVER_INACTIVE) { + if ((gSaveContext.save.playerData.health >> 1) != 0) { + gSaveContext.timerStates[TIMER_ID_ENV_HAZARD] = TIMER_STATE_ENV_HAZARD_START; + gSaveContext.timerX[TIMER_ID_ENV_HAZARD] = 115; + gSaveContext.timerY[TIMER_ID_ENV_HAZARD] = 80; + sEnvTimerActive = true; + gSaveContext.timerDirections[TIMER_ID_ENV_HAZARD] = TIMER_COUNT_DOWN; + } + } + } + } + } else if (((sEnvHazard == PLAYER_ENV_HAZARD_NONE) || (sEnvHazard == PLAYER_ENV_HAZARD_SWIMMING)) && + (gSaveContext.timerStates[TIMER_ID_ENV_HAZARD] <= TIMER_STATE_COUNTING)) { + gSaveContext.timerStates[TIMER_ID_ENV_HAZARD] = TIMER_STATE_OFF; + } + + // Update minigame + if (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) { + gSaveContext.minigameScore += interfaceCtx->minigamePoints; + gSaveContext.minigameHiddenScore += interfaceCtx->minigameHiddenPoints; + interfaceCtx->minigamePoints = 0; + interfaceCtx->minigameHiddenPoints = 0; + + // Update horseback archery tier, unused remnant of OoT. + if (sHBAScoreTier == 0) { + if (gSaveContext.minigameScore >= 1000) { + sHBAScoreTier++; + } + } else if (sHBAScoreTier == 1) { + if (gSaveContext.minigameScore >= 1500) { + sHBAScoreTier++; + } + } + + // Get minigame digits + sMinigameScoreDigits[0] = sMinigameScoreDigits[1] = 0; + sMinigameScoreDigits[2] = 0; + sMinigameScoreDigits[3] = gSaveContext.minigameScore; + + while (sMinigameScoreDigits[3] >= 1000) { + sMinigameScoreDigits[0]++; + sMinigameScoreDigits[3] -= 1000; + } + + while (sMinigameScoreDigits[3] >= 100) { + sMinigameScoreDigits[1]++; + sMinigameScoreDigits[3] -= 100; + } + + while (sMinigameScoreDigits[3] >= 10) { + sMinigameScoreDigits[2]++; + sMinigameScoreDigits[3] -= 10; + } + } + + // Update Sun Song + if (gSaveContext.sunsSongState != SUNSSONG_INACTIVE) { + // exit out of ocarina mode after suns song finishes playing + if ((msgCtx->ocarinaAction != 0x39) && (gSaveContext.sunsSongState == SUNSSONG_START)) { + play->msgCtx.ocarinaMode = 4; + } + + // handle suns song in areas where time moves + if (play->envCtx.sceneTimeSpeed != 0) { + if (gSaveContext.sunsSongState != SUNSSONG_SPEED_TIME) { + sIsSunsPlayedAtDay = false; + if ((gSaveContext.save.time >= CLOCK_TIME(6, 0)) && (gSaveContext.save.time <= CLOCK_TIME(18, 0))) { + sIsSunsPlayedAtDay = true; + } + + gSaveContext.sunsSongState = SUNSSONG_SPEED_TIME; + sPrevTimeSpeed = R_TIME_SPEED; + R_TIME_SPEED = 400; + } else if (!sIsSunsPlayedAtDay) { + // Nighttime + if ((gSaveContext.save.time >= CLOCK_TIME(6, 0)) && (gSaveContext.save.time <= CLOCK_TIME(18, 0))) { + // Daytime has been reached. End suns song effect + gSaveContext.sunsSongState = SUNSSONG_INACTIVE; + R_TIME_SPEED = sPrevTimeSpeed; + play->msgCtx.ocarinaMode = 4; + } + } else { + // Daytime + if (gSaveContext.save.time > CLOCK_TIME(18, 0)) { + // Nighttime has been reached. End suns song effect + gSaveContext.sunsSongState = SUNSSONG_INACTIVE; + R_TIME_SPEED = sPrevTimeSpeed; + play->msgCtx.ocarinaMode = 4; + } + } + } else { + gSaveContext.sunsSongState = SUNSSONG_SPECIAL; + } + } + + Interface_UpdateBottleTimers(play); + + // Update Grandma's Story + if (interfaceCtx->storyState != STORY_STATE_OFF) { + if (interfaceCtx->storyState == STORY_STATE_INIT) { + interfaceCtx->storyDmaStatus = STORY_DMA_IDLE; + interfaceCtx->storyState = STORY_STATE_IDLE; + R_STORY_FILL_SCREEN_ALPHA = 0; + } + + Interface_AllocStory(play); + + if (interfaceCtx->storyState == STORY_STATE_DESTROY) { + interfaceCtx->storyState = STORY_STATE_OFF; + interfaceCtx->storyDmaStatus = STORY_DMA_IDLE; + if (interfaceCtx->storySegment != NULL) { + ZeldaArena_Free(interfaceCtx->storySegment); + interfaceCtx->storySegment = NULL; + } + } else if (interfaceCtx->storyState == STORY_STATE_SETUP_IDLE) { + interfaceCtx->storyState = STORY_STATE_IDLE; + } else if (interfaceCtx->storyState == STORY_STATE_FADE_OUT) { + R_STORY_FILL_SCREEN_ALPHA += 10; + if (R_STORY_FILL_SCREEN_ALPHA >= 250) { + R_STORY_FILL_SCREEN_ALPHA = 255; + interfaceCtx->storyState = STORY_STATE_IDLE; + } + } else if (interfaceCtx->storyState == STORY_STATE_FADE_IN) { + R_STORY_FILL_SCREEN_ALPHA -= 10; + if (R_STORY_FILL_SCREEN_ALPHA < 0) { + R_STORY_FILL_SCREEN_ALPHA = 0; + interfaceCtx->storyState = STORY_STATE_IDLE; + } + } + } +} void Interface_Destroy(PlayState* play) { Map_Destroy(play); func_80174F9C(Interface_PostmanTimerCallback, NULL); } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80121FC4.s") +void Interface_Init(PlayState* play) { + s32 pad; + InterfaceContext* interfaceCtx = &play->interfaceCtx; + size_t parameterStaticSize; + s32 i; + + bzero(interfaceCtx, sizeof(InterfaceContext)); + + gSaveContext.sunsSongState = SUNSSONG_INACTIVE; + gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE; + gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; + + View_Init(&interfaceCtx->view, play->state.gfxCtx); + + interfaceCtx->magicConsumptionTimer = 16; + interfaceCtx->healthTimer = 200; + + parameterStaticSize = SEGMENT_ROM_SIZE(parameter_static); + interfaceCtx->parameterSegment = THA_AllocEndAlign16(&play->state.heap, parameterStaticSize); + DmaMgr_SendRequest0(interfaceCtx->parameterSegment, SEGMENT_ROM_START(parameter_static), parameterStaticSize); + + interfaceCtx->doActionSegment = THA_AllocEndAlign16(&play->state.heap, 0xC90); + DmaMgr_SendRequest0(interfaceCtx->doActionSegment, SEGMENT_ROM_START(do_action_static), 0x300); + DmaMgr_SendRequest0(interfaceCtx->doActionSegment + 0x300, SEGMENT_ROM_START(do_action_static) + 0x480, 0x180); + + Interface_NewDay(play, CURRENT_DAY); + + interfaceCtx->iconItemSegment = THA_AllocEndAlign16(&play->state.heap, 0x4000); + + if (CUR_FORM_EQUIP(EQUIP_SLOT_B) < ITEM_F0) { + Interface_LoadItemIconImpl(play, EQUIP_SLOT_B); + } else if ((CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_NONE) && (CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_FD)) { + Interface_LoadItemIconImpl(play, EQUIP_SLOT_B); + } + + if (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) < ITEM_F0) { + Interface_LoadItemIconImpl(play, EQUIP_SLOT_C_LEFT); + } + + if (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) < ITEM_F0) { + Interface_LoadItemIconImpl(play, EQUIP_SLOT_C_DOWN); + } + + if (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) < ITEM_F0) { + Interface_LoadItemIconImpl(play, EQUIP_SLOT_C_RIGHT); + } + + if (((gSaveContext.timerStates[TIMER_ID_MINIGAME_2] == TIMER_STATE_COUNTING) || + (gSaveContext.timerStates[TIMER_ID_GORON_RACE_UNUSED] == TIMER_STATE_COUNTING)) && + ((gSaveContext.respawnFlag == -1) || (gSaveContext.respawnFlag == 1)) && + (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] == TIMER_STATE_COUNTING)) { + gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_START; + gSaveContext.timerX[TIMER_ID_MINIGAME_2] = 115; + gSaveContext.timerY[TIMER_ID_MINIGAME_2] = 80; + } + + LifeMeter_Init(play); + Map_Init(play); + + gSaveContext.minigameStatus = MINIGAME_STATUS_END; + interfaceCtx->perfectLettersPrimColor[0] = 255; + interfaceCtx->perfectLettersPrimColor[1] = 165; + interfaceCtx->perfectLettersPrimColor[2] = 55; + + if (CHECK_EVENTINF(EVENTINF_34)) { + CLEAR_EVENTINF(EVENTINF_34); + gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_OFF; + } + + gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_OFF; + gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_1] = SECONDS_TO_TIMER(0); + gSaveContext.timerTimeLimits[TIMER_ID_MINIGAME_1] = SECONDS_TO_TIMER(0); + gSaveContext.timerStartOsTimes[TIMER_ID_MINIGAME_1] = 0; + gSaveContext.timerStopTimes[TIMER_ID_MINIGAME_1] = 0; + gSaveContext.timerPausedOsTimes[TIMER_ID_MINIGAME_1] = 0; + + for (i = 0; i < TIMER_ID_MAX; i++) { + if (gSaveContext.timerStates[i] == TIMER_STATE_7) { + gSaveContext.timerStates[i] = TIMER_STATE_OFF; + } + } + + sPictoState = PICTO_BOX_STATE_OFF; + sPictoPhotoBeingTaken = false; + + if ((play->sceneId != SCENE_MITURIN_BS) && (play->sceneId != SCENE_HAKUGIN_BS) && (play->sceneId != SCENE_SEA_BS) && + (play->sceneId != SCENE_INISIE_BS) && (play->sceneId != SCENE_LAST_BS) && (play->sceneId != SCENE_MITURIN) && + (play->sceneId != SCENE_HAKUGIN) && (play->sceneId != SCENE_SEA) && (play->sceneId != SCENE_INISIE_N) && + (play->sceneId != SCENE_INISIE_R) && (play->sceneId != SCENE_LAST_DEKU) && + (play->sceneId != SCENE_LAST_GORON) && (play->sceneId != SCENE_LAST_ZORA) && + (play->sceneId != SCENE_LAST_LINK)) { + + CLEAR_EVENTINF(EVENTINF_53); // Goht intro cutscene watched + CLEAR_EVENTINF(EVENTINF_54); // Odolwa intro cutscene watched + CLEAR_EVENTINF(EVENTINF_55); // Twinmold intro cutscene watched + CLEAR_EVENTINF(EVENTINF_56); // Gyorg intro cutscene watched + CLEAR_EVENTINF(EVENTINF_57); // Igos du Ikana intro cutscene watched + CLEAR_EVENTINF(EVENTINF_60); // Wart intro cutscene watched + CLEAR_EVENTINF(EVENTINF_61); // Majoras intro cutscene watched + CLEAR_EVENTINF(EVENTINF_62); // + CLEAR_EVENTINF(EVENTINF_63); // Gomess intro cutscene watched + } + + sFinalHoursClockDigitsRed = sFinalHoursClockFrameEnvRed = sFinalHoursClockFrameEnvGreen = + sFinalHoursClockFrameEnvBlue = 0; + sFinalHoursClockColorTimer = 15; + sFinalHoursClockColorTargetIndex = 0; +} diff --git a/src/code/z_play.c b/src/code/z_play.c index 71fbc897f..b33b449d2 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1,81 +1,1590 @@ #include "global.h" #include "z64quake.h" +#include "z64rumble.h" #include "z64shrink_window.h" #include "z64view.h" +#include "overlays/gamestates/ovl_daytelop/z_daytelop.h" +#include "overlays/gamestates/ovl_opening/z_opening.h" +#include "overlays/gamestates/ovl_file_choose/z_file_choose.h" +#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165460.s") +s32 gDbgCamEnabled = false; +u8 D_801D0D54 = false; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165608.s") +s16 sTransitionFillTimer; +Input D_801F6C18; +FbDemoStruct sTrnsnUnk; +u16* D_801F6D0C; +s32 gTrnsnUnkState; +VisMono sVisMono; +Color_RGBA8_u32 gVisMonoColor; +Struct_80140E80 D_801F6D38; +Struct_80140E80* D_801F6D4C; +BombersNotebook sBombersNotebook; +u8 sBombersNotebookOpen; +u8 sMotionBlurStatus; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165630.s") +typedef enum { + /* 0 */ MOTION_BLUR_OFF, + /* 1 */ MOTION_BLUR_SETUP, + /* 2 */ MOTION_BLUR_PROCESS +} MotionBlurStatus; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165658.s") +void Play_DrawMotionBlur(PlayState* this) { + GraphicsContext* gfxCtx = this->state.gfxCtx; + s32 alpha; + Gfx* gfx; + Gfx* gfxHead; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_8016566C.s") + if (R_MOTION_BLUR_PRIORITY_ENABLED) { + alpha = R_MOTION_BLUR_PRIORITY_ALPHA; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165690.s") + if (sMotionBlurStatus == MOTION_BLUR_OFF) { + sMotionBlurStatus = MOTION_BLUR_SETUP; + } + } else if (R_MOTION_BLUR_ENABLED) { + alpha = R_MOTION_BLUR_ALPHA; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_801656A4.s") + if (sMotionBlurStatus == MOTION_BLUR_OFF) { + sMotionBlurStatus = MOTION_BLUR_SETUP; + } + } else { + alpha = 0; + sMotionBlurStatus = MOTION_BLUR_OFF; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165DB8.s") + if (sMotionBlurStatus != MOTION_BLUR_OFF) { + OPEN_DISPS(gfxCtx); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165DCC.s") + gfxHead = POLY_OPA_DISP; + gfx = Graph_GfxPlusOne(gfxHead); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165DF0.s") + gSPDisplayList(OVERLAY_DISP++, gfx); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165E04.s") + this->pauseBgPreRender.fbuf = gfxCtx->curFrameBuffer; + this->pauseBgPreRender.fbufSave = this->unk_18E64; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165E1C.s") + if (sMotionBlurStatus == MOTION_BLUR_PROCESS) { + func_80170AE0(&this->pauseBgPreRender, &gfx, alpha); + } else { + sMotionBlurStatus = MOTION_BLUR_PROCESS; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165E7C.s") + func_801705B4(&this->pauseBgPreRender, &gfx); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165EC0.s") + gSPEndDisplayList(gfx++); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/D_801DFA18.s") + Graph_BranchDlist(gfxHead, gfx); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80166060.s") + POLY_OPA_DISP = gfx; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_801660B8.s") + CLOSE_DISPS(gfxCtx); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_Destroy.s") +void Play_InitMotionBlur(void) { + R_MOTION_BLUR_ENABLED = false; + R_MOTION_BLUR_PRIORITY_ENABLED = false; + sMotionBlurStatus = MOTION_BLUR_OFF; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_801663C4.s") +void Play_DestroyMotionBlur(void) { + R_MOTION_BLUR_ENABLED = false; + R_MOTION_BLUR_PRIORITY_ENABLED = false; + sMotionBlurStatus = MOTION_BLUR_OFF; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80166644.s") +void Play_SetMotionBlurAlpha(u32 alpha) { + R_MOTION_BLUR_ALPHA = alpha; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_801668B4.s") +void Play_EnableMotionBlur(u32 alpha) { + R_MOTION_BLUR_ALPHA = alpha; + R_MOTION_BLUR_ENABLED = true; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80166968.s") +void Play_DisableMotionBlur(void) { + R_MOTION_BLUR_ENABLED = false; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80166B30.s") +// How much each color component contributes to the intensity image. +// These coefficients are close to what the YUV color space defines Y (luminance) as: +// https://en.wikipedia.org/wiki/YUV#Conversion_to/from_RGB +#define PLAY_INTENSITY_RED 2 +#define PLAY_INTENSITY_GREEN 4 +#define PLAY_INTENSITY_BLUE 1 +#define PLAY_INTENSITY_NORM (0x1F * PLAY_INTENSITY_RED + 0x1F * PLAY_INTENSITY_GREEN + 0x1F * PLAY_INTENSITY_BLUE) +#define PLAY_INTENSITY_MIX(r, g, b, m) \ + ((((r)*PLAY_INTENSITY_RED + (g)*PLAY_INTENSITY_GREEN + (b)*PLAY_INTENSITY_BLUE) * (m)) / PLAY_INTENSITY_NORM) -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_Update.s") +/** + * Converts an RGBA16 buffer to an Intensity Image + * + * @param[out] destI destination buffer + * @param[in] srcRgba16 source buffer + * @param[in] rgba16Width width of a full row for the RGBA16 + * @param[in] pixelLeft X coordinate of the top-left RGBA16 pixel to start with + * @param[in] pixelTop Y coordinate of the top-left RGBA16 pixel to start with + * @param[in] pixelRight X coordinate of the bottom-right RGBA16 pixel to end with + * @param[in] pixelBottom Y coordinate of the bottom-right RGBA16 pixel to end with + * @param[in] bitDepth bit depth for the intensity image + */ +void Play_ConvertRgba16ToIntensityImage(void* destI, u16* srcRgba16, s32 rgba16Width, s32 pixelLeft, s32 pixelTop, + s32 pixelRight, s32 pixelBottom, s32 bitDepth) { + s32 i; + s32 j; + u32 pixel; + u32 r; + u32 g; + u32 b; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80167DE4.s") + switch (bitDepth) { + case 4: { + u8* destI4 = destI; + u32 upper; + u32 lower; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80167F0C.s") + for (i = pixelTop; i <= pixelBottom; i++) { + for (j = pixelLeft; j <= pixelRight; j += 2) { + pixel = srcRgba16[i * rgba16Width + j]; + r = RGBA16_GET_R(pixel); + g = RGBA16_GET_G(pixel); + b = RGBA16_GET_B(pixel); + upper = PLAY_INTENSITY_MIX(r, g, b, 15); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_Draw.s") + pixel = srcRgba16[i * rgba16Width + j + 1]; + r = RGBA16_GET_R(pixel); + g = RGBA16_GET_G(pixel); + b = RGBA16_GET_B(pixel); + lower = PLAY_INTENSITY_MIX(r, g, b, 15); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80168DAC.s") + *(destI4++) = (upper << 4) | lower; + } + } + break; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_Main.s") + case 5: { + u8* destI5 = destI; + + for (i = pixelTop; i <= pixelBottom; i++) { + for (j = pixelLeft; j <= pixelRight; j++) { + pixel = srcRgba16[i * rgba16Width + j]; + r = RGBA16_GET_R(pixel); + g = RGBA16_GET_G(pixel); + b = RGBA16_GET_B(pixel); + + pixel = 0; + + *(destI5++) = PLAY_INTENSITY_MIX(r, g, b, 255) & 0xF8; + } + } + break; + } + + case 8: { + u8* destI8 = destI; + + for (i = pixelTop; i <= pixelBottom; i++) { + for (j = pixelLeft; j <= pixelRight; j++) { + pixel = srcRgba16[i * rgba16Width + j]; + + r = RGBA16_GET_R(pixel); + g = RGBA16_GET_G(pixel); + b = RGBA16_GET_B(pixel); + + *(destI8++) = PLAY_INTENSITY_MIX(r, g, b, 255); + } + } + break; + } + + case 16: { + u16* destI16 = destI; + + for (i = pixelTop; i <= pixelBottom; i++) { + for (j = pixelLeft; j <= pixelRight; j++) { + *(destI16++) = srcRgba16[i * rgba16Width + j]; + } + } + break; + } + } +} + +void Play_SetMotionBlurPriorityAlpha(u32 alpha) { + R_MOTION_BLUR_PRIORITY_ALPHA = alpha; +} + +void Play_EnableMotionBlurPriority(u32 alpha) { + R_MOTION_BLUR_PRIORITY_ALPHA = alpha; + R_MOTION_BLUR_PRIORITY_ENABLED = true; +} + +void Play_DisableMotionBlurPriority(void) { + R_MOTION_BLUR_PRIORITY_ENABLED = false; +} + +// Will take the photograph, but doesn't compress and save it +void Play_TriggerPictoPhoto(void) { + R_PICTO_PHOTO_STATE = PICTO_PHOTO_STATE_SETUP; +} + +void Play_TakePictoPhoto(PreRender* prerender) { + PreRender_ApplyFilters(prerender); + Play_ConvertRgba16ToIntensityImage(gPictoPhotoI8, prerender->fbufSave, SCREEN_WIDTH, PICTO_PHOTO_TOPLEFT_X, + PICTO_PHOTO_TOPLEFT_Y, (PICTO_PHOTO_TOPLEFT_X + PICTO_PHOTO_WIDTH) - 1, + (PICTO_PHOTO_TOPLEFT_Y + PICTO_PHOTO_HEIGHT) - 1, 8); +} + +s32 Play_ChooseDynamicTransition(PlayState* this, s32 transitionType) { + s32 nextTransitionType = transitionType; + + if (transitionType == TRANS_TYPE_FADE_DYNAMIC) { + if (!gSaveContext.save.isNight) { + nextTransitionType = TRANS_TYPE_FADE_WHITE; + } else { + nextTransitionType = TRANS_TYPE_FADE_BLACK; + } + } + if (nextTransitionType != transitionType) { + this->transitionType = nextTransitionType; + } + return nextTransitionType; +} + +void Play_SetupTransition(PlayState* this, s32 transitionType) { + TransitionContext* transitionCtx = &this->transitionCtx; + s32 fbdemoType; + + bzero(transitionCtx, sizeof(TransitionContext)); + + fbdemoType = -1; + if (transitionType & TRANS_TYPE_WIPE3) { + fbdemoType = FBDEMO_WIPE3; + } else if ((transitionType & 0x78) == TRANS_TYPE_WIPE4) { // Checks not only type, but also a max value of 39 + fbdemoType = FBDEMO_WIPE4; + } else if (!(transitionType & (TRANS_TYPE_WIPE3 | TRANS_TYPE_WIPE4))) { + switch (transitionType) { + case TRANS_TYPE_TRIFORCE: + fbdemoType = FBDEMO_TRIFORCE; + break; + + case TRANS_TYPE_WIPE: + case TRANS_TYPE_WIPE_FAST: + fbdemoType = FBDEMO_WIPE1; + break; + + case TRANS_TYPE_FADE_BLACK: + case TRANS_TYPE_FADE_WHITE: + case TRANS_TYPE_FADE_BLACK_FAST: + case TRANS_TYPE_FADE_WHITE_FAST: + case TRANS_TYPE_FADE_BLACK_SLOW: + case TRANS_TYPE_FADE_WHITE_SLOW: + case TRANS_TYPE_FADE_WHITE_CS_DELAYED: + case TRANS_TYPE_FADE_WHITE_INSTANT: + case TRANS_TYPE_FADE_GREEN: + case TRANS_TYPE_FADE_BLUE: + fbdemoType = FBDEMO_FADE; + break; + + case TRANS_TYPE_FILL_WHITE_FAST: + case TRANS_TYPE_FILL_WHITE: + this->transitionMode = TRANS_MODE_FILL_WHITE_INIT; + break; + + case TRANS_TYPE_INSTANT: + this->transitionMode = TRANS_MODE_INSTANT; + break; + + case TRANS_TYPE_FILL_BROWN: + this->transitionMode = TRANS_MODE_FILL_BROWN_INIT; + break; + + case TRANS_TYPE_SANDSTORM_PERSIST: + this->transitionMode = TRANS_MODE_SANDSTORM_INIT; + break; + + case TRANS_TYPE_SANDSTORM_END: + this->transitionMode = TRANS_MODE_SANDSTORM_END_INIT; + break; + + case TRANS_TYPE_CS_BLACK_FILL: + this->transitionMode = TRANS_MODE_CS_BLACK_FILL_INIT; + break; + + case TRANS_TYPE_CIRCLE: + fbdemoType = FBDEMO_CIRCLE; + break; + + case TRANS_TYPE_WIPE5: + fbdemoType = FBDEMO_WIPE5; + break; + + default: + fbdemoType = -1; + __assert("../z_play.c", 1420); + } + } else { + fbdemoType = -1; + __assert("../z_play.c", 1423); + } + + transitionCtx->transitionType = transitionType; + transitionCtx->fbdemoType = fbdemoType; + if (fbdemoType != -1) { + Transition_Init(transitionCtx); + } +} + +void Play_ClearTransition(PlayState* this) { + if (this->transitionCtx.fbdemoType != -1) { + Transition_Destroy(&this->transitionCtx); + } + this->transitionCtx.transitionType = -1; +} + +Gfx* Play_SetFog(PlayState* this, Gfx* gfx) { + s32 fogFar = this->lightCtx.zFar * (5.0f / 64.0f); + + return Gfx_SetFogWithSync(gfx, this->lightCtx.fogColor.r, this->lightCtx.fogColor.g, this->lightCtx.fogColor.b, 0, + this->lightCtx.fogNear, ((fogFar <= 1000) ? 1000 : fogFar)); +} + +void Play_Destroy(GameState* thisx) { + PlayState* this = (PlayState*)thisx; + GraphicsContext* gfxCtx = this->state.gfxCtx; + + if (sBombersNotebookOpen) { + MsgEvent_SendNullTask(); + func_80178750(); + gfxCtx->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx->framebufferIndex % 2); + gfxCtx->zbuffer = SysCfb_GetZBuffer(); + gfxCtx->viMode = D_801FBB88; + gfxCtx->viConfigFeatures = gViConfigFeatures; + gfxCtx->xScale = gViConfigXScale; + gfxCtx->yScale = gViConfigYScale; + gfxCtx->updateViMode = true; + sBombersNotebookOpen = false; + } + + BombersNotebook_Destroy(&sBombersNotebook); + this->state.gfxCtx->callback = NULL; + this->state.gfxCtx->callbackArg = 0; + Play_DestroyMotionBlur(); + + if (R_PAUSE_BG_PRERENDER_STATE != PAUSE_BG_PRERENDER_OFF) { + PreRender_ApplyFiltersSlowlyDestroy(&this->pauseBgPreRender); + R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_OFF; + } + + R_PICTO_PHOTO_STATE = PICTO_PHOTO_STATE_OFF; + PreRender_Destroy(&this->pauseBgPreRender); + this->unk_18E58 = NULL; + this->pictoPhotoI8 = NULL; + this->unk_18E60 = NULL; + this->unk_18E64 = NULL; + this->unk_18E68 = NULL; + Effect_DestroyAll(this); + EffectSS_Clear(this); + CollisionCheck_DestroyContext(this, &this->colChkCtx); + + if (gTrnsnUnkState == 3) { + TransitionUnk_Destroy(&sTrnsnUnk); + gTrnsnUnkState = 0; + } + + if ((this->transitionMode == TRANS_MODE_INSTANCE_RUNNING) || D_801D0D54) { + this->transitionCtx.destroy(&this->transitionCtx.instanceData); + Play_ClearTransition(this); + this->transitionMode = TRANS_MODE_OFF; + } + + ShrinkWindow_Destroy(); + TransitionFade_Destroy(&this->unk_18E48); + VisMono_Destroy(&sVisMono); + func_80140EA0(D_801F6D4C); + D_801F6D4C = NULL; + + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_92_80)) { + Actor_CleanupContext(&this->actorCtx, this); + } + CLEAR_WEEKEVENTREG(WEEKEVENTREG_92_80); + + Interface_Destroy(this); + KaleidoScopeCall_Destroy(this); + KaleidoManager_Destroy(); + ZeldaArena_Cleanup(); +} + +#define PLAY_COMPRESS_BITS 5 +#define PLAY_DECOMPRESS_BITS 8 + +void Play_CompressI8ToI5(void* srcI8, void* destI5, size_t size) { + u32 i; + u8* src = srcI8; + s8* dest = destI5; + s32 bitsLeft = PLAY_DECOMPRESS_BITS; // Bits left in the current dest pixel left to compress into + u32 destPixel = 0; + s32 shift; + u32 srcPixel; + + for (i = 0; i < size; i++) { + srcPixel = *src++; + srcPixel = (srcPixel * 0x1F + 0x80) / 0xFF; + shift = bitsLeft - PLAY_COMPRESS_BITS; + if (shift > 0) { + destPixel |= srcPixel << shift; + } else { + destPixel |= srcPixel >> -shift; + *dest++ = destPixel; + shift += PLAY_DECOMPRESS_BITS; + destPixel = srcPixel << shift; + } + bitsLeft = shift; + } + + if (bitsLeft < PLAY_DECOMPRESS_BITS) { + *dest = destPixel; + } +} + +void Play_DecompressI5ToI8(void* srcI5, void* destI8, size_t size) { + u32 i; + u8* src = srcI5; + s8* dest = destI8; + s32 bitsLeft = PLAY_DECOMPRESS_BITS; // Bits left in the current src pixel left to decompress + u32 destPixel; + s32 shift; + u32 srcPixel = *src++; + + for (i = 0; i < size; i++) { + shift = bitsLeft - PLAY_COMPRESS_BITS; + if (shift > 0) { + destPixel = 0; + destPixel |= srcPixel >> shift; + } else { + destPixel = 0; + destPixel |= srcPixel << -shift; + srcPixel = *src++; + shift += PLAY_DECOMPRESS_BITS; + destPixel |= srcPixel >> shift; + } + destPixel = (destPixel & 0x1F) * 0xFF / 0x1F; + *dest++ = destPixel; + bitsLeft = shift; + } +} + +f32 Play_GetWaterSurface(PlayState* this, Vec3f* pos, s32* lightIndex) { + Player* player = GET_PLAYER(this); + f32 waterSurfaceY = player->actor.world.pos.y; + WaterBox* waterBox; + s32 bgId; + + if (!WaterBox_GetSurfaceImpl(this, &this->colCtx, pos->x, pos->z, &waterSurfaceY, &waterBox, &bgId)) { + return BGCHECK_Y_MIN; + } + + if (waterSurfaceY < pos->y) { + return BGCHECK_Y_MIN; + } + + *lightIndex = WaterBox_GetLightSettingIndex(&this->colCtx, waterBox); + return waterSurfaceY; +} + +void Play_UpdateWaterCamera(PlayState* this, Camera* camera) { + static s16 sQuakeIndex = -1; + static s16 sIsCameraUnderwater = false; + s32 pad; + s32 lightIndex; + Player* player = GET_PLAYER(this); + + sIsCameraUnderwater = camera->stateFlags & CAM_STATE_UNDERWATER; + if (Play_GetWaterSurface(this, &camera->eye, &lightIndex) != BGCHECK_Y_MIN) { + if (!sIsCameraUnderwater) { + Camera_SetFlags(camera, CAM_STATE_UNDERWATER); + sQuakeIndex = -1; + Distortion_SetType(DISTORTION_TYPE_UNDERWATER_ENTRY); + Distortion_SetCountdown(80); + } + + func_801A3EC0(0x20); + func_800F6834(this, lightIndex); + + if ((sQuakeIndex == -1) || (Quake_GetCountdown(sQuakeIndex) == 10)) { + s16 quakeIndex = Quake_Add(camera, QUAKE_TYPE_5); + + sQuakeIndex = quakeIndex; + if (quakeIndex != 0) { + Quake_SetSpeed(sQuakeIndex, 550); + Quake_SetQuakeValues(sQuakeIndex, 1, 1, 180, 0); + Quake_SetCountdown(sQuakeIndex, 1000); + } + } + if (player->stateFlags3 & PLAYER_STATE3_8000) { + Distortion_SetType(DISTORTION_TYPE_ZORA_SWIMMING); + Distortion_ClearType(DISTORTION_TYPE_NON_ZORA_SWIMMING); + } else { + Distortion_SetType(DISTORTION_TYPE_NON_ZORA_SWIMMING); + Distortion_ClearType(DISTORTION_TYPE_ZORA_SWIMMING); + } + } else { + if (sIsCameraUnderwater) { + Camera_ClearFlags(camera, CAM_STATE_UNDERWATER); + } + Distortion_ClearType(DISTORTION_TYPE_NON_ZORA_SWIMMING); + Distortion_ClearType(DISTORTION_TYPE_UNDERWATER_ENTRY); + Distortion_ClearType(DISTORTION_TYPE_ZORA_SWIMMING); + if (sQuakeIndex != 0) { + Quake_Remove(sQuakeIndex); + } + func_800F694C(this); + func_801A3EC0(0); + } +} + +void Play_UpdateTransition(PlayState* this) { + s32 pad; + + if (this->transitionMode == TRANS_MODE_OFF) { + return; + } + + switch (this->transitionMode) { + case TRANS_MODE_SETUP: + if (this->transitionTrigger != TRANS_TRIGGER_END) { + s16 sceneLayer = 0; + + Interface_SetHudVisibility(HUD_VISIBILITY_NONE); + + if (gSaveContext.nextCutsceneIndex >= 0xFFF0) { + sceneLayer = (gSaveContext.nextCutsceneIndex & 0xF) + 1; + } + + if ((!(Entrance_GetTransitionFlags(this->nextEntrance + sceneLayer) & 0x8000) || + ((this->nextEntrance == ENTRANCE(PATH_TO_MOUNTAIN_VILLAGE, 1)) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) || + ((this->nextEntrance == ENTRANCE(ROAD_TO_SOUTHERN_SWAMP, 1)) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) || + ((this->nextEntrance == ENTRANCE(TERMINA_FIELD, 2)) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) || + ((this->nextEntrance == ENTRANCE(ROAD_TO_IKANA, 1)) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20))) && + (!func_800FE590(this) || (Entrance_GetSceneId(this->nextEntrance + sceneLayer) < 0) || + (Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN) != NA_BGM_FINAL_HOURS))) { + func_801A4058(20); + gSaveContext.seqId = (u8)NA_BGM_DISABLED; + gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; + } + + if (func_800FD768()) { + func_801A4058(20); + gSaveContext.seqId = (u8)NA_BGM_DISABLED; + gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; + } + + if (func_800FE590(this) && (Entrance_GetSceneId(this->nextEntrance + sceneLayer) >= 0) && + (Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN) == NA_BGM_FINAL_HOURS)) { + func_801A41C8(20); + } + } + + if (!D_801D0D54) { + Play_SetupTransition(this, Play_ChooseDynamicTransition(this, this->transitionType)); + } + + if (this->transitionMode >= TRANS_MODE_FILL_WHITE_INIT) { + // non-instance modes break out of this switch + break; + } + // fallthrough + case TRANS_MODE_INSTANCE_INIT: { + s32 transWipeSpeed; + s32 transFadeDuration; + u32 color; + + this->transitionCtx.init(&this->transitionCtx.instanceData); + + if (this->transitionCtx.transitionType & (TRANS_TYPE_WIPE3 | TRANS_TYPE_WIPE4)) { + this->transitionCtx.setType(&this->transitionCtx.instanceData, + this->transitionCtx.transitionType | TRANS_TYPE_SET_PARAMS); + } + + if ((this->transitionCtx.transitionType == TRANS_TYPE_WIPE_FAST) || + (this->transitionCtx.transitionType == TRANS_TYPE_FILL_WHITE_FAST)) { + //! @bug TRANS_TYPE_FILL_WHITE_FAST will never reach this code. + //! It is a non-instance type transition which doesn't run this case. + transWipeSpeed = 28; + } else { + transWipeSpeed = 14; + } + gSaveContext.transWipeSpeed = transWipeSpeed; + + switch (this->transitionCtx.transitionType) { + case TRANS_TYPE_FADE_BLACK_FAST: + case TRANS_TYPE_FADE_WHITE_FAST: + transFadeDuration = 20; + break; + + case TRANS_TYPE_FADE_BLACK_SLOW: + case TRANS_TYPE_FADE_WHITE_SLOW: + transFadeDuration = 150; + break; + + case TRANS_TYPE_FADE_WHITE_INSTANT: + transFadeDuration = 2; + break; + + default: + transFadeDuration = 60; + break; + } + gSaveContext.transFadeDuration = transFadeDuration; + + switch (this->transitionCtx.transitionType) { + case TRANS_TYPE_FADE_WHITE: + case TRANS_TYPE_FADE_WHITE_FAST: + case TRANS_TYPE_FADE_WHITE_SLOW: + case TRANS_TYPE_FADE_WHITE_CS_DELAYED: + case TRANS_TYPE_FADE_WHITE_INSTANT: + color = RGBA8(160, 160, 160, 255); + break; + + case TRANS_TYPE_FADE_GREEN: + color = RGBA8(140, 140, 100, 255); + break; + + case TRANS_TYPE_FADE_BLUE: + color = RGBA8(70, 100, 110, 255); + break; + + default: + color = RGBA8(0, 0, 0, 255); + break; + } + + this->transitionCtx.setColor(&this->transitionCtx.instanceData, color); + if (this->transitionCtx.setEnvColor != NULL) { + this->transitionCtx.setEnvColor(&this->transitionCtx.instanceData, color); + } + + this->transitionCtx.setType(&this->transitionCtx.instanceData, + (this->transitionTrigger == TRANS_TRIGGER_END) ? 1 : 2); + this->transitionCtx.start(&this->transitionCtx.instanceData); + + if (this->transitionCtx.transitionType == TRANS_TYPE_FADE_WHITE_CS_DELAYED) { + this->transitionMode = TRANS_MODE_INSTANCE_WAIT; + } else { + this->transitionMode = TRANS_MODE_INSTANCE_RUNNING; + } + break; + } + + case TRANS_MODE_INSTANCE_RUNNING: + if (this->transitionCtx.isDone(&this->transitionCtx.instanceData)) { + if (this->transitionTrigger != TRANS_TRIGGER_END) { + if (this->transitionCtx.transitionType == TRANS_TYPE_CIRCLE) { + D_801D0D54 = false; + } + + if (gSaveContext.gameMode == 4) { + STOP_GAMESTATE(&this->state); + SET_NEXT_GAMESTATE(&this->state, TitleSetup_Init, sizeof(TitleSetupState)); + } else if (gSaveContext.gameMode != 2) { + STOP_GAMESTATE(&this->state); + SET_NEXT_GAMESTATE(&this->state, Play_Init, sizeof(PlayState)); + gSaveContext.save.entrance = this->nextEntrance; + + if (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) { + gSaveContext.minigameStatus = MINIGAME_STATUS_END; + } + } else { // 2 + STOP_GAMESTATE(&this->state); + SET_NEXT_GAMESTATE(&this->state, FileSelect_Init, sizeof(FileSelectState)); + } + } else { + if (this->transitionCtx.transitionType == TRANS_TYPE_CIRCLE) { + D_801D0D54 = true; + } else { + this->transitionCtx.destroy(&this->transitionCtx.instanceData); + Play_ClearTransition(this); + } + this->transitionMode = TRANS_MODE_OFF; + if (gTrnsnUnkState == 3) { + TransitionUnk_Destroy(&sTrnsnUnk); + gTrnsnUnkState = 0; + Game_SetFramerateDivisor(&this->state, 3); + } + } + this->transitionTrigger = TRANS_TRIGGER_OFF; + } else { + this->transitionCtx.update(&this->transitionCtx.instanceData, this->state.framerateDivisor); + } + break; + } + + // update non-instance transitions + switch (this->transitionMode) { + case TRANS_MODE_FILL_WHITE_INIT: + sTransitionFillTimer = 0; + this->envCtx.fillScreen = true; + this->envCtx.screenFillColor[0] = 160; + this->envCtx.screenFillColor[1] = 160; + this->envCtx.screenFillColor[2] = 160; + + if (this->transitionTrigger != TRANS_TRIGGER_END) { + this->envCtx.screenFillColor[3] = 0; + this->transitionMode = TRANS_MODE_FILL_IN; + } else { + this->envCtx.screenFillColor[3] = 255; + this->transitionMode = TRANS_MODE_FILL_OUT; + } + break; + + case TRANS_MODE_FILL_IN: + this->envCtx.screenFillColor[3] = (sTransitionFillTimer / 20.0f) * 255.0f; + + if (sTransitionFillTimer >= 20) { + STOP_GAMESTATE(&this->state); + SET_NEXT_GAMESTATE(&this->state, Play_Init, sizeof(PlayState)); + gSaveContext.save.entrance = this->nextEntrance; + this->transitionTrigger = TRANS_TRIGGER_OFF; + this->transitionMode = TRANS_MODE_OFF; + } else { + sTransitionFillTimer++; + } + break; + + case TRANS_MODE_FILL_OUT: + this->envCtx.screenFillColor[3] = (1.0f - (sTransitionFillTimer / 20.0f)) * 255.0f; + + if (sTransitionFillTimer >= 20) { + gTrnsnUnkState = 0; + Game_SetFramerateDivisor(&this->state, 3); + this->transitionTrigger = TRANS_TRIGGER_OFF; + this->transitionMode = TRANS_MODE_OFF; + this->envCtx.fillScreen = false; + } else { + sTransitionFillTimer++; + } + break; + + case TRANS_MODE_FILL_BROWN_INIT: + sTransitionFillTimer = 0; + this->envCtx.fillScreen = true; + this->envCtx.screenFillColor[0] = 170; + this->envCtx.screenFillColor[1] = 160; + this->envCtx.screenFillColor[2] = 150; + + if (this->transitionTrigger != TRANS_TRIGGER_END) { + this->envCtx.screenFillColor[3] = 0; + this->transitionMode = TRANS_MODE_FILL_IN; + } else { + this->envCtx.screenFillColor[3] = 255; + this->transitionMode = TRANS_MODE_FILL_OUT; + } + break; + + case TRANS_MODE_INSTANT: + if (this->transitionTrigger != TRANS_TRIGGER_END) { + STOP_GAMESTATE(&this->state); + SET_NEXT_GAMESTATE(&this->state, Play_Init, sizeof(PlayState)); + gSaveContext.save.entrance = this->nextEntrance; + this->transitionTrigger = TRANS_TRIGGER_OFF; + this->transitionMode = TRANS_MODE_OFF; + } else { + gTrnsnUnkState = 0; + Game_SetFramerateDivisor(&this->state, 3); + this->transitionTrigger = TRANS_TRIGGER_OFF; + this->transitionMode = TRANS_MODE_OFF; + } + break; + + case TRANS_MODE_INSTANCE_WAIT: + if (gSaveContext.cutsceneTransitionControl != 0) { + this->transitionMode = TRANS_MODE_INSTANCE_RUNNING; + } + break; + + case TRANS_MODE_SANDSTORM_INIT: + if (this->transitionTrigger != TRANS_TRIGGER_END) { + this->envCtx.sandstormState = 1; + this->transitionMode = TRANS_MODE_SANDSTORM; + } else { + this->envCtx.sandstormState = 2; + this->envCtx.sandstormPrimA = 255; + this->envCtx.sandstormEnvA = 255; + this->transitionMode = TRANS_MODE_SANDSTORM; + } + break; + + case TRANS_MODE_SANDSTORM: + func_8019F128(NA_SE_EV_SAND_STORM - SFX_FLAG); + if (this->transitionTrigger == TRANS_TRIGGER_END) { + if (this->envCtx.sandstormPrimA < 110) { + gTrnsnUnkState = 0; + Game_SetFramerateDivisor(&this->state, 3); + this->transitionTrigger = TRANS_TRIGGER_OFF; + this->transitionMode = TRANS_MODE_OFF; + } + } else { + if (this->envCtx.sandstormEnvA == 255) { + STOP_GAMESTATE(&this->state); + SET_NEXT_GAMESTATE(&this->state, Play_Init, sizeof(PlayState)); + gSaveContext.save.entrance = this->nextEntrance; + this->transitionTrigger = TRANS_TRIGGER_OFF; + this->transitionMode = TRANS_MODE_OFF; + } + } + break; + + case TRANS_MODE_SANDSTORM_END_INIT: + if (this->transitionTrigger == TRANS_TRIGGER_END) { + this->envCtx.sandstormState = 4; + this->envCtx.sandstormPrimA = 255; + this->envCtx.sandstormEnvA = 255; + + // "It's here!!!!!!!!!" + (void)"来た!!!!!!!!!!!!!!!!!!!!!"; + + this->transitionMode = TRANS_MODE_SANDSTORM_END; + } else { + this->transitionMode = TRANS_MODE_SANDSTORM_INIT; + } + break; + + case TRANS_MODE_SANDSTORM_END: + func_8019F128(NA_SE_EV_SAND_STORM - SFX_FLAG); + + if (this->transitionTrigger == TRANS_TRIGGER_END) { + if (this->envCtx.sandstormPrimA <= 0) { + gTrnsnUnkState = 0; + Game_SetFramerateDivisor(&this->state, 3); + this->transitionTrigger = TRANS_TRIGGER_OFF; + this->transitionMode = TRANS_MODE_OFF; + } + } + break; + + case TRANS_MODE_CS_BLACK_FILL_INIT: + sTransitionFillTimer = 0; + this->envCtx.fillScreen = true; + this->envCtx.screenFillColor[0] = 0; + this->envCtx.screenFillColor[1] = 0; + this->envCtx.screenFillColor[2] = 0; + this->envCtx.screenFillColor[3] = 255; + this->transitionMode = TRANS_MODE_CS_BLACK_FILL; + break; + + case TRANS_MODE_CS_BLACK_FILL: + if (gSaveContext.cutsceneTransitionControl != 0) { + this->envCtx.screenFillColor[3] = gSaveContext.cutsceneTransitionControl; + + if (gSaveContext.cutsceneTransitionControl <= 100) { + gTrnsnUnkState = 0; + Game_SetFramerateDivisor(&this->state, 3); + this->transitionTrigger = TRANS_TRIGGER_OFF; + this->transitionMode = TRANS_MODE_OFF; + } + } + break; + } +} + +const char D_801DFA34[][4] = { + "all", "a", "a", "b", "b", "c", "c", "d", "d", "e", "e", "f", "fa", "fa", "fb", "fb", + "fc", "fc", "fd", "fd", "fe", "fe", "fg", "fg", "fh", "fh", "fi", "fi", "fj", "fj", "fk", "fk", + "f", "g", "g", "h", "h", "i", "i", "all", "all", "a", "b", "c", "d", "e", "f", "g", + "h", "i", "f", "fa", "fb", "fc", "fd", "fe", "ff", "fg", "fh", "fi", "fj", "fk", +}; + +#ifdef NON_MATCHING +// Stack issues +void Play_UpdateMain(PlayState* this) { + Input* input = this->state.input; + u8 freezeFlashTimer; + s32 sp5C = false; + + gSegments[4] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.mainKeepIndex].segment); + gSegments[5] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.subKeepIndex].segment); + gSegments[2] = VIRTUAL_TO_PHYSICAL(this->sceneSegment); + + if (R_PICTO_PHOTO_STATE == PICTO_PHOTO_STATE_PROCESS) { + R_PICTO_PHOTO_STATE = PICTO_PHOTO_STATE_READY; + MsgEvent_SendNullTask(); + Play_TakePictoPhoto(&this->pauseBgPreRender); + R_PICTO_PHOTO_STATE = PICTO_PHOTO_STATE_OFF; + } + Actor_SetMovementScale(this->state.framerateDivisor); + + if (FrameAdvance_Update(&this->frameAdvCtx, &input[1])) { + if ((this->transitionMode == TRANS_MODE_OFF) && (this->transitionTrigger != TRANS_TRIGGER_OFF)) { + this->transitionMode = TRANS_MODE_SETUP; + } + + if (gTrnsnUnkState != 0) { + switch (gTrnsnUnkState) { + case 2: + if (TransitionUnk_Init(&sTrnsnUnk, 10, 7) == NULL) { + gTrnsnUnkState = 0; + } else { + D_801F6D0C = gZBufferPtr; + gTrnsnUnkState = 3; + Game_SetFramerateDivisor(&this->state, 1); + } + break; + + case 3: + func_801647AC(&sTrnsnUnk); + break; + } + } + Play_UpdateTransition(this); + if (gTrnsnUnkState != 3) { + if ((gSaveContext.gameMode == 0) && + (((this->msgCtx.msgMode == 0)) || + ((this->msgCtx.currentTextId == 0xFF) && (this->msgCtx.msgMode == 0x42) && + (this->msgCtx.unk12020 == 0x41)) || + ((this->msgCtx.currentTextId >= 0x100) && (this->msgCtx.currentTextId <= 0x200))) && + (this->gameOverCtx.state == GAMEOVER_INACTIVE)) { + KaleidoSetup_Update(this); + } + + sp5C = (this->pauseCtx.state != 0) || (this->pauseCtx.debugEditor != DEBUG_EDITOR_NONE); + + AnimationContext_Reset(&this->animationCtx); + Object_UpdateBank(&this->objectCtx); + + if (!sp5C && (IREG(72) == 0)) { + this->gameplayFrames++; + Rumble_SetUpdateEnabled(true); + if ((this->actorCtx.freezeFlashTimer != 0) && (this->actorCtx.freezeFlashTimer-- < 5)) { + freezeFlashTimer = this->actorCtx.freezeFlashTimer; + if ((freezeFlashTimer > 0) && ((freezeFlashTimer % 2) != 0)) { + this->envCtx.fillScreen = true; + this->envCtx.screenFillColor[0] = this->envCtx.screenFillColor[1] = + this->envCtx.screenFillColor[2] = 150; + this->envCtx.screenFillColor[3] = 80; + } else { + this->envCtx.fillScreen = false; + } + } else { + Room_HandleLoadCallbacks(this, &this->roomCtx); + CollisionCheck_AT(this, &this->colChkCtx); + CollisionCheck_OC(this, &this->colChkCtx); + CollisionCheck_Damage(this, &this->colChkCtx); + CollisionCheck_ClearContext(this, &this->colChkCtx); + if (!this->haltAllActors) { + Actor_UpdateAll(this, &this->actorCtx); + } + Cutscene_Update1(this, &this->csCtx); + Cutscene_Update2(this, &this->csCtx); + Effect_UpdateAll(this); + EffectSS_UpdateAllParticles(this); + EffFootmark_Update(this); + } + } else { + Rumble_SetUpdateEnabled(false); + } + + Room_nop8012D510(this, &this->roomCtx.curRoom, &input[1], 0); + Room_nop8012D510(this, &this->roomCtx.prevRoom, &input[1], 1); + SkyboxDraw_Update(&this->skyboxCtx); + + if ((this->pauseCtx.state != 0) || (this->pauseCtx.debugEditor != DEBUG_EDITOR_NONE)) { + KaleidoScopeCall_Update(this); + } else if (this->gameOverCtx.state != GAMEOVER_INACTIVE) { + GameOver_Update(this); + } + + Message_Update(this); + Interface_Update(this); + AnimationContext_Update(this, &this->animationCtx); + SoundSource_UpdateAll(this); + ShrinkWindow_Update(this->state.framerateDivisor); + TransitionFade_Update(&this->unk_18E48, this->state.framerateDivisor); + } + } + + if (!sp5C || gDbgCamEnabled) { + s32 sp54; // camId + Vec3s sp48; // InputDir + + this->nextCamera = this->activeCamId; + for (sp54 = 0; sp54 < 4; sp54++) { + if ((sp54 != this->nextCamera) && (this->cameraPtrs[sp54] != NULL)) { + Camera_Update(&sp48, this->cameraPtrs[sp54]); + } + } + Camera_Update(&sp48, this->cameraPtrs[this->nextCamera]); + } + + if (!sp5C) { + Play_UpdateWaterCamera(this, this->cameraPtrs[this->nextCamera]); + Distortion_Update(); + } + + Environment_Update(this, &this->envCtx, &this->lightCtx, &this->pauseCtx, &this->msgCtx, &this->gameOverCtx, + this->state.gfxCtx); + + if (this->sramCtx.status != 0) { + if (gSaveContext.save.isOwlSave) { + func_80147198(&this->sramCtx); + } else { + func_80147068(&this->sramCtx); + } + } +} +#else +void Play_UpdateMain(PlayState* this); +#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_UpdateMain.s") +#endif + +void Play_Update(PlayState* this) { + if (!sBombersNotebookOpen) { + if (this->pauseCtx.bombersNotebookOpen) { + sBombersNotebookOpen = true; + sBombersNotebook.unk_00 = 0; + } + } else if (CHECK_BTN_ALL(CONTROLLER1(&this->state)->press.button, BTN_L) || + CHECK_BTN_ALL(CONTROLLER1(&this->state)->press.button, BTN_B) || + CHECK_BTN_ALL(CONTROLLER1(&this->state)->press.button, BTN_START) || (gIrqMgrResetStatus != 0)) { + sBombersNotebookOpen = false; + this->pauseCtx.bombersNotebookOpen = false; + sBombersNotebook.unk_00 = 0; + this->msgCtx.msgLength = 0; + this->msgCtx.msgMode = 0; + this->msgCtx.currentTextId = 0; + this->msgCtx.stateTimer = 0; + play_sound(NA_SE_SY_CANCEL); + } + if (sBombersNotebookOpen) { + BombersNotebook_Update(this, &sBombersNotebook, this->state.input); + Message_Update(this); + } else { + Play_UpdateMain(this); + } +} + +void Play_PostWorldDraw(PlayState* this) { + if ((this->pauseCtx.state != 0) || (this->pauseCtx.debugEditor != DEBUG_EDITOR_NONE)) { + KaleidoScopeCall_Draw(this); + } + + if (gSaveContext.gameMode == 0) { + Interface_Draw(this); + } + + if (((this->pauseCtx.state == 0) && (this->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) || + (this->msgCtx.currentTextId != 0xFF)) { + Message_Draw(this); + } + + if (this->gameOverCtx.state != GAMEOVER_INACTIVE) { + GameOver_FadeLights(this); + } + + // Shrink the whole screen display (at the end of First and Second Day by default) + if (gSaveContext.screenScaleFlag) { + Gfx* nextOpa; + Gfx* opa; + GraphicsContext* gfxCtx = this->state.gfxCtx; + + D_801F6D4C->scale = gSaveContext.screenScale / 1000.0f; + + OPEN_DISPS(gfxCtx); + + opa = POLY_OPA_DISP; + nextOpa = Graph_GfxPlusOne(opa); + gSPDisplayList(OVERLAY_DISP++, nextOpa); + + func_80141778(D_801F6D4C, &nextOpa, this->unk_18E60, gfxCtx); + + gSPEndDisplayList(nextOpa++); + Graph_BranchDlist(opa, nextOpa); + POLY_OPA_DISP = nextOpa; + + CLOSE_DISPS(gfxCtx); + } +} + +#ifdef NON_MATCHING +// Stack issues and 1 small issue around Play_PostWorldDraw +void Play_DrawMain(PlayState* this) { + GraphicsContext* gfxCtx = this->state.gfxCtx; + Lights* sp268; + Vec3f sp25C; + u8 sp25B = false; + + if (R_PAUSE_BG_PRERENDER_STATE >= PAUSE_BG_PRERENDER_UNK4) { + PreRender_ApplyFiltersSlowlyDestroy(&this->pauseBgPreRender); + R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_OFF; + } + + if ((R_PAUSE_BG_PRERENDER_STATE <= PAUSE_BG_PRERENDER_SETUP) && (gTrnsnUnkState < 2)) { + if (this->skyboxCtx.skyboxShouldDraw || (this->roomCtx.curRoom.mesh->type0.type == 1)) { + func_8012CF0C(gfxCtx, false, true, 0, 0, 0); + } else { + func_8012CF0C(gfxCtx, true, true, this->lightCtx.fogColor.r, this->lightCtx.fogColor.g, + this->lightCtx.fogColor.b); + } + } else { + func_8012CF0C(gfxCtx, false, false, 0, 0, 0); + } + + OPEN_DISPS(gfxCtx); + + gSegments[4] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.mainKeepIndex].segment); + gSegments[5] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.subKeepIndex].segment); + gSegments[2] = VIRTUAL_TO_PHYSICAL(this->sceneSegment); + + gSPSegment(POLY_OPA_DISP++, 0x04, this->objectCtx.status[this->objectCtx.mainKeepIndex].segment); + gSPSegment(POLY_XLU_DISP++, 0x04, this->objectCtx.status[this->objectCtx.mainKeepIndex].segment); + gSPSegment(OVERLAY_DISP++, 0x04, this->objectCtx.status[this->objectCtx.mainKeepIndex].segment); + + gSPSegment(POLY_OPA_DISP++, 0x05, this->objectCtx.status[this->objectCtx.subKeepIndex].segment); + gSPSegment(POLY_XLU_DISP++, 0x05, this->objectCtx.status[this->objectCtx.subKeepIndex].segment); + gSPSegment(OVERLAY_DISP++, 0x05, this->objectCtx.status[this->objectCtx.subKeepIndex].segment); + + gSPSegment(POLY_OPA_DISP++, 0x02, this->sceneSegment); + gSPSegment(POLY_XLU_DISP++, 0x02, this->sceneSegment); + gSPSegment(OVERLAY_DISP++, 0x02, this->sceneSegment); + + if (1) { + f32 var_fv0; // zFar + + ShrinkWindow_Draw(gfxCtx); + + POLY_OPA_DISP = Play_SetFog(this, POLY_OPA_DISP); + POLY_XLU_DISP = Play_SetFog(this, POLY_XLU_DISP); + + // zFar + var_fv0 = this->lightCtx.zFar; + if (var_fv0 > 12800.0f) { + var_fv0 = 12800.0f; + } + + View_SetPerspective(&this->view, this->view.fovy, this->view.zNear, var_fv0); + + View_Apply(&this->view, 0xF); + + // The billboard matrix temporarily stores the viewing matrix + Matrix_MtxToMtxF(&this->view.viewing, &this->billboardMtxF); + Matrix_MtxToMtxF(&this->view.projection, &this->viewProjectionMtxF); + + this->projectionMtxFDiagonal.x = this->viewProjectionMtxF.xx; + this->projectionMtxFDiagonal.y = this->viewProjectionMtxF.yy; + this->projectionMtxFDiagonal.z = -this->viewProjectionMtxF.zz; + + SkinMatrix_MtxFMtxFMult(&this->viewProjectionMtxF, &this->billboardMtxF, &this->viewProjectionMtxF); + + this->billboardMtxF.mf[3][2] = this->billboardMtxF.mf[3][1] = this->billboardMtxF.mf[3][0] = + this->billboardMtxF.mf[2][3] = this->billboardMtxF.mf[1][3] = this->billboardMtxF.mf[0][3] = 0.0f; + + Matrix_Transpose(&this->billboardMtxF); + + this->billboardMtx = GRAPH_ALLOC(this->state.gfxCtx, 2 * sizeof(Mtx)); + + Matrix_MtxFToMtx(&this->billboardMtxF, this->billboardMtx); + Matrix_RotateYF(BINANG_TO_RAD((s16)(Camera_GetCamDirYaw(GET_ACTIVE_CAM(this)) + 0x8000)), MTXMODE_NEW); + Matrix_ToMtx(this->billboardMtx + 1); + + gSPSegment(POLY_OPA_DISP++, 0x01, this->billboardMtx); + gSPSegment(POLY_XLU_DISP++, 0x01, this->billboardMtx); + gSPSegment(OVERLAY_DISP++, 0x01, this->billboardMtx); + + if (1) { + Gfx* sp218; + Gfx* sp214 = POLY_OPA_DISP; + + sp218 = Graph_GfxPlusOne(sp214); + gSPDisplayList(OVERLAY_DISP++, sp218); + + if (((this->transitionMode == TRANS_MODE_INSTANCE_RUNNING) || + (this->transitionMode == TRANS_TYPE_INSTANT)) || + D_801D0D54) { + View spA8; + + View_Init(&spA8, gfxCtx); + spA8.flags = 0xA; + + SET_FULLSCREEN_VIEWPORT(&spA8); + + View_ApplyTo(&spA8, &sp218); + this->transitionCtx.draw(&this->transitionCtx.instanceData, &sp218); + } + + TransitionFade_Draw(&this->unk_18E48, &sp218); + + if (gVisMonoColor.a != 0) { + sVisMono.primColor.rgba = gVisMonoColor.rgba; + VisMono_Draw(&sVisMono, &sp218); + } + + gSPEndDisplayList(sp218++); + Graph_BranchDlist(sp214, sp218); + POLY_OPA_DISP = sp218; + } + + if (gTrnsnUnkState == 3) { + Gfx* sp90 = POLY_OPA_DISP; + + TransitionUnk_Draw(&sTrnsnUnk, &sp90); + POLY_OPA_DISP = sp90; + sp25B = true; + goto PostWorldDraw; + } + + PreRender_SetValues(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, gfxCtx->curFrameBuffer, gfxCtx->zbuffer); + + if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_PROCESS) { + MsgEvent_SendNullTask(); + if (!gSaveContext.screenScaleFlag) { + PreRender_ApplyFiltersSlowlyInit(&this->pauseBgPreRender); + } + R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_READY; + SREG(33) |= 1; + } else { + if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_READY) { + Gfx* sp8C = POLY_OPA_DISP; + + if (this->pauseBgPreRender.unk_4D == 2) { + func_80170B28(&this->pauseBgPreRender, &sp8C); + } else { + func_80170798(&this->pauseBgPreRender, &sp8C); + } + + gSPDisplayList(sp8C++, D_0E000000.syncSegments); + POLY_OPA_DISP = sp8C; + sp25B = true; + goto PostWorldDraw; + } + + if (this->unk_18844 == 0) { + if (1) { + if (this->skyboxId && !this->envCtx.skyboxDisabled) { + if ((this->skyboxId == 1) || (this->skyboxId == 3)) { + Environment_UpdateSkybox(this->skyboxId, &this->envCtx, &this->skyboxCtx); + SkyboxDraw_Draw(&this->skyboxCtx, gfxCtx, this->skyboxId, this->envCtx.unk_13, + this->view.eye.x, this->view.eye.y, this->view.eye.z); + } else if (!this->skyboxCtx.skyboxShouldDraw) { + SkyboxDraw_Draw(&this->skyboxCtx, gfxCtx, this->skyboxId, 0, this->view.eye.x, + this->view.eye.y, this->view.eye.z); + } + } + + func_800FE390(this); + } + + sp268 = LightContext_NewLights(&this->lightCtx, gfxCtx); + + if (this->roomCtx.curRoom.enablePosLights || (MREG(93) != 0)) { + sp268->enablePosLights = true; + } + + Lights_BindAll(sp268, this->lightCtx.listHead, NULL, this); + Lights_Draw(sp268, gfxCtx); + + if (1) { + u32 roomDrawFlags = ((1) ? 1 : 0) | (((void)0, 1) ? 2 : 0); // FAKE: + + Scene_Draw(this); + if (this->roomCtx.unk78) { + Room_Draw(this, &this->roomCtx.curRoom, roomDrawFlags & 3); + Room_Draw(this, &this->roomCtx.prevRoom, roomDrawFlags & 3); + } + } + + if (this->skyboxCtx.skyboxShouldDraw) { + Vec3f sp78; + + if (1) {} + Camera_GetQuakeOffset(&sp78, GET_ACTIVE_CAM(this)); + SkyboxDraw_Draw(&this->skyboxCtx, gfxCtx, this->skyboxId, 0, this->view.eye.x + sp78.x, + this->view.eye.y + sp78.y, this->view.eye.z + sp78.z); + } + + // envCtx.precipitation[PRECIP_RAIN_CUR] + if (this->envCtx.unk_F2[1] != 0) { + Environment_DrawRain(this, &this->view, gfxCtx); + } + } + + if (1) { + Environment_FillScreen(gfxCtx, 0, 0, 0, this->bgCoverAlpha, 1); + } + + if (1) { + Actor_DrawAll(this, &this->actorCtx); + } + + if (1) { + if (!this->envCtx.sunMoonDisabled) { + sp25C.x = this->view.eye.x + this->envCtx.sunPos.x; + sp25C.y = this->view.eye.y + this->envCtx.sunPos.y; + sp25C.z = this->view.eye.z + this->envCtx.sunPos.z; + Environment_DrawSunLensFlare(this, &this->envCtx, &this->view, gfxCtx, sp25C); + } + + Environment_DrawCustomLensFlare(this); + } + + if (1) { + if (R_PLAY_FILL_SCREEN_ON) { + Environment_FillScreen(gfxCtx, R_PLAY_FILL_SCREEN_R, R_PLAY_FILL_SCREEN_G, R_PLAY_FILL_SCREEN_B, + R_PLAY_FILL_SCREEN_ALPHA, 3); + } + + switch (this->envCtx.fillScreen) { + case 1: + Environment_FillScreen(gfxCtx, this->envCtx.screenFillColor[0], this->envCtx.screenFillColor[1], + this->envCtx.screenFillColor[2], this->envCtx.screenFillColor[3], 3); + break; + + default: + break; + } + } + + if (1) { + if (this->envCtx.sandstormState != 0) { + Environment_DrawSandstorm(this, this->envCtx.sandstormState); + } + } + + if (this->worldCoverAlpha != 0) { + Environment_FillScreen(gfxCtx, 0, 0, 0, this->worldCoverAlpha, 3); + } + + if (1) { + DebugDisplay_DrawObjects(this); + } + + Play_DrawMotionBlur(this); + + if (((R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_SETUP) || (gTrnsnUnkState == 1)) || + (R_PICTO_PHOTO_STATE == PICTO_PHOTO_STATE_SETUP)) { + Gfx* sp74; + Gfx* sp70 = POLY_OPA_DISP; + + sp74 = Graph_GfxPlusOne(sp70); + gSPDisplayList(OVERLAY_DISP++, sp74); + this->pauseBgPreRender.fbuf = gfxCtx->curFrameBuffer; + + if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_SETUP) { + R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_PROCESS; + this->pauseBgPreRender.fbufSave = gfxCtx->zbuffer; + this->pauseBgPreRender.cvgSave = this->unk_18E58; + } else if (R_PICTO_PHOTO_STATE == PICTO_PHOTO_STATE_SETUP) { + R_PICTO_PHOTO_STATE = PICTO_PHOTO_STATE_PROCESS; + this->pauseBgPreRender.fbufSave = gfxCtx->zbuffer; + this->pauseBgPreRender.cvgSave = this->unk_18E58; + } else { + gTrnsnUnkState = 2; + this->pauseBgPreRender.fbufSave = gfxCtx->zbuffer; + this->pauseBgPreRender.cvgSave = NULL; + } + + func_801705B4(&this->pauseBgPreRender, &sp74); + + if (this->pauseBgPreRender.cvgSave != NULL) { + func_80170730(&this->pauseBgPreRender, &sp74); + } + + gSPEndDisplayList(sp74++); + Graph_BranchDlist(sp70, sp74); + POLY_OPA_DISP = sp74; + this->unk_18B49 = 2; + SREG(33) |= 1; + } else { + PostWorldDraw: + if (1) { + Play_PostWorldDraw(this); + } + } + } + } + + if ((this->view.unk164 != 0) && !gDbgCamEnabled) { + Vec3s sp4C; + + Camera_Update(&sp4C, GET_ACTIVE_CAM(this)); + View_UpdateViewingMatrix(&this->view); + this->view.unk164 = 0; + if ((this->skyboxId != 0) && !this->envCtx.skyboxDisabled) { + SkyboxDraw_UpdateMatrix(&this->skyboxCtx, this->view.eye.x, this->view.eye.y, this->view.eye.z); + } + } + + if (!sp25B) { + func_800FE3E0(this); + } + + CLOSE_DISPS(this->state.gfxCtx); +} +#else +void Play_DrawMain(PlayState* this); +#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_DrawMain.s") +#endif + +void Play_Draw(PlayState* this) { + GraphicsContext* gfxCtx = this->state.gfxCtx; + + { + GraphicsContext* gfxCtx2 = this->state.gfxCtx; + + if (sBombersNotebookOpen) { + if (D_801FBBD4 != 1) { + MsgEvent_SendNullTask(); + func_80178818(); + gfxCtx2->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx2->framebufferIndex % 2); + gfxCtx2->zbuffer = SysCfb_GetZBuffer(); + gfxCtx2->viMode = D_801FBB88; + gfxCtx2->viConfigFeatures = gViConfigFeatures; + gfxCtx2->xScale = gViConfigXScale; + gfxCtx2->yScale = gViConfigYScale; + gfxCtx2->updateViMode = true; + } + } else { + if (D_801FBBD4 != 0) { + MsgEvent_SendNullTask(); + func_80178750(); + gfxCtx2->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx2->framebufferIndex % 2); + gfxCtx2->zbuffer = SysCfb_GetZBuffer(); + gfxCtx2->viMode = D_801FBB88; + gfxCtx2->viConfigFeatures = gViConfigFeatures; + gfxCtx2->xScale = gViConfigXScale; + gfxCtx2->yScale = gViConfigYScale; + gfxCtx2->updateViMode = true; + } + } + } + + if (sBombersNotebookOpen && ((SREG(2) != 2) || (gZBufferPtr == NULL))) { + BombersNotebook_Draw(&sBombersNotebook, gfxCtx); + Message_Draw(this); + } else { + Play_DrawMain(this); + } +} + +void Play_Main(GameState* thisx) { + static Input* prevInput = NULL; + PlayState* this = (PlayState*)thisx; + + prevInput = CONTROLLER1(&this->state); + DebugDisplay_Init(); + + { + GraphicsContext* gfxCtx = this->state.gfxCtx; + + if (1) { + this->state.gfxCtx = NULL; + } + Play_Update(this); + this->state.gfxCtx = gfxCtx; + } + + { + Input input = *CONTROLLER1(&this->state); + + if (1) { + *CONTROLLER1(&this->state) = D_801F6C18; + } + Play_Draw(this); + *CONTROLLER1(&this->state) = input; + } + + ActorCutscene_Update(); + ActorCutscene_ClearWaiting(); +} s32 Play_InCsMode(PlayState* this) { return (this->csCtx.state != 0) || Player_InCsMode(this); } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80169100.s") +f32 Play_GetFloorSurfaceImpl(PlayState* this, MtxF* mtx, CollisionPoly** poly, s32* bgId, Vec3f* pos) { + f32 floorHeight = BgCheck_EntityRaycastFloor3(&this->colCtx, poly, bgId, pos); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_801691F0.s") + if (floorHeight > BGCHECK_Y_MIN) { + func_800C0094(*poly, pos->x, floorHeight, pos->z, mtx); + } else { + mtx->xy = 0.0f; + mtx->zx = 0.0f; + mtx->yx = 0.0f; + mtx->xx = 0.0f; + mtx->wz = 0.0f; + mtx->xz = 0.0f; + mtx->wy = 0.0f; + mtx->wx = 0.0f; + mtx->zz = 0.0f; + mtx->yz = 0.0f; + mtx->zy = 0.0f; + mtx->yy = 1.0f; + mtx->xw = pos->x; + mtx->yw = pos->y; + mtx->zw = pos->z; + mtx->ww = 1.0f; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_LoadScene.s") + return floorHeight; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_8016927C.s") +void Play_GetFloorSurface(PlayState* this, MtxF* mtx, Vec3f* pos) { + CollisionPoly* poly; + s32 bgId; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_801692C4.s") + Play_GetFloorSurfaceImpl(this, mtx, &poly, &bgId, pos); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_SceneInit.s") +void* Play_LoadFile(PlayState* this, RomFile* entry) { + size_t size = entry->vromEnd - entry->vromStart; + void* allocp = THA_AllocEndAlign16(&this->state.heap, size); + + DmaMgr_SendRequest0(allocp, entry->vromStart, size); + + return allocp; +} + +void Play_InitEnvironment(PlayState* this, s16 skyboxId) { + Skybox_Init(&this->state, &this->skyboxCtx, skyboxId); + Environment_Init(this, &this->envCtx, 0); +} + +void Play_InitScene(PlayState* this, s32 spawn) { + this->curSpawn = spawn; + this->linkActorEntry = NULL; + this->actorCsCamList = NULL; + this->setupEntranceList = NULL; + this->setupExitList = NULL; + this->naviQuestHints = NULL; + this->setupPathList = NULL; + this->sceneMaterialAnims = NULL; + this->roomCtx.unk74 = NULL; + this->numSetupActors = 0; + Object_InitBank(&this->state, &this->objectCtx); + LightContext_Init(this, &this->lightCtx); + Door_InitContext(&this->state, &this->doorCtx); + Room_Init(this, &this->roomCtx); + gSaveContext.worldMapArea = 0; + Scene_ProcessHeader(this, this->sceneSegment); + Play_InitEnvironment(this, this->skyboxId); +} + +void Play_SpawnScene(PlayState* this, s32 sceneId, s32 spawn) { + s32 pad; + SceneTableEntry* scene = &gSceneTable[sceneId]; + + scene->unk_D = 0; + this->loadedScene = scene; + this->sceneId = sceneId; + this->sceneConfig = scene->drawConfig; + this->sceneSegment = Play_LoadFile(this, &scene->segment); + scene->unk_D = 0; + gSegments[2] = VIRTUAL_TO_PHYSICAL(this->sceneSegment); + Play_InitScene(this, spawn); + Room_AllocateAndLoad(this, &this->roomCtx); +} void Play_GetScreenPos(PlayState* this, Vec3f* worldPos, Vec3f* screenPos) { f32 invW; @@ -379,9 +1888,8 @@ void Play_SetupRespawnPoint(GameState* thisx, s32 respawnMode, s32 playerParams) Player* player = GET_PLAYER(this); if (this->sceneId != SCENE_KAKUSIANA) { // Grottos - Play_SetRespawnData(&this->state, respawnMode, (u16)((void)0, gSaveContext.save.entrance), - this->roomCtx.curRoom.num, playerParams, &player->actor.world.pos, - player->actor.shape.rot.y); + Play_SetRespawnData(&this->state, respawnMode, ((void)0, gSaveContext.save.entrance), this->roomCtx.curRoom.num, + playerParams, &player->actor.world.pos, player->actor.shape.rot.y); } } @@ -405,7 +1913,7 @@ void func_80169EFC(GameState* thisx) { gSaveContext.respawnFlag = 1; func_80169ECC(this); this->transitionTrigger = TRANS_TRIGGER_START; - this->transitionType = TRANS_TYPE_02; + this->transitionType = TRANS_TYPE_FADE_BLACK; } // Gameplay_LoadToLastEntrance ? @@ -417,7 +1925,7 @@ void func_80169F78(GameState* thisx) { gSaveContext.respawnFlag = -1; func_80169ECC(this); this->transitionTrigger = TRANS_TRIGGER_START; - this->transitionType = TRANS_TYPE_02; + this->transitionType = TRANS_TYPE_FADE_BLACK; } // Gameplay_TriggerRespawn ? @@ -476,7 +1984,7 @@ s32 func_8016A02C(GameState* thisx, Actor* actor, s16* yaw) { /** * @brief Tests if \p pos is underwater. * - * @param[in] play PlayState + * @param[in] this PlayState * @param[in] pos position to test * @return true if inside a waterbox and not above a void. */ @@ -503,8 +2011,7 @@ s32 Play_IsDebugCamEnabled(void) { } // A mapping from playerActorCsIds to sGlobalCamDataSettings indices. -extern s16 D_801D0D64[]; -// s16 D_801D0D64[] = { -3, -2, -4, -5, -7, -11, -8, -9, -6, -16 }; +s16 D_801D0D64[] = { -3, -2, -4, -5, -7, -11, -8, -9, -6, -16 }; // Used by Player /** @@ -549,4 +2056,272 @@ void Play_FillScreen(GameState* thisx, s16 fillScreenOn, u8 red, u8 green, u8 bl R_PLAY_FILL_SCREEN_ALPHA = alpha; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_Init.s") +void Play_Init(GameState* thisx) { + PlayState* this = (PlayState*)thisx; + GraphicsContext* gfxCtx = this->state.gfxCtx; + s32 pad; + uintptr_t zAlloc; + s32 zAllocSize; + Player* player; + s32 i; + s32 spawn; + u8 sceneLayer; + s32 scene; + + if ((gSaveContext.respawnFlag == -4) || (gSaveContext.respawnFlag == -0x63)) { + if (CHECK_EVENTINF(EVENTINF_27)) { + CLEAR_EVENTINF(EVENTINF_27); + STOP_GAMESTATE(&this->state); + SET_NEXT_GAMESTATE(&this->state, DayTelop_Init, sizeof(DayTelopState)); + return; + } + + gSaveContext.unk_3CA7 = 1; + if (gSaveContext.respawnFlag == -0x63) { + gSaveContext.respawnFlag = 2; + } + } else { + gSaveContext.unk_3CA7 = 0; + } + + if (gSaveContext.save.entrance == -1) { + gSaveContext.save.entrance = 0; + STOP_GAMESTATE(&this->state); + SET_NEXT_GAMESTATE(&this->state, TitleSetup_Init, sizeof(TitleSetupState)); + return; + } + + if ((gSaveContext.nextCutsceneIndex == 0xFFEF) || (gSaveContext.nextCutsceneIndex == 0xFFF0)) { + scene = ((void)0, gSaveContext.save.entrance) >> 9; + spawn = (((void)0, gSaveContext.save.entrance) >> 4) & 0x1F; + + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { + if (scene == ENTR_SCENE_MOUNTAIN_VILLAGE_WINTER) { + scene = ENTR_SCENE_MOUNTAIN_VILLAGE_SPRING; + } else if (scene == ENTR_SCENE_GORON_VILLAGE_WINTER) { + scene = ENTR_SCENE_GORON_VILLAGE_SPRING; + } else if (scene == ENTR_SCENE_PATH_TO_GORON_VILLAGE_WINTER) { + scene = ENTR_SCENE_PATH_TO_GORON_VILLAGE_SPRING; + } else if ((scene == ENTR_SCENE_SNOWHEAD) || (scene == ENTR_SCENE_PATH_TO_SNOWHEAD) || + (scene == ENTR_SCENE_PATH_TO_MOUNTAIN_VILLAGE) || (scene == ENTR_SCENE_GORON_SHRINE) || + (scene == ENTR_SCENE_GORON_RACETRACK)) { + gSaveContext.nextCutsceneIndex = 0xFFF0; + } + } + + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { + if (scene == ENTR_SCENE_SOUTHERN_SWAMP_POISONED) { + scene = ENTR_SCENE_SOUTHERN_SWAMP_CLEARED; + } else if (scene == ENTR_SCENE_WOODFALL) { + gSaveContext.nextCutsceneIndex = 0xFFF1; + } + } + + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20) && (scene == ENTR_SCENE_IKANA_CANYON)) { + gSaveContext.nextCutsceneIndex = 0xFFF2; + } + + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80) && + ((scene == ENTR_SCENE_GREAT_BAY_COAST) || (scene == ENTR_SCENE_ZORA_CAPE))) { + gSaveContext.nextCutsceneIndex = 0xFFF0; + } + + // "First cycle" Termina Field + if (INV_CONTENT(ITEM_OCARINA) != ITEM_OCARINA) { + if ((scene == ENTR_SCENE_TERMINA_FIELD) && + (((void)0, gSaveContext.save.entrance) != ENTRANCE(TERMINA_FIELD, 10))) { + gSaveContext.nextCutsceneIndex = 0xFFF4; + } + } + //! FAKE: + gSaveContext.save.entrance = + Entrance_Create(((void)0, scene), spawn, ((void)0, gSaveContext.save.entrance) & 0xF); + } + + GameState_Realloc(&this->state, 0); + KaleidoManager_Init(this); + ShrinkWindow_Init(); + View_Init(&this->view, gfxCtx); + func_801A3EC0(0); + Quake_Init(); + Distortion_Init(this); + + for (i = 0; i < ARRAY_COUNT(this->cameraPtrs); i++) { + this->cameraPtrs[i] = NULL; + } + + Camera_Init(&this->mainCamera, &this->view, &this->colCtx, this); + Camera_ChangeStatus(&this->mainCamera, CAM_STATUS_ACTIVE); + + for (i = 0; i < ARRAY_COUNT(this->subCameras); i++) { + Camera_Init(&this->subCameras[i], &this->view, &this->colCtx, this); + Camera_ChangeStatus(&this->subCameras[i], CAM_STATUS_INACTIVE); + } + + this->cameraPtrs[CAM_ID_MAIN] = &this->mainCamera; + this->cameraPtrs[CAM_ID_MAIN]->uid = CAM_ID_MAIN; + this->activeCamId = CAM_ID_MAIN; + + func_800DFF18(&this->mainCamera, 0x7F); + Sram_Alloc(&this->state, &this->sramCtx); + Regs_InitData(this); + Message_Init(this); + GameOver_Init(this); + SoundSource_InitAll(this); + EffFootmark_Init(this); + Effect_Init(this); + EffectSS_Init(this, 100); + CollisionCheck_InitContext(this, &this->colChkCtx); + AnimationContext_Reset(&this->animationCtx); + Cutscene_Init(this, &this->csCtx); + + if (gSaveContext.nextCutsceneIndex != 0xFFEF) { + gSaveContext.save.cutscene = gSaveContext.nextCutsceneIndex; + gSaveContext.nextCutsceneIndex = 0xFFEF; + } + + if (gSaveContext.save.cutscene == 0xFFFD) { + gSaveContext.save.cutscene = 0; + } + + if (gSaveContext.nextDayTime != 0xFFFF) { + gSaveContext.save.time = gSaveContext.nextDayTime; + gSaveContext.skyboxTime = gSaveContext.nextDayTime; + } + + if ((gSaveContext.save.time >= CLOCK_TIME(18, 0)) || (gSaveContext.save.time < CLOCK_TIME(6, 30))) { + gSaveContext.save.isNight = true; + } else { + gSaveContext.save.isNight = false; + } + + func_800EDDB0(this); + + if (((gSaveContext.gameMode != 0) && (gSaveContext.gameMode != 1)) || (gSaveContext.save.cutscene >= 0xFFF0)) { + gSaveContext.unk_3DC0 = 0; + Magic_Reset(this); + gSaveContext.sceneLayer = (gSaveContext.save.cutscene & 0xF) + 1; + + // Set saved cutscene to 0 so it doesn't immediately play, but instead let the `CutsceneManager` handle it. + gSaveContext.save.cutscene = 0; + } else { + gSaveContext.sceneLayer = 0; + } + + sceneLayer = gSaveContext.sceneLayer; + + Play_SpawnScene( + this, Entrance_GetSceneIdAbsolute(((void)0, gSaveContext.save.entrance) + ((void)0, gSaveContext.sceneLayer)), + Entrance_GetSpawnNum(((void)0, gSaveContext.save.entrance) + ((void)0, gSaveContext.sceneLayer))); + KaleidoScopeCall_Init(this); + Interface_Init(this); + + if (gSaveContext.nextDayTime != 0xFFFF) { + if (gSaveContext.nextDayTime == 0x8000) { + gSaveContext.save.day++; + gSaveContext.save.daysElapsed++; + gSaveContext.dogIsLost = true; + gSaveContext.nextDayTime = -2; + } else { + gSaveContext.nextDayTime = -3; + } + } + + Play_InitMotionBlur(); + + R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_OFF; + R_PICTO_PHOTO_STATE = PICTO_PHOTO_STATE_OFF; + + PreRender_Init(&this->pauseBgPreRender); + PreRender_SetValuesSave(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, NULL, NULL, NULL); + PreRender_SetValues(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, NULL, NULL); + + this->unk_18E64 = D_801FBB90; + this->pictoPhotoI8 = gPictoPhotoI8; + this->unk_18E68 = D_80784600; + this->unk_18E58 = D_80784600; + this->unk_18E60 = D_80784600; + gTrnsnUnkState = 0; + this->transitionMode = TRANS_MODE_OFF; + D_801D0D54 = false; + + FrameAdvance_Init(&this->frameAdvCtx); + Rand_Seed(osGetTime()); + Matrix_Init(&this->state); + + this->state.main = Play_Main; + this->state.destroy = Play_Destroy; + + this->transitionTrigger = TRANS_TRIGGER_END; + this->worldCoverAlpha = 0; + this->bgCoverAlpha = 0; + this->haltAllActors = false; + this->unk_18844 = false; + + if (gSaveContext.gameMode != 1) { + if (gSaveContext.nextTransitionType == TRANS_NEXT_TYPE_DEFAULT) { + this->transitionType = + (Entrance_GetTransitionFlags(((void)0, gSaveContext.save.entrance) + sceneLayer) >> 7) & 0x7F; + } else { + this->transitionType = gSaveContext.nextTransitionType; + gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT; + } + } else { + this->transitionType = TRANS_TYPE_FADE_BLACK; + } + + TransitionFade_Init(&this->unk_18E48); + TransitionFade_SetType(&this->unk_18E48, 3); + TransitionFade_SetColor(&this->unk_18E48, RGBA8(160, 160, 160, 255)); + TransitionFade_Start(&this->unk_18E48); + VisMono_Init(&sVisMono); + + gVisMonoColor.a = 0; + D_801F6D4C = &D_801F6D38; + func_80140E80(D_801F6D4C); + D_801F6D4C->lodProportion = 0.0f; + D_801F6D4C->mode = 1; + D_801F6D4C->primColor.r = 0; + D_801F6D4C->primColor.g = 0; + D_801F6D4C->primColor.b = 0; + D_801F6D4C->primColor.a = 0; + D_801F6D4C->envColor.r = 0; + D_801F6D4C->envColor.g = 0; + D_801F6D4C->envColor.b = 0; + D_801F6D4C->envColor.a = 0; + EnvFlags_UnsetAll(this); + THA_GetSize(&this->state.heap); + zAllocSize = THA_GetSize(&this->state.heap); + zAlloc = (uintptr_t)THA_AllocEndAlign16(&this->state.heap, zAllocSize); + ZeldaArena_Init(((zAlloc + 8) & ~0xF), (zAllocSize - ((zAlloc + 8) & ~0xF)) + zAlloc); //! @bug: Incorrect ALIGN16s + Actor_InitContext(this, &this->actorCtx, this->linkActorEntry); + + while (!Room_HandleLoadCallbacks(this, &this->roomCtx)) {} + + if ((CURRENT_DAY != 0) && ((this->roomCtx.curRoom.unk3 == 1) || (this->roomCtx.curRoom.unk3 == 5))) { + Actor_Spawn(&this->actorCtx, this, ACTOR_EN_TEST4, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0); + } + + player = GET_PLAYER(this); + + Camera_InitPlayerSettings(&this->mainCamera, player); + gDbgCamEnabled = false; + + if ((player->actor.params & 0xFF) != 0xFF) { + Camera_ChangeDataIdx(&this->mainCamera, player->actor.params & 0xFF); + } + + func_800F15D8(&this->mainCamera); + Interface_SetSceneRestrictions(this); + func_800FB758(this); + gSaveContext.seqId = this->sequenceCtx.seqId; + gSaveContext.ambienceId = this->sequenceCtx.ambienceId; + AnimationContext_Update(this, &this->animationCtx); + func_800EDBE0(this); + gSaveContext.respawnFlag = 0; + sBombersNotebookOpen = false; + BombersNotebook_Init(&sBombersNotebook); +} + +//! TODO: fake symbol, remove when BombersNotebook_Update is matching +u16 D_801D0D78[] = { 0, 0, 0, 0 }; diff --git a/src/code/z_play_hireso.c b/src/code/z_play_hireso.c index e429051c8..829fe71f2 100644 --- a/src/code/z_play_hireso.c +++ b/src/code/z_play_hireso.c @@ -16,12 +16,12 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016EA90.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016F1A8.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Draw.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016F4EC.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016F5A8.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Update.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016FC78.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Init.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016FC98.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Destroy.s") diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 21753040f..51b25268b 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -77,7 +76,7 @@ void func_80127B64(struct_801F58B0 arg0[], s32 count, Vec3f* arg2); s32 func_801226E0(PlayState* play, s32 arg1) { if (arg1 == 0) { - Play_SetupRespawnPoint(&play->state, RESPAWN_MODE_DOWN, 0xBFF); + Play_SetupRespawnPoint(&play->state, RESPAWN_MODE_DOWN, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B)); if (play->sceneId == SCENE_KAKUSIANA) { return 1; } @@ -142,13 +141,13 @@ void func_801229A0(PlayState* play, Player* player) { OPEN_DISPS(play->state.gfxCtx); if ((gSaveContext.jinxTimer != 0) || (player->invincibilityTimer > 0)) { - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); } CLOSE_DISPS(play->state.gfxCtx); } -void func_801229EC(UNK_TYPE arg0, UNK_TYPE arg1) { +void func_801229EC(Actor* thisx, PlayState* play) { } s16 sMaskObjectIds[PLAYER_MASK_MAX - 1] = { @@ -185,7 +184,8 @@ void func_801229FC(Player* player) { s32 i; for (i = 0; i < ARRAY_COUNT(D_801F58B0); i++) { - func_80127B64(D_801F58B0[i], ARRAY_COUNT(D_801F58B0[i]), &player->bodyPartsPos[7]); + func_80127B64(D_801F58B0[i], ARRAY_COUNT(D_801F58B0[i]), + &player->bodyPartsPos[PLAYER_BODYPART_HEAD]); } } } @@ -328,7 +328,7 @@ void func_80122F28(Player* player) { (!(player->stateFlags1 & (PLAYER_STATE1_400 | PLAYER_STATE1_800 | PLAYER_STATE1_200000 | PLAYER_STATE1_800000 | PLAYER_STATE1_20000000))) && (!(player->stateFlags2 & PLAYER_STATE2_1))) { - if (player->doorType < 0) { + if (player->doorType <= PLAYER_DOORTYPE_TALKING) { ActorCutscene_SetIntentToPlay(0x7C); } else { ActorCutscene_SetIntentToPlay(0x7D); @@ -354,27 +354,27 @@ void func_8012300C(PlayState* play, s32 arg1) { player->unk_B2B = arg1; } -void func_8012301C(Player* player, PlayState* play2) { +void func_8012301C(Actor* thisx, PlayState* play2) { PlayState* play = play2; - s32 pad; + Player* this = (Player*)thisx; - player->unk_AE7++; + this->unk_AE7++; - if (player->unk_AE7 == 2) { - s16 objectId = gPlayerFormObjectIndices[((void)0, gSaveContext.save.playerForm)]; + if (this->unk_AE7 == 2) { + s16 objectId = gPlayerFormObjectIndices[GET_PLAYER_FORM]; gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId = objectId; - func_8012F73C(&play->objectCtx, player->actor.objBankIndex, objectId); - player->actor.objBankIndex = Object_GetIndex(&play->objectCtx, GAMEPLAY_KEEP); - } else if (player->unk_AE7 >= 3) { + func_8012F73C(&play->objectCtx, this->actor.objBankIndex, objectId); + this->actor.objBankIndex = Object_GetIndex(&play->objectCtx, GAMEPLAY_KEEP); + } else if (this->unk_AE7 >= 3) { s32 objBankIndex = Object_GetIndex(&play->objectCtx, gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId); if (Object_IsLoaded(&play->objectCtx, objBankIndex)) { - player->actor.objBankIndex = objBankIndex; - player->actor.shape.rot.z = gSaveContext.save.playerForm + 1; - player->actor.init = PlayerCall_Init; - player->actor.update = PlayerCall_Update; - player->actor.draw = PlayerCall_Draw; + this->actor.objBankIndex = objBankIndex; + this->actor.shape.rot.z = GET_PLAYER_FORM + 1; + this->actor.init = PlayerCall_Init; + this->actor.update = PlayerCall_Update; + this->actor.draw = PlayerCall_Draw; gSaveContext.save.equippedMask = PLAYER_MASK_NONE; } } @@ -456,7 +456,7 @@ void func_80123140(PlayState* play, Player* player) { s32 Player_InBlockingCsMode(PlayState* play, Player* player) { return (player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_200 | PLAYER_STATE1_20000000)) || - (player->csMode != 0) || (play->transitionTrigger == TRANS_TRIGGER_START) || + (player->csMode != PLAYER_CSMODE_0) || (play->transitionTrigger == TRANS_TRIGGER_START) || (play->transitionMode != TRANS_MODE_OFF) || (player->stateFlags1 & PLAYER_STATE1_1) || (player->stateFlags3 & PLAYER_STATE3_80) || (play->actorCtx.unk268 != 0); } @@ -480,7 +480,7 @@ s32 func_80123448(PlayState* play) { Player* player = GET_PLAYER(play); return (player->stateFlags1 & PLAYER_STATE1_400000) && - (player->transformation != PLAYER_FORM_HUMAN || (!func_80123434(player) && player->unk_730 == NULL)); + (player->transformation != PLAYER_FORM_HUMAN || (!func_80123434(player) && player->targetedActor == NULL)); } // TODO: Player_IsGoronOrDeku is a temporary name until we have more info on this function. @@ -536,21 +536,21 @@ ItemId func_8012364C(PlayState* play, Player* player, s32 arg2) { } if (arg2 == 0) { - s32 item = Inventory_GetBtnBItem(play); + ItemId item = Inventory_GetBtnBItem(play); if (item >= ITEM_FD) { return item; } - if ((player->currentMask == PLAYER_MASK_BLAST) && (play->interfaceCtx.bButtonDoAction == 0x18)) { + if ((player->currentMask == PLAYER_MASK_BLAST) && (play->interfaceCtx.bButtonDoAction == DO_ACTION_EXPLODE)) { return ITEM_F0; } - if ((player->currentMask == PLAYER_MASK_BREMEN) && (play->interfaceCtx.bButtonDoAction == 0x1A)) { + if ((player->currentMask == PLAYER_MASK_BREMEN) && (play->interfaceCtx.bButtonDoAction == DO_ACTION_MARCH)) { return ITEM_F1; } - if ((player->currentMask == PLAYER_MASK_KAMARO) && (play->interfaceCtx.bButtonDoAction == 0x19)) { + if ((player->currentMask == PLAYER_MASK_KAMARO) && (play->interfaceCtx.bButtonDoAction == DO_ACTION_DANCE)) { return ITEM_F2; } @@ -558,27 +558,21 @@ ItemId func_8012364C(PlayState* play, Player* player, s32 arg2) { } if (arg2 == 1) { - return (gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] != BTN_DISABLED) ? BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) - : (gSaveContext.hudVisibility == HUD_VISIBILITY_A_B_C) ? BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) - : ITEM_NONE; + return C_BTN_ITEM(EQUIP_SLOT_C_LEFT); } if (arg2 == 2) { - return (gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] != BTN_DISABLED) ? BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) - : (gSaveContext.hudVisibility == HUD_VISIBILITY_A_B_C) ? BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) - : ITEM_NONE; + return C_BTN_ITEM(EQUIP_SLOT_C_DOWN); } - return (gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] != BTN_DISABLED) ? BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) - : (gSaveContext.hudVisibility == HUD_VISIBILITY_A_B_C) ? BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) - : ITEM_NONE; + return C_BTN_ITEM(EQUIP_SLOT_C_RIGHT); } u16 sCItemButtons[] = { BTN_CLEFT, BTN_CDOWN, BTN_CRIGHT }; -s32 func_80123810(PlayState* play) { +PlayerItemAction func_80123810(PlayState* play) { Player* player = GET_PLAYER(play); - s32 temp_v0; + PlayerItemAction itemAction; ItemId itemId; s32 i; @@ -587,7 +581,7 @@ s32 func_80123810(PlayState* play) { play->interfaceCtx.unk_222 = 0; play->interfaceCtx.unk_224 = 0; Interface_SetHudVisibility(play->msgCtx.unk_120BC); - return -1; + return PLAYER_IA_MINUS1; } } else { gSaveContext.save.unk_06--; @@ -602,110 +596,110 @@ s32 func_80123810(PlayState* play) { play->interfaceCtx.unk_224 = 0; Interface_SetHudVisibility(play->msgCtx.unk_120BC); - if ((itemId >= ITEM_FD) || (temp_v0 = play->unk_18794(play, player, itemId, i), (temp_v0 < 0))) { + if ((itemId >= ITEM_FD) || ((itemAction = play->unk_18794(play, player, itemId)) <= PLAYER_IA_MINUS1)) { play_sound(NA_SE_SY_ERROR); - return -1; + return PLAYER_IA_MINUS1; } else { s32 pad; player->heldItemButton = i; - return temp_v0; + return itemAction; } } } - return 0; + return PLAYER_IA_NONE; } -// Used to map action params to model groups -u8 sActionModelGroups[PLAYER_AP_MAX] = { - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_NONE - PLAYER_MODELGROUP_13, // PLAYER_AP_LAST_USED - PLAYER_MODELGROUP_STICK, // PLAYER_AP_FISHING_ROD - PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_AP_SWORD_KOKIRI - PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_AP_SWORD_RAZOR - PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_AP_SWORD_GILDED - PLAYER_MODELGROUP_TWO_HAND_SWORD, // PLAYER_AP_SWORD_GREAT_FAIRY - PLAYER_MODELGROUP_STICK, // PLAYER_AP_STICK - PLAYER_MODELGROUP_ZORA_FINS, // PLAYER_AP_ZORA_FINS - PLAYER_MODELGROUP_BOW, // PLAYER_AP_BOW - PLAYER_MODELGROUP_BOW, // PLAYER_AP_BOW_FIRE - PLAYER_MODELGROUP_BOW, // PLAYER_AP_BOW_ICE - PLAYER_MODELGROUP_BOW, // PLAYER_AP_BOW_LIGHT - PLAYER_MODELGROUP_HOOKSHOT, // PLAYER_AP_HOOKSHOT - PLAYER_MODELGROUP_EXPLOSIVES, // PLAYER_AP_BOMB - PLAYER_MODELGROUP_EXPLOSIVES, // PLAYER_AP_POWDER_KEG - PLAYER_MODELGROUP_EXPLOSIVES, // PLAYER_AP_BOMBCHU - PLAYER_MODELGROUP_8, // PLAYER_AP_11 - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_NUT - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_PICTO_BOX - PLAYER_MODELGROUP_INSTRUMENT, // PLAYER_AP_OCARINA - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_FISH - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_SPRING_WATER - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_HOT_SPRING_WATER - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_ZORA_EGG - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_DEKU_PRINCESS - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_GOLD_DUST - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_1C - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_SEAHORSE - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_MUSHROOM - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_HYLIAN_LOACH - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_BUG - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_POE - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_BIG_POE - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_POTION_RED - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_POTION_BLUE - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_POTION_GREEN - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_MILK - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_MILK_HALF - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_CHATEAU - PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_FAIRY - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MOON_TEAR - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_DEED_LAND - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_ROOM_KEY - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_LETTER_TO_KAFEI - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MAGIC_BEANS - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_DEED_SWAMP - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_DEED_MOUNTAIN - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_DEED_OCEAN - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_32 - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_LETTER_MAMA - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_34 - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_35 - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_PENDANT_OF_MEMORIES - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_37 - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_38 - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_39 - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_TRUTH - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_KAFEIS_MASK - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_ALL_NIGHT - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_BUNNY - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_KEATON - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_GARO - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_ROMANI - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_CIRCUS_LEADER - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_POSTMAN - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_COUPLE - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_GREAT_FAIRY - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_GIBDO - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_DON_GERO - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_KAMARO - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_CAPTAIN - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_STONE - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_BREMEN - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_BLAST - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_SCENTS - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_GIANT - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_FIERCE_DEITY - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_GORON - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_ZORA - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_DEKU - PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_LENS +// Used to map item actions to model groups +u8 sActionModelGroups[PLAYER_IA_MAX] = { + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_NONE + PLAYER_MODELGROUP_13, // PLAYER_IA_LAST_USED + PLAYER_MODELGROUP_STICK, // PLAYER_IA_FISHING_ROD + PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_KOKIRI + PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_RAZOR + PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_GILDED + PLAYER_MODELGROUP_TWO_HAND_SWORD, // PLAYER_IA_SWORD_GREAT_FAIRY + PLAYER_MODELGROUP_STICK, // PLAYER_IA_STICK + PLAYER_MODELGROUP_ZORA_FINS, // PLAYER_IA_ZORA_FINS + PLAYER_MODELGROUP_BOW, // PLAYER_IA_BOW + PLAYER_MODELGROUP_BOW, // PLAYER_IA_BOW_FIRE + PLAYER_MODELGROUP_BOW, // PLAYER_IA_BOW_ICE + PLAYER_MODELGROUP_BOW, // PLAYER_IA_BOW_LIGHT + PLAYER_MODELGROUP_HOOKSHOT, // PLAYER_IA_HOOKSHOT + PLAYER_MODELGROUP_EXPLOSIVES, // PLAYER_IA_BOMB + PLAYER_MODELGROUP_EXPLOSIVES, // PLAYER_IA_POWDER_KEG + PLAYER_MODELGROUP_EXPLOSIVES, // PLAYER_IA_BOMBCHU + PLAYER_MODELGROUP_8, // PLAYER_IA_11 + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_NUT + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_PICTO_BOX + PLAYER_MODELGROUP_INSTRUMENT, // PLAYER_IA_OCARINA + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_FISH + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_SPRING_WATER + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_HOT_SPRING_WATER + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_ZORA_EGG + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_DEKU_PRINCESS + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_GOLD_DUST + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_1C + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_SEAHORSE + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_MUSHROOM + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_HYLIAN_LOACH + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_BUG + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_POE + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_BIG_POE + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_POTION_RED + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_POTION_BLUE + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_POTION_GREEN + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_MILK + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_MILK_HALF + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_CHATEAU + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_FAIRY + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MOON_TEAR + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_DEED_LAND + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_ROOM_KEY + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_LETTER_TO_KAFEI + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MAGIC_BEANS + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_DEED_SWAMP + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_DEED_MOUNTAIN + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_DEED_OCEAN + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_32 + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_LETTER_MAMA + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_34 + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_35 + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_PENDANT_OF_MEMORIES + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_37 + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_38 + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_39 + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_TRUTH + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_KAFEIS_MASK + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_ALL_NIGHT + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_BUNNY + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_KEATON + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_GARO + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_ROMANI + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_CIRCUS_LEADER + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_POSTMAN + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_COUPLE + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_GREAT_FAIRY + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_GIBDO + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_DON_GERO + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_KAMARO + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_CAPTAIN + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_STONE + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_BREMEN + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_BLAST + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_SCENTS + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_GIANT + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_FIERCE_DEITY + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_GORON + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_ZORA + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_DEKU + PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_LENS }; -PlayerModelGroup Player_ActionToModelGroup(Player* player, PlayerActionParam actionParam) { - PlayerModelGroup modelGroup = sActionModelGroups[actionParam]; +PlayerModelGroup Player_ActionToModelGroup(Player* player, PlayerItemAction itemAction) { + PlayerModelGroup modelGroup = sActionModelGroups[itemAction]; if ((modelGroup == PLAYER_MODELGROUP_ONE_HAND_SWORD) && Player_IsGoronOrDeku(player)) { return PLAYER_MODELGROUP_1; @@ -730,17 +724,17 @@ u8 sPlayerStrengths[PLAYER_FORM_MAX] = { }; typedef struct { - /* 0x00 */ u8 flag; - /* 0x02 */ u16 textId; -} TextTriggerEntry; // size = 0x04 + /* 0x0 */ u8 flag; + /* 0x2 */ u16 textId; +} EnvHazardTextTriggerEntry; // size = 0x4 // These textIds are OoT remnants. The corresponding text entries are not present in this game, and so these don't point // to anything relevant. -TextTriggerEntry sEnvironmentTextTriggers[] = { - { 1, 0x26FC }, - { 2, 0x26FD }, - { 0, 0 }, - { 2, 0x26FD }, +EnvHazardTextTriggerEntry sEnvHazardTextTriggers[] = { + { ENV_HAZARD_TEXT_TRIGGER_HOTROOM, 0x26FC }, // PLAYER_ENV_HAZARD_HOTROOM - 1 + { ENV_HAZARD_TEXT_TRIGGER_UNDERWATER, 0x26FD }, // PLAYER_ENV_HAZARD_UNDERWATER_FLOOR - 1 + { 0, 0 }, // PLAYER_ENV_HAZARD_SWIMMING - 1 + { ENV_HAZARD_TEXT_TRIGGER_UNDERWATER, 0x26FD }, // PLAYER_ENV_HAZARD_UNDERWATER_FREE - 1 }; PlayerModelIndices gPlayerModelTypes[PLAYER_MODELGROUP_MAX] = { @@ -1177,7 +1171,7 @@ u8 D_801C07AC[] = { void Player_SetModelsForHoldingShield(Player* player) { if (player->stateFlags1 & PLAYER_STATE1_400000) { - if ((player->heldItemActionParam < 0) || (player->heldItemActionParam == player->itemActionParam)) { + if ((player->itemAction <= PLAYER_IA_MINUS1) || (player->itemAction == player->heldItemAction)) { if (!Player_IsHoldingTwoHandedWeapon(player)) { if (!Player_IsGoronOrDeku(player)) { D_801F59E0 = player->transformation * 2; @@ -1192,7 +1186,7 @@ void Player_SetModelsForHoldingShield(Player* player) { player->sheathDLists = &sPlayerDListGroups[player->sheathType][D_801F59E0]; player->modelAnimType = PLAYER_ANIMTYPE_2; - player->heldItemActionParam = -1; + player->itemAction = PLAYER_IA_MINUS1; } } } @@ -1243,19 +1237,19 @@ void Player_SetModelGroup(Player* player, PlayerModelGroup modelGroup) { } void func_80123C58(Player* player) { - player->heldItemActionParam = player->itemActionParam; - Player_SetModelGroup(player, Player_ActionToModelGroup(player, player->itemActionParam)); + player->itemAction = player->heldItemAction; + Player_SetModelGroup(player, Player_ActionToModelGroup(player, player->heldItemAction)); player->unk_AA5 = 0; } void Player_SetEquipmentData(PlayState* play, Player* player) { - if (player->csMode != 0x86) { + if (player->csMode != PLAYER_CSMODE_134) { player->currentShield = GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD); if ((player->transformation != PLAYER_FORM_ZORA) || (((player->currentBoots != PLAYER_BOOTS_ZORA_LAND)) && (player->currentBoots != PLAYER_BOOTS_ZORA_UNDERWATER))) { player->currentBoots = D_801BFF90[player->transformation]; } - Player_SetModelGroup(player, Player_ActionToModelGroup(player, player->itemActionParam)); + Player_SetModelGroup(player, Player_ActionToModelGroup(player, player->heldItemAction)); func_80123140(play, player); if (player->unk_B62 != 0) { player->unk_B62 = 1; @@ -1263,19 +1257,19 @@ void Player_SetEquipmentData(PlayState* play, Player* player) { } } -void func_80123D50(PlayState* play, Player* player, ItemId itemId, PlayerActionParam actionParam) { +void Player_UpdateBottleHeld(PlayState* play, Player* player, ItemId itemId, PlayerItemAction itemAction) { Inventory_UpdateBottleItem(play, itemId, player->heldItemButton); if (itemId != ITEM_BOTTLE) { player->heldItemId = itemId; - player->itemActionParam = actionParam; + player->heldItemAction = itemAction; } - player->heldItemActionParam = actionParam; + player->itemAction = itemAction; } void func_80123DA4(Player* player) { - player->unk_730 = NULL; + player->targetedActor = NULL; player->stateFlags2 &= ~PLAYER_STATE2_2000; } @@ -1300,7 +1294,7 @@ void func_80123E90(PlayState* play, Actor* actor) { Player* player = GET_PLAYER(play); func_80123DC0(player); - player->unk_730 = actor; + player->targetedActor = actor; player->unk_A78 = actor; player->stateFlags1 |= PLAYER_STATE1_10000; Camera_SetViewParam(Play_GetCamera(play, CAM_ID_MAIN), CAM_VIEW_TARGET, actor); @@ -1324,7 +1318,7 @@ s32 Player_IsBurningStickInRange(PlayState* play, Vec3f* pos, f32 xzRange, f32 y Vec3f diff; s32 pad; - if ((this->itemActionParam == PLAYER_AP_STICK) && (this->unk_B28 != 0)) { + if ((this->heldItemAction == PLAYER_IA_STICK) && (this->unk_B28 != 0)) { Math_Vec3f_Diff(&this->meleeWeaponInfo[0].tip, pos, &diff); return (SQXZ(diff) <= SQ(xzRange)) && (0.0f <= diff.y) && (diff.y <= yRange); } @@ -1333,7 +1327,7 @@ s32 Player_IsBurningStickInRange(PlayState* play, Vec3f* pos, f32 xzRange, f32 y } u8 Player_GetStrength(void) { - return sPlayerStrengths[(void)0, gSaveContext.save.playerForm]; + return sPlayerStrengths[GET_PLAYER_FORM]; } u8 Player_GetMask(PlayState* play) { @@ -1363,19 +1357,19 @@ s32 Player_IsHoldingMirrorShield(PlayState* play) { } s32 Player_IsHoldingHookshot(Player* player) { - return player->itemActionParam == PLAYER_AP_HOOKSHOT; + return player->heldItemAction == PLAYER_IA_HOOKSHOT; } s32 func_801240DC(Player* player) { return Player_IsHoldingHookshot(player) && (player->heldActor == NULL); } -s32 func_80124110(Player* player, PlayerActionParam actionParam) { - s32 temp_v0 = actionParam - PLAYER_AP_FISHING_ROD; +s32 func_80124110(Player* player, PlayerItemAction itemAction) { + s32 temp_v0 = itemAction - PLAYER_IA_FISHING_ROD; if (player->transformation != PLAYER_FORM_GORON) { - if (((actionParam - PLAYER_AP_FISHING_ROD) > (PLAYER_AP_FISHING_ROD - PLAYER_AP_FISHING_ROD)) && - ((actionParam - PLAYER_AP_FISHING_ROD) < (PLAYER_AP_SWORD_GREAT_FAIRY - PLAYER_AP_FISHING_ROD))) { + if (((itemAction - PLAYER_IA_FISHING_ROD) > (PLAYER_IA_FISHING_ROD - PLAYER_IA_FISHING_ROD)) && + ((itemAction - PLAYER_IA_FISHING_ROD) < (PLAYER_IA_SWORD_GREAT_FAIRY - PLAYER_IA_FISHING_ROD))) { return temp_v0; } } @@ -1384,36 +1378,36 @@ s32 func_80124110(Player* player, PlayerActionParam actionParam) { } s32 func_80124148(Player* player) { - return func_80124110(player, player->itemActionParam); + return func_80124110(player, player->heldItemAction); } -s32 Player_ActionToMeleeWeapon(PlayerActionParam actionParam) { - s32 weapon = actionParam - (PLAYER_AP_SWORD_KOKIRI - 1); +s32 Player_ActionToMeleeWeapon(PlayerItemAction itemAction) { + s32 weapon = itemAction - (PLAYER_IA_SWORD_KOKIRI - 1); - if ((weapon > 0) && (weapon <= (PLAYER_AP_ZORA_FINS - (PLAYER_AP_SWORD_KOKIRI - 1)))) { + if ((weapon > 0) && (weapon <= (PLAYER_IA_ZORA_FINS - (PLAYER_IA_SWORD_KOKIRI - 1)))) { return weapon; } return 0; } s32 Player_GetMeleeWeaponHeld(Player* player) { - return Player_ActionToMeleeWeapon(player->itemActionParam); + return Player_ActionToMeleeWeapon(player->heldItemAction); } s32 Player_IsHoldingTwoHandedWeapon(Player* player) { - // Relies on the actionParams for two-handed weapons being contiguous. - if ((player->itemActionParam >= PLAYER_AP_SWORD_GREAT_FAIRY) && (player->itemActionParam <= PLAYER_AP_STICK)) { + // Relies on the itemActions for two-handed weapons being contiguous. + if ((player->heldItemAction >= PLAYER_IA_SWORD_GREAT_FAIRY) && (player->heldItemAction <= PLAYER_IA_STICK)) { return true; } return false; } -s32 Player_ActionToBottle(Player* player, PlayerActionParam actionParam) { - s32 bottle = actionParam - PLAYER_AP_BOTTLE; +s32 Player_ActionToBottle(Player* player, PlayerItemAction itemAction) { + s32 bottle = itemAction - PLAYER_IA_BOTTLE; - // Relies on bottle-related action params to be contiguous - if ((bottle >= (PLAYER_AP_BOTTLE - PLAYER_AP_BOTTLE)) && (bottle <= (PLAYER_AP_BOTTLE_FAIRY - PLAYER_AP_BOTTLE))) { + // Relies on bottle-related item actions to be contiguous + if ((bottle >= (PLAYER_IA_BOTTLE - PLAYER_IA_BOTTLE)) && (bottle <= (PLAYER_IA_BOTTLE_FAIRY - PLAYER_IA_BOTTLE))) { return bottle; } @@ -1421,14 +1415,14 @@ s32 Player_ActionToBottle(Player* player, PlayerActionParam actionParam) { } s32 Player_GetBottleHeld(Player* Player) { - return Player_ActionToBottle(Player, Player->itemActionParam); + return Player_ActionToBottle(Player, Player->heldItemAction); } -s32 Player_ActionToExplosive(Player* player, PlayerActionParam actionParam) { - s32 explosive = actionParam - PLAYER_AP_BOMB; +s32 Player_ActionToExplosive(Player* player, PlayerItemAction itemAction) { + s32 explosive = itemAction - PLAYER_IA_BOMB; - // Relies on explosive-related action params to be contiguous - if ((explosive >= (PLAYER_AP_BOMB - PLAYER_AP_BOMB)) && (explosive <= (PLAYER_AP_BOMBCHU - PLAYER_AP_BOMB))) { + // Relies on explosive-related item actions to be contiguous + if ((explosive >= (PLAYER_IA_BOMB - PLAYER_IA_BOMB)) && (explosive <= (PLAYER_IA_BOMBCHU - PLAYER_IA_BOMB))) { return explosive; } @@ -1436,16 +1430,16 @@ s32 Player_ActionToExplosive(Player* player, PlayerActionParam actionParam) { } s32 Player_GetExplosiveHeld(Player* player) { - return Player_ActionToExplosive(player, player->itemActionParam); + return Player_ActionToExplosive(player, player->heldItemAction); } -s32 Player_ActionToSword(Actor* actor, PlayerActionParam actionParam) { +s32 Player_ActionToSword(Actor* actor, PlayerItemAction itemAction) { s32 sword = 0; //! FAKE: - if ((actionParam == PLAYER_AP_LAST_USED) || - ((sword = actionParam - PLAYER_AP_SWORD_KOKIRI, (sword >= PLAYER_AP_SWORD_KOKIRI - PLAYER_AP_SWORD_KOKIRI)) && - (sword <= PLAYER_AP_SWORD_GREAT_FAIRY - PLAYER_AP_SWORD_KOKIRI))) { + if ((itemAction == PLAYER_IA_LAST_USED) || + ((sword = itemAction - PLAYER_IA_SWORD_KOKIRI, (sword >= PLAYER_IA_SWORD_KOKIRI - PLAYER_IA_SWORD_KOKIRI)) && + (sword <= PLAYER_IA_SWORD_GREAT_FAIRY - PLAYER_IA_SWORD_KOKIRI))) { return sword; } @@ -1456,37 +1450,36 @@ s32 func_801242B4(Player* player) { return (player->stateFlags1 & PLAYER_STATE1_8000000) && (player->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER); } -s32 Player_GetEnvTimerType(PlayState* play) { +s32 Player_GetEnvironmentalHazard(PlayState* play) { Player* player = GET_PLAYER(play); - TextTriggerEntry* triggerEntry; - s32 envTimerType; + EnvHazardTextTriggerEntry* triggerEntry; + s32 envHazard; if (play->roomCtx.curRoom.unk2 == 3) { // Room is hot - envTimerType = PLAYER_ENV_TIMER_HOTROOM - 1; + envHazard = PLAYER_ENV_HAZARD_HOTROOM - 1; } else if ((player->transformation != PLAYER_FORM_ZORA) && (player->underwaterTimer > 80)) { - envTimerType = PLAYER_ENV_TIMER_UNDERWATER_FREE - 1; + envHazard = PLAYER_ENV_HAZARD_UNDERWATER_FREE - 1; } else if (player->stateFlags1 & PLAYER_STATE1_8000000) { if ((player->transformation == PLAYER_FORM_ZORA) && (player->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) && (player->actor.bgCheckFlags & 1)) { - envTimerType = PLAYER_ENV_TIMER_UNDERWATER_FLOOR - 1; + envHazard = PLAYER_ENV_HAZARD_UNDERWATER_FLOOR - 1; } else { - envTimerType = PLAYER_ENV_TIMER_SWIMMING - 1; + envHazard = PLAYER_ENV_HAZARD_SWIMMING - 1; } } else { - return PLAYER_ENV_TIMER_NONE; + return PLAYER_ENV_HAZARD_NONE; } - // Trigger general textboxes under certain conditions, like "It's so hot in here!". Unused in MM - triggerEntry = &sEnvironmentTextTriggers[envTimerType]; + triggerEntry = &sEnvHazardTextTriggers[envHazard]; if (!Player_InCsMode(play)) { - if ((triggerEntry->flag) && !(gSaveContext.textTriggerFlags & triggerEntry->flag) && - (envTimerType == (PLAYER_ENV_TIMER_HOTROOM - 1))) { + if ((triggerEntry->flag) && !(gSaveContext.envHazardTextTriggerFlags & triggerEntry->flag) && + (envHazard == (PLAYER_ENV_HAZARD_HOTROOM - 1))) { Message_StartTextbox(play, triggerEntry->textId, NULL); - gSaveContext.textTriggerFlags |= triggerEntry->flag; + gSaveContext.envHazardTextTriggerFlags |= triggerEntry->flag; } } - return envTimerType + 1; + return envHazard + 1; } void func_80124420(Player* player); @@ -1730,7 +1723,7 @@ void func_80124FF0(f32 arg0, s16 arg1, Vec3f* arg2, s16 arg3, Vec3f* arg4, Vec3f Math_Vec3f_Diff(arg5, arg4, &sp44); sp40 = sqrtf(SQXZ(sp44)); - sp3C = (sp40 <= 1.0f) ? arg3 : Math_FAtan2F(sp44.z, sp44.x); + sp3C = (sp40 <= 1.0f) ? arg3 : Math_Atan2S_XY(sp44.z, sp44.x); sp40 = (Math_CosS(sp3C - arg3) * sp40) + arg8; if (ABS_ALT(BINANG_SUB(sp3C, arg3)) > 0x4000) { @@ -1738,7 +1731,7 @@ void func_80124FF0(f32 arg0, s16 arg1, Vec3f* arg2, s16 arg3, Vec3f* arg4, Vec3f } sp3C -= arg3; - temp_v0 = Math_FAtan2F(sp44.y, sp40); + temp_v0 = Math_Atan2S_XY(sp44.y, sp40); temp_v0 = CLAMP(temp_v0, (s16)-arg9, arg9); //! FAKE: if (sp3C) {} @@ -2034,9 +2027,9 @@ void Player_DrawGetItem(PlayState* play, Player* player) { if (player->stateFlags1 & PLAYER_STATE1_400) { refPos.y = player->actor.world.pos.y + 30.0f; } else { - refPos.x = player->bodyPartsPos[0xC].x; - refPos.y = player->bodyPartsPos[0xC].y - 6.0f; - refPos.z = player->bodyPartsPos[0xC].z; + refPos.x = player->bodyPartsPos[PLAYER_BODYPART_LEFT_HAND].x; + refPos.y = player->bodyPartsPos[PLAYER_BODYPART_LEFT_HAND].y - 6.0f; + refPos.z = player->bodyPartsPos[PLAYER_BODYPART_LEFT_HAND].z; } } else { refPos.y = player->actor.world.pos.y + 28.0f; @@ -2045,7 +2038,7 @@ void Player_DrawGetItem(PlayState* play, Player* player) { Math_Vec3f_Copy(&refPos, &D_801F59E8); } - drawIdPlusOne = ABS_ALT(player->unk_B2A); + drawIdPlusOne = ABS_ALT(player->getItemDrawId); Player_DrawGetItemImpl(play, player, &refPos, drawIdPlusOne); } } @@ -2254,12 +2247,12 @@ Vec3f D_801C0D6C = { 420.0f, 1210.0f, 380.0f }; f32 D_801C0D78[] = { 0.0f, // Player is not holding a melee weapon - 3000.0f, // PLAYER_AP_SWORD_KOKIRI - 3000.0f, // PLAYER_AP_SWORD_RAZOR - 4000.0f, // PLAYER_AP_SWORD_GILDED - 5500.0f, // PLAYER_AP_SWORD_GREAT_FAIRY - -1.0f, // PLAYER_AP_STICK - 2500.0f, // PLAYER_AP_ZORA_FINS + 3000.0f, // PLAYER_IA_SWORD_KOKIRI + 3000.0f, // PLAYER_IA_SWORD_RAZOR + 4000.0f, // PLAYER_IA_SWORD_GILDED + 5500.0f, // PLAYER_IA_SWORD_GREAT_FAIRY + -1.0f, // PLAYER_IA_STICK + 2500.0f, // PLAYER_IA_ZORA_FINS }; Gfx* D_801C0D94 = object_link_child_DL_017818; @@ -2322,7 +2315,7 @@ void func_80128388(struct_801F58B0 arg0[], struct_80128388_arg1 arg1[], s32 arg2 void Player_DrawGreatFairysMask(PlayState* play, Player* player) { s32 pad; - Mtx* sp90 = GRAPH_ALLOC(play->state.gfxCtx, 6 * sizeof(Mtx)); + Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, 6 * sizeof(Mtx)); Vec3f sp84; Vec3f sp78; Vec3f* iter = D_801C0C0C; @@ -2332,7 +2325,7 @@ void Player_DrawGreatFairysMask(PlayState* play, Player* player) { OPEN_DISPS(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x0B, sp90); + gSPSegment(POLY_OPA_DISP++, 0x0B, mtx); Matrix_MultVec3f(&D_801C0C00, &D_801C0C54[1].unk_08); Math_Vec3f_Lerp(&player->bodyPartsPos[7], &player->bodyPartsPos[0], 0.2f, &D_801C0C54[2].unk_08); @@ -2346,7 +2339,7 @@ void Player_DrawGreatFairysMask(PlayState* play, Player* player) { Matrix_Push(); Matrix_Translate(iter->x, iter->y, iter->z, MTXMODE_APPLY); - func_80128388(D_801F58B0[i], D_801C0C54, 3, &sp90); + func_80128388(D_801F58B0[i], D_801C0C54, 3, &mtx); Matrix_Pop(); iter++; iter2++; diff --git a/src/code/z_quake.c b/src/code/z_quake.c index 964935ea1..8a6b9d73a 100644 --- a/src/code/z_quake.c +++ b/src/code/z_quake.c @@ -668,7 +668,7 @@ void Distortion_Update(void) { zScaleFactor = 1.0f; xyScaleFactor = 1.0f; speedScaleFactor = 1.0f; - } else if (sDistortionRequest.type & DISTORTION_TYPE_4) { + } else if (sDistortionRequest.type & DISTORTION_TYPE_UNDERWATER_ENTRY) { if (sDistortionRequest.state == DISTORTION_SETUP) { countdownMax = sDistortionRequest.countdown; depthPhase = 0x760; @@ -690,7 +690,7 @@ void Distortion_Update(void) { countdownRatio = sDistortionRequest.countdown / (f32)countdownMax; zScaleFactor = xyScaleFactor = countdownRatio; speedScaleFactor = 1.0f; - } else if (sDistortionRequest.type & DISTORTION_TYPE_3) { + } else if (sDistortionRequest.type & DISTORTION_TYPE_ZORA_SWIMMING) { depthPhase = 0x3F0; screenPlanePhase = 0x156; @@ -738,14 +738,14 @@ void Distortion_Update(void) { break; } - if (player->unk_B88 < 0) { - xyScaleFactor = (player->unk_B88 - (f32)0x4000) / (f32)0xC000; + if (player->unk_B86[1] < 0) { + xyScaleFactor = (player->unk_B86[1] - (f32)0x4000) / (f32)0xC000; } else { - xyScaleFactor = (player->unk_B88 + (f32)0x4000) / (f32)0xC000; + xyScaleFactor = (player->unk_B86[1] + (f32)0x4000) / (f32)0xC000; } zScaleFactor = -xyScaleFactor; speedScaleFactor = 1.0f; - } else if (sDistortionRequest.type & DISTORTION_TYPE_2) { + } else if (sDistortionRequest.type & DISTORTION_TYPE_NON_ZORA_SWIMMING) { depthPhase = 0x3F0; screenPlanePhase = 0x156; diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c index 057424e3c..7e15a9bde 100644 --- a/src/code/z_rcp.c +++ b/src/code/z_rcp.c @@ -778,19 +778,19 @@ Gfx* Gfx_SetFog(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f) { if (n >= 997) { if (n >= 1000) { - gSPFogFactor(gfx + 1, 0, 0); // gSPFogPosition(gfx++, ?, ?) + gSPFogFactor(&gfx[1], 0, 0); // gSPFogPosition(gfx++, ?, ?) } else { - gSPFogFactor(gfx + 1, 0x7FFF, 0x8100); // gSPFogPosition(gfx++, ?, ?) + gSPFogFactor(&gfx[1], 0x7FFF, 0x8100); // gSPFogPosition(gfx++, ?, ?) } } else { if (n < 0) { - gSPFogFactor(gfx + 1, 0, 255); // gSPFogPosition(gfx++, ?, ?) + gSPFogFactor(&gfx[1], 0, 255); // gSPFogPosition(gfx++, ?, ?) } else { - gSPFogPosition(gfx + 1, n, f); + gSPFogPosition(&gfx[1], n, f); } } - return gfx + 2; + return &gfx[2]; } Gfx* Gfx_SetFogWithSync(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f) { @@ -1108,13 +1108,13 @@ void func_8012CA38(GraphicsContext* gfxCtx) { } Gfx* Gfx_BranchTexScroll(Gfx** gfxp, u32 x, u32 y, s32 width, s32 height) { - Gfx* displayList = Graph_DlistAlloc(gfxp, 3 * sizeof(Gfx)); + Gfx* gfx = Graph_DlistAlloc(gfxp, 3 * sizeof(Gfx)); - gDPTileSync(displayList); - gDPSetTileSize(displayList + 1, 0, x, y, (x + ((width - 1) << 2)), (y + ((height - 1) << 2))); - gSPEndDisplayList(displayList + 2); + gDPTileSync(&gfx[0]); + gDPSetTileSize(&gfx[1], 0, x, y, (x + ((width - 1) << 2)), (y + ((height - 1) << 2))); + gSPEndDisplayList(&gfx[2]); - return displayList; + return gfx; } void func_8012CB04(Gfx** gfxp, u32 x, u32 y) { @@ -1126,101 +1126,71 @@ Gfx* func_8012CB28(GraphicsContext* gfxCtx, u32 x, u32 y) { } Gfx* Gfx_TexScroll(GraphicsContext* gfxCtx, u32 x, u32 y, s32 width, s32 height) { - Gfx* displayList; - - { - Gfx* _g = (Gfx*)gfxCtx->polyOpa.d - 4; - displayList = _g; - gfxCtx->polyOpa.d = _g; - } + Gfx* gfx = GRAPH_ALLOC(gfxCtx, 3 * sizeof(Gfx)); x %= 2048; y %= 2048; - gDPTileSync(displayList); - gDPSetTileSize(displayList + 1, 0, x, y, (x + ((width - 1) << 2)), (y + ((height - 1) << 2))); - gSPEndDisplayList(displayList + 2); + gDPTileSync(&gfx[0]); + gDPSetTileSize(&gfx[1], 0, x, y, (x + ((width - 1) << 2)), (y + ((height - 1) << 2))); + gSPEndDisplayList(&gfx[2]); - return displayList; + return gfx; } Gfx* Gfx_TwoTexScroll(GraphicsContext* gfxCtx, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2, u32 x2, u32 y2, s32 width2, s32 height2) { - Gfx* displayList; - - { - Gfx* _g = (Gfx*)gfxCtx->polyOpa.d - 6; - displayList = _g; - gfxCtx->polyOpa.d = _g; - } + Gfx* gfx = GRAPH_ALLOC(gfxCtx, 5 * sizeof(Gfx)); x1 %= 2048; y1 %= 2048; x2 %= 2048; y2 %= 2048; - gDPTileSync(displayList); - gDPSetTileSize(displayList + 1, tile1, x1, y1, (x1 + ((width1 - 1) << 2)), (y1 + ((height1 - 1) << 2))); - gDPTileSync(displayList + 2); - gDPSetTileSize(displayList + 3, tile2, x2, y2, (x2 + ((width2 - 1) << 2)), (y2 + ((height2 - 1) << 2))); - gSPEndDisplayList(displayList + 4); + gDPTileSync(&gfx[0]); + gDPSetTileSize(&gfx[1], tile1, x1, y1, (x1 + ((width1 - 1) << 2)), (y1 + ((height1 - 1) << 2))); + gDPTileSync(&gfx[2]); + gDPSetTileSize(&gfx[3], tile2, x2, y2, (x2 + ((width2 - 1) << 2)), (y2 + ((height2 - 1) << 2))); + gSPEndDisplayList(&gfx[4]); - return displayList; + return gfx; } Gfx* Gfx_TwoTexScrollEnvColor(GraphicsContext* gfxCtx, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2, u32 x2, u32 y2, s32 width2, s32 height2, s32 r, s32 g, s32 b, s32 a) { - Gfx* displayList; - - { - Gfx* _g = (Gfx*)gfxCtx->polyOpa.d - 6; - displayList = _g; - gfxCtx->polyOpa.d = _g; - } + Gfx* gfx = GRAPH_ALLOC(gfxCtx, 6 * sizeof(Gfx)); x1 %= 2048; y1 %= 2048; x2 %= 2048; y2 %= 2048; - gDPTileSync(displayList); - gDPSetTileSize(displayList + 1, tile1, x1, y1, (x1 + ((width1 - 1) << 2)), (y1 + ((height1 - 1) << 2))); - gDPTileSync(displayList + 2); - gDPSetTileSize(displayList + 3, tile2, x2, y2, (x2 + ((width2 - 1) << 2)), (y2 + ((height2 - 1) << 2))); - gDPSetEnvColor(displayList + 4, r, g, b, a); - gSPEndDisplayList(displayList + 5); + gDPTileSync(&gfx[0]); + gDPSetTileSize(&gfx[1], tile1, x1, y1, (x1 + ((width1 - 1) << 2)), (y1 + ((height1 - 1) << 2))); + gDPTileSync(&gfx[2]); + gDPSetTileSize(&gfx[3], tile2, x2, y2, (x2 + ((width2 - 1) << 2)), (y2 + ((height2 - 1) << 2))); + gDPSetEnvColor(&gfx[4], r, g, b, a); + gSPEndDisplayList(&gfx[5]); - return displayList; + return gfx; } Gfx* Gfx_EnvColor(GraphicsContext* gfxCtx, s32 r, s32 g, s32 b, s32 a) { - Gfx* displayList; + Gfx* gfx = GRAPH_ALLOC(gfxCtx, 2 * sizeof(Gfx)); - { - Gfx* _g = (Gfx*)gfxCtx->polyOpa.d - 2; - displayList = _g; - gfxCtx->polyOpa.d = _g; - } + gDPSetEnvColor(&gfx[0], r, g, b, a); + gSPEndDisplayList(&gfx[1]); - gDPSetEnvColor(displayList, r, g, b, a); - gSPEndDisplayList(displayList + 1); - - return displayList; + return gfx; } Gfx* Gfx_PrimColor(GraphicsContext* gfxCtx, s32 lodfrac, s32 r, s32 g, s32 b, s32 a) { - Gfx* displayList; + Gfx* gfx = GRAPH_ALLOC(gfxCtx, 2 * sizeof(Gfx)); - { - Gfx* _g = (Gfx*)gfxCtx->polyOpa.d - 2; - displayList = _g; - gfxCtx->polyOpa.d = _g; - } + gDPSetPrimColor(&gfx[0], 0, lodfrac, r, g, b, a); + gSPEndDisplayList(&gfx[1]); - gDPSetPrimColor(displayList, 0, lodfrac, r, g, b, a); - gSPEndDisplayList(displayList + 1); - - return displayList; + return gfx; } void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g, u8 b) { @@ -1329,7 +1299,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g } void func_8012D374(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b) { - if ((R_PAUSE_BG_PRERENDER_STATE <= PAUSE_BG_PRERENDER_SETUP) && (D_801F6D10 < 2)) { + if ((R_PAUSE_BG_PRERENDER_STATE <= PAUSE_BG_PRERENDER_SETUP) && (gTrnsnUnkState < 2)) { func_8012CF0C(gfxCtx, true, true, r, g, b); } else { func_8012CF0C(gfxCtx, false, false, r, g, b); diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 7cb180b80..48c360107 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -148,8 +148,9 @@ void Scene_HeaderCmdSpawnList(PlayState* play, SceneCmd* cmd) { play->linkActorEntry = (ActorEntry*)Lib_SegmentedToVirtual(cmd->spawnList.segment) + play->setupEntranceList[play->curSpawn].spawn; - if ((play->linkActorEntry->params & 0x0F00) >> 8 == 0x0C || - (gSaveContext.respawnFlag == 0x02 && gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams == 0x0CFF)) { + if ((PLAYER_GET_INITMODE(play->linkActorEntry) == PLAYER_INITMODE_TELESCOPE) || + ((gSaveContext.respawnFlag == 2) && + (gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams == PLAYER_PARAMS(0xFF, PLAYER_INITMODE_TELESCOPE)))) { // Skull Kid Object Object_Spawn(&play->objectCtx, OBJECT_STK); return; @@ -159,7 +160,7 @@ void Scene_HeaderCmdSpawnList(PlayState* play, SceneCmd* cmd) { nextObject = play->objectCtx.status[play->objectCtx.num].segment; play->objectCtx.num = loadedCount; play->objectCtx.spawnedObjectCount = loadedCount; - playerObjectId = gPlayerFormObjectIndices[(void)0, gSaveContext.save.playerForm]; + playerObjectId = gPlayerFormObjectIndices[GET_PLAYER_FORM]; gActorOverlayTable[0].initInfo->objectId = playerObjectId; Object_Spawn(&play->objectCtx, playerObjectId); @@ -230,7 +231,7 @@ void Scene_HeaderCmdSpecialFiles(PlayState* play, SceneCmd* cmd) { } if (cmd->specialFiles.naviQuestHintFileId != NAVI_QUEST_HINTS_NONE) { - play->naviQuestHints = Play_LoadScene(play, &naviQuestHintFiles[cmd->specialFiles.naviQuestHintFileId - 1]); + play->naviQuestHints = Play_LoadFile(play, &naviQuestHintFiles[cmd->specialFiles.naviQuestHintFileId - 1]); } } @@ -377,30 +378,31 @@ void Scene_HeaderCmdSkyboxDisables(PlayState* play, SceneCmd* cmd) { // SceneTableEntry Header Command 0x10: Time Settings void Scene_HeaderCmdTimeSettings(PlayState* play, SceneCmd* cmd) { - if (cmd->timeSettings.hour != 0xFF && cmd->timeSettings.min != 0xFF) { + if ((cmd->timeSettings.hour != 0xFF) && (cmd->timeSettings.min != 0xFF)) { gSaveContext.skyboxTime = gSaveContext.save.time = - (u16)(((cmd->timeSettings.hour + (cmd->timeSettings.min / 60.0f)) * 60.0f) / 0.021972656f); + CLOCK_TIME_ALT2_F(cmd->timeSettings.hour, cmd->timeSettings.min); } - if (cmd->timeSettings.unk6 != 0xFF) { - play->envCtx.timeIncrement = cmd->timeSettings.unk6; + if (cmd->timeSettings.timeSpeed != 0xFF) { + play->envCtx.sceneTimeSpeed = cmd->timeSettings.timeSpeed; } else { - play->envCtx.timeIncrement = 0; + play->envCtx.sceneTimeSpeed = 0; } - if ((gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) && (play->envCtx.timeIncrement != 0)) { - play->envCtx.timeIncrement = 5; + // Increase time speed during first cycle + if ((gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) && (play->envCtx.sceneTimeSpeed != 0)) { + play->envCtx.sceneTimeSpeed = 5; } if (gSaveContext.sunsSongState == SUNSSONG_INACTIVE) { - REG(15) = play->envCtx.timeIncrement; + R_TIME_SPEED = play->envCtx.sceneTimeSpeed; } - play->envCtx.unk_4 = -(Math_SinS(((void)0, gSaveContext.save.time) - 0x8000) * 120.0f) * 25.0f; - play->envCtx.unk_8 = (Math_CosS(((void)0, gSaveContext.save.time) - 0x8000) * 120.0f) * 25.0f; - play->envCtx.unk_C = (Math_CosS(((void)0, gSaveContext.save.time) - 0x8000) * 20.0f) * 25.0f; + play->envCtx.sunPos.x = -(Math_SinS(((void)0, gSaveContext.save.time) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f; + play->envCtx.sunPos.y = (Math_CosS(((void)0, gSaveContext.save.time) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f; + play->envCtx.sunPos.z = (Math_CosS(((void)0, gSaveContext.save.time) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f; - if ((play->envCtx.timeIncrement == 0) && (gSaveContext.save.cutscene < 0xFFF0)) { + if ((play->envCtx.sceneTimeSpeed == 0) && (gSaveContext.save.cutscene < 0xFFF0)) { gSaveContext.skyboxTime = gSaveContext.save.time; if ((gSaveContext.skyboxTime >= CLOCK_TIME(4, 0)) && (gSaveContext.skyboxTime < CLOCK_TIME(6, 30))) { @@ -591,7 +593,7 @@ s32 Scene_ProcessHeader(PlayState* play, SceneCmd* header) { } /** - * Creates an entrance from the scene, spawn, and lyaer. + * Creates an entrance from the scene, spawn, and layer. */ u16 Entrance_Create(s32 scene, s32 spawn, s32 layer) { return (scene << 9) | (spawn << 4) | layer; @@ -601,5 +603,5 @@ u16 Entrance_Create(s32 scene, s32 spawn, s32 layer) { * Creates an layer 0 entranace from the current entrance and the given spawn. */ u16 Entrance_CreateFromSpawn(s32 spawn) { - return Entrance_Create(gSaveContext.save.entrance >> 9, spawn, 0); + return Entrance_Create((u32)gSaveContext.save.entrance >> 9, spawn, 0); } diff --git a/src/code/z_scene_proc.c b/src/code/z_scene_proc.c index 4de83bcaa..c899b4d83 100644 --- a/src/code/z_scene_proc.c +++ b/src/code/z_scene_proc.c @@ -22,7 +22,7 @@ static Gfx sSceneDrawDefaultDL[] = { /** * Executes the current scene draw config handler. */ -void Scene_ExecuteDrawConfig(PlayState* play) { +void Scene_Draw(PlayState* play) { static void (*sceneDrawConfigHandlers[])(PlayState*) = { Scene_DrawConfigDefault, Scene_DrawConfigMatAnim, @@ -113,23 +113,23 @@ void AnimatedMat_DrawTwoTexScroll(PlayState* play, s32 segment, void* params) { * Generates a displaylist that sets the prim and env color, and stores it in the provided segment ID. */ void AnimatedMat_SetColor(PlayState* play, s32 segment, F3DPrimColor* primColorResult, F3DEnvColor* envColor) { - Gfx* colorDList = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Gfx) * 4); + Gfx* gfx = GRAPH_ALLOC(play->state.gfxCtx, 3 * sizeof(Gfx)); OPEN_DISPS(play->state.gfxCtx); // clang-format off - if (sMatAnimFlags & 1) { gSPSegment(POLY_OPA_DISP++, segment, colorDList); } - if (sMatAnimFlags & 2) { gSPSegment(POLY_XLU_DISP++, segment, colorDList); } + if (sMatAnimFlags & 1) { gSPSegment(POLY_OPA_DISP++, segment, gfx); } + if (sMatAnimFlags & 2) { gSPSegment(POLY_XLU_DISP++, segment, gfx); } // clang-format on - gDPSetPrimColor(colorDList++, 0, primColorResult->lodFrac, primColorResult->r, primColorResult->g, - primColorResult->b, (u8)(primColorResult->a * sMatAnimAlphaRatio)); + gDPSetPrimColor(gfx++, 0, primColorResult->lodFrac, primColorResult->r, primColorResult->g, primColorResult->b, + (u8)(primColorResult->a * sMatAnimAlphaRatio)); if (envColor != NULL) { - gDPSetEnvColor(colorDList++, envColor->r, envColor->g, envColor->b, envColor->a); + gDPSetEnvColor(gfx++, envColor->r, envColor->g, envColor->b, envColor->a); } - gSPEndDisplayList(colorDList++); + gSPEndDisplayList(gfx++); CLOSE_DISPS(play->state.gfxCtx); } @@ -709,8 +709,8 @@ void Scene_DrawConfigGreatBayTemple(PlayState* play) { }; s32 lodFrac; s32 i; - Gfx* dListHead; - Gfx* dList; + Gfx* gfx; + Gfx* gfxHead; if (Flags_GetSwitch(play, 0x33) && Flags_GetSwitch(play, 0x34) && Flags_GetSwitch(play, 0x35) && Flags_GetSwitch(play, 0x36)) { @@ -719,16 +719,16 @@ void Scene_DrawConfigGreatBayTemple(PlayState* play) { BgCheck_UnsetContextFlags(&play->colCtx, BGCHECK_FLAG_REVERSE_CONVEYOR_FLOW); } - dList = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Gfx) * 18); + gfxHead = GRAPH_ALLOC(play->state.gfxCtx, 18 * sizeof(Gfx)); AnimatedMat_Draw(play, play->sceneMaterialAnims); OPEN_DISPS(play->state.gfxCtx); - for (dListHead = dList, i = 0; i < 9; i++, dListHead += 2) { + for (gfx = gfxHead, i = 0; i < 9; i++, gfx += 2) { lodFrac = 0; - bcopy(greatBayTempleColorSetDL, dListHead, sizeof(greatBayTempleColorSetDL)); + bcopy(greatBayTempleColorSetDL, gfx, sizeof(greatBayTempleColorSetDL)); switch (i) { case 0: @@ -779,11 +779,11 @@ void Scene_DrawConfigGreatBayTemple(PlayState* play) { break; } - gDPSetPrimColor(dListHead, 0, lodFrac, 255, 255, 255, 255); + gDPSetPrimColor(gfx, 0, lodFrac, 255, 255, 255, 255); } - gSPSegment(POLY_OPA_DISP++, 0x06, dList); - gSPSegment(POLY_XLU_DISP++, 0x06, dList); + gSPSegment(POLY_OPA_DISP++, 0x06, gfxHead); + gSPSegment(POLY_XLU_DISP++, 0x06, gfxHead); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/code/z_scene_table.c b/src/code/z_scene_table.c index ed4549966..f80ad551d 100644 --- a/src/code/z_scene_table.c +++ b/src/code/z_scene_table.c @@ -1,10 +1,10 @@ #include "global.h" #define SCENE_ENTRY(name, textId, config) \ - { { SEGMENT_ROM_START(name), SEGMENT_ROM_END(name) }, textId, 0, config, 0 } + { { SEGMENT_ROM_START(name), SEGMENT_ROM_END(name) }, textId, 0, config, 0, 0 } #define SCENE_ENTRY_NONE() \ - { { 0, 0 }, 0, 0, 0, 0 } + { { 0, 0 }, 0, 0, 0, 0, 0 } SceneTableEntry gSceneTable[] = { /* 0x00 */ SCENE_ENTRY(Z2_20SICHITAI2, 0x0116, SCENE_DRAW_CFG_MAT_ANIM), diff --git a/src/code/z_schedule.c b/src/code/z_schedule.c index 6a2492631..fdefb0f42 100644 --- a/src/code/z_schedule.c +++ b/src/code/z_schedule.c @@ -8,9 +8,9 @@ s32 Schedule_CheckFlagS(PlayState* play, u8** script, ScheduleOutput* output) { ScheduleCmdCheckFlagS* cmd = (ScheduleCmdCheckFlagS*)*script; - u16 flag = (cmd->flagByte << 8) | cmd->flagMask; + u16 flag = PACK_WEEKEVENTREG_FLAG(cmd->flagByte, cmd->flagMask); - if (gSaveContext.save.weekEventReg[flag >> 8] & (flag & 0xFF)) { + if (CHECK_WEEKEVENTREG(flag)) { *script += cmd->offset; } @@ -19,9 +19,9 @@ s32 Schedule_CheckFlagS(PlayState* play, u8** script, ScheduleOutput* output) { s32 Schedule_CheckFlagL(PlayState* play, u8** script, ScheduleOutput* output) { ScheduleCmdCheckFlagL* cmd = (ScheduleCmdCheckFlagL*)*script; - u16 flag = (cmd->flagByte << 8) | cmd->flagMask; + u16 flag = PACK_WEEKEVENTREG_FLAG(cmd->flagByte, cmd->flagMask); - if (gSaveContext.save.weekEventReg[flag >> 8] & (flag & 0xFF)) { + if (CHECK_WEEKEVENTREG(flag)) { *script += (s16)((cmd->offsetH << 8) | cmd->offsetL); } diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c index 088f1469f..318f49809 100644 --- a/src/code/z_skelanime.c +++ b/src/code/z_skelanime.c @@ -200,7 +200,7 @@ void SkelAnime_DrawFlexLod(PlayState* play, void** skeleton, Vec3s* jointTable, Gfx* limbDList; Vec3f pos; Vec3s rot; - Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(sizeof(Mtx) * dListCount)); + Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, dListCount * sizeof(Mtx)); if (skeleton == NULL) { return; @@ -418,7 +418,7 @@ void SkelAnime_DrawFlexOpa(PlayState* play, void** skeleton, Vec3s* jointTable, Gfx* limbDList; Vec3f pos; Vec3s rot; - Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(sizeof(Mtx) * dListCount)); + Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, dListCount * sizeof(Mtx)); if (skeleton == NULL) { return; @@ -560,7 +560,7 @@ void SkelAnime_DrawTransformFlexOpa(PlayState* play, void** skeleton, Vec3s* joi OPEN_DISPS(play->state.gfxCtx); - mtx = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(sizeof(Mtx) * dListCount)); + mtx = GRAPH_ALLOC(play->state.gfxCtx, dListCount * sizeof(Mtx)); gSPSegment(POLY_OPA_DISP++, 0x0D, mtx); @@ -822,7 +822,7 @@ Gfx* SkelAnime_DrawFlex(PlayState* play, void** skeleton, Vec3s* jointTable, s32 return NULL; } - mtx = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(sizeof(Mtx) * dListCount)); + mtx = GRAPH_ALLOC(play->state.gfxCtx, dListCount * sizeof(Mtx)); gSPSegment(gfx++, 0x0D, mtx); @@ -996,7 +996,7 @@ void AnimationContext_SetLoadFrame(PlayState* play, LinkAnimationHeader* animati if (entry != NULL) { LinkAnimationHeader* linkAnimHeader = Lib_SegmentedToVirtual(animation); - u32 ram = frameTable; + uintptr_t ram = frameTable; osCreateMesgQueue(&entry->data.load.msgQueue, &entry->data.load.msg, 1); DmaMgr_SendRequestImpl(&entry->data.load.req, ram, @@ -1187,7 +1187,7 @@ void AnimationContext_Update(PlayState* play, AnimationContext* animationCtx) { * tables if not given. */ void SkelAnime_InitLink(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg, - LinkAnimationHeader* animation, s32 flags, Vec3s* jointTable, Vec3s* morphTable, + LinkAnimationHeader* animation, s32 flags, void* jointTableBuffer, void* morphTableBuffer, s32 limbBufCount) { FlexSkeletonHeader* skeletonHeader; s32 headerJointCount; @@ -1216,12 +1216,12 @@ void SkelAnime_InitLink(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeade allocSize += 2; } - if (jointTable == NULL) { + if (jointTableBuffer == NULL) { skelAnime->jointTable = ZeldaArena_Malloc(allocSize); skelAnime->morphTable = ZeldaArena_Malloc(allocSize); } else { - skelAnime->jointTable = (Vec3s*)ALIGN16((u32)jointTable); - skelAnime->morphTable = (Vec3s*)ALIGN16((u32)morphTable); + skelAnime->jointTable = (void*)ALIGN16((uintptr_t)jointTableBuffer); + skelAnime->morphTable = (void*)ALIGN16((uintptr_t)morphTableBuffer); } LinkAnimation_Change(play, skelAnime, animation, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f); @@ -1443,12 +1443,12 @@ void LinkAnimation_InterpJointMorph(PlayState* play, SkelAnime* skelAnime, f32 w * Requests loading frame data from the Link animations and blending them, placing the result in jointTable */ void LinkAnimation_BlendToJoint(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation1, f32 frame1, - LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, Vec3s* blendTable) { - Vec3s* alignedBlendTable; + LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, void* blendTableBuffer) { + void* alignedBlendTable; AnimationContext_SetLoadFrame(play, animation1, (s32)frame1, skelAnime->limbCount, skelAnime->jointTable); - alignedBlendTable = (Vec3s*)ALIGN16((u32)blendTable); + alignedBlendTable = (void*)ALIGN16((uintptr_t)blendTableBuffer); AnimationContext_SetLoadFrame(play, animation2, (s32)frame2, skelAnime->limbCount, alignedBlendTable); AnimationContext_SetInterp(play, skelAnime->limbCount, skelAnime->jointTable, alignedBlendTable, blendWeight); @@ -1458,12 +1458,12 @@ void LinkAnimation_BlendToJoint(PlayState* play, SkelAnime* skelAnime, LinkAnima * Requests loading frame data from the Link animations and blending them, placing the result in morphTable */ void LinkAnimation_BlendToMorph(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation1, f32 frame1, - LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, Vec3s* blendTable) { - Vec3s* alignedBlendTable; + LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, void* blendTableBuffer) { + void* alignedBlendTable; AnimationContext_SetLoadFrame(play, animation1, (s32)frame1, skelAnime->limbCount, skelAnime->morphTable); - alignedBlendTable = (Vec3s*)ALIGN16((u32)blendTable); + alignedBlendTable = (void*)ALIGN16((uintptr_t)blendTableBuffer); AnimationContext_SetLoadFrame(play, animation2, (s32)frame2, skelAnime->limbCount, alignedBlendTable); AnimationContext_SetInterp(play, skelAnime->limbCount, skelAnime->morphTable, alignedBlendTable, blendWeight); diff --git a/src/code/z_snap.c b/src/code/z_snap.c index 5d37e3eac..d64cfbe6e 100644 --- a/src/code/z_snap.c +++ b/src/code/z_snap.c @@ -22,7 +22,7 @@ s32 Snap_RecordPictographedActors(PlayState* play) { gSaveContext.save.pictoFlags1 = 0; if (play->sceneId == SCENE_20SICHITAI) { - Snap_SetFlag(PICTOGRAPH_IN_SWAMP); + Snap_SetFlag(PICTO_VALID_IN_SWAMP); } for (; category < ACTORCAT_MAX; category++) { @@ -155,43 +155,43 @@ s32 Snap_ValidatePictograph(PlayState* play, Actor* actor, s32 flag, Vec3f* pos, // Check distance distance = OLib_Vec3fDist(pos, &camera->eye); if ((distance < distanceMin) || (distanceMax < distance)) { - Snap_SetFlag(PICTOGRAPH_BAD_DISTANCE); - ret = PICTOGRAPH_BAD_DISTANCE; + Snap_SetFlag(PICTO_VALID_BAD_DISTANCE); + ret = PICTO_VALID_BAD_DISTANCE; } // Check rot is facing camera? x = Snap_AbsS(Camera_GetCamDirPitch(camera) + rot->x); y = Snap_AbsS(Camera_GetCamDirYaw(camera) - BINANG_SUB(rot->y, 0x7FFF)); if ((0 < angleRange) && ((angleRange < x) || (angleRange < y))) { - Snap_SetFlag(PICTOGRAPH_BAD_ANGLE); - ret |= PICTOGRAPH_BAD_ANGLE; + Snap_SetFlag(PICTO_VALID_BAD_ANGLE); + ret |= PICTO_VALID_BAD_ANGLE; } // Check in capture region Actor_GetProjectedPos(play, pos, &projectedPos, &distance); // Convert to projected position to device coordinates, shift to be relative to the capture region's top-left corner - x = (s16)PROJECTED_TO_SCREEN_X(projectedPos, distance) - PICTO_CAPTURE_REGION_TOPLEFT_X; - y = (s16)PROJECTED_TO_SCREEN_Y(projectedPos, distance) - PICTO_CAPTURE_REGION_TOPLEFT_Y; + x = (s16)PROJECTED_TO_SCREEN_X(projectedPos, distance) - PICTO_VALID_TOPLEFT_X; + y = (s16)PROJECTED_TO_SCREEN_Y(projectedPos, distance) - PICTO_VALID_TOPLEFT_Y; // checks if the coordinates are within the capture region - if ((x < 0) || (x > PICTO_RESOLUTION_HORIZONTAL) || (y < 0) || (y > PICTO_RESOLUTION_VERTICAL)) { - Snap_SetFlag(PICTOGRAPH_NOT_IN_VIEW); - ret |= PICTOGRAPH_NOT_IN_VIEW; + if ((x < 0) || (x > PICTO_VALID_WIDTH) || (y < 0) || (y > PICTO_VALID_HEIGHT)) { + Snap_SetFlag(PICTO_VALID_NOT_IN_VIEW); + ret |= PICTO_VALID_NOT_IN_VIEW; } // Check not obscured by bg collision if (BgCheck_ProjectileLineTest(&play->colCtx, pos, &camera->eye, &projectedPos, &poly, true, true, true, true, &bgId)) { - Snap_SetFlag(PICTOGRAPH_BEHIND_BG); - ret |= PICTOGRAPH_BEHIND_BG; + Snap_SetFlag(PICTO_VALID_BEHIND_BG); + ret |= PICTO_VALID_BEHIND_BG; } // Check not obscured by actor collision actors[0] = actor; actors[1] = &GET_PLAYER(play)->actor; if (CollisionCheck_LineOCCheck(play, &play->colChkCtx, pos, &camera->eye, actors, 2)) { - Snap_SetFlag(PICTOGRAPH_BEHIND_COLLISION); - ret |= PICTOGRAPH_BEHIND_COLLISION; + Snap_SetFlag(PICTO_VALID_BEHIND_COLLISION); + ret |= PICTO_VALID_BEHIND_COLLISION; } // If all of the above checks pass, set the flag diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 6f9006146..94d0e69c3 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -131,16 +131,109 @@ u32 D_801C5FC0[SCENE_MAX][4] = { { 0, 0, 1, 0 }, // SCENE_ALLEY }; -// Related to weekEventReg +// TODO: figure out a way to use the WEEKEVENTREG defines here +// weekEventReg flags which will be not be cleared on a cycle reset u16 D_801C66D0[ARRAY_COUNT(gSaveContext.save.weekEventReg)] = { - 0xFFFC, 0xFFFF, 0xFFFF, 0xFFFF, 0, 0, 0, 0xC000, 0xC00, 0, 0xC0, 0, 0x300, - 0x3000, 0xC000, 0xC00, 0, 0, 0, 0, 0, 0, 0xC00C, 0xC00C, 0xC008, 3, - 0x3000, 0, 0, 0, 0xFF00, 0xC3F, 0x3F, 0, 0, 0xCFFF, 0, 0, 0xC00, - 0xC00, 0, 0xC0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3C, 0x20, - 0, 0x300C, 0x3000, 0, 0xC, 0xC0, 0, 0xFF0, 0x300, 0, 0, 0xC00, 0, - 0, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC0, 0, 0xC000, 0, 3, - 0, 0xC000, 0, 0xC0, 0x300, 0, 0, 0, 0xC000, 0xFFF0, 0, 0, 0x300, - 0, 0xC000, 0xF0, 0, 0, 0, 0, 0, 0, + /* 0 */ 0xFFFC, + /* 1 */ 0xFFFF, + /* 2 */ 0xFFFF, + /* 3 */ 0xFFFF, + /* 4 */ 0, + /* 5 */ 0, + /* 6 */ 0, + /* 7 */ 0xC000, + /* 8 */ 0xC00, + /* 9 */ 0, + /* 10 */ 0xC0, + /* 11 */ 0, + /* 12 */ 0x300, + /* 13 */ 0x3000, + /* 14 */ 0xC000, + /* 15 */ 0xC00, + /* 16 */ 0, + /* 17 */ 0, + /* 18 */ 0, + /* 19 */ 0, + /* 20 */ 0, + /* 21 */ 0, + /* 22 */ 0xC00C, + /* 23 */ 0xC00C, + /* 24 */ 0xC008, + /* 25 */ 3, + /* 26 */ 0x3000, + /* 27 */ 0, + /* 28 */ 0, + /* 29 */ 0, + /* 30 */ 0xFF00, + /* 31 */ 0xC3F, + /* 32 */ 0x3F, + /* 33 */ 0, + /* 34 */ 0, + /* 35 */ 0xCFFF, + /* 36 */ 0, + /* 37 */ 0, + /* 38 */ 0xC00, + /* 39 */ 0xC00, + /* 40 */ 0, + /* 41 */ 0xC0, + /* 42 */ 0, + /* 43 */ 0, + /* 44 */ 0, + /* 45 */ 0, + /* 46 */ 0, + /* 47 */ 0, + /* 48 */ 0, + /* 49 */ 0, + /* 50 */ 0x3C, + /* 51 */ 0x20, + /* 52 */ 0, + /* 53 */ 0x300C, + /* 54 */ 0x3000, + /* 55 */ 0, + /* 56 */ 0xC, + /* 57 */ 0xC0, + /* 58 */ 0, + /* 59 */ 0xFF0, + /* 60 */ 0x300, + /* 61 */ 0, + /* 62 */ 0, + /* 63 */ 0xC00, + /* 64 */ 0, + /* 65 */ 0, + /* 66 */ 0xFFFF, + /* 67 */ 0xFFFF, + /* 68 */ 0xFFFF, + /* 69 */ 0xFFFF, + /* 70 */ 0xFFFF, + /* 71 */ 0xFFFF, + /* 72 */ 0xFFFF, + /* 73 */ 0xC0, + /* 74 */ 0, + /* 75 */ 0xC000, + /* 76 */ 0, + /* 77 */ 3, + /* 78 */ 0, + /* 79 */ 0xC000, + /* 80 */ 0, + /* 81 */ 0xC0, + /* 82 */ 0x300, + /* 83 */ 0, + /* 84 */ 0, + /* 85 */ 0, + /* 86 */ 0xC000, + /* 87 */ 0xFFF0, + /* 88 */ 0, + /* 89 */ 0, + /* 90 */ 0x300, + /* 91 */ 0, + /* 92 */ 0xC000, + /* 93 */ 0xF0, + /* 94 */ 0, + /* 95 */ 0, + /* 96 */ 0, + /* 97 */ 0, + /* 98 */ 0, + /* 99 */ 0, }; // used in other files @@ -175,17 +268,11 @@ u8 gAmmoItems[] = { ITEM_NONE, // SLOT_BOTTLE_6 }; -s32 D_801C67C8[] = { 0, 0x40, 0x80, 0xC0, 0x100, 0x180, 0x200, 0x280 }; +s32 D_801C67C8[] = { 0, 0x40, 0x80, 0xC0, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380 }; -s32 D_801C67E8[] = { 0x300, 0x380 }; +s32 D_801C67F0[] = { 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 1, 1 }; -s32 D_801C67F0[] = { 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80 }; - -s32 D_801C6810[] = { 1, 1 }; - -s32 D_801C6818[] = { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 }; - -s32 D_801C6838[] = { 1, 1 }; +s32 D_801C6818[] = { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 1, 1 }; s32 D_801C6840[] = { 0x100, 0x180, 0x200, 0x280 }; @@ -232,16 +319,11 @@ void Sram_ClearHighscores(void) { * Clears specific weekEventReg flags. Used by the "Dawn of the First Day" message */ void Sram_ClearFlagsAtDawnOfTheFirstDay(void) { - // Unconfirmed: "Link the Goron Claims His Reservation: 4:30 PM" - gSaveContext.save.weekEventReg[55] &= (u8)~2; - // Unconfirmed: "Postman fleeing town" - gSaveContext.save.weekEventReg[90] &= (u8)~1; - // Unconfirmed: "Postman is about to flee" - gSaveContext.save.weekEventReg[89] &= (u8)~0x40; - // Unconfirmed: "Postman has delivered priority mail" - gSaveContext.save.weekEventReg[89] &= (u8)~8; - // Unconfirmed: "Postman showing priority mail to Madame" - gSaveContext.save.weekEventReg[85] &= (u8)~0x80; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_55_02); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_89_40); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_89_08); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_85_80); } /** @@ -254,7 +336,7 @@ void Sram_SaveEndOfCycle(PlayState* play) { u8 slot; u8 item; - gSaveContext.save.daySpeed = 0; + gSaveContext.save.timeSpeedOffset = 0; gSaveContext.save.daysElapsed = 0; gSaveContext.save.day = 0; gSaveContext.save.time = CLOCK_TIME(6, 0) - 1; @@ -296,7 +378,7 @@ void Sram_SaveEndOfCycle(PlayState* play) { gSaveContext.masksGivenOnMoon[i] = 0; } - if (gSaveContext.save.weekEventReg[84] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_20)) { Inventory_DeleteItem(ITEM_MASK_FIERCE_DEITY, SLOT(ITEM_MASK_FIERCE_DEITY)); } @@ -316,38 +398,38 @@ void Sram_SaveEndOfCycle(PlayState* play) { gSaveContext.eventInf[i] = 0; } - gSaveContext.eventInf[7] &= (u8)~1; - gSaveContext.eventInf[7] &= (u8)~2; - gSaveContext.eventInf[7] &= (u8)~4; - gSaveContext.eventInf[7] &= (u8)~8; - gSaveContext.eventInf[7] &= (u8)~0x10; + CLEAR_EVENTINF(EVENTINF_70); + CLEAR_EVENTINF(EVENTINF_71); + CLEAR_EVENTINF(EVENTINF_72); + CLEAR_EVENTINF(EVENTINF_73); + CLEAR_EVENTINF(EVENTINF_74); if (gSaveContext.save.playerData.rupees != 0) { - gSaveContext.eventInf[7] |= 1; + SET_EVENTINF(EVENTINF_70); } if (INV_CONTENT(ITEM_BOMB) == ITEM_BOMB) { item = INV_CONTENT(ITEM_BOMB); if (AMMO(item) != 0) { - gSaveContext.eventInf[7] |= 2; + SET_EVENTINF(EVENTINF_71); } } if (INV_CONTENT(ITEM_NUT) == ITEM_NUT) { item = INV_CONTENT(ITEM_NUT); if (AMMO(item) != 0) { - gSaveContext.eventInf[7] |= 4; + SET_EVENTINF(EVENTINF_72); } } if (INV_CONTENT(ITEM_STICK) == ITEM_STICK) { item = INV_CONTENT(ITEM_STICK); if (AMMO(item) != 0) { - gSaveContext.eventInf[7] |= 8; + SET_EVENTINF(EVENTINF_73); } } if (INV_CONTENT(ITEM_BOW) == ITEM_BOW) { item = INV_CONTENT(ITEM_BOW); if (AMMO(item) != 0) { - gSaveContext.eventInf[7] |= 0x10; + SET_EVENTINF(EVENTINF_74); } } @@ -386,10 +468,10 @@ void Sram_SaveEndOfCycle(PlayState* play) { if (CUR_FORM == 0) { if ((STOLEN_ITEM_1 >= ITEM_SWORD_GILDED) || (STOLEN_ITEM_2 >= ITEM_SWORD_GILDED)) { - BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_SWORD_GILDED; + CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_SWORD_GILDED; SET_EQUIP_VALUE(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_GILDED); } else { - BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_SWORD_KOKIRI; + CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_SWORD_KOKIRI; } } else { if ((STOLEN_ITEM_1 >= ITEM_SWORD_GILDED) || (STOLEN_ITEM_2 >= ITEM_SWORD_GILDED)) { @@ -482,10 +564,8 @@ void Sram_IncrementDay(void) { gSaveContext.save.bombersCaughtOrder[3] = 0; gSaveContext.save.bombersCaughtOrder[4] = 0; - // Unconfirmed: "Bombers Hide & Seek started on Day 1???" - gSaveContext.save.weekEventReg[73] &= (u8)~0x10; - // Unconfirmed: "Bombers Hide & Seek in Progress" - gSaveContext.save.weekEventReg[85] &= (u8)~2; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_73_10); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_85_02); } u16 Sram_CalcChecksum(void* data, size_t count) { @@ -507,7 +587,7 @@ void Sram_ResetSave(void) { gSaveContext.save.unk_06 = 0; gSaveContext.save.linkAge = 0; gSaveContext.save.isNight = false; - gSaveContext.save.daySpeed = 0; + gSaveContext.save.timeSpeedOffset = 0; gSaveContext.save.snowheadCleared = 0; gSaveContext.save.hasTatl = false; gSaveContext.save.isOwlSave = false; @@ -832,9 +912,9 @@ void Sram_InitDebugSave(void) { Lib_MemCpy(&gSaveContext.save.inventory, &sSaveDebugInventory, sizeof(Inventory)); Lib_MemCpy(&gSaveContext.save.checksum, &sSaveDebugChecksum, sizeof(gSaveContext.save.checksum)); - if (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) { - BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) = D_801C6A48[((void)0, gSaveContext.save.playerForm)]; - C_SLOT_EQUIP(0, EQUIP_SLOT_C_DOWN) = D_801C6A50[((void)0, gSaveContext.save.playerForm)]; + if (GET_PLAYER_FORM != PLAYER_FORM_HUMAN) { + BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) = D_801C6A48[GET_PLAYER_FORM]; + C_SLOT_EQUIP(0, EQUIP_SLOT_C_DOWN) = D_801C6A50[GET_PLAYER_FORM]; } gSaveContext.save.hasTatl = true; @@ -848,12 +928,9 @@ void Sram_InitDebugSave(void) { gSaveContext.save.entrance = ENTRANCE(CUTSCENE, 0); gSaveContext.save.isFirstCycle = true; - // - gSaveContext.save.weekEventReg[0x0F] |= 0x20; - // Unconfirmed: "Entered South Clock Town" - gSaveContext.save.weekEventReg[0x3B] |= 0x04; - // Unconfirmed: "Tatl's Second Cycle Text?" - gSaveContext.save.weekEventReg[0x1F] |= 0x04; + SET_WEEKEVENTREG(WEEKEVENTREG_15_20); + SET_WEEKEVENTREG(WEEKEVENTREG_59_04); + SET_WEEKEVENTREG(WEEKEVENTREG_31_04); gSaveContext.cycleSceneFlags[SCENE_INSIDETOWER].switch0 = 1; gSaveContext.save.permanentSceneFlags[SCENE_INSIDETOWER].switch0 = 1; @@ -990,12 +1067,10 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) { } else { gSaveContext.save.entrance = D_801C6A58[(void)0, gSaveContext.save.owlSaveLocation]; if ((gSaveContext.save.entrance == ENTRANCE(SOUTHERN_SWAMP_POISONED, 10)) && - (gSaveContext.save.weekEventReg[20] & 2)) { - // Unconfirmed weekEventReg: "Woodfall Temple Prison Entrance raised / Water cleansed" + CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { gSaveContext.save.entrance = ENTRANCE(SOUTHERN_SWAMP_CLEARED, 10); } else if ((gSaveContext.save.entrance == ENTRANCE(MOUNTAIN_VILLAGE_WINTER, 8)) && - (gSaveContext.save.weekEventReg[33] & 0x80)) { - // Unconfirmed weekEventReg: "Mountain Village Unfrozen" + CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { gSaveContext.save.entrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 8); } @@ -1561,8 +1636,7 @@ void Sram_SaveSpecialNewDay(PlayState* play) { day = gSaveContext.save.day; - // Unconfirmed: "Obtained Fierce Deity Mask?" - gSaveContext.save.weekEventReg[84] &= (u8)~0x20; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_84_20); Sram_SaveEndOfCycle(play); func_8014546C(&play->sramCtx); diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index efc6774a7..8f412364d 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -112,7 +112,7 @@ Gfx* SubS_DrawTransformFlex(PlayState* play, void** skeleton, Vec3s* jointTable, Gfx* limbDList; Vec3f pos; Vec3s rot; - Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(dListCount * sizeof(Mtx))); + Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, dListCount * sizeof(Mtx)); if (skeleton == NULL) { return NULL; @@ -1072,8 +1072,8 @@ s32 SubS_TrackPoint(Vec3f* target, Vec3f* focusPos, Vec3s* shapeRot, Vec3s* trac s16 targetX; f32 diffZ = target->z - focusPos->z; - yaw = Math_FAtan2F(diffZ, diffX); - pitch = Math_FAtan2F(sqrtf(SQ(diffX) + SQ(diffZ)), target->y - focusPos->y); + yaw = Math_Atan2S_XY(diffZ, diffX); + pitch = Math_Atan2S_XY(sqrtf(SQ(diffX) + SQ(diffZ)), target->y - focusPos->y); Math_SmoothStepToS(&trackTarget->x, pitch, 4, 0x2710, 0); Math_SmoothStepToS(&trackTarget->y, yaw, 4, 0x2710, 0); @@ -1306,8 +1306,8 @@ void SubS_ActorPathing_ComputePointInfo(PlayState* play, ActorPathing* actorPath diff.z = actorPath->curPoint.z - actorPath->worldPos->z; actorPath->distSqToCurPointXZ = Math3D_XZLengthSquared(diff.x, diff.z); actorPath->distSqToCurPoint = Math3D_LengthSquared(&diff); - actorPath->rotToCurPoint.y = Math_FAtan2F(diff.z, diff.x); - actorPath->rotToCurPoint.x = Math_FAtan2F(sqrtf(actorPath->distSqToCurPointXZ), -diff.y); + actorPath->rotToCurPoint.y = Math_Atan2S_XY(diff.z, diff.x); + actorPath->rotToCurPoint.x = Math_Atan2S_XY(sqrtf(actorPath->distSqToCurPointXZ), -diff.y); actorPath->rotToCurPoint.z = 0; } diff --git a/src/code/z_vimode.c b/src/code/z_vimode.c index 76479a028..b7d2dea64 100644 --- a/src/code/z_vimode.c +++ b/src/code/z_vimode.c @@ -15,9 +15,3 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_8014090C.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140970.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140CE0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140D04.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140D10.s") diff --git a/src/code/z_vr_box.c b/src/code/z_vr_box.c index 6dd46633c..f42e66a25 100644 --- a/src/code/z_vr_box.c +++ b/src/code/z_vr_box.c @@ -1,15 +1,15 @@ #include "global.h" -s32 D_801C5E30[] = { 0, 0x2000, 0x4000, 0x6000, 0x8000, 0xC000 }; +u32 D_801C5E30[] = { 0, 0x2000, 0x4000, 0x6000, 0x8000, 0xC000 }; u16 D_801C5E48[] = { 0, 2, 10, 12, 2, 4, 12, 14, 10, 12, 20, 22, 12, 14, 22, 24, 1, 3, 5, 6, 7, 8, 9, 11, 13, 15, 16, 17, 18, 19, 21, 23, }; -s32 D_801C5E88[] = { 0, 0x7C0, 0xF80, 0x1740, 0x1F00 }; +s32 D_801C5E88[] = { 0, 62 << 5, 124 << 5, 186 << 5, 248 << 5 }; -s32 D_801C5E9C[] = { 0, 0x7C0, 0xF80, 0x1740, 0x1F00 }; +s32 D_801C5E9C[] = { 0, 62 << 5, 124 << 5, 186 << 5, 248 << 5 }; -s32 D_801C5EB0[] = { 0, 0x7C0, 0xF80, 0x7C0, 0 }; +s32 D_801C5EB0[] = { 0, 62 << 5, 124 << 5, 62 << 5, 0 }; s16 D_801C5EC4[] = { 0, 16, 19, 18, 16, 1, 20, 19, 1, 17, 21, 20, 17, 5, 22, 21, 18, 19, 23, 2, 19, 20, @@ -17,7 +17,155 @@ s16 D_801C5EC4[] = { 24, 7, 29, 28, 25, 26, 30, 10, 26, 27, 11, 30, 27, 28, 31, 11, 28, 29, 15, 31, }; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vr_box/func_80142440.s") +s32 func_80142440(SkyboxContext* skyboxCtx, Vtx* roomVtx, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, + s32 arg8) { + s32 i; + s32 j; + s32 k; + s16 phi_a0_4; + s16 phi_t1; + s32 temp1; + u16 index; + s16 phi_a2_4; + s16 phi_ra; + s16 phi_t2_4; + s32 temp2; + s32 roomVtxPosX[5 * 5]; + s32 roomVtxPosY[5 * 5]; + s32 roomVtxPosZ[5 * 5]; + s32 roomVtxTexU[5 * 5]; + s32 roomVtxTexV[5 * 5]; + s32 pad; + + switch (arg8) { + case 0: + case 1: + temp1 = arg4; + + for (i = 0, k = 0; k < 25; i++) { + temp2 = arg3; + for (j = 0; j < 5; j++, k++) { + roomVtxPosZ[k] = arg5; + roomVtxPosX[k] = temp2; + roomVtxPosY[k] = temp1; + roomVtxTexU[k] = D_801C5E88[j]; + roomVtxTexV[k] = D_801C5EB0[i]; + temp2 += arg6; + } + temp1 += arg7; + } + break; + + case 2: + case 3: + temp1 = arg4; + + for (i = 0, k = 0; k < 25; i++) { + temp2 = arg5; + for (j = 0; j < 5; j++, k++) { + roomVtxPosX[k] = arg3; + roomVtxPosY[k] = temp1; + roomVtxPosZ[k] = temp2; + roomVtxTexU[k] = D_801C5E88[j]; + roomVtxTexV[k] = D_801C5EB0[i]; + temp2 += arg6; + } + temp1 += arg7; + } + break; + + case 4: + case 5: + temp1 = arg5; + + for (i = 0, k = 0; k < 25; i++) { + temp2 = arg3; + for (j = 0; j < 5; j++, k++) { + roomVtxPosY[k] = arg4; + roomVtxPosX[k] = temp2; + roomVtxPosZ[k] = temp1; + roomVtxTexU[k] = D_801C5E88[j]; + roomVtxTexV[k] = D_801C5E9C[i]; + temp2 += arg6; + } + temp1 += arg7; + } + break; + + default: + break; + } + + skyboxCtx->roomDL = &skyboxCtx->dListBuf[2 * arg8][0]; + + for (i = 0; i < 0x20; i++) { + index = D_801C5E48[i]; + + roomVtx[arg2 + i].v.ob[0] = roomVtxPosX[index]; + roomVtx[arg2 + i].v.ob[1] = roomVtxPosY[index]; + roomVtx[arg2 + i].v.ob[2] = roomVtxPosZ[index]; + roomVtx[arg2 + i].v.flag = 0; + roomVtx[arg2 + i].v.tc[0] = roomVtxTexU[index]; + roomVtx[arg2 + i].v.tc[1] = roomVtxTexV[index]; + roomVtx[arg2 + i].v.cn[1] = 0; + roomVtx[arg2 + i].v.cn[2] = 0; + roomVtx[arg2 + i].v.cn[0] = 255; + } + gSPVertex(skyboxCtx->roomDL++, &roomVtx[arg2], 32, 0); + arg2 += i; + gSPCullDisplayList(skyboxCtx->roomDL++, 0, 15); + + if ((arg8 == 4) || (arg8 == 5)) { + phi_a2_4 = 0; + for (phi_t2_4 = 0, phi_ra = 0; phi_ra < 4; phi_ra++, phi_a2_4 += 0x1F) { + for (phi_a0_4 = 0, phi_t1 = 0; phi_t1 < 4; phi_t1++, phi_a0_4 += 0x1F, phi_t2_4 += 4) { + gDPLoadMultiTile(skyboxCtx->roomDL++, (uintptr_t)skyboxCtx->staticSegments[0] + D_801C5E30[arg8], 0, + G_TX_RENDERTILE, G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F, + phi_a2_4 + 0x1F, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPLoadMultiTile(skyboxCtx->roomDL++, (uintptr_t)skyboxCtx->staticSegments[1] + D_801C5E30[arg8], 0x80, + 1, G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F, + phi_a2_4 + 0x1F, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gSP1Quadrangle(skyboxCtx->roomDL++, D_801C5EC4[phi_t2_4 + 1], D_801C5EC4[phi_t2_4 + 2], + D_801C5EC4[phi_t2_4 + 3], D_801C5EC4[phi_t2_4 + 0], 3); + } + } + } else { + phi_a2_4 = 0; + for (phi_t2_4 = 0, phi_ra = 0; phi_ra < 2; phi_ra++, phi_a2_4 += 0x1F) { + for (phi_a0_4 = 0, phi_t1 = 0; phi_t1 < 4; phi_t1++, phi_a0_4 += 0x1F, phi_t2_4 += 4) { + gDPLoadMultiTile(skyboxCtx->roomDL++, (uintptr_t)skyboxCtx->staticSegments[0] + D_801C5E30[arg8], 0, + G_TX_RENDERTILE, G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F, + phi_a2_4 + 0x1F, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPLoadMultiTile(skyboxCtx->roomDL++, (uintptr_t)skyboxCtx->staticSegments[1] + D_801C5E30[arg8], 0x80, + 1, G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F, + phi_a2_4 + 0x1F, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gSP1Quadrangle(skyboxCtx->roomDL++, D_801C5EC4[phi_t2_4 + 1], D_801C5EC4[phi_t2_4 + 2], + D_801C5EC4[phi_t2_4 + 3], D_801C5EC4[phi_t2_4 + 0], 3); + } + } + phi_a2_4 -= 0x1F; + for (phi_ra = 0; phi_ra < 2; phi_ra++, phi_a2_4 -= 0x1F) { + for (phi_a0_4 = 0, phi_t1 = 0; phi_t1 < 4; phi_t1++, phi_a0_4 += 0x1F, phi_t2_4 += 4) { + gDPLoadMultiTile(skyboxCtx->roomDL++, (uintptr_t)skyboxCtx->staticSegments[0] + D_801C5E30[arg8], 0, + G_TX_RENDERTILE, G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F, + phi_a2_4 + 0x1F, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPLoadMultiTile(skyboxCtx->roomDL++, (uintptr_t)skyboxCtx->staticSegments[1] + D_801C5E30[arg8], 0x80, + 1, G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F, + phi_a2_4 + 0x1F, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gSP1Quadrangle(skyboxCtx->roomDL++, D_801C5EC4[phi_t2_4 + 1], D_801C5EC4[phi_t2_4 + 2], + D_801C5EC4[phi_t2_4 + 3], D_801C5EC4[phi_t2_4 + 0], 3); + } + } + } + gSPEndDisplayList(skyboxCtx->roomDL++); + return arg2; +} void func_80143148(SkyboxContext* skyboxCtx, s32 arg1) { static struct_801C5F44 D_801C5F44[] = { @@ -35,114 +183,120 @@ void func_80143148(SkyboxContext* skyboxCtx, s32 arg1) { } } -void func_801431E8(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyType) { +void Skybox_Setup(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyboxId) { PlayState* play = (PlayState*)gameState; size_t size; - void* offset; - s32 pad; + void* segment; skyboxCtx->rotZ = 0.0f; - if (skyType != 1) { - if (skyType != 2) { - return; - } - } else { - // Send a DMA request for the cloudy sky texture - skyboxCtx->skyboxStaticSegment[0] = &D_80025D00; - size = SEGMENT_ROM_SIZE(d2_cloud_static); - offset = (void*)ALIGN8((u32)skyboxCtx->skyboxStaticSegment[0] + size); - DmaMgr_SendRequest0(skyboxCtx->skyboxStaticSegment[0], SEGMENT_ROM_START(d2_cloud_static), size); + switch (skyboxId) { + case 1: + // Send a DMA request for the cloudy sky texture + skyboxCtx->staticSegments[0] = &D_80025D00; + size = SEGMENT_ROM_SIZE(d2_cloud_static); + segment = (void*)ALIGN8((uintptr_t)skyboxCtx->staticSegments[0] + size); + DmaMgr_SendRequest0(skyboxCtx->staticSegments[0], SEGMENT_ROM_START(d2_cloud_static), size); - // Send a DMA request for the clear sky texture - skyboxCtx->skyboxStaticSegment[1] = offset; - size = SEGMENT_ROM_SIZE(d2_fine_static); - offset = (void*)ALIGN8((u32)offset + size); - DmaMgr_SendRequest0(skyboxCtx->skyboxStaticSegment[1], SEGMENT_ROM_START(d2_fine_static), size); + // Send a DMA request for the clear sky texture + skyboxCtx->staticSegments[1] = segment; + size = SEGMENT_ROM_SIZE(d2_fine_static); + segment = (void*)ALIGN8((uintptr_t)segment + size); + DmaMgr_SendRequest0(skyboxCtx->staticSegments[1], SEGMENT_ROM_START(d2_fine_static), size); - // Send a DMA request for the skybox palette - skyboxCtx->skyboxPaletteStaticSegment = offset; - size = SEGMENT_ROM_SIZE(d2_fine_pal_static); - offset = (void*)ALIGN8((u32)offset + size); - DmaMgr_SendRequest0(skyboxCtx->skyboxPaletteStaticSegment, SEGMENT_ROM_START(d2_fine_pal_static), size); + // Send a DMA request for the skybox palette + skyboxCtx->paletteStaticSegment = segment; + size = SEGMENT_ROM_SIZE(d2_fine_pal_static); + segment = (void*)ALIGN8((uintptr_t)segment + size); + DmaMgr_SendRequest0(skyboxCtx->paletteStaticSegment, SEGMENT_ROM_START(d2_fine_pal_static), size); - skyboxCtx->primR = 145; - skyboxCtx->primG = 120; - skyboxCtx->primB = 155; + skyboxCtx->primR = 145; + skyboxCtx->primG = 120; + skyboxCtx->primB = 155; - skyboxCtx->envR = 40; - skyboxCtx->envG = 0; - skyboxCtx->envB = 40; + skyboxCtx->envR = 40; + skyboxCtx->envG = 0; + skyboxCtx->envB = 40; - // Inverted Stone Tower Temple and Inverted Stone Tower - if ((play->sceneId == SCENE_F41) || (play->sceneId == SCENE_INISIE_R)) { - skyboxCtx->rotZ = 3.15000009537f; - } + // Inverted Stone Tower Temple and Inverted Stone Tower + if ((play->sceneId == SCENE_F41) || (play->sceneId == SCENE_INISIE_R)) { + skyboxCtx->rotZ = 3.15f; + } + break; + + case 2: + break; + + default: + break; } } -void func_80143324(PlayState* play, SkyboxContext* skyboxCtx, s16 skyType) { +void func_80143324(PlayState* play, SkyboxContext* skyboxCtx, s16 skyboxId) { size_t size; - if (1) {} + switch (skyboxId) { + case 1: + osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1); - if (skyType == 1) { - osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1); + if (play->envCtx.unk_10 == 0) { + // Send a DMA request for the clear sky texture + size = SEGMENT_ROM_SIZE(d2_fine_static); - if (play->envCtx.unk_10 == 0) { - // Send a DMA request for the clear sky texture - size = SEGMENT_ROM_SIZE(d2_fine_static); + DmaMgr_SendRequestImpl(&skyboxCtx->unk188, skyboxCtx->staticSegments[0], + SEGMENT_ROM_START(d2_fine_static), size, 0, &skyboxCtx->loadQueue, NULL); + } else { + // Send a DMA request for the cloudy sky texture + size = SEGMENT_ROM_SIZE(d2_cloud_static); - DmaMgr_SendRequestImpl(&skyboxCtx->unk188, skyboxCtx->skyboxStaticSegment[0], - SEGMENT_ROM_START(d2_fine_static), size, 0, &skyboxCtx->loadQueue, NULL); - } else { - // Send a DMA request for the cloudy sky texture - size = SEGMENT_ROM_SIZE(d2_cloud_static); + DmaMgr_SendRequestImpl(&skyboxCtx->unk188, skyboxCtx->staticSegments[0], + SEGMENT_ROM_START(d2_cloud_static), size, 0, &skyboxCtx->loadQueue, NULL); + } - DmaMgr_SendRequestImpl(&skyboxCtx->unk188, skyboxCtx->skyboxStaticSegment[0], - SEGMENT_ROM_START(d2_cloud_static), size, 0, &skyboxCtx->loadQueue, NULL); - } + osRecvMesg(&skyboxCtx->loadQueue, NULL, OS_MESG_BLOCK); + osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1); - osRecvMesg(&skyboxCtx->loadQueue, NULL, OS_MESG_BLOCK); - osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1); + if (play->envCtx.unk_11 == 0) { + // Send a DMA request for the clear sky texture + size = SEGMENT_ROM_SIZE(d2_fine_static); - if (play->envCtx.unk_11 == 0) { - // Send a DMA request for the clear sky texture - size = SEGMENT_ROM_SIZE(d2_fine_static); + DmaMgr_SendRequestImpl(&skyboxCtx->unk1A8, skyboxCtx->staticSegments[1], + SEGMENT_ROM_START(d2_fine_static), size, 0, &skyboxCtx->loadQueue, NULL); + } else { + // Send a DMA request for the cloudy sky texture + size = SEGMENT_ROM_SIZE(d2_cloud_static); - DmaMgr_SendRequestImpl(&skyboxCtx->unk1A8, skyboxCtx->skyboxStaticSegment[1], - SEGMENT_ROM_START(d2_fine_static), size, 0, &skyboxCtx->loadQueue, NULL); - } else { - // Send a DMA request for the cloudy sky texture - size = SEGMENT_ROM_SIZE(d2_cloud_static); + DmaMgr_SendRequestImpl(&skyboxCtx->unk1A8, skyboxCtx->staticSegments[1], + SEGMENT_ROM_START(d2_cloud_static), size, 0, &skyboxCtx->loadQueue, NULL); + } - DmaMgr_SendRequestImpl(&skyboxCtx->unk1A8, skyboxCtx->skyboxStaticSegment[1], - SEGMENT_ROM_START(d2_cloud_static), size, 0, &skyboxCtx->loadQueue, NULL); - } + osRecvMesg(&skyboxCtx->loadQueue, NULL, OS_MESG_BLOCK); + osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1); - osRecvMesg(&skyboxCtx->loadQueue, NULL, OS_MESG_BLOCK); - osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1); + size = SEGMENT_ROM_SIZE(d2_fine_pal_static); - size = SEGMENT_ROM_SIZE(d2_fine_pal_static); + // Send a DMA request for the skybox palette + DmaMgr_SendRequestImpl(&skyboxCtx->unk1C8, skyboxCtx->paletteStaticSegment, + SEGMENT_ROM_START(d2_fine_pal_static), size, 0, &skyboxCtx->loadQueue, NULL); - // Send a DMA request for the skybox palette - DmaMgr_SendRequestImpl(&skyboxCtx->unk1C8, skyboxCtx->skyboxPaletteStaticSegment, - SEGMENT_ROM_START(d2_fine_pal_static), size, 0, &skyboxCtx->loadQueue, NULL); + osRecvMesg(&skyboxCtx->loadQueue, NULL, OS_MESG_BLOCK); + break; - osRecvMesg(&skyboxCtx->loadQueue, NULL, OS_MESG_BLOCK); + default: + break; } } -void func_801434E4(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyType) { - skyboxCtx->skyboxShouldDraw = 0; +void Skybox_Init(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyboxId) { + skyboxCtx->skyboxShouldDraw = false; skyboxCtx->rotX = skyboxCtx->rotY = skyboxCtx->rotZ = 0.0f; - func_801431E8(gameState, skyboxCtx, skyType); + Skybox_Setup(gameState, skyboxCtx, skyboxId); - if (skyType != 0) { + if (skyboxId != 0) { skyboxCtx->dListBuf = THA_AllocEndAlign16(&gameState->heap, 0x3840); - if (skyType == 5) { + if (skyboxId == 5) { // Allocate enough space for the vertices for a 6 sided skybox (cube) skyboxCtx->roomVtx = THA_AllocEndAlign16(&gameState->heap, sizeof(Vtx) * 32 * 6); func_80143148(skyboxCtx, 6); diff --git a/src/code/z_vr_box_draw.c b/src/code/z_vr_box_draw.c index 326fcb3e2..e0884e270 100644 --- a/src/code/z_vr_box_draw.c +++ b/src/code/z_vr_box_draw.c @@ -25,7 +25,7 @@ void SkyboxDraw_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyb func_8012C6AC(gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x0B, skyboxCtx->skyboxPaletteStaticSegment); + gSPSegment(POLY_OPA_DISP++, 0x0B, skyboxCtx->paletteStaticSegment); gSPTexture(POLY_OPA_DISP++, 0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON); sSkyboxDrawMatrix = GRAPH_ALLOC(gfxCtx, sizeof(Mtx)); @@ -40,7 +40,7 @@ void SkyboxDraw_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyb gSPMatrix(POLY_OPA_DISP++, sSkyboxDrawMatrix, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetColorDither(POLY_OPA_DISP++, G_CD_MAGICSQ); gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_BILERP); - gDPLoadTLUT_pal256(POLY_OPA_DISP++, skyboxCtx->skyboxPaletteStaticSegment); + gDPLoadTLUT_pal256(POLY_OPA_DISP++, skyboxCtx->paletteStaticSegment); gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16); gDPSetTextureConvert(POLY_OPA_DISP++, G_TC_FILT); gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL1, TEXEL0, PRIMITIVE_ALPHA, TEXEL0, TEXEL1, TEXEL0, PRIMITIVE, TEXEL0, @@ -49,13 +49,13 @@ void SkyboxDraw_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyb gDPSetEnvColor(POLY_OPA_DISP++, skyboxCtx->envR, skyboxCtx->envG, skyboxCtx->envB, 0); gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[0]); - gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[300]); - gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[600]); - gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[900]); - gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[1200]); + gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[2]); + gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[4]); + gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[6]); + gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[8]); if (skyboxId == SKYBOX_CUTSCENE_MAP) { - gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[1500]); + gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[10]); } gDPPipeSync(POLY_OPA_DISP++); @@ -63,5 +63,5 @@ void SkyboxDraw_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyb CLOSE_DISPS(gfxCtx); } -void SkyboxDraw_Noop(SkyboxContext* skyboxCtx) { +void SkyboxDraw_Update(SkyboxContext* skyboxCtx) { } diff --git a/src/libultra/flash/osFlash.c b/src/libultra/flash/osFlash.c index cd4420c4a..3ed33f45d 100644 --- a/src/libultra/flash/osFlash.c +++ b/src/libultra/flash/osFlash.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "ultra64.h" #include "global.h" diff --git a/src/overlays/actors/ovl_Arms_Hook/overlay.cfg b/src/overlays/actors/ovl_Arms_Hook/overlay.cfg deleted file mode 100644 index 4a8f59822..000000000 --- a/src/overlays/actors/ovl_Arms_Hook/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Arms_Hook -z_arms_hook.c diff --git a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c index 5cdc8d181..e3ac3e753 100644 --- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c +++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c @@ -109,7 +109,7 @@ s32 ArmsHook_CheckForCancel(ArmsHook* this) { Player* player = (Player*)this->actor.parent; if (Player_IsHoldingHookshot(player)) { - if ((player->heldItemActionParam != player->itemActionParam) || (player->actor.flags & ACTOR_FLAG_100) || + if ((player->itemAction != player->heldItemAction) || (player->actor.flags & ACTOR_FLAG_100) || (player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_4000000))) { this->timer = 0; ArmsHook_DetachHookFromActor(this); @@ -216,7 +216,7 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) { } } else { Math_Vec3f_Diff(&bodyDistDiffVec, &newPos, &player->actor.velocity); - player->actor.world.rot.x = Math_FAtan2F(sqrtf(SQXZ(bodyDistDiffVec)), -bodyDistDiffVec.y); + player->actor.world.rot.x = Math_Atan2S_XY(sqrtf(SQXZ(bodyDistDiffVec)), -bodyDistDiffVec.y); } if (phi_f16 < 50.0f) { ArmsHook_DetachHookFromActor(this); @@ -238,7 +238,7 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) { Actor_MoveWithGravity(&this->actor); Math_Vec3f_Diff(&this->actor.world.pos, &this->actor.prevPos, &prevFrameDiff); Math_Vec3f_Sum(&this->unk1E0, &prevFrameDiff, &this->unk1E0); - this->actor.shape.rot.x = Math_FAtan2F(this->actor.speedXZ, -this->actor.velocity.y); + this->actor.shape.rot.x = Math_Atan2S_XY(this->actor.speedXZ, -this->actor.velocity.y); sp60.x = this->unk1EC.x - (this->unk1E0.x - this->unk1EC.x); sp60.y = this->unk1EC.y - (this->unk1E0.y - this->unk1EC.y); sp60.z = this->unk1EC.z - (this->unk1E0.z - this->unk1EC.z); diff --git a/src/overlays/actors/ovl_Arrow_Fire/overlay.cfg b/src/overlays/actors/ovl_Arrow_Fire/overlay.cfg deleted file mode 100644 index a2d1a6ad6..000000000 --- a/src/overlays/actors/ovl_Arrow_Fire/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Arrow_Fire -z_arrow_fire.c diff --git a/src/overlays/actors/ovl_Arrow_Ice/overlay.cfg b/src/overlays/actors/ovl_Arrow_Ice/overlay.cfg deleted file mode 100644 index b95f23d3c..000000000 --- a/src/overlays/actors/ovl_Arrow_Ice/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Arrow_Ice -z_arrow_ice.c diff --git a/src/overlays/actors/ovl_Arrow_Light/overlay.cfg b/src/overlays/actors/ovl_Arrow_Light/overlay.cfg deleted file mode 100644 index d5bda9b4c..000000000 --- a/src/overlays/actors/ovl_Arrow_Light/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Arrow_Light -z_arrow_light.c diff --git a/src/overlays/actors/ovl_Bg_Astr_Bombwall/overlay.cfg b/src/overlays/actors/ovl_Bg_Astr_Bombwall/overlay.cfg deleted file mode 100644 index 735382ead..000000000 --- a/src/overlays/actors/ovl_Bg_Astr_Bombwall/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Astr_Bombwall -z_bg_astr_bombwall.c diff --git a/src/overlays/actors/ovl_Bg_Botihasira/overlay.cfg b/src/overlays/actors/ovl_Bg_Botihasira/overlay.cfg deleted file mode 100644 index 48da75cb3..000000000 --- a/src/overlays/actors/ovl_Bg_Botihasira/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Botihasira -z_bg_botihasira.c diff --git a/src/overlays/actors/ovl_Bg_Breakwall/overlay.cfg b/src/overlays/actors/ovl_Bg_Breakwall/overlay.cfg deleted file mode 100644 index 77c1ecf0d..000000000 --- a/src/overlays/actors/ovl_Bg_Breakwall/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Breakwall -z_bg_breakwall.c diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c index 25f6d0a88..4c73987ec 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -146,14 +146,14 @@ s32 func_808B736C(BgBreakwall* this, PlayState* play) { } s32 func_808B7380(BgBreakwall* this, PlayState* play) { - if ((gSaveContext.save.day >= 2) && !(gSaveContext.save.weekEventReg[22] & 1)) { + if ((gSaveContext.save.day >= 2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { return false; } return true; } s32 func_808B73C4(BgBreakwall* this, PlayState* play) { - return (gSaveContext.save.weekEventReg[33] & 0x80) || (gSaveContext.save.weekEventReg[21] & 1); + return CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_21_01); } s32 func_808B73FC(BgBreakwall* this, PlayState* play) { @@ -176,14 +176,14 @@ s32 func_808B7460(BgBreakwall* this, PlayState* play) { } s32 func_808B74A8(BgBreakwall* this, PlayState* play) { - if (gSaveContext.save.weekEventReg[55] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { return false; } return true; } s32 func_808B74D8(BgBreakwall* this, PlayState* play) { - if (!(gSaveContext.save.weekEventReg[9] & 0x80) || (gSaveContext.save.weekEventReg[23] & 0x20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_09_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { return false; } return true; @@ -285,7 +285,7 @@ void func_808B782C(BgBreakwall* this, PlayState* play) { } void func_808B78A4(BgBreakwall* this, PlayState* play) { - if (gSaveContext.save.weekEventReg[55] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { Actor_Kill(&this->dyna.actor); } } diff --git a/src/overlays/actors/ovl_Bg_Crace_Movebg/overlay.cfg b/src/overlays/actors/ovl_Bg_Crace_Movebg/overlay.cfg deleted file mode 100644 index ab8eb4405..000000000 --- a/src/overlays/actors/ovl_Bg_Crace_Movebg/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Crace_Movebg -z_bg_crace_movebg.c diff --git a/src/overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.c b/src/overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.c index da899ac26..032091293 100644 --- a/src/overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.c +++ b/src/overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.c @@ -243,9 +243,9 @@ void BgCraceMovebg_ClosingDoor_CheckIfPlayerIsBeyondDoor(BgCraceMovebg* this, Pl if ((BG_CRACE_MOVEBG_GET_TYPE(&this->dyna.actor) != BG_CRACE_MOVEBG_TYPE_UNUSED_CLOSING) && SubS_LineSegVsPlane(&this->dyna.actor.home.pos, &this->dyna.actor.home.rot, &sUnitVecZ, &this->prevPlayerPos, - &player->bodyPartsPos[0], &intersect)) { + &player->bodyPartsPos[PLAYER_BODYPART_WAIST], &intersect)) { Matrix_RotateYS(-this->dyna.actor.home.rot.y, MTXMODE_NEW); - Math_Vec3f_Diff(&player->bodyPartsPos[0], &this->dyna.actor.home.pos, &posDiff); + Math_Vec3f_Diff(&player->bodyPartsPos[PLAYER_BODYPART_WAIST], &this->dyna.actor.home.pos, &posDiff); Matrix_MultVec3f(&posDiff, &this->intersectionOffsetFromHome); if (fabsf(this->intersectionOffsetFromHome.x) < 100.0f && this->intersectionOffsetFromHome.y >= -10.0f && @@ -328,7 +328,7 @@ void BgCraceMovebg_ClosingDoor_Close(BgCraceMovebg* this, PlayState* play) { if (Math_StepToF(&this->doorHeight, 0.0f, 1.0f)) { if (!(this->stateFlags & BG_CRACE_MOVEBG_FLAG_PLAYER_IS_BEYOND_DOOR) && !Flags_GetSwitch(play, BG_CRACE_MOVEBG_GET_SWITCH_FLAG(&this->dyna.actor) + 1)) { - play->unk_18845 = 1; + play->haltAllActors = true; func_80169FDC(&play->state); play_sound(NA_SE_OC_ABYSS); } diff --git a/src/overlays/actors/ovl_Bg_Ctower_Gear/overlay.cfg b/src/overlays/actors/ovl_Bg_Ctower_Gear/overlay.cfg deleted file mode 100644 index 244f98e32..000000000 --- a/src/overlays/actors/ovl_Bg_Ctower_Gear/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Ctower_Gear -z_bg_ctower_gear.c diff --git a/src/overlays/actors/ovl_Bg_Ctower_Rot/overlay.cfg b/src/overlays/actors/ovl_Bg_Ctower_Rot/overlay.cfg deleted file mode 100644 index c41e36b27..000000000 --- a/src/overlays/actors/ovl_Bg_Ctower_Rot/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Ctower_Rot -z_bg_ctower_rot.c diff --git a/src/overlays/actors/ovl_Bg_Danpei_Movebg/overlay.cfg b/src/overlays/actors/ovl_Bg_Danpei_Movebg/overlay.cfg deleted file mode 100644 index beb2b3010..000000000 --- a/src/overlays/actors/ovl_Bg_Danpei_Movebg/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Danpei_Movebg -z_bg_danpei_movebg.c diff --git a/src/overlays/actors/ovl_Bg_Dblue_Balance/overlay.cfg b/src/overlays/actors/ovl_Bg_Dblue_Balance/overlay.cfg deleted file mode 100644 index f0f5a4f1a..000000000 --- a/src/overlays/actors/ovl_Bg_Dblue_Balance/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Dblue_Balance -z_bg_dblue_balance.c diff --git a/src/overlays/actors/ovl_Bg_Dblue_Elevator/overlay.cfg b/src/overlays/actors/ovl_Bg_Dblue_Elevator/overlay.cfg deleted file mode 100644 index 8193509f4..000000000 --- a/src/overlays/actors/ovl_Bg_Dblue_Elevator/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Dblue_Elevator -z_bg_dblue_elevator.c diff --git a/src/overlays/actors/ovl_Bg_Dblue_Movebg/overlay.cfg b/src/overlays/actors/ovl_Bg_Dblue_Movebg/overlay.cfg deleted file mode 100644 index 7188cf2ea..000000000 --- a/src/overlays/actors/ovl_Bg_Dblue_Movebg/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Dblue_Movebg -z_bg_dblue_movebg.c diff --git a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c index 31c0c387d..45b42942b 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c +++ b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c @@ -4,7 +4,6 @@ * Description: Great Bay Temple - Waterwheels, push switches, gear shafts, and whirlpools */ -#include "prevent_bss_reordering.h" #include "z_bg_dblue_movebg.h" #include "objects/object_dblue_object/object_dblue_object.h" #include "overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h" @@ -812,7 +811,7 @@ void BgDblueMovebg_Draw(Actor* thisx, PlayState* play2) { CLOSE_DISPS(play->state.gfxCtx); if ((this->unk_160 == 8) && (this->unk_172 & 0x20)) { - AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gGreatBayTempleObjectWaterwheelSplashTexAnim)); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gGreatBayTempleObjectWaterwheelSplashTexAnim)); OPEN_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/overlay.cfg b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/overlay.cfg deleted file mode 100644 index 08aaa6100..000000000 --- a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Dblue_Waterfall -z_bg_dblue_waterfall.c diff --git a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/overlay.cfg b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/overlay.cfg deleted file mode 100644 index 4a1aa8be1..000000000 --- a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Dkjail_Ivy -z_bg_dkjail_ivy.c diff --git a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/overlay.cfg b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/overlay.cfg deleted file mode 100644 index 59c99de93..000000000 --- a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Dy_Yoseizo -z_bg_dy_yoseizo.c diff --git a/src/overlays/actors/ovl_Bg_F40_Block/overlay.cfg b/src/overlays/actors/ovl_Bg_F40_Block/overlay.cfg deleted file mode 100644 index b5030fcaa..000000000 --- a/src/overlays/actors/ovl_Bg_F40_Block/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_F40_Block -z_bg_f40_block.c diff --git a/src/overlays/actors/ovl_Bg_F40_Flift/overlay.cfg b/src/overlays/actors/ovl_Bg_F40_Flift/overlay.cfg deleted file mode 100644 index f771926db..000000000 --- a/src/overlays/actors/ovl_Bg_F40_Flift/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_F40_Flift -z_bg_f40_flift.c diff --git a/src/overlays/actors/ovl_Bg_F40_Switch/overlay.cfg b/src/overlays/actors/ovl_Bg_F40_Switch/overlay.cfg deleted file mode 100644 index b5e045459..000000000 --- a/src/overlays/actors/ovl_Bg_F40_Switch/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_F40_Switch -z_bg_f40_switch.c diff --git a/src/overlays/actors/ovl_Bg_F40_Swlift/overlay.cfg b/src/overlays/actors/ovl_Bg_F40_Swlift/overlay.cfg deleted file mode 100644 index 83d9bffed..000000000 --- a/src/overlays/actors/ovl_Bg_F40_Swlift/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_F40_Swlift -z_bg_f40_swlift.c diff --git a/src/overlays/actors/ovl_Bg_Fire_Wall/overlay.cfg b/src/overlays/actors/ovl_Bg_Fire_Wall/overlay.cfg deleted file mode 100644 index 8405309d0..000000000 --- a/src/overlays/actors/ovl_Bg_Fire_Wall/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Fire_Wall -z_bg_fire_wall.c diff --git a/src/overlays/actors/ovl_Bg_Fu_Kaiten/overlay.cfg b/src/overlays/actors/ovl_Bg_Fu_Kaiten/overlay.cfg deleted file mode 100644 index 30736ca5d..000000000 --- a/src/overlays/actors/ovl_Bg_Fu_Kaiten/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Fu_Kaiten -z_bg_fu_kaiten.c diff --git a/src/overlays/actors/ovl_Bg_Fu_Mizu/overlay.cfg b/src/overlays/actors/ovl_Bg_Fu_Mizu/overlay.cfg deleted file mode 100644 index 295d23d04..000000000 --- a/src/overlays/actors/ovl_Bg_Fu_Mizu/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Fu_Mizu -z_bg_fu_mizu.c diff --git a/src/overlays/actors/ovl_Bg_Goron_Oyu/overlay.cfg b/src/overlays/actors/ovl_Bg_Goron_Oyu/overlay.cfg deleted file mode 100644 index cd6286ed1..000000000 --- a/src/overlays/actors/ovl_Bg_Goron_Oyu/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Goron_Oyu -z_bg_goron_oyu.c diff --git a/src/overlays/actors/ovl_Bg_Haka_Bombwall/overlay.cfg b/src/overlays/actors/ovl_Bg_Haka_Bombwall/overlay.cfg deleted file mode 100644 index dd9b391ee..000000000 --- a/src/overlays/actors/ovl_Bg_Haka_Bombwall/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Haka_Bombwall -z_bg_haka_bombwall.c diff --git a/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c b/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c index 10cea7035..331a6dfe5 100644 --- a/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c +++ b/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c @@ -56,7 +56,7 @@ static ColliderCylinderInit sCylinderInit = { { 80, 80, 0, { 0, 0, 0 } }, }; -static s16 D_80BD64CC[4] = { 24, 15, 10, 5 }; +static s16 sRockScales[4] = { 24, 15, 10, 5 }; static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), @@ -75,76 +75,83 @@ s32 func_80BD5E00(BgHakaBombwall* this) { return false; } -#ifdef NON_MATCHING void func_80BD5E6C(BgHakaBombwall* this, PlayState* play) { - s32 i; - Vec3f spE0; - Vec3f spD4; - Vec3f spC8; - Vec3f spBC; - f32 temp_fs0; - f32 phi_fs1; + u32 i; + Vec3f pos; + Vec3f vel; + Vec3f posOffset; + Vec3f velOffset; + f32 offsetPosX; + f32 offsetPosY; + s16 scale; s16 phi_s0; - s16 gravity; s16 phi_t0; + s16 gravity; Matrix_Push(); Matrix_RotateYS(this->dyna.actor.shape.rot.y, MTXMODE_NEW); - temp_fs0 = 0.0f; - phi_fs1 = 0.0f; + + offsetPosX = 0.0f; + offsetPosY = 0.0f; for (i = 0; i < 30; i++) { - temp_fs0 += 60.0f + (Rand_ZeroOne() * 20.0f); - if (temp_fs0 > 75.0f) { - temp_fs0 -= 150.0f; + offsetPosX += 60.0f + (Rand_ZeroOne() * 20.0f); + + if (offsetPosX > 75.0f) { + offsetPosX -= 150.0f; } - spC8.x = temp_fs0; - phi_fs1 += 5; - spC8.y = phi_fs1; + offsetPosY += 5; - spC8.z = (Rand_ZeroOne() * 20.0f) - 10.0f; + posOffset.x = offsetPosX; + posOffset.y = offsetPosY; + posOffset.z = (Rand_ZeroOne() * 20.0f) - 10.0f; - spBC.x = ((Rand_ZeroOne() - 0.5f) * 5.0f) + (temp_fs0 * (4.0f / 75.0f)); - spBC.y = (Rand_ZeroOne() * 7.0f) - 2.0f; - spBC.z = (Rand_ZeroOne() * 4.0f) - 2.0f; + velOffset.x = ((Rand_ZeroOne() - 0.5f) * 5.0f) + (offsetPosX * (4.0f / 75.0f)); + velOffset.y = (Rand_ZeroOne() * 7.0f) - 2.0f; + velOffset.z = (Rand_ZeroOne() * 4.0f) - 2.0f; - Matrix_MultVec3f(&spC8, &spE0); - Matrix_MultVec3f(&spBC, &spD4); + Matrix_MultVec3f(&posOffset, &pos); + Matrix_MultVec3f(&velOffset, &vel); - spE0.x += this->dyna.actor.world.pos.x; - spE0.y += this->dyna.actor.world.pos.y; - spE0.z += this->dyna.actor.world.pos.z; + pos.x += this->dyna.actor.world.pos.x; + pos.y += this->dyna.actor.world.pos.y; + pos.z += this->dyna.actor.world.pos.z; + + //! FAKE + if (1) {} if ((i & 3) == 0) { phi_s0 = 32; - func_800BBFB0(play, &spE0, 60.0f, 2, 100, 120, 1); + func_800BBFB0(play, &pos, 60.0f, 2, 100, 120, 1); } else { phi_s0 = 64; } - if (i % 2 != 0) { + if ((i % 2) != 0) { phi_s0 |= 1; phi_t0 = 1; } else { phi_t0 = 0; } - if (D_80BD64CC[i & 3] >= 16) { + scale = sRockScales[i & (ARRAY_COUNT(sRockScales) - 1)]; + + //! FAKE + fake_label:; + + if (scale >= 16) { gravity = -550; } else { gravity = -450; } - EffectSsKakera_Spawn(play, &spE0, &spD4, &spE0, gravity, phi_s0, 30, 0, 0, D_80BD64CC[i & 3], phi_t0, 0, 50, -1, + EffectSsKakera_Spawn(play, &pos, &vel, &pos, gravity, phi_s0, 30, 0, 0, scale, phi_t0, 0, 50, -1, OBJECT_HAKA_OBJ, object_haka_obj_DL_001680); } Matrix_Pop(); } -#else -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Haka_Bombwall/func_80BD5E6C.s") -#endif void BgHakaBombwall_Init(Actor* thisx, PlayState* play) { s32 pad; diff --git a/src/overlays/actors/ovl_Bg_Haka_Curtain/overlay.cfg b/src/overlays/actors/ovl_Bg_Haka_Curtain/overlay.cfg deleted file mode 100644 index eba48c872..000000000 --- a/src/overlays/actors/ovl_Bg_Haka_Curtain/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Haka_Curtain -z_bg_haka_curtain.c diff --git a/src/overlays/actors/ovl_Bg_Haka_Tomb/overlay.cfg b/src/overlays/actors/ovl_Bg_Haka_Tomb/overlay.cfg deleted file mode 100644 index 3e83b3fb6..000000000 --- a/src/overlays/actors/ovl_Bg_Haka_Tomb/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Haka_Tomb -z_bg_haka_tomb.c diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/overlay.cfg b/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/overlay.cfg deleted file mode 100644 index 9b4288e95..000000000 --- a/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Hakugin_Bombwall -z_bg_hakugin_bombwall.c diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/overlay.cfg b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/overlay.cfg deleted file mode 100644 index cc7d95cdc..000000000 --- a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Hakugin_Elvpole -z_bg_hakugin_elvpole.c diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Post/overlay.cfg b/src/overlays/actors/ovl_Bg_Hakugin_Post/overlay.cfg deleted file mode 100644 index fc47ccb4f..000000000 --- a/src/overlays/actors/ovl_Bg_Hakugin_Post/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Hakugin_Post -z_bg_hakugin_post.c diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Switch/overlay.cfg b/src/overlays/actors/ovl_Bg_Hakugin_Switch/overlay.cfg deleted file mode 100644 index 3887196c7..000000000 --- a/src/overlays/actors/ovl_Bg_Hakugin_Switch/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Hakugin_Switch -z_bg_hakugin_switch.c diff --git a/src/overlays/actors/ovl_Bg_Icefloe/overlay.cfg b/src/overlays/actors/ovl_Bg_Icefloe/overlay.cfg deleted file mode 100644 index f8da71e62..000000000 --- a/src/overlays/actors/ovl_Bg_Icefloe/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Icefloe -z_bg_icefloe.c diff --git a/src/overlays/actors/ovl_Bg_Icicle/overlay.cfg b/src/overlays/actors/ovl_Bg_Icicle/overlay.cfg deleted file mode 100644 index 88c4deec0..000000000 --- a/src/overlays/actors/ovl_Bg_Icicle/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Icicle -z_bg_icicle.c diff --git a/src/overlays/actors/ovl_Bg_Ikana_Block/overlay.cfg b/src/overlays/actors/ovl_Bg_Ikana_Block/overlay.cfg deleted file mode 100644 index af448437b..000000000 --- a/src/overlays/actors/ovl_Bg_Ikana_Block/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Ikana_Block -z_bg_ikana_block.c diff --git a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/overlay.cfg b/src/overlays/actors/ovl_Bg_Ikana_Bombwall/overlay.cfg deleted file mode 100644 index 4888c9532..000000000 --- a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Ikana_Bombwall -z_bg_ikana_bombwall.c diff --git a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.c b/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.c index 7dbe579a0..04f7f514b 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.c @@ -96,50 +96,53 @@ Gfx* D_80BD52E0[] = { object_ikana_obj_DL_000048, }; -#ifdef NON_MATCHING void func_80BD4720(BgIkanaBombwall* this, PlayState* play) { s32 i; - Vec3f spE0; - Vec3f spD4; - Vec3f spC8; - Vec3f spBC; - f32 temp_fs0; - f32 phi_fs1; + Vec3f pos; + Vec3f vel; + Vec3f posOffset; + Vec3f velOffset; + f32 offsetPosX; + f32 offsetPosY; + s16 scale; s16 phi_s0; - s16 temp; s16 phi_t0; + s16 gravity; Matrix_Push(); Matrix_RotateYS(this->dyna.actor.shape.rot.y, MTXMODE_NEW); - temp_fs0 = 0.0f; - phi_fs1 = 0.0f; + offsetPosX = 0.0f; + offsetPosY = 0.0f; for (i = 0; i < 30; i++) { - temp_fs0 += 60.0f + (Rand_ZeroOne() * 20.0f); - if (temp_fs0 > 75.0f) { - temp_fs0 -= 150.0f; + offsetPosX += 60.0f + (Rand_ZeroOne() * 20.0f); + if (offsetPosX > 75.0f) { + offsetPosX -= 150.0f; } - spC8.x = temp_fs0; - phi_fs1 += 5; - spC8.y = phi_fs1; + offsetPosY += 5; - spC8.z = (Rand_ZeroOne() * 20.0f) - 10.0f; + posOffset.x = offsetPosX; + posOffset.y = offsetPosY; + posOffset.z = (Rand_ZeroOne() * 20.0f) - 10.0f; - spBC.x = ((Rand_ZeroOne() - 0.5f) * 5.0f) + (temp_fs0 * 0.053333335f); - spBC.y = (Rand_ZeroOne() * 7.0f) - 2.0f; - spBC.z = (Rand_ZeroOne() * 4.0f) - 2.0f; + velOffset.x = ((Rand_ZeroOne() - 0.5f) * 5.0f) + (offsetPosX * (4.0f / 75.0f)); + velOffset.y = (Rand_ZeroOne() * 7.0f) - 2.0f; + velOffset.z = (Rand_ZeroOne() * 4.0f) - 2.0f; - Matrix_MultVec3f(&spC8, &spE0); - Matrix_MultVec3f(&spBC, &spD4); + Matrix_MultVec3f(&posOffset, &pos); + Matrix_MultVec3f(&velOffset, &vel); - spE0.x += this->dyna.actor.world.pos.x; - spE0.y += this->dyna.actor.world.pos.y; - spE0.z += this->dyna.actor.world.pos.z; + pos.x += this->dyna.actor.world.pos.x; + pos.y += this->dyna.actor.world.pos.y; + pos.z += this->dyna.actor.world.pos.z; + + //! FAKE + if (1) {} if ((i & 3) == 0) { phi_s0 = 32; - func_800BBFB0(play, &spE0, 50.0f, 2, 100, 120, 1); + func_800BBFB0(play, &pos, 50.0f, 2, 100, 120, 1); } else { phi_s0 = 64; } @@ -151,56 +154,57 @@ void func_80BD4720(BgIkanaBombwall* this, PlayState* play) { phi_t0 = 0; } - if (D_80BD52C8[i & 3] >= 16) { - temp = -550; + scale = D_80BD52C8[i & (ARRAY_COUNT(D_80BD52C8) - 1)]; + + //! FAKE + fake_label:; + + if (scale >= 16) { + gravity = -550; } else { - temp = -450; + gravity = -450; } - EffectSsKakera_Spawn(play, &spE0, &spD4, &spE0, temp, phi_s0, 30, 0, 0, D_80BD52C8[i & 3], phi_t0, 0, 50, -1, + EffectSsKakera_Spawn(play, &pos, &vel, &pos, gravity, phi_s0, 30, 0, 0, scale, phi_t0, 0, 50, -1, OBJECT_IKANA_OBJ, object_ikana_obj_DL_000288); } Matrix_Pop(); } -#else -void func_80BD4720(BgIkanaBombwall* this, PlayState* play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Ikana_Bombwall/func_80BD4720.s") -#endif void func_80BD4A14(BgIkanaBombwall* this, PlayState* play) { s32 i; - Vec3f spD8; - Vec3f spCC; + Vec3f pos; + Vec3f vel; f32 temp_fs0; f32 temp_fs1; f32 temp_fs3; - s16 temp_v1; - s16 phi_s2; - s32 phi_t0; + s16 scale; + s16 angle; + s32 gravity; s16 phi_v0; s32 phi_v1; temp_fs3 = 0.0f; - for (i = 0, phi_s2 = 0; i < 28; i++, phi_s2 += 0x924) { + for (i = 0, angle = 0; i < 28; i++, angle += 0x924) { temp_fs3 += 20.0f + (Rand_ZeroOne() * 10.0f); if (temp_fs3 > 60.0f) { temp_fs3 -= 60.0f; } - temp_fs0 = Math_SinS(phi_s2); - temp_fs1 = Math_CosS(phi_s2); + temp_fs0 = Math_SinS(angle); + temp_fs1 = Math_CosS(angle); - spD8.x = (temp_fs0 * temp_fs3) + this->dyna.actor.world.pos.x; - spD8.y = this->dyna.actor.world.pos.y; - spD8.z = (temp_fs1 * temp_fs3) + this->dyna.actor.world.pos.z; + pos.x = (temp_fs0 * temp_fs3) + this->dyna.actor.world.pos.x; + pos.y = this->dyna.actor.world.pos.y; + pos.z = (temp_fs1 * temp_fs3) + this->dyna.actor.world.pos.z; - spCC.x = ((Rand_ZeroOne() - 0.5f) * 3.0f * temp_fs0) + ((temp_fs0 * temp_fs3) * 0.033333335f); - spCC.y = (Rand_ZeroOne() * 18.0f) + 4.0f; - spCC.z = ((Rand_ZeroOne() - 0.5f) * 3.0f * temp_fs1) + ((temp_fs1 * temp_fs3) * 0.033333335f); + vel.x = ((Rand_ZeroOne() - 0.5f) * 3.0f * temp_fs0) + ((temp_fs0 * temp_fs3) * (1.0f / 30.0f)); + vel.y = (Rand_ZeroOne() * 18.0f) + 4.0f; + vel.z = ((Rand_ZeroOne() - 0.5f) * 3.0f * temp_fs1) + ((temp_fs1 * temp_fs3) * (1.0f / 30.0f)); - temp_v1 = (Rand_Next() & 3) + (i >> 1) + 6; + scale = (Rand_Next() & 3) + (i >> 1) + 6; if ((i & 3) == 0) { phi_v0 = 32; @@ -208,21 +212,21 @@ void func_80BD4A14(BgIkanaBombwall* this, PlayState* play) { phi_v0 = 64; } - if (temp_v1 >= 15) { + if (scale >= 15) { phi_v0 |= 1; phi_v1 = 1; - phi_t0 = -550; + gravity = -550; } else { phi_v1 = 0; - phi_t0 = -400; + gravity = -400; } - EffectSsKakera_Spawn(play, &spD8, &spCC, &spD8, phi_t0, phi_v0, 30, 0, 0, temp_v1, phi_v1, 0, 50, -1, + EffectSsKakera_Spawn(play, &pos, &vel, &pos, gravity, phi_v0, 30, 0, 0, scale, phi_v1, 0, 50, -1, OBJECT_IKANA_OBJ, object_ikana_obj_DL_000288); if ((i & 3) == 0) { - spD8.y += 30.0f; - func_800BBFB0(play, &spD8, 50.0f, 2, 70, 110, 1); + pos.y += 30.0f; + func_800BBFB0(play, &pos, 50.0f, 2, 70, 110, 1); } } } @@ -231,8 +235,8 @@ void BgIkanaBombwall_Init(Actor* thisx, PlayState* play) { s32 pad; BgIkanaBombwall* this = THIS; s32 sp2C = BGIKANABOMBWALL_GET_100(&this->dyna.actor); - s32 sp28; - s32 sp24; + CollisionHeader* colHeader; + ColliderCylinderInit* cylinderInit; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); DynaPolyActor_Init(&this->dyna, 0); @@ -244,15 +248,15 @@ void BgIkanaBombwall_Init(Actor* thisx, PlayState* play) { } if (sp2C == 0) { - sp28 = &object_ikana_obj_Colheader_000488; - sp24 = &sCylinderInit1; + colHeader = &object_ikana_obj_Colheader_000488; + cylinderInit = &sCylinderInit1; } else { - sp28 = &object_ikana_obj_Colheader_000128; - sp24 = &sCylinderInit2; + colHeader = &object_ikana_obj_Colheader_000128; + cylinderInit = &sCylinderInit2; } - DynaPolyActor_LoadMesh(play, &this->dyna, sp28); - Collider_SetCylinder(play, &this->collider, &this->dyna.actor, sp24); + DynaPolyActor_LoadMesh(play, &this->dyna, colHeader); + Collider_SetCylinder(play, &this->collider, &this->dyna.actor, cylinderInit); Collider_UpdateCylinder(&this->dyna.actor, &this->collider); if (sp2C == 0) { diff --git a/src/overlays/actors/ovl_Bg_Ikana_Dharma/overlay.cfg b/src/overlays/actors/ovl_Bg_Ikana_Dharma/overlay.cfg deleted file mode 100644 index 13c58ba86..000000000 --- a/src/overlays/actors/ovl_Bg_Ikana_Dharma/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Ikana_Dharma -z_bg_ikana_dharma.c diff --git a/src/overlays/actors/ovl_Bg_Ikana_Mirror/overlay.cfg b/src/overlays/actors/ovl_Bg_Ikana_Mirror/overlay.cfg deleted file mode 100644 index d735febc0..000000000 --- a/src/overlays/actors/ovl_Bg_Ikana_Mirror/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Ikana_Mirror -z_bg_ikana_mirror.c diff --git a/src/overlays/actors/ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c b/src/overlays/actors/ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c index c7e61cad7..5fc28c5a5 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c @@ -257,8 +257,8 @@ void BgIkanaMirror_Init(Actor* thisx, PlayState* play2) { } BgIkanaMirror_SetQuadVertices(this); - this->lightAbsorptionTexScroll = Lib_SegmentedToVirtual(&gStoneTowerTempleMirrorLightAbsorptionTexAnim); - this->lightEmissionTexScroll = Lib_SegmentedToVirtual(&gStoneTowerTempleMirrorLightEmissionTexAnim); + this->lightAbsorptionTexScroll = Lib_SegmentedToVirtual(gStoneTowerTempleMirrorLightAbsorptionTexAnim); + this->lightEmissionTexScroll = Lib_SegmentedToVirtual(gStoneTowerTempleMirrorLightEmissionTexAnim); BgIkanaMirror_SetupWait(this); } diff --git a/src/overlays/actors/ovl_Bg_Ikana_Ray/overlay.cfg b/src/overlays/actors/ovl_Bg_Ikana_Ray/overlay.cfg deleted file mode 100644 index b091b0a51..000000000 --- a/src/overlays/actors/ovl_Bg_Ikana_Ray/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Ikana_Ray -z_bg_ikana_ray.c diff --git a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/overlay.cfg b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/overlay.cfg deleted file mode 100644 index c51c2a598..000000000 --- a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Ikana_Rotaryroom -z_bg_ikana_rotaryroom.c diff --git a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c index a979ac08e..4561d4049 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c @@ -648,10 +648,10 @@ void func_80B814B8(BgIkanaRotaryroom* this, PlayState* play) { if (ActorCutscene_GetCurrentIndex() == this->dyna.actor.cutscene) { if (player->actor.bgCheckFlags & 0x100) { - func_800B8E58(player, NA_SE_VO_LI_DAMAGE_S + player->ageProperties->unk_92); + func_800B8E58(player, NA_SE_VO_LI_DAMAGE_S + player->ageProperties->voiceSfxIdOffset); func_80169EFC(&play->state); - func_800B8E58(player, NA_SE_VO_LI_TAKEN_AWAY + player->ageProperties->unk_92); - play->unk_18845 = 1; + func_800B8E58(player, NA_SE_VO_LI_TAKEN_AWAY + player->ageProperties->voiceSfxIdOffset); + play->haltAllActors = true; play_sound(NA_SE_OC_ABYSS); this->actionFunc = NULL; } @@ -794,7 +794,7 @@ void func_80B819F0(Actor* thisx, PlayState* play) { if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); if (this->dyna.actor.cutscene >= 0) { - func_800B7298(play, &this->dyna.actor, 7); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_7); } func_80B81A64(this); } else { diff --git a/src/overlays/actors/ovl_Bg_Ikana_Shutter/overlay.cfg b/src/overlays/actors/ovl_Bg_Ikana_Shutter/overlay.cfg deleted file mode 100644 index e86cc272b..000000000 --- a/src/overlays/actors/ovl_Bg_Ikana_Shutter/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Ikana_Shutter -z_bg_ikana_shutter.c diff --git a/src/overlays/actors/ovl_Bg_Iknin_Susceil/overlay.cfg b/src/overlays/actors/ovl_Bg_Iknin_Susceil/overlay.cfg deleted file mode 100644 index e7df7599d..000000000 --- a/src/overlays/actors/ovl_Bg_Iknin_Susceil/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Iknin_Susceil -z_bg_iknin_susceil.c diff --git a/src/overlays/actors/ovl_Bg_Ikninside/overlay.cfg b/src/overlays/actors/ovl_Bg_Ikninside/overlay.cfg deleted file mode 100644 index 43d45dac7..000000000 --- a/src/overlays/actors/ovl_Bg_Ikninside/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Ikninside -z_bg_ikninside.c diff --git a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/overlay.cfg b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/overlay.cfg deleted file mode 100644 index 0eca2bc55..000000000 --- a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Iknv_Doukutu -z_bg_iknv_doukutu.c diff --git a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c index 9d11c6a6f..9cbfaec61 100644 --- a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c +++ b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c @@ -53,7 +53,7 @@ void BgIknvDoukutu_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_80BD71BC; this->csAction = 0x204; this->unk_160 = 1.0f; - if ((gSaveContext.save.weekEventReg[14] & 4) || (gSaveContext.save.weekEventReg[52] & 0x20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20)) { this->dyna.actor.draw = func_80BD7768; this->actionFunc = func_80BD73D0; play->envCtx.lightSettingOverride = 25; @@ -69,7 +69,7 @@ void BgIknvDoukutu_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); CollisionHeader_GetVirtual(&object_iknv_obj_Colheader_012788, &colHeader); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); - if (!(gSaveContext.save.weekEventReg[14] & 4)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) { Actor_Kill(&this->dyna.actor); } break; @@ -80,7 +80,7 @@ void BgIknvDoukutu_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); CollisionHeader_GetVirtual(&object_iknv_obj_Colheader_0117C8, &colHeader); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); - if (gSaveContext.save.weekEventReg[14] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) { this->unk_160 = 1.0f; this->dyna.actor.world.pos.y += 68.0f; } else { diff --git a/src/overlays/actors/ovl_Bg_Iknv_Obj/overlay.cfg b/src/overlays/actors/ovl_Bg_Iknv_Obj/overlay.cfg deleted file mode 100644 index 971c9f947..000000000 --- a/src/overlays/actors/ovl_Bg_Iknv_Obj/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Iknv_Obj -z_bg_iknv_obj.c diff --git a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c index 4add85012..ba65baca4 100644 --- a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c +++ b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c @@ -84,7 +84,7 @@ void BgIknvObj_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit); Collider_UpdateCylinder(&this->dyna.actor, &this->collider); this->dyna.actor.colChkInfo.mass = MASS_IMMOVABLE; - gSaveContext.save.weekEventReg[51] &= (u8)~0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_51_10); Actor_SetFocus(&this->dyna.actor, IREG(88)); break; default: @@ -98,7 +98,7 @@ void BgIknvObj_Destroy(Actor* thisx, PlayState* play) { if (IKNV_OBJ_TYPE(this) != IKNV_OBJ_RAISED_DOOR) { if (IKNV_OBJ_TYPE(this) == IKNV_OBJ_SAKON_DOOR) { Collider_DestroyCylinder(play, &this->collider); - gSaveContext.save.weekEventReg[51] &= (u8)~0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_51_10); } else { return; } @@ -125,7 +125,7 @@ s32 func_80BD7CEC(BgIknvObj* this) { } void BgIknvObj_UpdateWaterwheel(BgIknvObj* this, PlayState* play) { - if (gSaveContext.save.weekEventReg[14] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) { this->dyna.actor.shape.rot.z -= 0x64; func_800B9098(&this->dyna.actor); func_800B9010(&this->dyna.actor, NA_SE_EV_WOOD_WATER_WHEEL - SFX_FLAG); @@ -156,7 +156,7 @@ s32 func_80BD7E0C(BgIknvObj* this, s16 targetRotation, PlayState* play) { void func_80BD7ED8(BgIknvObj* this, PlayState* play) { if (func_80BD7E0C(this, this->dyna.actor.home.rot.y, play)) { this->actionFunc = BgIknvObj_UpdateSakonDoor; - gSaveContext.save.weekEventReg[51] &= (u8)~0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_51_10); } CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } @@ -165,7 +165,7 @@ void func_80BD7F4C(BgIknvObj* this, PlayState* play) { if (gSaveContext.save.time > CLOCK_TIME(19, 30)) { this->actionFunc = func_80BD7ED8; } - if ((this->dyna.actor.home.rot.x == 1) && !(gSaveContext.save.weekEventReg[58] & 0x80)) { + if ((this->dyna.actor.home.rot.x == 1) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_58_80)) { ActorCutscene_Stop(this->dyna.actor.cutscene); this->dyna.actor.home.rot.x = 0; } @@ -175,7 +175,7 @@ void func_80BD7F4C(BgIknvObj* this, PlayState* play) { void func_80BD7FDC(BgIknvObj* this, PlayState* play) { if (func_80BD7E0C(this, this->dyna.actor.home.rot.y + 0x4000, play)) { this->actionFunc = func_80BD7F4C; - gSaveContext.save.weekEventReg[51] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_51_10); this->dyna.actor.home.rot.x = 1; } } @@ -188,9 +188,9 @@ void func_80BD8040(BgIknvObj* this, PlayState* play) { } void BgIknvObj_UpdateSakonDoor(BgIknvObj* this, PlayState* play) { - if (gSaveContext.save.weekEventReg[58] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_80)) { this->actionFunc = func_80BD8040; - gSaveContext.save.weekEventReg[89] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_89_80); } CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } diff --git a/src/overlays/actors/ovl_Bg_Ingate/overlay.cfg b/src/overlays/actors/ovl_Bg_Ingate/overlay.cfg deleted file mode 100644 index 68501515e..000000000 --- a/src/overlays/actors/ovl_Bg_Ingate/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Ingate -z_bg_ingate.c diff --git a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c index 911eb9243..4bfa17c1c 100644 --- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c +++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c @@ -72,7 +72,7 @@ Actor* BgIngate_FindActor(BgIngate* this, PlayState* play, u8 actorCat, s16 acto void func_80953B40(BgIngate* this) { s32 temp; - if (!(gSaveContext.eventInf[3] & 0x20)) { + if (!CHECK_EVENTINF(EVENTINF_35)) { this->timePathTotalTime = 4 * 1000; this->timePathTimeSpeed = 4; } else { @@ -125,10 +125,10 @@ s32 func_80953BEC(BgIngate* this) { s32 func_80953DA8(BgIngate* this, PlayState* play) { Camera* mainCam = Play_GetCamera(play, CAM_ID_MAIN); - if (gSaveContext.eventInf[3] & 0x20) { - func_800B7298(play, &this->dyna.actor, 7); + if (CHECK_EVENTINF(EVENTINF_35)) { + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_7); } else { - gSaveContext.eventInf[4] |= 2; + SET_EVENTINF(EVENTINF_41); } Camera_ChangeSetting(mainCam, CAM_SET_BOAT_CRUISE); play->unk_1887C = 0x63; @@ -139,8 +139,8 @@ s32 func_80953DA8(BgIngate* this, PlayState* play) { void func_80953E38(PlayState* play) { Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_NORMAL0); - if (!(gSaveContext.eventInf[3] & 0x20)) { - gSaveContext.eventInf[4] &= (u8)~2; + if (!CHECK_EVENTINF(EVENTINF_35)) { + CLEAR_EVENTINF(EVENTINF_41); } play->unk_1887C = -1; @@ -149,7 +149,7 @@ void func_80953E38(PlayState* play) { void func_80953EA4(BgIngate* this, PlayState* play) { Player* player = GET_PLAYER(play); - func_800B7298(play, &this->dyna.actor, 0x3A); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_58); player->unk_3A0.x = this->dyna.actor.world.pos.x; player->unk_3A0.z = this->dyna.actor.world.pos.z; this->unk160 &= ~0x4; @@ -180,9 +180,9 @@ void func_80953F9C(BgIngate* this, PlayState* play) { Player* player = GET_PLAYER(play); Camera* mainCam = Play_GetCamera(play, CAM_ID_MAIN); - if (!(gSaveContext.eventInf[4] & 1)) { + if (!CHECK_EVENTINF(EVENTINF_40)) { - if (!(gSaveContext.eventInf[3] & 0x20) && (this->unk160 & 0x10) && (this->unk16C == 0)) { + if (!CHECK_EVENTINF(EVENTINF_35) && (this->unk160 & 0x10) && (this->unk16C == 0)) { this->dyna.actor.textId = 0x9E3; Message_StartTextbox(play, this->dyna.actor.textId, NULL); this->unk160 &= ~0x10; @@ -192,18 +192,17 @@ void func_80953F9C(BgIngate* this, PlayState* play) { if (this->timePath->unk1 != 0xFF) { func_80953E38(play); - func_800B7298(play, &this->dyna.actor, 7); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_7); this->dyna.actor.textId = 0x9E4; Message_StartTextbox(play, this->dyna.actor.textId, NULL); this->unk16C += 1; - gSaveContext.save.weekEventReg[90] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_90_40); this->actionFunc = func_809543D4; } else { - - if (!(gSaveContext.eventInf[3] & 0x20)) { - gSaveContext.eventInf[4] &= (u8)~2; + if (!CHECK_EVENTINF(EVENTINF_35)) { + CLEAR_EVENTINF(EVENTINF_41); } else { - gSaveContext.eventInf[4] |= 1; + SET_EVENTINF(EVENTINF_40); } this->actionFunc = func_809542A0; } @@ -216,7 +215,7 @@ void func_80953F9C(BgIngate* this, PlayState* play) { if (ActorCutscene_GetCurrentIndex() != -1) { Camera_ChangeSetting(mainCam, CAM_SET_NORMAL0); player->stateFlags1 |= PLAYER_STATE1_20; - play->actorCtx.flags &= ~ACTORCTX_FLAG_2; + play->actorCtx.flags &= ~ACTORCTX_FLAG_PICTO_BOX_ON; } else { Camera_ChangeSetting(mainCam, CAM_SET_BOAT_CRUISE); player->stateFlags1 &= ~PLAYER_STATE1_20; @@ -232,7 +231,7 @@ void func_809541B8(BgIngate* this, PlayState* play) { if ((player->transformation == PLAYER_FORM_HUMAN) && (player->actor.bgCheckFlags & 1) && (this->dyna.actor.xzDistToPlayer < 40.0f)) { if (this->dyna.actor.playerHeightRel > 15.0f) { - func_800B7298(play, &this->dyna.actor, 7); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_7); this->dyna.actor.textId = 0x9E6; Message_StartTextbox(play, this->dyna.actor.textId, NULL); this->actionFunc = func_809543D4; @@ -244,28 +243,28 @@ void func_809541B8(BgIngate* this, PlayState* play) { } void func_809542A0(BgIngate* this, PlayState* play) { - if (gSaveContext.eventInf[5] & 1) { + if (CHECK_EVENTINF(EVENTINF_50)) { play->nextEntrance = ENTRANCE(TOURIST_INFORMATION, 2); - gSaveContext.eventInf[5] &= (u8)~1; + CLEAR_EVENTINF(EVENTINF_50); } else { play->nextEntrance = ENTRANCE(TOURIST_INFORMATION, 1); } gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; this->actionFunc = func_80953F8C; - gSaveContext.save.weekEventReg[90] &= (u8)~0x40; - func_800FE498(); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40); + Environment_StartTime(); } void func_80954340(BgIngate* this, PlayState* play) { if (!DECR(this->unk16A)) { if (this->timePath != NULL) { - func_800B7298(play, &this->dyna.actor, 6); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6); this->timePath = &play->setupPathList[this->timePath->unk1]; func_80953F14(this, play); - func_800FE484(); + Environment_StopTime(); } } } @@ -281,17 +280,17 @@ void func_809543D4(BgIngate* this, PlayState* play) { break; case 0x9E5: if (play->msgCtx.choiceIndex == 0) { - func_800B7298(play, &this->dyna.actor, 6); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6); this->unk160 &= ~0x4; this->actionFunc = func_809541B8; - func_800FE498(); + Environment_StartTime(); func_8019F208(); } else { if (this->timePath != NULL) { this->timePath = &play->setupPathList[this->timePath->unk1]; } func_80953F14(this, play); - gSaveContext.save.weekEventReg[90] &= (u8)~0x40; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40); func_8019F230(); } func_801477B4(play); @@ -299,13 +298,13 @@ void func_809543D4(BgIngate* this, PlayState* play) { case 0x9E6: if (play->msgCtx.choiceIndex == 0) { func_80953EA4(this, play); - gSaveContext.save.weekEventReg[90] &= (u8)~0x40; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40); func_8019F208(); } else { - func_800B7298(play, &this->dyna.actor, 6); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6); this->unk160 &= ~0x4; this->actionFunc = func_809541B8; - func_800FE498(); + Environment_StartTime(); func_8019F230(); } func_801477B4(play); @@ -331,10 +330,10 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) { Actor_SetScale(&this->dyna.actor, 1.0f); this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_FF(&this->dyna.actor), 0); this->dyna.actor.room = -1; - if (gSaveContext.save.weekEventReg[20] & 2) { - gSaveContext.save.weekEventReg[90] &= (u8)~0x40; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40); } - if (!(gSaveContext.eventInf[3] & 0x20) && (gSaveContext.save.weekEventReg[90] & 0x40)) { + if (!CHECK_EVENTINF(EVENTINF_35) && CHECK_WEEKEVENTREG(WEEKEVENTREG_90_40)) { phi_a2 = 1; this->unk16C = 1; this->actionFunc = func_809541B8; @@ -342,10 +341,10 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) { phi_a2 = 0; if (play->curSpawn == 6) { func_80953F14(this, play); - if (gSaveContext.eventInf[3] & 0x20) { - func_80112AFC(play); + if (CHECK_EVENTINF(EVENTINF_35)) { + Interface_InitMinigame(play); } else { - gSaveContext.eventInf[4] |= 2; + SET_EVENTINF(EVENTINF_41); } } else { this->actionFunc = func_80953F8C; diff --git a/src/overlays/actors/ovl_Bg_Inibs_Movebg/overlay.cfg b/src/overlays/actors/ovl_Bg_Inibs_Movebg/overlay.cfg deleted file mode 100644 index 877787043..000000000 --- a/src/overlays/actors/ovl_Bg_Inibs_Movebg/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Inibs_Movebg -z_bg_inibs_movebg.c diff --git a/src/overlays/actors/ovl_Bg_Keikoku_Saku/overlay.cfg b/src/overlays/actors/ovl_Bg_Keikoku_Saku/overlay.cfg deleted file mode 100644 index 78f2c7668..000000000 --- a/src/overlays/actors/ovl_Bg_Keikoku_Saku/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Keikoku_Saku -z_bg_keikoku_saku.c diff --git a/src/overlays/actors/ovl_Bg_Keikoku_Spr/overlay.cfg b/src/overlays/actors/ovl_Bg_Keikoku_Spr/overlay.cfg deleted file mode 100644 index 74d068ea4..000000000 --- a/src/overlays/actors/ovl_Bg_Keikoku_Spr/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Keikoku_Spr -z_bg_keikoku_spr.c diff --git a/src/overlays/actors/ovl_Bg_Kin2_Bombwall/overlay.cfg b/src/overlays/actors/ovl_Bg_Kin2_Bombwall/overlay.cfg deleted file mode 100644 index b61d1617f..000000000 --- a/src/overlays/actors/ovl_Bg_Kin2_Bombwall/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Kin2_Bombwall -z_bg_kin2_bombwall.c diff --git a/src/overlays/actors/ovl_Bg_Kin2_Fence/overlay.cfg b/src/overlays/actors/ovl_Bg_Kin2_Fence/overlay.cfg deleted file mode 100644 index d3984fea9..000000000 --- a/src/overlays/actors/ovl_Bg_Kin2_Fence/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Kin2_Fence -z_bg_kin2_fence.c diff --git a/src/overlays/actors/ovl_Bg_Kin2_Picture/overlay.cfg b/src/overlays/actors/ovl_Bg_Kin2_Picture/overlay.cfg deleted file mode 100644 index ddd62c823..000000000 --- a/src/overlays/actors/ovl_Bg_Kin2_Picture/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Kin2_Picture -z_bg_kin2_picture.c diff --git a/src/overlays/actors/ovl_Bg_Kin2_Shelf/overlay.cfg b/src/overlays/actors/ovl_Bg_Kin2_Shelf/overlay.cfg deleted file mode 100644 index 84a84fd49..000000000 --- a/src/overlays/actors/ovl_Bg_Kin2_Shelf/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Kin2_Shelf -z_bg_kin2_shelf.c diff --git a/src/overlays/actors/ovl_Bg_Ladder/overlay.cfg b/src/overlays/actors/ovl_Bg_Ladder/overlay.cfg deleted file mode 100644 index 6f88bdf1b..000000000 --- a/src/overlays/actors/ovl_Bg_Ladder/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Ladder -z_bg_ladder.c diff --git a/src/overlays/actors/ovl_Bg_Last_Bwall/overlay.cfg b/src/overlays/actors/ovl_Bg_Last_Bwall/overlay.cfg deleted file mode 100644 index ec560aa15..000000000 --- a/src/overlays/actors/ovl_Bg_Last_Bwall/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Last_Bwall -z_bg_last_bwall.c diff --git a/src/overlays/actors/ovl_Bg_Lbfshot/overlay.cfg b/src/overlays/actors/ovl_Bg_Lbfshot/overlay.cfg deleted file mode 100644 index 520be10f0..000000000 --- a/src/overlays/actors/ovl_Bg_Lbfshot/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Lbfshot -z_bg_lbfshot.c diff --git a/src/overlays/actors/ovl_Bg_Lotus/overlay.cfg b/src/overlays/actors/ovl_Bg_Lotus/overlay.cfg deleted file mode 100644 index 95702c51b..000000000 --- a/src/overlays/actors/ovl_Bg_Lotus/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Lotus -z_bg_lotus.c diff --git a/src/overlays/actors/ovl_Bg_Market_Step/overlay.cfg b/src/overlays/actors/ovl_Bg_Market_Step/overlay.cfg deleted file mode 100644 index 07ff7cee8..000000000 --- a/src/overlays/actors/ovl_Bg_Market_Step/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Market_Step -z_bg_market_step.c diff --git a/src/overlays/actors/ovl_Bg_Mbar_Chair/overlay.cfg b/src/overlays/actors/ovl_Bg_Mbar_Chair/overlay.cfg deleted file mode 100644 index 8cfa06dec..000000000 --- a/src/overlays/actors/ovl_Bg_Mbar_Chair/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Mbar_Chair -z_bg_mbar_chair.c diff --git a/src/overlays/actors/ovl_Bg_Numa_Hana/overlay.cfg b/src/overlays/actors/ovl_Bg_Numa_Hana/overlay.cfg deleted file mode 100644 index 63ed804b1..000000000 --- a/src/overlays/actors/ovl_Bg_Numa_Hana/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Numa_Hana -z_bg_numa_hana.c diff --git a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c index 2a5d44929..497ed10ab 100644 --- a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c +++ b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c @@ -161,7 +161,7 @@ void BgNumaHana_Init(Actor* thisx, PlayState* play) { return; } - if (gSaveContext.save.weekEventReg[12] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_01)) { func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); this->petalZRotation = 0x2000; @@ -219,7 +219,7 @@ void BgNumaHana_ClosedIdle(BgNumaHana* this, PlayState* play) { Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_FLAME_IGNITION); if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); - gSaveContext.save.weekEventReg[12] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_12_01); Flags_SetSwitch(play, BG_NUMA_HANA_SWITCH_FLAG(&this->dyna.actor)); BgNumaHana_SetupUnfoldInnerPetals(this); } else { diff --git a/src/overlays/actors/ovl_Bg_Open_Shutter/overlay.cfg b/src/overlays/actors/ovl_Bg_Open_Shutter/overlay.cfg deleted file mode 100644 index 8bf55bec2..000000000 --- a/src/overlays/actors/ovl_Bg_Open_Shutter/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Open_Shutter -z_bg_open_shutter.c diff --git a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c index 1b45578c1..c264b9775 100644 --- a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c +++ b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c @@ -121,7 +121,7 @@ void func_80ACAD88(BgOpenShutter* this, PlayState* play) { doorDirection = func_80ACABA8(this, play); if (doorDirection > 0) { - player->doorType = 2; + player->doorType = PLAYER_DOORTYPE_SLIDING; player->doorDirection = doorDirection; player->doorActor = &this->dyna.actor; func_80122F28(player); diff --git a/src/overlays/actors/ovl_Bg_Open_Spot/overlay.cfg b/src/overlays/actors/ovl_Bg_Open_Spot/overlay.cfg deleted file mode 100644 index 757c3fbfd..000000000 --- a/src/overlays/actors/ovl_Bg_Open_Spot/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Open_Spot -z_bg_open_spot.c diff --git a/src/overlays/actors/ovl_Bg_Sinkai_Kabe/overlay.cfg b/src/overlays/actors/ovl_Bg_Sinkai_Kabe/overlay.cfg deleted file mode 100644 index b2a92fdbf..000000000 --- a/src/overlays/actors/ovl_Bg_Sinkai_Kabe/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Sinkai_Kabe -z_bg_sinkai_kabe.c diff --git a/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c b/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c index 8edd322ba..2ec37cb7e 100644 --- a/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c +++ b/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c @@ -67,7 +67,7 @@ void BgSinkaiKabe_Init(Actor* thisx, PlayState* play) { this->pythonIndex = sCurrentPythonIndex; sCurrentPythonIndex++; - if (!(gSaveContext.save.weekEventReg[13] & 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_13_01)) { this->deepPython = Actor_SpawnAsChild(&play->actorCtx, &this->dyna.actor, play, ACTOR_EN_DRAGON, pos.x, pos.y, pos.z, 0, this->dyna.actor.world.rot.y, 1, this->dyna.actor.params); @@ -82,14 +82,14 @@ void BgSinkaiKabe_Init(Actor* thisx, PlayState* play) { } } else { shouldSpawnSeahorse = false; - if (((this->dyna.actor.params == 0) && (gSaveContext.save.weekEventReg[83] & 0x10)) || - ((this->dyna.actor.params == 1) && (gSaveContext.save.weekEventReg[83] & 0x20)) || - ((this->dyna.actor.params == 2) && (gSaveContext.save.weekEventReg[83] & 0x40)) || - ((this->dyna.actor.params == 3) && (gSaveContext.save.weekEventReg[83] & 0x80)) || - ((this->dyna.actor.params == 4) && (gSaveContext.save.weekEventReg[84] & 1)) || - ((this->dyna.actor.params == 5) && (gSaveContext.save.weekEventReg[84] & 2)) || - ((this->dyna.actor.params == 6) && (gSaveContext.save.weekEventReg[84] & 4)) || - ((this->dyna.actor.params == 7) && (gSaveContext.save.weekEventReg[84] & 8))) { + if (((this->dyna.actor.params == 0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_83_10)) || + ((this->dyna.actor.params == 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_83_20)) || + ((this->dyna.actor.params == 2) && CHECK_WEEKEVENTREG(WEEKEVENTREG_83_40)) || + ((this->dyna.actor.params == 3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_83_80)) || + ((this->dyna.actor.params == 4) && CHECK_WEEKEVENTREG(WEEKEVENTREG_84_01)) || + ((this->dyna.actor.params == 5) && CHECK_WEEKEVENTREG(WEEKEVENTREG_84_02)) || + ((this->dyna.actor.params == 6) && CHECK_WEEKEVENTREG(WEEKEVENTREG_84_04)) || + ((this->dyna.actor.params == 7) && CHECK_WEEKEVENTREG(WEEKEVENTREG_84_08))) { shouldSpawnSeahorse = true; } diff --git a/src/overlays/actors/ovl_Bg_Spdweb/overlay.cfg b/src/overlays/actors/ovl_Bg_Spdweb/overlay.cfg deleted file mode 100644 index 9411f4092..000000000 --- a/src/overlays/actors/ovl_Bg_Spdweb/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Spdweb -z_bg_spdweb.c diff --git a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c index d8885a829..fb8d464c8 100644 --- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c +++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c @@ -278,7 +278,7 @@ void func_809CE4C8(BgSpdweb* this, PlayState* play) { sp40.x = this->dyna.actor.world.pos.x; sp40.y = this->dyna.actor.world.pos.y - 50.0f; sp40.z = this->dyna.actor.world.pos.z; - sp3A = player->unk_B6A; + sp3A = player->fallDistance; if (Player_IsBurningStickInRange(play, &sp40, 70.0f, 50.0f)) { this->dyna.actor.home.pos.x = player->meleeWeaponInfo[0].tip.x; @@ -330,7 +330,7 @@ void func_809CE4C8(BgSpdweb* this, PlayState* play) { if ((this->unk_161 != 0) || ((DynaPolyActor_IsInRidingMovingState(&this->dyna) != 0) && (this->unk_164 > 2.0f))) { player->actor.velocity.y = this->unk_164 * 0.7f; - player->unk_B68 = (SQ(this->unk_164) * 0.15f) + this->dyna.actor.world.pos.y; + player->fallStartHeight = (SQ(this->unk_164) * 0.15f) + this->dyna.actor.world.pos.y; this->unk_161 = 0; player->stateFlags1 &= ~PLAYER_STATE1_20; } @@ -450,7 +450,7 @@ void func_809CEBC0(BgSpdweb* this, PlayState* play) { this->dyna.actor.world.pos.z; } func_809CEE74(this); - } else if ((player->itemActionParam == 7) && (player->unk_B28 != 0)) { + } else if ((player->heldItemAction == PLAYER_IA_STICK) && (player->unk_B28 != 0)) { Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, &this->dyna.actor.world.pos, &sp3C); sp38 = Math_SinS(-this->dyna.actor.shape.rot.x); sp34 = Math_CosS(-this->dyna.actor.shape.rot.x); diff --git a/src/overlays/actors/ovl_Bg_Spout_Fire/overlay.cfg b/src/overlays/actors/ovl_Bg_Spout_Fire/overlay.cfg deleted file mode 100644 index bad8eedab..000000000 --- a/src/overlays/actors/ovl_Bg_Spout_Fire/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Spout_Fire -z_bg_spout_fire.c diff --git a/src/overlays/actors/ovl_Bg_Tobira01/overlay.cfg b/src/overlays/actors/ovl_Bg_Tobira01/overlay.cfg deleted file mode 100644 index 7b142082d..000000000 --- a/src/overlays/actors/ovl_Bg_Tobira01/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Tobira01 -z_bg_tobira01.c diff --git a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c index a4256de8f..d6617ef1c 100644 --- a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c +++ b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c @@ -38,12 +38,12 @@ void BgTobira01_Open(BgTobira01* this, PlayState* play) { ActorCutscene_Stop(0x7C); } else if (ActorCutscene_GetCanPlayNext(cutsceneId)) { ActorCutscene_StartAndSetUnkLinkFields(cutsceneId, &this->dyna.actor); - gSaveContext.save.weekEventReg[88] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_88_40); this->playCutscene = false; } else { ActorCutscene_SetIntentToPlay(cutsceneId); } - } else if (!(gSaveContext.save.weekEventReg[88] & 0x40) && (this->timer == 0) && (play->actorCtx.unk1F5 != 0) && + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40) && (this->timer == 0) && (play->actorCtx.unk1F5 != 0) && (play->actorCtx.unk1F4 == 0) && (SurfaceType_GetSceneExitIndex(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId) == 6)) { this->playCutscene = true; @@ -52,7 +52,7 @@ void BgTobira01_Open(BgTobira01* this, PlayState* play) { prevTimer = this->timer; - if (gSaveContext.save.weekEventReg[88] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40)) { this->timer++; } else { this->timer--; @@ -67,9 +67,9 @@ void BgTobira01_Open(BgTobira01* this, PlayState* play) { this->timer2 = 180; } - if (!(player->stateFlags1 & PLAYER_STATE1_40) && (gSaveContext.save.weekEventReg[88] & 0x40) && + if (!(player->stateFlags1 & PLAYER_STATE1_40) && CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40) && (DECR(this->timer2) == 0)) { - gSaveContext.save.weekEventReg[88] &= (u8)~0x40; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_88_40); } } @@ -79,7 +79,7 @@ void BgTobira01_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 1); DynaPolyActor_LoadMesh(play, &this->dyna, &object_spot11_obj_Colheader_0011C0); - gSaveContext.save.weekEventReg[88] &= (u8)~0x40; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_88_40); Actor_SetScale(&this->dyna.actor, 1.0f); this->timer2 = gSaveContext.save.isNight; this->timer = 0; diff --git a/src/overlays/actors/ovl_Bg_Umajump/overlay.cfg b/src/overlays/actors/ovl_Bg_Umajump/overlay.cfg deleted file mode 100644 index 3678ab523..000000000 --- a/src/overlays/actors/ovl_Bg_Umajump/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Bg_Umajump -z_bg_umajump.c diff --git a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c index 479239f05..bef32aedd 100644 --- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c +++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c @@ -61,7 +61,7 @@ void BgUmajump_StopCutscene(BgUmajump* this, PlayState* play) { void BgUmajump_PlayCutscene(BgUmajump* this, PlayState* play) { if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); - gSaveContext.save.weekEventReg[89] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_89_20); this->actionFunc = BgUmajump_StopCutscene; } else { ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); @@ -93,7 +93,7 @@ void BgUmajump_Init(Actor* thisx, PlayState* play) { thisx->params = BG_UMAJUMP_GET_FF(thisx); if ((thisx->params == BG_UMAJUMP_TYPE_2)) { - if ((((play->sceneId == SCENE_F01) && !(gSaveContext.save.weekEventReg[89] & 0x20)) && + if ((((play->sceneId == SCENE_F01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_89_20)) && !CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) && (thisx->cutscene != -1)) { this->actionFunc = BgUmajump_CheckDistance; @@ -134,11 +134,11 @@ void BgUmajump_Update(Actor* thisx, PlayState* play) { Actor_SetObjectDependency(play, &this->dyna.actor); if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) { - if (gSaveContext.save.weekEventReg[22] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558); } } else if (this->dyna.actor.params == BG_UMAJUMP_TYPE_6) { - if (!(gSaveContext.save.weekEventReg[22] & 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558); } } else if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_4) || (this->dyna.actor.params == BG_UMAJUMP_TYPE_3)) { @@ -155,11 +155,11 @@ void BgUmajump_Update(Actor* thisx, PlayState* play) { this->dyna.actor.update = func_8091A5A0; } else if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_5) || (this->dyna.actor.params == BG_UMAJUMP_TYPE_6)) { if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) { - if ((this->dyna.bgId == BGACTOR_NEG_ONE) && (gSaveContext.save.weekEventReg[22] & 1)) { + if ((this->dyna.bgId == BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558); } } else if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_6) && (this->dyna.bgId == BGACTOR_NEG_ONE) && - (!(gSaveContext.save.weekEventReg[22] & 1) || + (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) || ((gSaveContext.save.day == 2) && (gSaveContext.save.isNight == true) && ((gSaveContext.save.time >= CLOCK_TIME(5, 30)) && (gSaveContext.save.time <= CLOCK_TIME(6, 0)))))) { @@ -191,18 +191,18 @@ void func_8091A5A0(Actor* thisx, PlayState* play) { } if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) { - if ((this->dyna.bgId == BGACTOR_NEG_ONE) && (gSaveContext.save.weekEventReg[22] & 1)) { + if ((this->dyna.bgId == BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558); - } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && !(gSaveContext.save.weekEventReg[22] & 1)) { + } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); } } else if (this->dyna.actor.params == BG_UMAJUMP_TYPE_6) { if ((this->dyna.bgId == BGACTOR_NEG_ONE) && - (!(gSaveContext.save.weekEventReg[22] & 1) || + (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) || ((gSaveContext.save.day == 2) && (gSaveContext.save.isNight == true) && (gSaveContext.save.time >= CLOCK_TIME(5, 30)) && (gSaveContext.save.time <= CLOCK_TIME(6, 0))))) { DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558); - } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && (gSaveContext.save.weekEventReg[22] & 1) && + } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) && ((gSaveContext.save.day != 2) || (gSaveContext.save.isNight != true) || (gSaveContext.save.time < CLOCK_TIME(5, 30)) || (gSaveContext.save.time > CLOCK_TIME(6, 0)))) { DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); diff --git a/src/overlays/actors/ovl_Boss_01/overlay.cfg b/src/overlays/actors/ovl_Boss_01/overlay.cfg deleted file mode 100644 index d11a70ed1..000000000 --- a/src/overlays/actors/ovl_Boss_01/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Boss_01 -z_boss_01.c diff --git a/src/overlays/actors/ovl_Boss_02/overlay.cfg b/src/overlays/actors/ovl_Boss_02/overlay.cfg deleted file mode 100644 index 6bf46fe21..000000000 --- a/src/overlays/actors/ovl_Boss_02/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Boss_02 -z_boss_02.c diff --git a/src/overlays/actors/ovl_Boss_02/z_boss_02.c b/src/overlays/actors/ovl_Boss_02/z_boss_02.c index 8ab8b2651..e5505e92a 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -4,6 +4,7 @@ * Description: Twinmold */ +#include "prevent_bss_reordering.h" #include "z_boss_02.h" #include "z64rumble.h" #include "z64shrink_window.h" @@ -550,7 +551,7 @@ void Boss02_Init(Actor* thisx, PlayState* play) { s32 i; s32 pad[2]; - if ((gSaveContext.save.weekEventReg[52] & 0x20) && (this->actor.params == TWINMOLD_RED)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20) && (this->actor.params == TWINMOLD_RED)) { sBlueWarp = (DoorWarp1*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, 0.0f, 60.0f, 0.0f, 0, 0, 0, 1); Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0, 0); @@ -566,7 +567,7 @@ void Boss02_Init(Actor* thisx, PlayState* play) { this->actor.draw = Boss02_Static_Draw; this->actor.flags &= ~ACTOR_FLAG_1; this->unk_1D70 = 0.00999999977648f; - if ((KREG(64) != 0) || (gSaveContext.eventInf[5] & 0x20) || (sBlueWarp != NULL)) { + if ((KREG(64) != 0) || CHECK_EVENTINF(EVENTINF_55) || (sBlueWarp != NULL)) { this->unk_1D20 = 0; sMusicStartTimer = KREG(15) + 20; } else { @@ -750,9 +751,9 @@ void func_809DAB78(Boss02* this, PlayState* play) { this->unk_01BC[this->unk_014E].y = this->actor.world.pos.y; this->unk_01BC[this->unk_014E].z = this->actor.world.pos.z; - this->unk_0B1C[this->unk_014E].x = BINANG_TO_RAD(this->actor.world.rot.x); - this->unk_0B1C[this->unk_014E].y = BINANG_TO_RAD(this->actor.world.rot.y); - this->unk_0B1C[this->unk_014E].z = BINANG_TO_RAD(this->actor.world.rot.z); + this->unk_0B1C[this->unk_014E].x = BINANG_TO_RAD_ALT(this->actor.world.rot.x); + this->unk_0B1C[this->unk_014E].y = BINANG_TO_RAD_ALT(this->actor.world.rot.y); + this->unk_0B1C[this->unk_014E].z = BINANG_TO_RAD_ALT(this->actor.world.rot.z); } if ((this->unk_0144 < 10) && (otherTwinmold->unk_0144 >= 20)) { @@ -1336,8 +1337,8 @@ void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) { Boss02* this = THIS; s32 i; s32 idx; - Mtx* mtx; - Mtx* mtxIter; + Mtx* mtxHead = GRAPH_ALLOC(play->state.gfxCtx, 23 * sizeof(Mtx)); + Mtx* mtx = mtxHead; s32 phi_v0; f32 phi_f12; f32 spAC; @@ -1347,8 +1348,6 @@ void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) { f32 sp9C; f32 sp98; - mtxIter = mtx = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Mtx) * 23); - OPEN_DISPS(play->state.gfxCtx); func_8012C28C(play->state.gfxCtx); @@ -1359,7 +1358,7 @@ void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) { gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gTwinmoldBlueSkinTex)); } - gSPSegment(POLY_OPA_DISP++, 0x0D, mtx); + gSPSegment(POLY_OPA_DISP++, 0x0D, mtxHead); if (!sIsInGiantMode) { sp98 = -500.0f; @@ -1392,11 +1391,11 @@ void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) { } SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, &this->actor); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); spA4 = 0.0f; spA0 = 0.0f; - for (i = 0; i < ARRAY_COUNT(D_809DFA9C); i++, mtxIter++) { + for (i = 0; i < ARRAY_COUNT(D_809DFA9C); i++, mtx++) { if (this->unk_0195 != 0) { phi_v0 = (D_809DF5E4[i + 1] + this->unk_014E) % ARRAY_COUNT(this->unk_01BC); } else { @@ -1415,9 +1414,9 @@ void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) { Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); Matrix_RotateYF(M_PI / 2, MTXMODE_APPLY); Matrix_RotateXFApply(-(M_PI / 2)); - Matrix_ToMtx(mtxIter); + Matrix_ToMtx(mtx); - gSPMatrix(POLY_OPA_DISP++, mtxIter, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_OPA_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); if ((this->unk_0156 & 1) && (i >= this->unk_0158) && (this->unk_015A >= i)) { POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 255, 0, 0, 255, 0x384, 0x44B); @@ -1427,7 +1426,7 @@ void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) { if (sp98 < this->unk_01BC[phi_v0].y) { gSPDisplayList(POLY_OPA_DISP++, D_809DFA9C[i]); } - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); } if (i == 21) { @@ -1578,7 +1577,7 @@ void Boss02_DrawEffects(PlayState* play) { for (i = 0, flag = false; i < ARRAY_COUNT(sEffects); i++, effect++) { if (effect->type == TWINMOLD_EFFECT_FLASH) { if (!flag) { //! @bug - dev forgot to set flag to 1, should only apply to first entry? - gSPDisplayList(POLY_XLU_DISP++, gLightOrb1DL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL); gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 128); } @@ -1589,7 +1588,7 @@ void Boss02_DrawEffects(PlayState* play) { Matrix_Scale(effect->scale * D_809DF5B0, effect->scale * D_809DF5B0, 1.0f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); } } @@ -1637,7 +1636,7 @@ void func_809DD934(Boss02* this, PlayState* play) { this->subCamId = Play_CreateSubCamera(play); Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE); - func_8016566C(150); + Play_EnableMotionBlur(150); this->unk_1D14 = 0; this->subCamAtVel = 0.0f; this->unk_1D58 = 0.0f; @@ -1757,7 +1756,7 @@ void func_809DD934(Boss02* this, PlayState* play) { this->actor.flags |= ACTOR_FLAG_1; player->stateFlags1 &= ~PLAYER_STATE1_100; this->unk_1D70 = 0.01f; - func_80165690(); + Play_DisableMotionBlur(); break; } @@ -1788,7 +1787,7 @@ void func_809DD934(Boss02* this, PlayState* play) { player->actor.world.pos.x *= 10.0f; player->actor.world.pos.y -= 3150.0f; player->actor.world.pos.y *= 10.0f; - player->unk_B68 = player->actor.world.pos.y; + player->fallStartHeight = player->actor.world.pos.y; player->actor.world.pos.z *= 10.0f; if ((sBlueWarp != NULL) && ((SQ(player->actor.world.pos.z) + SQ(player->actor.world.pos.x)) < SQ(60.0f))) { @@ -1860,7 +1859,7 @@ void func_809DD934(Boss02* this, PlayState* play) { player->actor.world.pos.x *= 0.1f; player->actor.world.pos.y *= 0.1f; player->actor.world.pos.y += 3150.0f; - player->unk_B68 = player->actor.world.pos.y; + player->fallStartHeight = player->actor.world.pos.y; player->actor.world.pos.z *= 0.1f; sRedTwinmold->actor.world.pos.x *= 0.1f; @@ -2052,7 +2051,7 @@ void func_809DEAC4(Boss02* this, PlayState* play) { break; case 1: - if ((gSaveContext.save.weekEventReg[52] & 0x20) || ((u32)(KREG(13) + 15) >= this->unk_1D1C)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20) || ((u32)(KREG(13) + 15) >= this->unk_1D1C)) { break; } Cutscene_Start(play, &play->csCtx); @@ -2088,7 +2087,7 @@ void func_809DEAC4(Boss02* this, PlayState* play) { } if (this->unk_1D1C == 45) { - func_800B7298(play, &this->actor, 21); + func_800B7298(play, &this->actor, PLAYER_CSMODE_21); sMusicStartTimer = KREG(91) + 43; } @@ -2102,7 +2101,7 @@ void func_809DEAC4(Boss02* this, PlayState* play) { } if (this->unk_1D1C == 100) { - func_800B7298(play, &this->actor, 0x73); + func_800B7298(play, &this->actor, PLAYER_CSMODE_115); } if (this->unk_1D1C == 112) { @@ -2141,12 +2140,12 @@ void func_809DEAC4(Boss02* this, PlayState* play) { func_80169AFC(play, this->subCamId, 0); this->subCamId = SUB_CAM_ID_DONE; Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, 6); + func_800B7298(play, &this->actor, PLAYER_CSMODE_6); this->actor.flags |= ACTOR_FLAG_1; this->unk_1D20 = 0; sRedTwinmold->unk_0144 = sBlueTwinmold->unk_0144 = 3; sRedTwinmold->unk_0146[0] = sBlueTwinmold->unk_0146[0] = 60; - gSaveContext.eventInf[5] |= 0x20; + SET_EVENTINF(EVENTINF_55); } break; @@ -2202,7 +2201,7 @@ void func_809DEAC4(Boss02* this, PlayState* play) { func_80169AFC(play, this->subCamId, 0); this->subCamId = SUB_CAM_ID_DONE; Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, 6); + func_800B7298(play, &this->actor, PLAYER_CSMODE_6); this->unk_1D20 = 0; this->actor.flags |= ACTOR_FLAG_1; sp68->unk_0144 = 10; diff --git a/src/overlays/actors/ovl_Boss_03/overlay.cfg b/src/overlays/actors/ovl_Boss_03/overlay.cfg deleted file mode 100644 index 285cc5587..000000000 --- a/src/overlays/actors/ovl_Boss_03/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Boss_03 -z_boss_03.c diff --git a/src/overlays/actors/ovl_Boss_03/z_boss_03.c b/src/overlays/actors/ovl_Boss_03/z_boss_03.c index a4c58e71d..f51c94458 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -7,10 +7,6 @@ /** * Some notes: * - * Global flags: - * - gSaveContext.eventInf[5] & 0x40: Enabled when Gyorg's intro cutscene has been watched - * - gSaveContext.save.weekEventReg[55] & 0x80: Checked to know if Gyorg has been defeated - * * Seaweed: * - Refers to the seaweed at the bottom of the stage where Player fights Gyorg * - The default Gyorg actor will spawn 5 other Gyorg instances using the parameter GYORG_PARAM_SEAWEED to spawn them @@ -52,7 +48,6 @@ * - Effect Update/Draw * - Seaweed */ -#include "prevent_bss_reordering.h" #include "z_boss_03.h" #include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h" #include "overlays/actors/ovl_En_Water_Effect/z_en_water_effect.h" @@ -453,7 +448,7 @@ void Boss03_Init(Actor* thisx, PlayState* play2) { PlayState* play = play2; Vec3f sp70; - if (gSaveContext.save.weekEventReg[55] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, 0.0f, PLATFORM_HEIGHT, 200.0f, 0, 0, 0, ENDOORWARP1_FF_1); Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, PLATFORM_HEIGHT, 0.0f, 0, 0, 0, 0); @@ -519,8 +514,8 @@ void Boss03_Init(Actor* thisx, PlayState* play2) { GYORG_LIMB_MAX); Actor_SetScale(&this->actor, 0.2f); - // gSaveContext.eventInf[5] & 0x40: intro cutscene already watched - if ((KREG(64) != 0) || (gSaveContext.eventInf[5] & 0x40)) { + // CHECK_EVENTINF(EVENTINF_56): intro cutscene already watched + if ((KREG(64) != 0) || CHECK_EVENTINF(EVENTINF_56)) { this->actionFunc = func_809E344C; D_809E9842 = false; Audio_QueueSeqCmd(NA_BGM_STOP | 0x10000); @@ -579,10 +574,10 @@ void func_809E34B8(Boss03* this, PlayState* play) { yDiff = this->unk_268.y - this->actor.world.pos.y; zDiff = this->unk_268.z - this->actor.world.pos.z; - Math_ApproachS(&this->actor.world.rot.x, Math_FAtan2F(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274); + Math_ApproachS(&this->actor.world.rot.x, Math_Atan2S_XY(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274); bodyYRotTarget = - Math_SmoothStepToS(&this->actor.world.rot.y, Math_FAtan2F(zDiff, xDiff), 0xA, this->unk_274, 0) * -0.5f; + Math_SmoothStepToS(&this->actor.world.rot.y, Math_Atan2S_XY(zDiff, xDiff), 0xA, this->unk_274, 0) * -0.5f; Math_ApproachS(&this->bodyYRot, bodyYRotTarget, 5, 0x100); Math_ApproachS(&this->unk_274, this->unk_276, 1, 0x100); @@ -668,9 +663,9 @@ void Boss03_ChasePlayer(Boss03* this, PlayState* play) { yDiff = (player->actor.world.pos.y - this->actor.world.pos.y) + 50.0f; zDiff = player->actor.world.pos.z - this->actor.world.pos.z; - Math_ApproachS(&this->actor.world.rot.x, Math_FAtan2F(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274); + Math_ApproachS(&this->actor.world.rot.x, Math_Atan2S_XY(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274); bodyYRotTarget = - Math_SmoothStepToS(&this->actor.world.rot.y, Math_FAtan2F(zDiff, xDiff), 0xA, this->unk_274, 0) * -0.5f; + Math_SmoothStepToS(&this->actor.world.rot.y, Math_Atan2S_XY(zDiff, xDiff), 0xA, this->unk_274, 0) * -0.5f; Math_ApproachS(&this->bodyYRot, bodyYRotTarget, 5, 0x100); Math_ApproachS(&this->unk_274, this->unk_276, 1, 0x100); @@ -688,7 +683,7 @@ void Boss03_ChasePlayer(Boss03* this, PlayState* play) { if (&this->actor == player->actor.parent) { player->unk_AE8 = 101; player->actor.parent = NULL; - player->csMode = 0; + player->csMode = PLAYER_CSMODE_0; } func_809E344C(this, play); @@ -764,9 +759,9 @@ void Boss03_CatchPlayer(Boss03* this, PlayState* play) { yDiff = player->actor.world.pos.y - this->actor.world.pos.y; zDiff = player->actor.world.pos.z - this->actor.world.pos.z; - Math_ApproachS(&this->actor.world.rot.x, Math_FAtan2F(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274); + Math_ApproachS(&this->actor.world.rot.x, Math_Atan2S_XY(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274); Math_ApproachS(&this->bodyYRot, - Math_SmoothStepToS(&this->actor.world.rot.y, Math_FAtan2F(zDiff, xDiff), 0xA, this->unk_274, 0) * + Math_SmoothStepToS(&this->actor.world.rot.y, Math_Atan2S_XY(zDiff, xDiff), 0xA, this->unk_274, 0) * -0.5f, 5, 0x100); Math_ApproachS(&this->unk_274, this->unk_276, 1, 0x100); @@ -783,8 +778,8 @@ void Boss03_CatchPlayer(Boss03* this, PlayState* play) { if (&this->actor == player->actor.parent) { player->unk_AE8 = 101; player->actor.parent = NULL; - player->csMode = 0; - func_80165690(); + player->csMode = PLAYER_CSMODE_0; + Play_DisableMotionBlur(); } func_809E344C(this, play); @@ -830,7 +825,7 @@ void Boss03_SetupChewPlayer(Boss03* this, PlayState* play) { this->actionFunc = Boss03_ChewPlayer; - pitchAngle = Math_FAtan2F(this->actor.world.pos.z, this->actor.world.pos.x); + pitchAngle = Math_Atan2S_XY(this->actor.world.pos.z, this->actor.world.pos.x); Matrix_RotateYS(pitchAngle, MTXMODE_NEW); out.x = 0.0f; @@ -856,7 +851,7 @@ void Boss03_ChewPlayer(Boss03* this, PlayState* play) { this->unk_25C = 15; if (this->workTimer[WORK_TIMER_CURRENT_ACTION] == 90) { - func_8016566C(0x96); + Play_EnableMotionBlur(150); } SkelAnime_Update(&this->skelAnime); @@ -868,9 +863,9 @@ void Boss03_ChewPlayer(Boss03* this, PlayState* play) { yDiff = this->unk_268.y - this->actor.world.pos.y; zDiff = this->unk_268.z - this->actor.world.pos.z; - Math_ApproachS(&this->actor.world.rot.x, Math_FAtan2F(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274); + Math_ApproachS(&this->actor.world.rot.x, Math_Atan2S_XY(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274); Math_ApproachS(&this->bodyYRot, - Math_SmoothStepToS(&this->actor.world.rot.y, Math_FAtan2F(zDiff, xDiff), 0xA, this->unk_274, 0) * + Math_SmoothStepToS(&this->actor.world.rot.y, Math_Atan2S_XY(zDiff, xDiff), 0xA, this->unk_274, 0) * -0.5f, 5, 0x100); Math_ApproachS(&this->unk_274, this->unk_276, 1, 0x100); @@ -911,8 +906,8 @@ void Boss03_ChewPlayer(Boss03* this, PlayState* play) { if (&this->actor == player->actor.parent) { player->unk_AE8 = 101; player->actor.parent = NULL; - player->csMode = 0; - func_80165690(); + player->csMode = PLAYER_CSMODE_0; + Play_DisableMotionBlur(); func_800B8D50(play, NULL, 10.0f, this->actor.shape.rot.y, 0.0f, 0x20); } @@ -1030,9 +1025,9 @@ void Boss03_Charge(Boss03* this, PlayState* play) { yDiff = (this->unk_268.y - this->actor.world.pos.y) - 50.0f; zDiff = this->unk_268.z - this->actor.world.pos.z; - Math_ApproachS(&this->actor.world.rot.y, Math_FAtan2F(zDiff, xDiff), 0xA, 0x1000); + Math_ApproachS(&this->actor.world.rot.y, Math_Atan2S_XY(zDiff, xDiff), 0xA, 0x1000); - rotXTarget = Math_FAtan2F(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff); + rotXTarget = Math_Atan2S_XY(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff); Math_ApproachS(&this->actor.world.rot.x, rotXTarget, 0xA, 0x1000); this->actor.shape.rot = this->actor.world.rot; @@ -1059,7 +1054,7 @@ void Boss03_Charge(Boss03* this, PlayState* play) { // Player is above water && Player is standing on ground if ((this->waterHeight < player->actor.world.pos.y) && (player->actor.bgCheckFlags & 1)) { - func_800B8D50(play, NULL, 7.0f, Math_FAtan2F(player->actor.world.pos.z, player->actor.world.pos.x), + func_800B8D50(play, NULL, 7.0f, Math_Atan2S_XY(player->actor.world.pos.z, player->actor.world.pos.x), 7.0f, 0); } @@ -1149,7 +1144,7 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) { case 0: if (player->actor.world.pos.y < 1350.0f) { Cutscene_Start(play, &play->csCtx); - func_800B7298(play, &this->actor, 7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_7); this->subCamId = Play_CreateSubCamera(play); Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE); @@ -1191,7 +1186,7 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) { this->csState = 2; this->csTimer = 0; this->unk_240 = 0; - func_8016566C(0x96); + Play_EnableMotionBlur(150); this->subCamFov = 80.0f; case 2: @@ -1201,9 +1196,9 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) { yDiff = D_809E9104[this->unk_242].y - this->actor.world.pos.y; zDiff = D_809E9104[this->unk_242].z - this->actor.world.pos.z; - Math_ApproachS(&this->actor.world.rot.x, Math_FAtan2F(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), - 0xA, this->unk_274); - Math_ApproachS(&this->actor.world.rot.y, Math_FAtan2F(zDiff, xDiff), 0xA, this->unk_274); + Math_ApproachS(&this->actor.world.rot.x, + Math_Atan2S_XY(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274); + Math_ApproachS(&this->actor.world.rot.y, Math_Atan2S_XY(zDiff, xDiff), 0xA, this->unk_274); Math_ApproachS(&this->unk_274, 0x200, 1, 0x10); if ((this->csTimer > 30) && (this->csTimer < 50)) { @@ -1260,7 +1255,7 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) { if (this->csTimer == 5) { // Rotates Player towards Gyorg - func_800B7298(play, &this->actor, 8); + func_800B7298(play, &this->actor, PLAYER_CSMODE_8); } this->subCamEye.x = player->actor.world.pos.x + 30.0f; @@ -1284,7 +1279,7 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) { this->actor.speedXZ = -200.0f; Actor_MoveWithoutGravityReverse(&this->actor); this->actor.world.pos.y = this->waterHeight - 150.0f; - func_80165690(); + Play_DisableMotionBlur(); case 5: SkelAnime_Update(&this->skelAnime); @@ -1371,13 +1366,13 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) { func_80169AFC(play, this->subCamId, 0); Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, 6); + func_800B7298(play, &this->actor, PLAYER_CSMODE_6); this->subCamId = SUB_CAM_ID_DONE; func_809E344C(this, play); this->workTimer[WORK_TIMER_UNK1_A] = 50; - gSaveContext.eventInf[5] |= 0x40; + SET_EVENTINF(EVENTINF_56); } break; } @@ -1449,11 +1444,11 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) { case 0: if (ActorCutscene_GetCurrentIndex() == -1) { Cutscene_Start(play, &play->csCtx); - func_800B7298(play, &this->actor, 1); + func_800B7298(play, &this->actor, PLAYER_CSMODE_1); this->subCamId = Play_CreateSubCamera(play); Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE); - this->unk_2BE = Math_FAtan2F(this->actor.world.pos.z, this->actor.world.pos.x); + this->unk_2BE = Math_Atan2S_XY(this->actor.world.pos.z, this->actor.world.pos.x); // Player is above water && Player is standing on ground if ((this->waterHeight < player->actor.world.pos.y) && (player->actor.bgCheckFlags & 1)) { @@ -1472,7 +1467,7 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) { this->subCamAt.z = mainCam->at.z; aux = this->subCamEye.x - this->actor.world.pos.x; - this->unk_568 = Math_Acot2F(this->subCamEye.z - this->actor.world.pos.z, aux); + this->unk_568 = Math_Atan2F_XY(this->subCamEye.z - this->actor.world.pos.z, aux); this->unk_570 = 0.0f; this->unk_56C = 0.0f; @@ -1586,7 +1581,7 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) { this->shapeRotTargetY = Rand_ZeroFloat(65536.0f); } - this->actor.world.rot.y = Math_FAtan2F(-this->actor.world.pos.z, -this->actor.world.pos.x); + this->actor.world.rot.y = Math_Atan2S_XY(-this->actor.world.pos.z, -this->actor.world.pos.x); Boss03_PlayUnderwaterSfx(&this->actor.projectedPos, NA_SE_EN_KONB_BOUND_OLD); Boss03_PlayUnderwaterSfx(&this->actor.projectedPos, NA_SE_EN_KONB_BOUND2_OLD); @@ -1629,9 +1624,9 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) { func_80169AFC(play, this->subCamId, 0); this->subCamId = SUB_CAM_ID_DONE; Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, 6); + func_800B7298(play, &this->actor, PLAYER_CSMODE_6); this->csState = 3; - func_80165690(); + Play_DisableMotionBlur(); Boss03_PlayUnderwaterSfx(&this->actor.projectedPos, NA_SE_EN_KONB_INIT_OLD); Boss03_PlayUnderwaterSfx(&D_809E9848, NA_SE_EN_KONB_INIT_OLD); } @@ -1663,7 +1658,7 @@ void Boss03_SpawnSmallFishesCutscene(Boss03* this, PlayState* play) { case 0: if (ActorCutscene_GetCurrentIndex() == -1) { Cutscene_Start(play, &play->csCtx); - func_800B7298(play, &this->actor, 1); + func_800B7298(play, &this->actor, PLAYER_CSMODE_1); this->subCamId = Play_CreateSubCamera(play); Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE); @@ -1683,7 +1678,7 @@ void Boss03_SpawnSmallFishesCutscene(Boss03* this, PlayState* play) { this->actor.shape.rot.x = this->actor.shape.rot.z; this->actor.shape.rot.y = this->actor.world.rot.y = - Math_FAtan2F(-this->actor.world.pos.x, -this->actor.world.pos.x); + Math_Atan2S_XY(-this->actor.world.pos.x, -this->actor.world.pos.x); this->unk_260 = 0.0f; player->actor.shape.rot.y = player->actor.world.rot.y = this->actor.world.rot.y + 0x8000; @@ -1724,7 +1719,7 @@ void Boss03_SpawnSmallFishesCutscene(Boss03* this, PlayState* play) { func_80169AFC(play, this->subCamId, 0); this->subCamId = SUB_CAM_ID_DONE; Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, 6); + func_800B7298(play, &this->actor, PLAYER_CSMODE_6); func_809E344C(this, play); this->workTimer[WORK_TIMER_UNK1_A] = 50; @@ -1754,8 +1749,8 @@ void Boss03_SetupStunned(Boss03* this, PlayState* play) { if (&this->actor == player->actor.parent) { player->unk_AE8 = 101; player->actor.parent = NULL; - player->csMode = 0; - func_80165690(); + player->csMode = PLAYER_CSMODE_0; + Play_DisableMotionBlur(); } this->unk_240 = 0; @@ -1906,8 +1901,8 @@ void Boss03_UpdateCollision(Boss03* this, PlayState* play) { if (&this->actor == player->actor.parent) { player->unk_AE8 = 101; player->actor.parent = NULL; - player->csMode = 0; - func_80165690(); + player->csMode = PLAYER_CSMODE_0; + Play_DisableMotionBlur(); } continue; @@ -2274,7 +2269,7 @@ void Boss03_Draw(Actor* thisx, PlayState* play) { Matrix_Translate(0.0f, -600.0f, 0.0f, MTXMODE_APPLY); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, Boss03_OverrideLimbDraw, Boss03_PostLimbDraw, &this->actor); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); } this->unk_2BC = 0; @@ -2540,7 +2535,7 @@ void Boss03_SeaweedUpdate(Actor* thisx, PlayState* play) { } if (flag & SEAWEED_FLAG_INTERACT_PLAYER) { - Math_ApproachS(&this->actor.shape.rot.y, Math_FAtan2F(zDiff, xDiff), 0x14, 0x800); + Math_ApproachS(&this->actor.shape.rot.y, Math_Atan2S_XY(zDiff, xDiff), 0x14, 0x800); } if (sGyorgBossInstance->actor.world.pos.y - 40.0f < sGyorgBossInstance->waterHeight) { @@ -2573,7 +2568,7 @@ void Boss03_SeaweedUpdate(Actor* thisx, PlayState* play) { } if (flag & SEAWEED_FLAG_INTERACT_GYORG) { - Math_ApproachS(&this->actor.shape.rot.y, Math_FAtan2F(zDiff, xDiff), 0x14, 0x800); + Math_ApproachS(&this->actor.shape.rot.y, Math_Atan2S_XY(zDiff, xDiff), 0x14, 0x800); } } @@ -2593,7 +2588,7 @@ void Boss03_SeaweedDraw(Actor* thisx, PlayState* play) { Boss03* this = THIS; s16 i; // Why 10 Mtxs? This seems to only use the first 6 elements - Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Mtx) * 10); + Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, 10 * sizeof(Mtx)); OPEN_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Boss_04/overlay.cfg b/src/overlays/actors/ovl_Boss_04/overlay.cfg deleted file mode 100644 index 16d818a43..000000000 --- a/src/overlays/actors/ovl_Boss_04/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Boss_04 -z_boss_04.c diff --git a/src/overlays/actors/ovl_Boss_04/z_boss_04.c b/src/overlays/actors/ovl_Boss_04/z_boss_04.c index 26965b257..00892063c 100644 --- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c +++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c @@ -199,7 +199,7 @@ void Boss04_Init(Actor* thisx, PlayState* play2) { this->actor.world.pos.z = this->unk_6F0; Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 60.0f, 60.0f, 4); - if ((KREG(64) != 0) || (gSaveContext.eventInf[6] & 1)) { + if ((KREG(64) != 0) || CHECK_EVENTINF(EVENTINF_60)) { func_809ECD00(this, play); this->actor.world.pos.y = this->actor.floorHeight + 160.0f; phi_f24 = this->actor.floorHeight; @@ -263,7 +263,7 @@ void func_809EC568(Boss04* this, PlayState* play) { this->subCamId = Play_CreateSubCamera(play); Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE); - func_800B7298(play, &this->actor, 7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_7); player->actor.world.pos.x = this->unk_6E8; player->actor.world.pos.z = this->unk_6F0 + 410.0f; player->actor.shape.rot.y = 0x7FFF; @@ -271,7 +271,7 @@ void func_809EC568(Boss04* this, PlayState* play) { Math_Vec3f_Copy(&this->subCamEye, &player->actor.world.pos); this->subCamEye.y += 100.0f; Math_Vec3f_Copy(&this->subCamAt, &this->actor.world.pos); - func_8016566C(150); + Play_EnableMotionBlur(150); this->subCamFov = 60.0f; boss = play->actorCtx.actorLists[ACTORCAT_BOSS].first; @@ -313,7 +313,7 @@ void func_809EC568(Boss04* this, PlayState* play) { if (this->unk_704 == 45) { this->unk_708 = 1; this->unk_704 = 0; - func_800B7298(play, &this->actor, 0x15); + func_800B7298(play, &this->actor, PLAYER_CSMODE_21); this->actor.gravity = 0.0f; break; } @@ -390,9 +390,9 @@ void func_809EC568(Boss04* this, PlayState* play) { func_80169AFC(play, this->subCamId, 0); this->subCamId = SUB_CAM_ID_DONE; Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, 6); - func_80165690(); - gSaveContext.eventInf[6] |= 1; + func_800B7298(play, &this->actor, PLAYER_CSMODE_6); + Play_DisableMotionBlur(); + SET_EVENTINF(EVENTINF_60); } break; } @@ -828,7 +828,7 @@ void Boss04_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, Boss04_OverrideLimbDraw, Boss04_PostLimbDraw, &this->actor); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); if (this->actionFunc != func_809EC568) { func_8012C448(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Boss_05/overlay.cfg b/src/overlays/actors/ovl_Boss_05/overlay.cfg deleted file mode 100644 index db19abb80..000000000 --- a/src/overlays/actors/ovl_Boss_05/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Boss_05 -z_boss_05.c diff --git a/src/overlays/actors/ovl_Boss_06/overlay.cfg b/src/overlays/actors/ovl_Boss_06/overlay.cfg deleted file mode 100644 index 3f5b0e7d5..000000000 --- a/src/overlays/actors/ovl_Boss_06/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Boss_06 -z_boss_06.c diff --git a/src/overlays/actors/ovl_Boss_06/z_boss_06.c b/src/overlays/actors/ovl_Boss_06/z_boss_06.c index a72dcf8b3..83a920b50 100644 --- a/src/overlays/actors/ovl_Boss_06/z_boss_06.c +++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.c @@ -135,7 +135,7 @@ void Boss06_Init(Actor* thisx, PlayState* play) { D_809F4970 = (EnKnight*)this->actor.parent; this->actor.colChkInfo.damageTable = &sDamageTable; - if ((KREG(64) != 0) || (gSaveContext.eventInf[5] & 0x80)) { + if ((KREG(64) != 0) || CHECK_EVENTINF(EVENTINF_57)) { this->actionFunc = func_809F2E14; } else { this->actionFunc = func_809F2B64; @@ -199,7 +199,7 @@ void func_809F24C8(Boss06* this, PlayState* play) { } Cutscene_Start(play, &play->csCtx); - func_800B7298(play, &this->actor, 7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_7); this->subCamId = Play_CreateSubCamera(play); Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE); @@ -220,7 +220,7 @@ void func_809F24C8(Boss06* this, PlayState* play) { case 1: if (this->unk_1CA >= 10) { Math_ApproachF(&this->unk_1E4, 30.0f, 0.2f, 1.0f); - play->envCtx.fillScreen = 1; + play->envCtx.fillScreen = true; play->envCtx.screenFillColor[2] = 0; play->envCtx.screenFillColor[1] = 0; play->envCtx.screenFillColor[0] = 0; @@ -233,13 +233,13 @@ void func_809F24C8(Boss06* this, PlayState* play) { } if (this->unk_1CA >= 60) { - play->envCtx.fillScreen = 0; + play->envCtx.fillScreen = false; this->unk_1C8 = 0; this->unk_1DC = 0.0f; this->unk_1D8 = 0.0f; if (this->unk_1CA == 60) { D_809F4970->unk_154++; - func_800B7298(play, &this->actor, 0x84); + func_800B7298(play, &this->actor, PLAYER_CSMODE_132); player->actor.shape.rot.y = 0; player->actor.world.rot.y = player->actor.shape.rot.y; } @@ -332,7 +332,7 @@ void func_809F24C8(Boss06* this, PlayState* play) { func_80169AFC(play, this->subCamId, 0); this->subCamId = SUB_CAM_ID_DONE; Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, 6); + func_800B7298(play, &this->actor, PLAYER_CSMODE_6); D_809F4970->unk_151 = 0; } break; @@ -641,7 +641,7 @@ void Boss06_Draw(Actor* thisx, PlayState* play2) { Matrix_Translate(this->actor.world.pos.x + this->unk_1B0, this->actor.world.pos.y + 84.0f + this->unk_1B4, (this->actor.world.pos.z - 2.0f) + spE0, MTXMODE_NEW); - gSPDisplayList(POLY_XLU_DISP++, gLightOrb1DL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, (u8)((140.0f * sp68) + 115.0f), temp_s2); gDPSetEnvColor(POLY_XLU_DISP++, 255, 205, (u8)((100.0f * sp68) + 65.0f), 128); @@ -649,7 +649,7 @@ void Boss06_Draw(Actor* thisx, PlayState* play2) { Matrix_RotateZS(play->gameplayFrames * 64, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); } CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Boss_07/overlay.cfg b/src/overlays/actors/ovl_Boss_07/overlay.cfg deleted file mode 100644 index 79c564ccc..000000000 --- a/src/overlays/actors/ovl_Boss_07/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Boss_07 -z_boss_07.c diff --git a/src/overlays/actors/ovl_Boss_07/z_boss_07.c b/src/overlays/actors/ovl_Boss_07/z_boss_07.c index cfb5c7a56..2506010f0 100644 --- a/src/overlays/actors/ovl_Boss_07/z_boss_07.c +++ b/src/overlays/actors/ovl_Boss_07/z_boss_07.c @@ -594,7 +594,7 @@ void Boss07_Wrath_BlastWhip(Vec3f* bombPos, Vec3f* pos, Vec3f* vel) { impulse.y = push; impulse.z = push; - Matrix_RotateYF(Math_Acot2F(dz, dx), MTXMODE_NEW); + Matrix_RotateYF(Math_Atan2F_XY(dz, dx), MTXMODE_NEW); Matrix_MultVec3f(&impulse, vel); } } @@ -930,7 +930,7 @@ void Boss07_Wrath_Intro(Boss07* this, PlayState* play) { Cutscene_End(play, &play->csCtx); func_800B7298(play, &this->actor, 6); this->actor.flags |= ACTOR_FLAG_1; - func_80165690(); + Play_DisableMotionBlur(); if (sBossRemains[REMAINS_ODOLWA] != NULL) { for (i = 0; i < ARRAY_COUNT(sBossRemains); i++) { func_800BC154(play, &play->actorCtx, &sBossRemains[i]->actor, ACTORCAT_BOSS); @@ -1006,7 +1006,7 @@ void Boss07_Wrath_Death(Boss07* this, PlayState* play) { for (i = 0; i < ARRAY_COUNT(this->deathLightScale); i++) { this->deathLightScale[i] = Boss07_RandZeroOne() - 1.0f; } - func_8016566C(150); + Play_EnableMotionBlur(150); case MAJORAS_WRATH_DEATH_STATE_2: if (this->timer_ABC8 == 20) { Audio_PlaySfxAtPos(&sSfxPoint, NA_SE_EN_LAST2_WALK2_OLD); @@ -1258,7 +1258,7 @@ void Boss07_Wrath_StartJump(Boss07* this, PlayState* play) { this->leftWhip.tension = this->rightWhip.tension = 0.0f; if (this->actionTimer == 1) { this->actor.velocity.y = 35.0f; - this->actor.world.rot.y = Math_Acot2F(-this->actor.world.pos.z, -this->actor.world.pos.x) * (0x8000 / M_PI); + this->actor.world.rot.y = Math_Atan2F_XY(-this->actor.world.pos.z, -this->actor.world.pos.x) * (0x8000 / M_PI); this->actionFunc = Boss07_Wrath_Jump; this->actor.speedXZ = 20.0f; } @@ -1289,7 +1289,7 @@ void Boss07_Wrath_SetupFlip(Boss07* this, PlayState* play) { dx = 0.0f - this->actor.world.pos.x; dz = 0.0f - this->actor.world.pos.z; - temp = this->actor.yawTowardsPlayer - (s16)(Math_Acot2F(dz, dx) * (0x8000 / M_PI)); + temp = this->actor.yawTowardsPlayer - (s16)(Math_Atan2F_XY(dz, dx) * (0x8000 / M_PI)); if (temp < 0) { dx = 200.0f; Animation_MorphToPlayOnce(&this->skelAnime, &gMajorasWrathFlipLeftAnim, -5.0f); @@ -1301,7 +1301,7 @@ void Boss07_Wrath_SetupFlip(Boss07* this, PlayState* play) { Matrix_MultVecX(dx, &sp30); dx = sp30.x - this->actor.world.pos.x; dz = sp30.z - this->actor.world.pos.z; - this->actor.world.rot.y = Math_Acot2F(dz, dx) * (0x8000 / M_PI); + this->actor.world.rot.y = Math_Atan2F_XY(dz, dx) * (0x8000 / M_PI); this->actionTimer = 0; this->actor.speedXZ = 17.0f; } @@ -1338,7 +1338,7 @@ void Boss07_Wrath_SetupSidestep(Boss07* this, PlayState* play) { Animation_MorphToLoop(&this->skelAnime, &gMajorasWrathSidestepAnim, -5.0f); phi_f14 = -this->actor.world.pos.x; phi_f12 = -this->actor.world.pos.z; - sp22 = this->actor.yawTowardsPlayer - (s16)(Math_Acot2F(phi_f12, phi_f14) * (0x8000 / M_PI)); + sp22 = this->actor.yawTowardsPlayer - (s16)(Math_Atan2F_XY(phi_f12, phi_f14) * (0x8000 / M_PI)); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_NEW); if (sp22 < 0) { this->skelAnime.playSpeed = 1.0f; @@ -1923,8 +1923,8 @@ void Boss07_Wrath_WhipCollisionCheck(Vec3f* whipPos, f32 tension, Boss07* this, dy1 = player->actor.world.pos.y - this->rightWhip.basePos.y + 50.0f; dz1 = player->actor.world.pos.z - this->rightWhip.basePos.z; dxz1 = sqrtf(SQ(dx1) + SQ(dz1)); - this->unk_F8C = Math_Acot2F(dz1, dx1); - this->unk_F90 = -Math_Acot2F(dxz1, dy1); + this->unk_F8C = Math_Atan2F_XY(dz1, dx1); + this->unk_F90 = -Math_Atan2F_XY(dxz1, dy1); this->actionFunc = Boss07_Wrath_GrabPlayer; this->actionTimer = 0; this->rightWhip.tension = 0.0f; @@ -2194,7 +2194,7 @@ void Boss07_Wrath_Update(Actor* thisx, PlayState* play2) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->kickCollider.base); } else { if (this->canDodge && Boss07_IsFacingPlayer(this, play)) { - if ((player->unk_D57 == 4) && (player->itemActionParam != PLAYER_AP_BOW_LIGHT)) { + if ((player->unk_D57 == 4) && (player->heldItemAction != PLAYER_IA_BOW_LIGHT)) { if ((this->actor.xzDistToPlayer >= 400.0f) && (Rand_ZeroOne() < 0.5f)) { Boss07_Wrath_SetupSidestep(this, play); } else { @@ -2373,8 +2373,8 @@ void Boss07_Wrath_UpdateWhips(Boss07* this, PlayState* play, Vec3f* base, Vec3f* tempPos.z = pos->z + vel->z - (pos - 1)->z + shapeForce.z + tensForce.z; // calculates the rotation angles from the previous point - segYaw = Math_Acot2F(tempPos.z, tempPos.x); - segPitch = -Math_Acot2F(sqrtf(SQ(tempPos.x) + SQ(tempPos.z)), tempPos.y); + segYaw = Math_Atan2F_XY(tempPos.z, tempPos.x); + segPitch = -Math_Atan2F_XY(sqrtf(SQ(tempPos.x) + SQ(tempPos.z)), tempPos.y); (rot - 1)->y = segYaw; (rot - 1)->x = segPitch; @@ -2634,7 +2634,7 @@ void Boss07_Wrath_DrawShocks(Boss07* this, PlayState* play) { gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 0, 0); if (this->unk_32C > 0.0f) { - gSPDisplayList(POLY_XLU_DISP++, gLightOrb1DL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL); for (i = 0; i < ARRAY_COUNT(this->bodyPartsPos); i++) { Matrix_Translate(this->bodyPartsPos[i].x, this->bodyPartsPos[i].y, this->bodyPartsPos[i].z, MTXMODE_NEW); @@ -2642,7 +2642,7 @@ void Boss07_Wrath_DrawShocks(Boss07* this, PlayState* play) { Matrix_Scale(this->unk_32C, this->unk_32C, this->unk_32C, MTXMODE_APPLY); Matrix_RotateZF(Rand_ZeroFloat(2.0f * M_PI), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); } for (i = this->whipShockIndexHigh; i >= this->whipShockIndexLow; i--) { Matrix_Translate(this->rightWhip.pos[i].x, this->rightWhip.pos[i].y, this->rightWhip.pos[i].z, 0); @@ -2650,11 +2650,11 @@ void Boss07_Wrath_DrawShocks(Boss07* this, PlayState* play) { Matrix_Scale(1.5f, 1.5f, 1.5f, MTXMODE_APPLY); Matrix_RotateZF(Rand_ZeroFloat(2.0f * M_PI), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); } } if (this->unk_330 > 0.0f) { - gSPDisplayList(POLY_XLU_DISP++, gLightOrb2DL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial2DL); for (i = 0; i < 2 * ARRAY_COUNT(this->bodyPartsPos); i++) { Matrix_Translate(this->bodyPartsPos[i / 2].x + randPlusMinusPoint5Scaled(30.0f), this->bodyPartsPos[i / 2].y + randPlusMinusPoint5Scaled(30.0f), @@ -2663,7 +2663,7 @@ void Boss07_Wrath_DrawShocks(Boss07* this, PlayState* play) { Matrix_RotateXFApply(Rand_ZeroFloat(2.0f * M_PI)); Matrix_RotateZF(Rand_ZeroFloat(2.0f * M_PI), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); } } } @@ -2700,7 +2700,7 @@ void Boss07_Wrath_DrawDeathLights(Boss07* this, PlayState* play, Vec3f* pos) { } } func_8012C2DC(play->state.gfxCtx); - gSPDisplayList(POLY_XLU_DISP++, gLightOrb1DL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, (u8)(220 + sREG(18)), (u8)(170 + sREG(16))); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, (u8)(100 + sREG(22)), 128); @@ -2710,7 +2710,7 @@ void Boss07_Wrath_DrawDeathLights(Boss07* this, PlayState* play, Vec3f* pos) { temp_f12_2 = (sREG(17) + 800) * 0.01f * this->deathOrbScale; Matrix_Scale(temp_f12_2, temp_f12_2, 1.0f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); } CLOSE_DISPS(gfxCtx); } @@ -2729,7 +2729,7 @@ void Boss07_Static_DrawLight(Boss07* this, PlayState* play) { func_8012C2DC(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (u8)(sREG(52) + 255)); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 0, 0); - gSPDisplayList(POLY_XLU_DISP++, gLightOrb1DL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL); if (player->transformation == PLAYER_FORM_GORON) { sp54 = -10.0f; @@ -2749,7 +2749,7 @@ void Boss07_Static_DrawLight(Boss07* this, PlayState* play) { Matrix_Scale(this->introOrbScale, this->introOrbScale, this->introOrbScale, MTXMODE_APPLY); Matrix_RotateZS(play->gameplayFrames * 0x40, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); } CLOSE_DISPS(gfxCtx); } @@ -2771,7 +2771,7 @@ void Boss07_Wrath_Draw(Actor* thisx, PlayState* play2) { SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, Boss07_Wrath_OverrideLimbDraw, Boss07_Wrath_PostLimbDraw, Boss07_Wrath_TransformLimbDraw, &this->actor); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); if (((KREG(63) == 0) || (KREG(63) == 2)) && this->updateWhips) { Boss07_Wrath_UpdateWhips(this, play, &this->rightWhip.basePos, this->rightWhip.pos, this->rightWhip.rot, @@ -3026,7 +3026,7 @@ void Boss07_Incarnation_Intro(Boss07* this, PlayState* play) { this->timer_ABC8 = 0; this->subCamSpeedMod = 0.0f; this->animEndFrame = 1000.0f; - func_80165690(); + Play_DisableMotionBlur(); } break; case MAJORAS_INCARNATION_INTRO_STATE_5: @@ -3416,7 +3416,7 @@ void Boss07_Incarnation_Death(Boss07* this, PlayState* play) { Play_ChangeCameraStatus(play, this->subCamIndex, CAM_STATUS_ACTIVE); this->timer_ABC8 = 0; this->csState = MAJORAS_INCARNATION_DEATH_STATE_10; - func_8016566C(150); + Play_EnableMotionBlur(150); case MAJORAS_INCARNATION_DEATH_STATE_10: sHeartbeatTimer = 5; this->subCamNextEye.x = 0.0f; @@ -3672,7 +3672,7 @@ void Boss07_Afterimage_Draw(Actor* thisx, PlayState* play2) { POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 0, 0, 100, 155, 900, 1099); SkelAnime_DrawFlexOpa(play, sp34->skelAnime.skeleton, this->skelAnime.jointTable, sp34->skelAnime.dListCount, NULL, NULL, &this->actor); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); CLOSE_DISPS(play->state.gfxCtx); } @@ -3799,7 +3799,7 @@ void Boss07_Incarnation_Draw(Actor* thisx, PlayState* play2) { SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, Boss07_Incarnation_OverrideLimbDraw, Boss07_Incarnation_PostLimbDraw, Boss07_Incarnation_TransformLimbDraw, &this->actor); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, 0xF, this->unk_17F8, this->unk_17FC, this->unk_1800, this->unk_1804); CLOSE_DISPS(play->state.gfxCtx); @@ -4085,7 +4085,7 @@ void Boss07_Mask_Beam(Boss07* this, PlayState* play) { Boss07_SmoothStop(this, 0.5f); Math_ApproachF(&this->actor.world.pos.y, 300.0f, 0.05f, 1.0f); Math_ApproachS(&this->actor.shape.rot.z, 0, 0xA, 0x400); - if ((player->unk_730 != NULL) && (player->stateFlags1 & PLAYER_STATE1_400000)) { + if ((player->targetedActor != NULL) && (player->stateFlags1 & PLAYER_STATE1_400000)) { phi_f24 = (player->transformation == PLAYER_FORM_HUMAN) ? 20 : 30.0f; } else { phi_f24 = (player->transformation == PLAYER_FORM_HUMAN) ? 8.0f : 15.0f; @@ -4326,7 +4326,7 @@ void Boss07_Mask_Beam(Boss07* this, PlayState* play) { player->flameTimers[pad2] = Rand_S16Offset(0, 200); } player->isBurning = true; - func_800B8E58(player, player->ageProperties->unk_92 + NA_SE_VO_LI_DEMO_DAMAGE); + func_800B8E58(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DEMO_DAMAGE); } } if (sp14B) { @@ -4362,7 +4362,7 @@ void Boss07_Mask_SetupIntro(Boss07* this, PlayState* play) { this->actor.world.pos.y = 300.0f; this->actor.world.pos.z = -922.5f; this->motionBlurAlpha = KREG(75) + 150; - func_8016566C(this->motionBlurAlpha); + Play_EnableMotionBlur(this->motionBlurAlpha); } static Vec3s sIntroCamEyes[4] = { @@ -4588,7 +4588,7 @@ void Boss07_Mask_Intro(Boss07* this, PlayState* play) { func_800B7298(play, &this->actor, 6); this->actor.flags |= ACTOR_FLAG_1; gSaveContext.eventInf[6] |= 2; - func_80165690(); + Play_DisableMotionBlur(); } } else if ((this->timer_ABC8 % 2) != 0) { this->actor.world.pos.x += 2.0f; @@ -4615,7 +4615,7 @@ void Boss07_Mask_SetupDeath(Boss07* this, PlayState* play) { this->actionFunc = Boss07_Mask_Death; Animation_MorphToLoop(&this->skelAnime, &gMajorasMaskJerkingAnim, -10.0f); this->actor.world.rot.y = this->actor.shape.rot.y = - Math_Acot2F(-this->actor.world.pos.z, -this->actor.world.pos.x) * (0x8000 / M_PI); + Math_Atan2F_XY(-this->actor.world.pos.z, -this->actor.world.pos.x) * (0x8000 / M_PI); this->csState = MAJORAS_MASK_DEATH_STATE_0; this->timer_ABC8 = 0; this->actor.flags &= ~ACTOR_FLAG_1; @@ -4649,7 +4649,7 @@ void Boss07_Mask_Death(Boss07* this, PlayState* play) { this->csState = MAJORAS_MASK_DEATH_STATE_1; this->subCamNextAt.z = 0.0f; this->timer_18D6 = 120; - func_8016566C(150); + Play_EnableMotionBlur(150); this->subCamNextEye.x = 0.0f; this->subCamNextEye.y = -30.0f; this->subCamNextEye.z = 270.0f; @@ -4939,9 +4939,9 @@ void Boss07_Mask_UpdateTentacles(Boss07* this, PlayState* play, Vec3f* base, Vec temp_f22 = phi_f2 - (pos - 1)->y; temp_f20 = pos->z + vel->z - (pos - 1)->z + sp80.x; - temp_f26 = Math_Acot2F(temp_f20, temp_f24); + temp_f26 = Math_Atan2F_XY(temp_f20, temp_f24); temp2 = sqrtf(SQ(temp_f24) + SQ(temp_f20)); - temp1 = -Math_Acot2F(temp2, temp_f22); + temp1 = -Math_Atan2F_XY(temp2, temp_f22); (rot - 1)->y = temp_f26; (rot - 1)->x = temp1; Matrix_RotateYF(temp_f26, MTXMODE_NEW); @@ -5011,7 +5011,7 @@ void Boss07_Mask_DrawBeam(Boss07* this, PlayState* play) { Matrix_Scale(this->beamXYscale * 0.05f, this->beamXYscale * 0.05f, this->eyeBeamsZscale * 0.05f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gMajorasMaskBeamDL); - gSPDisplayList(POLY_XLU_DISP++, gLightOrb1DL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL); Matrix_Pop(); Matrix_Translate(0.0f, 0.0f, 1200.0f, MTXMODE_APPLY); @@ -5020,12 +5020,12 @@ void Boss07_Mask_DrawBeam(Boss07* this, PlayState* play) { this->beamFocusOrbScale * 40.0f * this->beamXYscale, 0.0f, MTXMODE_APPLY); Matrix_RotateZS(this->actionTimer * 0x100, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 60, sREG(89) + 80); Matrix_Scale(6.0f, 6.0f, 0.0f, MTXMODE_APPLY); Matrix_RotateZS(0x4000, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 60, 200); Matrix_Pop(); @@ -5054,8 +5054,8 @@ void Boss07_Mask_DrawBeam(Boss07* this, PlayState* play) { Matrix_Scale(this->beamXYscale * 5.0f, this->beamXYscale * 5.0f, 0.0f, MTXMODE_APPLY); Matrix_RotateZS(this->actionTimer * 0x100, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gLightOrb1DL); - gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); } } CLOSE_DISPS(play->state.gfxCtx); @@ -5090,7 +5090,7 @@ void Boss07_Mask_Draw(Actor* thisx, PlayState* play2) { gSPSegment(POLY_OPA_DISP++, 8, Lib_SegmentedToVirtual(D_80A082E0[this->maskEyeState])); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, Boss07_Mask_PostLimbDraw, &this->actor); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); gSPDisplayList(POLY_OPA_DISP++, gMajorasMaskTentacleMaterialDL); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 155, 155, 80, 255); @@ -5208,8 +5208,8 @@ void Boss07_Projectile_Draw(Actor* thisx, PlayState* play2) { Matrix_ReplaceRotation(&play->billboardMtxF); Matrix_RotateZS(this->actor.shape.rot.z, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gLightOrb1DL); - gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); CLOSE_DISPS(play->state.gfxCtx); } @@ -5555,7 +5555,7 @@ void Boss07_Remains_Draw(Actor* thisx, PlayState* play2) { gSPDisplayList(POLY_OPA_DISP++, gBossMaskTwinmoldDL); break; } - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); if (this->actionFunc == Boss07_Remains_Intro) { gDPPipeSync(POLY_XLU_DISP++); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 200, 200); @@ -5566,8 +5566,8 @@ void Boss07_Remains_Draw(Actor* thisx, PlayState* play2) { Matrix_ReplaceRotation(&play->billboardMtxF); Matrix_RotateZS(this->remainsOrbRot, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gLightOrb1DL); - gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); } CLOSE_DISPS(play->state.gfxCtx); } @@ -5852,8 +5852,8 @@ void Boss07_Top_Draw(Actor* thisx, PlayState* play2) { Matrix_RotateYF(this->topSpinAngle, MTXMODE_APPLY); Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, gMajorasWrathTopDL); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + gSPDisplayList(POLY_OPA_DISP++, gMajorasWrathSpinningTopDL); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); CLOSE_DISPS(play->state.gfxCtx); } @@ -5895,7 +5895,7 @@ void Boss07_Static_Update(Actor* thisx, PlayState* play2) { Play_ChangeCameraStatus(play, this->subCamIndex, CAM_STATUS_ACTIVE); this->timer_ABC8 = 0; this->csState = MAJORAS_STATIC_CS_STATE_2; - func_8016566C(150); + Play_EnableMotionBlur(150); this->subCamEye.x = sBossRemains[REMAINS_ODOLWA]->actor.world.pos.x * 0.7f; this->subCamEye.y = sBossRemains[REMAINS_ODOLWA]->actor.world.pos.y * 0.7f; this->subCamEye.z = sBossRemains[REMAINS_ODOLWA]->actor.world.pos.z * 0.7f; @@ -5970,7 +5970,7 @@ void Boss07_Static_Update(Actor* thisx, PlayState* play2) { this->subCamIndex = SUB_CAM_ID_DONE; Cutscene_End(play, &play->csCtx); func_800B7298(play, &this->actor, 6); - func_80165690(); + Play_DisableMotionBlur(); for (i = 0; i < ARRAY_COUNT(sBossRemains); i++) { func_800BC154(play, &play->actorCtx, &sBossRemains[i]->actor, ACTORCAT_ENEMY); } diff --git a/src/overlays/actors/ovl_Boss_Hakugin/overlay.cfg b/src/overlays/actors/ovl_Boss_Hakugin/overlay.cfg deleted file mode 100644 index 059dde381..000000000 --- a/src/overlays/actors/ovl_Boss_Hakugin/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Boss_Hakugin -z_boss_hakugin.c diff --git a/src/overlays/actors/ovl_Demo_Effect/overlay.cfg b/src/overlays/actors/ovl_Demo_Effect/overlay.cfg deleted file mode 100644 index 8f2105acf..000000000 --- a/src/overlays/actors/ovl_Demo_Effect/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Demo_Effect -z_demo_effect.c diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c index 279a4f0d0..cb34f8ff8 100644 --- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c +++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c @@ -309,13 +309,13 @@ void func_808CE078(Actor* thisx, PlayState* play2) { Matrix_RotateZS(zRot, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_023288); + gSPDisplayList(POLY_XLU_DISP++, gEffFlash2DL); Matrix_Pop(); Matrix_RotateZS(-zRot, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_023288); + gSPDisplayList(POLY_XLU_DISP++, gEffFlash2DL); CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Demo_Getitem/overlay.cfg b/src/overlays/actors/ovl_Demo_Getitem/overlay.cfg deleted file mode 100644 index df09fe2ea..000000000 --- a/src/overlays/actors/ovl_Demo_Getitem/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Demo_Getitem -z_demo_getitem.c diff --git a/src/overlays/actors/ovl_Demo_Kankyo/overlay.cfg b/src/overlays/actors/ovl_Demo_Kankyo/overlay.cfg deleted file mode 100644 index b9c10f311..000000000 --- a/src/overlays/actors/ovl_Demo_Kankyo/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Demo_Kankyo -z_demo_kankyo.c diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c index 8b396cad9..c1303efab 100644 --- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c +++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c @@ -639,7 +639,7 @@ void DemoKankyo_DrawMoonAndGiant(Actor* thisx, PlayState* play2) { break; } - gSPDisplayList(POLY_XLU_DISP++, &gLightOrb1DL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); @@ -651,7 +651,7 @@ void DemoKankyo_DrawMoonAndGiant(Actor* thisx, PlayState* play2) { if (this->actor.params == DEMO_KANKYO_TYPE_GIANTS) { gSPDisplayList(POLY_XLU_DISP++, gBubbleDL); } else { - gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); } } } diff --git a/src/overlays/actors/ovl_Demo_Moonend/overlay.cfg b/src/overlays/actors/ovl_Demo_Moonend/overlay.cfg deleted file mode 100644 index 3d2793e42..000000000 --- a/src/overlays/actors/ovl_Demo_Moonend/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Demo_Moonend -z_demo_moonend.c diff --git a/src/overlays/actors/ovl_Demo_Shd/overlay.cfg b/src/overlays/actors/ovl_Demo_Shd/overlay.cfg deleted file mode 100644 index 0cf96d92a..000000000 --- a/src/overlays/actors/ovl_Demo_Shd/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Demo_Shd -z_demo_shd.c diff --git a/src/overlays/actors/ovl_Demo_Syoten/overlay.cfg b/src/overlays/actors/ovl_Demo_Syoten/overlay.cfg deleted file mode 100644 index 8fde4e6f6..000000000 --- a/src/overlays/actors/ovl_Demo_Syoten/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Demo_Syoten -z_demo_syoten.c diff --git a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c index 853d91cb9..60f9e898b 100644 --- a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c +++ b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c @@ -480,16 +480,16 @@ s32 func_80C170F8(PlayState* play, UNK_TYPE arg1, s32 arg2, UNK_TYPE arg3, UNK_T void func_80C173B4(Actor* thisx, PlayState* play) { s32 pad; DemoSyoten* this = THIS; - Mtx* matrix; + Mtx* mtx; AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(&object_syoten_Matanimheader_001298)); - matrix = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(sizeof(Mtx) * this->unk_144.unk_18->unk_1)); + mtx = GRAPH_ALLOC(play->state.gfxCtx, this->unk_144.unk_18->unk_1 * sizeof(Mtx)); - if (matrix != NULL) { + if (mtx != NULL) { func_8012C2DC(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); - func_8018450C(play, &this->unk_144, matrix, (void*)func_80C170F8, 0, &this->actor); + func_8018450C(play, &this->unk_144, mtx, (void*)func_80C170F8, 0, &this->actor); } } diff --git a/src/overlays/actors/ovl_Demo_Tre_Lgt/overlay.cfg b/src/overlays/actors/ovl_Demo_Tre_Lgt/overlay.cfg deleted file mode 100644 index a063264ea..000000000 --- a/src/overlays/actors/ovl_Demo_Tre_Lgt/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Demo_Tre_Lgt -z_demo_tre_lgt.c diff --git a/src/overlays/actors/ovl_Dm_Ah/overlay.cfg b/src/overlays/actors/ovl_Dm_Ah/overlay.cfg deleted file mode 100644 index 22f1cf7a3..000000000 --- a/src/overlays/actors/ovl_Dm_Ah/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Ah -z_dm_ah.c diff --git a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c index 047d17b90..1a1f4ae22 100644 --- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c +++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c @@ -52,7 +52,7 @@ void func_80C1D458(DmAh* this) { } } -s32 func_80C1D4D0(DmAh* this, s32 arg1) { +s32 func_80C1D4D0(DmAh* this, PlayState* play) { s32 pad; Vec3f sp40; Vec3f sp34; diff --git a/src/overlays/actors/ovl_Dm_Al/overlay.cfg b/src/overlays/actors/ovl_Dm_Al/overlay.cfg deleted file mode 100644 index 92999ffdd..000000000 --- a/src/overlays/actors/ovl_Dm_Al/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Al -z_dm_al.c diff --git a/src/overlays/actors/ovl_Dm_An/overlay.cfg b/src/overlays/actors/ovl_Dm_An/overlay.cfg deleted file mode 100644 index 03f82edfa..000000000 --- a/src/overlays/actors/ovl_Dm_An/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_An -z_dm_an.c diff --git a/src/overlays/actors/ovl_Dm_Bal/overlay.cfg b/src/overlays/actors/ovl_Dm_Bal/overlay.cfg deleted file mode 100644 index fa51bac6a..000000000 --- a/src/overlays/actors/ovl_Dm_Bal/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Bal -z_dm_bal.c diff --git a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c index e2dc0daa7..b9c4cb33c 100644 --- a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c +++ b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c @@ -15,8 +15,8 @@ void DmBal_Destroy(Actor* thisx, PlayState* play); void DmBal_Update(Actor* thisx, PlayState* play); void DmBal_Draw(Actor* thisx, PlayState* play); -void func_80C1EAC4(DmBal* this); -void func_80C1EAD8(DmBal* this, PlayState* play); +void DmBal_SetupDoNothing(DmBal* this); +void DmBal_DoNothing(DmBal* this, PlayState* play); ActorInit Dm_Bal_InitVars = { ACTOR_DM_BAL, @@ -59,18 +59,18 @@ void DmBal_Init(Actor* thisx, PlayState* play) { Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); this->timer = 60; this->eyeIndex = 0; - this->unk_336 = 0; - func_80C1EAC4(this); + this->keepEyesShut = false; + DmBal_SetupDoNothing(this); } void DmBal_Destroy(Actor* thisx, PlayState* play) { } -void func_80C1EAC4(DmBal* this) { - this->actionFunc = func_80C1EAD8; +void DmBal_SetupDoNothing(DmBal* this) { + this->actionFunc = DmBal_DoNothing; } -void func_80C1EAD8(DmBal* this, PlayState* play) { +void DmBal_DoNothing(DmBal* this, PlayState* play) { } void func_80C1EAE8(DmBal* this, PlayState* play) { @@ -84,12 +84,12 @@ void func_80C1EAE8(DmBal* this, PlayState* play) { D_80C1F2C0 = play->csCtx.actorActions[actionIndex]->action; switch (play->csCtx.actorActions[actionIndex]->action) { case 1: - this->unk_336 = 0; + this->keepEyesShut = false; this->eyeIndex = 0; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); break; case 2: - this->unk_336 = 1; + this->keepEyesShut = true; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 12); break; case 3: @@ -98,34 +98,34 @@ void func_80C1EAE8(DmBal* this, PlayState* play) { } } else if (D_80C1F2C0 == 3) { if (Animation_OnFrame(&this->skelAnime, 0.0f)) { - this->unk_336 = 1; + this->keepEyesShut = true; } else if (Animation_OnFrame(&this->skelAnime, 29.0f)) { - this->unk_336 = 0; + this->keepEyesShut = false; this->eyeIndex = 0; } } Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex); this->actor.home.pos = this->actor.world.pos; } else { - this->unk_336 = 0; + this->keepEyesShut = false; this->eyeIndex = 0; D_80C1F2C0 = 0x63; } } void func_80C1EC60(DmBal* this, PlayState* play) { - f32 temp_fv1_2; + f32 scaleX; this->unk_338 += 0x320; this->unk_33A += 0x3E8; this->scale.y = this->scale.z = Math_CosS(this->unk_338) * 0.1f + 1.0f; - temp_fv1_2 = (Math_SinS(this->unk_338) * 0.1f) + 1.0f; - this->scale.x = SQ(temp_fv1_2); + scaleX = (Math_SinS(this->unk_338) * 0.1f) + 1.0f; + this->scale.x = SQ(scaleX); this->actor.world.pos.y = this->actor.home.pos.y + (Math_SinS(this->unk_338) * 25.0f); } -void func_80C1ED0C(DmBal* this) { - if (this->unk_336 == 1) { +void DmBal_UpdateEyes(DmBal* this) { + if (this->keepEyesShut == true) { this->eyeIndex = 1; } else if (this->timer >= 4) { this->timer--; @@ -138,38 +138,36 @@ void func_80C1ED0C(DmBal* this) { } } -void func_80C1ED64(DmBal* this, PlayState* play, Vec3f* arg2, Vec3f* arg3, f32 arg4) { - Actor* paper = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_PAPER, arg2->x, arg2->y, arg2->z, 0, 0, 0, 0); +void DmBal_SpawnPaper(DmBal* this, PlayState* play, Vec3f* pos, Vec3f* vel, f32 gravity) { + Actor* paper = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_PAPER, pos->x, pos->y, pos->z, 0, 0, 0, 0); if (paper != NULL) { - paper->velocity = *arg3; - paper->gravity = arg4; + paper->velocity = *vel; + paper->gravity = gravity; } } -Vec3f D_80C1F2C4 = { 0.0f, 9.0f, 0.0f }; - void DmBal_Update(Actor* thisx, PlayState* play) { s32 pad; DmBal* this = THIS; - Vec3f sp3C; - Vec3f sp30; + // Throw confetti if (Animation_OnFrame(&this->skelAnime, 29.0f) && (this->skelAnime.animation == &object_bal_Anim_001804)) { - sp3C = this->actor.world.pos; - sp30 = D_80C1F2C4; - sp3C.x += 7.0f * Math_SinS(this->actor.shape.rot.y); - sp3C.y += 2.5f; - sp3C.z += 7.0f * Math_CosS(this->actor.shape.rot.y); - sp30.x = Math_SinS(this->actor.shape.rot.y) * 5.0f; - sp30.z = Math_CosS(this->actor.shape.rot.y) * 5.0f; - func_80C1ED64(this, play, &sp3C, &sp30, -0.4f); - func_80C1ED64(this, play, &sp3C, &sp30, -0.5f); + Vec3f pos = this->actor.world.pos; + Vec3f vel = { 0.0f, 9.0f, 0.0f }; + + pos.x += 7.0f * Math_SinS(this->actor.shape.rot.y); + pos.y += 2.5f; + pos.z += 7.0f * Math_CosS(this->actor.shape.rot.y); + vel.x = Math_SinS(this->actor.shape.rot.y) * 5.0f; + vel.z = Math_CosS(this->actor.shape.rot.y) * 5.0f; + DmBal_SpawnPaper(this, play, &pos, &vel, -0.4f); + DmBal_SpawnPaper(this, play, &pos, &vel, -0.5f); } this->actionFunc(this, play); func_80C1EAE8(this, play); func_80C1EC60(this, play); - func_80C1ED0C(this); + DmBal_UpdateEyes(this); SkelAnime_Update(&this->skelAnime); } @@ -178,8 +176,8 @@ s32 DmBal_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p Vec3s rots; if (limbIndex == 6) { - rots.x = Math_SinS(this->unk_33A) * 3640.0f; - rots.z = Math_CosS(this->unk_33A) * 3640.0f; + rots.x = Math_SinS(this->unk_33A) * (0x10000 / 18); + rots.z = Math_CosS(this->unk_33A) * (0x10000 / 18); Matrix_RotateZYX(rots.x, 0, rots.z, MTXMODE_APPLY); Matrix_Scale(this->scale.x, this->scale.y, this->scale.z, MTXMODE_APPLY); Matrix_RotateZS(-rots.z, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.h b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.h index 7b3835653..01f10d4c9 100644 --- a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.h +++ b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.h @@ -18,7 +18,7 @@ typedef struct DmBal { /* 0x19C */ Vec3s morphTable[OBJECT_BAL_LIMB_MAX]; /* 0x328 */ UNK_TYPE1 pad_328[12]; /* 0x334 */ s16 timer; - /* 0x336 */ s16 unk_336; + /* 0x336 */ s16 keepEyesShut; /* 0x338 */ s16 unk_338; /* 0x33A */ s16 unk_33A; } DmBal; /* size = 0x33C */ diff --git a/src/overlays/actors/ovl_Dm_Char00/overlay.cfg b/src/overlays/actors/ovl_Dm_Char00/overlay.cfg deleted file mode 100644 index 0d49d3bbc..000000000 --- a/src/overlays/actors/ovl_Dm_Char00/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Char00 -z_dm_char00.c diff --git a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c index 95aef1835..43cc62603 100644 --- a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c +++ b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c @@ -912,7 +912,7 @@ void DmChar00_Draw(Actor* thisx, PlayState* play2) { DmChar00* this = THIS; s32 phi_a0; s32 pad; - Gfx* gfx = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Gfx) * 4); + Gfx* gfx = GRAPH_ALLOC(play->state.gfxCtx, 4 * sizeof(Gfx)); if ((play->csCtx.state == 0) && ((play->sceneId != SCENE_OPENINGDAN) || (gSaveContext.sceneLayer != 0) || (play->roomCtx.curRoom.num != 0) || diff --git a/src/overlays/actors/ovl_Dm_Char01/overlay.cfg b/src/overlays/actors/ovl_Dm_Char01/overlay.cfg deleted file mode 100644 index babdfc2f2..000000000 --- a/src/overlays/actors/ovl_Dm_Char01/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Char01 -z_dm_char01.c diff --git a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c index fb68b17c6..069d829c1 100644 --- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c +++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c @@ -67,7 +67,7 @@ void DmChar01_Init(Actor* thisx, PlayState* play) { switch (DMCHAR01_GET(&this->dyna.actor)) { case DMCHAR01_0: - if (gSaveContext.save.weekEventReg[20] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { this->unk_34C = 2; this->actionFunc = func_80AA8F1C; break; @@ -97,7 +97,7 @@ void DmChar01_Init(Actor* thisx, PlayState* play) { break; case DMCHAR01_1: - if ((gSaveContext.save.weekEventReg[20] & 2) || (gSaveContext.sceneLayer == 1)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02) || (gSaveContext.sceneLayer == 1)) { this->unk_34C = 1; this->actionFunc = func_80AA8F1C; } else { @@ -107,7 +107,7 @@ void DmChar01_Init(Actor* thisx, PlayState* play) { case DMCHAR01_2: this->unk_34C = 0; - if (!(gSaveContext.save.weekEventReg[20] & 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_20_01)) { this->unk_34C = 1; this->dyna.actor.world.pos.y -= 400.0f; } @@ -123,7 +123,7 @@ void DmChar01_Init(Actor* thisx, PlayState* play) { case DMCHAR01_3: this->dyna.actor.world.rot.y += 0x8000; this->dyna.actor.shape.rot.y += 0x8000; - if (!(gSaveContext.save.weekEventReg[20] & 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_20_01)) { Actor_Kill(&this->dyna.actor); return; } @@ -134,7 +134,7 @@ void DmChar01_Init(Actor* thisx, PlayState* play) { DynaPolyActor_LoadMesh(play, &this->dyna, &gWoodfallSceneryTempleRampAndPlatformCol); this->unk_34D = true; - if (!(gSaveContext.save.weekEventReg[20] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { this->actionFunc = func_80AA9020; this->dyna.actor.world.pos.y -= 120.0f; } else { @@ -160,7 +160,7 @@ void func_80AA8698(DmChar01* this, PlayState* play) { Player* player = GET_PLAYER(play); Player* player2 = GET_PLAYER(play); - if (gSaveContext.save.weekEventReg[20] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_01)) { return; } @@ -180,7 +180,7 @@ void func_80AA8698(DmChar01* this, PlayState* play) { if ((player2->actor.world.pos.x > -40.0f) && (player2->actor.world.pos.x < 40.0f) && (player2->actor.world.pos.z > 1000.0f) && (player2->actor.world.pos.z < 1078.0f)) { - gSaveContext.save.weekEventReg[20] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_20_01); this->actionFunc = func_80AA884C; } } @@ -348,7 +348,7 @@ void func_80AA9020(DmChar01* this, PlayState* play) { CsCmdActorAction* temp_v1 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 135)]; if ((temp_v1->startFrame == play->csCtx.frames) && (temp_v1->action == 2)) { - gSaveContext.save.weekEventReg[20] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_20_02); this->actionFunc = func_80AA90AC; } } @@ -406,18 +406,18 @@ void DmChar01_Draw(Actor* thisx, PlayState* play) { case DMCHAR01_0: switch (this->unk_34C) { case 0: - AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWoodfallSceneryPoisonWaterTexAnim)); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWoodfallSceneryPoisonWaterTexAnim)); Gfx_DrawDListOpa(play, gWoodfallSceneryPoisonWaterDL); break; case 1: if (gSaveContext.sceneLayer == 1) { - AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWoodfallSceneryPurifiedWaterTexAnim)); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWoodfallSceneryPurifiedWaterTexAnim)); Gfx_DrawDListOpa(play, gWoodfallSceneryFloorDL); Gfx_DrawDListXlu(play, gWoodfallSceneryPurifiedWaterDL); Matrix_Translate(0.0f, 10.0f, 0.0f, MTXMODE_APPLY); } - AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWoodfallSceneryDynamicPoisonWaterTexAnim)); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWoodfallSceneryDynamicPoisonWaterTexAnim)); OPEN_DISPS(play->state.gfxCtx); @@ -451,7 +451,7 @@ void DmChar01_Draw(Actor* thisx, PlayState* play) { break; case 2: - AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWoodfallSceneryPurifiedWaterTexAnim)); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWoodfallSceneryPurifiedWaterTexAnim)); Gfx_DrawDListOpa(play, gWoodfallSceneryFloorDL); Gfx_DrawDListXlu(play, gWoodfallSceneryPurifiedWaterDL); break; @@ -461,23 +461,23 @@ void DmChar01_Draw(Actor* thisx, PlayState* play) { case DMCHAR01_1: switch (this->unk_34C) { case 0: - AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWoodfallSceneryPoisonWallsTexAnim)); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWoodfallSceneryPoisonWallsTexAnim)); Gfx_DrawDListOpa(play, gWoodfallSceneryPoisonWallsDL); break; case 1: - AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWoodfallSceneryPurifiedWallsTexAnim)); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWoodfallSceneryPurifiedWallsTexAnim)); Gfx_DrawDListOpa(play, gWoodfallSceneryPurifiedWallsDL); break; } break; case DMCHAR01_2: - AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWoodfallSceneryTempleTexAnim)); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWoodfallSceneryTempleTexAnim)); Gfx_DrawDListOpa(play, gWoodfallSceneryTempleDL); if ((this->unk_34C != 0) && ((u8)this->unk_348 != 0)) { - AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWoodfallSceneryWaterFlowingOverTempleTexAnim)); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWoodfallSceneryWaterFlowingOverTempleTexAnim)); OPEN_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Dm_Char02/overlay.cfg b/src/overlays/actors/ovl_Dm_Char02/overlay.cfg deleted file mode 100644 index b5c165061..000000000 --- a/src/overlays/actors/ovl_Dm_Char02/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Char02 -z_dm_char02.c diff --git a/src/overlays/actors/ovl_Dm_Char03/overlay.cfg b/src/overlays/actors/ovl_Dm_Char03/overlay.cfg deleted file mode 100644 index dd50d58fa..000000000 --- a/src/overlays/actors/ovl_Dm_Char03/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Char03 -z_dm_char03.c diff --git a/src/overlays/actors/ovl_Dm_Char04/overlay.cfg b/src/overlays/actors/ovl_Dm_Char04/overlay.cfg deleted file mode 100644 index a8f5bd501..000000000 --- a/src/overlays/actors/ovl_Dm_Char04/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Char04 -z_dm_char04.c diff --git a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c index 12165ed89..5c835152d 100644 --- a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c +++ b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c @@ -129,7 +129,7 @@ s32 DmChar04_OverrideLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3 } void DmChar04_Draw(Actor* thisx, PlayState* play) { - Gfx* gfx = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Gfx) * 4); + Gfx* gfx = GRAPH_ALLOC(play->state.gfxCtx, 4 * sizeof(Gfx)); s32 alpha; s32 pad; DmChar04* this = THIS; diff --git a/src/overlays/actors/ovl_Dm_Char05/overlay.cfg b/src/overlays/actors/ovl_Dm_Char05/overlay.cfg deleted file mode 100644 index cb8b10bcc..000000000 --- a/src/overlays/actors/ovl_Dm_Char05/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Char05 -z_dm_char05.c diff --git a/src/overlays/actors/ovl_Dm_Char06/overlay.cfg b/src/overlays/actors/ovl_Dm_Char06/overlay.cfg deleted file mode 100644 index 8c0666c9b..000000000 --- a/src/overlays/actors/ovl_Dm_Char06/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Char06 -z_dm_char06.c diff --git a/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c b/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c index 4013293fb..0385a82d4 100644 --- a/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c +++ b/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c @@ -37,7 +37,7 @@ void DmChar06_SetupAction(DmChar06* this, DmChar06ActionFunc actionFunc) { void DmChar06_Init(Actor* thisx, PlayState* play) { DmChar06* this = THIS; - gSaveContext.save.weekEventReg[33] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_33_80); Actor_SetScale(&this->actor, 1.0f); this->alpha = 255; DmChar06_SetupAction(this, func_80AAE6F0); diff --git a/src/overlays/actors/ovl_Dm_Char07/overlay.cfg b/src/overlays/actors/ovl_Dm_Char07/overlay.cfg deleted file mode 100644 index 5b5ad5acd..000000000 --- a/src/overlays/actors/ovl_Dm_Char07/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Char07 -z_dm_char07.c diff --git a/src/overlays/actors/ovl_Dm_Char08/overlay.cfg b/src/overlays/actors/ovl_Dm_Char08/overlay.cfg deleted file mode 100644 index 5f69d0c82..000000000 --- a/src/overlays/actors/ovl_Dm_Char08/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Char08 -z_dm_char08.c diff --git a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c index 46bee748c..4129adfbe 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -164,7 +164,7 @@ void DmChar08_Init(Actor* thisx, PlayState* play2) { this->targetYPos = thisx->world.pos.y; this->unk_1F0 = 0.0f; if (play->sceneId == SCENE_31MISAKI) { - if (gSaveContext.save.weekEventReg[53] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_20)) { DynaPolyActor_Init(&this->dyna, 3); DynaPolyActor_LoadMesh(play, &this->dyna, &gTurtleZoraCapeAwakeCol); } else { @@ -185,7 +185,7 @@ void DmChar08_Init(Actor* thisx, PlayState* play2) { switch (play->sceneId) { case SCENE_31MISAKI: - if (gSaveContext.save.weekEventReg[53] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_20)) { thisx->world.pos.x = -6480.0f; this->targetYPos = -120.0f; thisx->world.pos.z = 1750.0f; @@ -279,14 +279,14 @@ void DmChar08_SetupAppearCs(DmChar08* this, PlayState* play) { s16 cs = ActorCutscene_GetAdditionalCutscene( ActorCutscene_GetAdditionalCutscene(ActorCutscene_GetAdditionalCutscene(cs1))); - if (gSaveContext.save.weekEventReg[93] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_08)) { cs1 = cs; } if (ActorCutscene_GetCanPlayNext(cs1)) { ActorCutscene_Start(cs1, &this->dyna.actor); - gSaveContext.save.weekEventReg[53] |= 0x20; - gSaveContext.save.weekEventReg[93] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_53_20); + SET_WEEKEVENTREG(WEEKEVENTREG_93_08); DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); this->actionFunc = func_80AAF884; } else { @@ -329,10 +329,10 @@ void func_80AAFA18(DmChar08* this, PlayState* play) { nextCs2 = nextCs1; nextCs1 = ActorCutscene_GetAdditionalCutscene(nextCs1); - nextCs = ((void)0, gSaveContext.save.weekEventReg[53] & 0x40) ? nextCs1 : nextCs2; + nextCs = CHECK_WEEKEVENTREG(WEEKEVENTREG_53_40) ? nextCs1 : nextCs2; if (ActorCutscene_GetCanPlayNext(nextCs) != 0) { - gSaveContext.save.weekEventReg[53] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_53_40); ActorCutscene_Start(nextCs, &this->dyna.actor); this->actionFunc = DmChar08_DoNothing; } else { @@ -390,7 +390,7 @@ void DmChar08_SpawnBubbles(DmChar08* this, PlayState* play) { void func_80AAFCCC(DmChar08* this, PlayState* play) { switch (play->sceneId) { case SCENE_31MISAKI: - if (!(gSaveContext.save.weekEventReg[55] & 0x80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { switch (this->unk_206) { case 0: break; diff --git a/src/overlays/actors/ovl_Dm_Char09/overlay.cfg b/src/overlays/actors/ovl_Dm_Char09/overlay.cfg deleted file mode 100644 index 99eda9b12..000000000 --- a/src/overlays/actors/ovl_Dm_Char09/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Char09 -z_dm_char09.c diff --git a/src/overlays/actors/ovl_Dm_Gm/overlay.cfg b/src/overlays/actors/ovl_Dm_Gm/overlay.cfg deleted file mode 100644 index e12011867..000000000 --- a/src/overlays/actors/ovl_Dm_Gm/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Gm -z_dm_gm.c diff --git a/src/overlays/actors/ovl_Dm_Hina/overlay.cfg b/src/overlays/actors/ovl_Dm_Hina/overlay.cfg deleted file mode 100644 index 824085b3e..000000000 --- a/src/overlays/actors/ovl_Dm_Hina/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Hina -z_dm_hina.c diff --git a/src/overlays/actors/ovl_Dm_Nb/overlay.cfg b/src/overlays/actors/ovl_Dm_Nb/overlay.cfg deleted file mode 100644 index 7af01c8cc..000000000 --- a/src/overlays/actors/ovl_Dm_Nb/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Nb -z_dm_nb.c diff --git a/src/overlays/actors/ovl_Dm_Opstage/overlay.cfg b/src/overlays/actors/ovl_Dm_Opstage/overlay.cfg deleted file mode 100644 index 17e40ea81..000000000 --- a/src/overlays/actors/ovl_Dm_Opstage/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Opstage -z_dm_opstage.c diff --git a/src/overlays/actors/ovl_Dm_Ravine/overlay.cfg b/src/overlays/actors/ovl_Dm_Ravine/overlay.cfg deleted file mode 100644 index a3287c407..000000000 --- a/src/overlays/actors/ovl_Dm_Ravine/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Ravine -z_dm_ravine.c diff --git a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c index ba4c3bb00..25fee11db 100644 --- a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c +++ b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c @@ -32,7 +32,7 @@ void DmRavine_Init(Actor* thisx, PlayState* play) { s32 pad; DmRavine* this = THIS; - if (((((void)0, gSaveContext.save.weekEventReg[0]) & 0x10) | cREG(0)) != 0) { + if (CHECK_WEEKEVENTREG_ALT(WEEKEVENTREG_00_10) | cREG(0)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_Dm_Sa/overlay.cfg b/src/overlays/actors/ovl_Dm_Sa/overlay.cfg deleted file mode 100644 index 3916c7965..000000000 --- a/src/overlays/actors/ovl_Dm_Sa/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Sa -z_dm_sa.c diff --git a/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c b/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c index 00abe6e05..dc6d8bcef 100644 --- a/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c +++ b/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c @@ -83,26 +83,24 @@ void DmSa_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { } Gfx* func_80A2EB58(GraphicsContext* gfxCtx, u32 alpha) { - Gfx* dList; - Gfx* dListHead; + Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, 2 * sizeof(Gfx)); //! @bug this does not allocate enough for 3 Gfx commands; + Gfx* gfx = gfxHead; - dList = dListHead = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2); //! @bug this does not allocate enough for 3 Gfx commands - gDPSetRenderMode(dListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2); - gDPSetEnvColor(dListHead++, 0, 0, 0, alpha); - gSPEndDisplayList(dListHead++); + gDPSetRenderMode(gfx++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2); + gDPSetEnvColor(gfx++, 0, 0, 0, alpha); + gSPEndDisplayList(gfx++); - return dList; + return gfxHead; } Gfx* func_80A2EBB0(GraphicsContext* gfxCtx, u32 alpha) { - Gfx* dList; - Gfx* dListHead; + Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, 2 * sizeof(Gfx)); + Gfx* gfx = gfxHead; - dList = dListHead = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2); - gDPSetEnvColor(dListHead++, 0, 0, 0, alpha); - gSPEndDisplayList(dListHead++); + gDPSetEnvColor(gfx++, 0, 0, 0, alpha); + gSPEndDisplayList(gfx++); - return dList; + return gfxHead; } void DmSa_Draw(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Dm_Statue/overlay.cfg b/src/overlays/actors/ovl_Dm_Statue/overlay.cfg deleted file mode 100644 index d01c4284e..000000000 --- a/src/overlays/actors/ovl_Dm_Statue/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Statue -z_dm_statue.c diff --git a/src/overlays/actors/ovl_Dm_Stk/overlay.cfg b/src/overlays/actors/ovl_Dm_Stk/overlay.cfg deleted file mode 100644 index 628231122..000000000 --- a/src/overlays/actors/ovl_Dm_Stk/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Stk -z_dm_stk.c diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c index 6d0fd48a4..8233bb0cb 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -1024,9 +1024,9 @@ void DmStk_Init(Actor* thisx, PlayState* play) { this->deflectCount = 0; this->maskType = SK_MASK_TYPE_NORMAL; this->animIndex = SK_ANIM_IDLE; - this->fogR = play->lightCtx.unk7; - this->fogG = play->lightCtx.unk8; - this->fogB = play->lightCtx.unk9; + this->fogR = play->lightCtx.fogColor.r; + this->fogG = play->lightCtx.fogColor.g; + this->fogB = play->lightCtx.fogColor.b; if ((play->sceneId == SCENE_LOST_WOODS) && (gSaveContext.sceneLayer == 1)) { this->alpha = 0; @@ -1149,12 +1149,12 @@ void DmStk_DoNothing(DmStk* this, PlayState* play) { void DmStk_WaitForTelescope(DmStk* this, PlayState* play) { Vec3f screenPos; - if (!(gSaveContext.save.weekEventReg[74] & 0x20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_74_20)) { Play_GetScreenPos(play, &this->actor.world.pos, &screenPos); if (play->view.fovy < 25.0f) { if ((screenPos.x >= 70.0f) && (screenPos.x < (SCREEN_WIDTH - 70.0f)) && (screenPos.y >= 30.0f) && (screenPos.y < (SCREEN_HEIGHT - 30.0f))) { - func_800FE484(); + Environment_StopTime(); this->actionFunc = DmStk_StartTelescopeCutscene; } } @@ -1172,7 +1172,7 @@ void DmStk_StartTelescopeCutscene(DmStk* this, PlayState* play) { if (gSaveContext.save.day < 3) { cutscene = dayOneAndTwoCutscene; - } else if ((gSaveContext.save.weekEventReg[8] & 0x40) || + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40) || ((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0)))) { cutscene = finalHoursCutscene; } else { @@ -1181,7 +1181,7 @@ void DmStk_StartTelescopeCutscene(DmStk* this, PlayState* play) { if (ActorCutscene_GetCanPlayNext(cutscene)) { ActorCutscene_Start(cutscene, &this->actor); - func_800FE498(); + Environment_StartTime(); this->actionFunc = DmStk_DoNothing; } else { ActorCutscene_SetIntentToPlay(cutscene); @@ -1594,9 +1594,9 @@ void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) { this->fadeInState++; } - this->fogR = play->lightCtx.unk7 * this->fogScale; - this->fogG = play->lightCtx.unk8 * this->fogScale; - this->fogB = play->lightCtx.unk9 * this->fogScale; + this->fogR = play->lightCtx.fogColor.r * this->fogScale; + this->fogG = play->lightCtx.fogColor.g * this->fogScale; + this->fogB = play->lightCtx.fogColor.b * this->fogScale; } else if (this->fadeInState == SK_FADE_IN_STATE_INCREASE_FOG) { if (this->fogN < 996) { this->fogN += 10; @@ -1630,7 +1630,7 @@ void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) { if (this->alpha < 0) { this->alpha = 0; this->fadeOutState = SK_FADE_OUT_STATE_NONE; - gSaveContext.save.weekEventReg[12] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_12_04); if (!(play->actorCtx.flags & ACTORCTX_FLAG_1)) { Actor_Kill(&this->actor); } else { @@ -1816,9 +1816,10 @@ void DmStk_Update(Actor* thisx, PlayState* play) { (play->msgCtx.currentTextId == 0x5E6) && !FrameAdvance_IsEnabled(&play->state) && (play->transitionTrigger == TRANS_TRIGGER_OFF) && (ActorCutscene_GetCurrentIndex() == -1) && (play->csCtx.state == 0)) { - gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)REG(15); - if (REG(15) != 0) { - gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.daySpeed); + gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED; + if (R_TIME_SPEED != 0) { + gSaveContext.save.time = + ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.timeSpeedOffset); } } } @@ -1894,7 +1895,7 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, this->fogR, this->fogG, this->fogB, this->fogA, this->fogN, this->fogF); gSPDisplayList(POLY_OPA_DISP++, gSkullKidMajorasMask1DL); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); } else { gSPDisplayList(POLY_OPA_DISP++, gSkullKidMajorasMask1DL); } diff --git a/src/overlays/actors/ovl_Dm_Tag/overlay.cfg b/src/overlays/actors/ovl_Dm_Tag/overlay.cfg deleted file mode 100644 index e1895969e..000000000 --- a/src/overlays/actors/ovl_Dm_Tag/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Tag -z_dm_tag.c diff --git a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c index d91be440a..13a7e264f 100644 --- a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c +++ b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c @@ -158,8 +158,8 @@ s32 func_80C224D8(DmTag* this, PlayState* play) { play->nextEntrance = ENTRANCE(STOCK_POT_INN, 5); gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_02; - gSaveContext.nextTransitionType = TRANS_TYPE_06; + play->transitionType = TRANS_TYPE_FADE_BLACK; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK_SLOW; this->unk_1A4++; break; } @@ -172,8 +172,8 @@ s32 func_80C227E8(DmTag* this, PlayState* play) { play->nextEntrance = ENTRANCE(STOCK_POT_INN, 4); gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_02; - gSaveContext.nextTransitionType = TRANS_TYPE_06; + play->transitionType = TRANS_TYPE_FADE_BLACK; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK_SLOW; this->unk_1A4++; } return false; @@ -230,7 +230,7 @@ void DmTag_Init(Actor* thisx, PlayState* play) { DmTag* this = (DmTag*)thisx; Player* player = GET_PLAYER(play); - if (gSaveContext.save.weekEventReg[85] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_85_04)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_Dm_Tsg/overlay.cfg b/src/overlays/actors/ovl_Dm_Tsg/overlay.cfg deleted file mode 100644 index cf5632fbb..000000000 --- a/src/overlays/actors/ovl_Dm_Tsg/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Tsg -z_dm_tsg.c diff --git a/src/overlays/actors/ovl_Dm_Zl/overlay.cfg b/src/overlays/actors/ovl_Dm_Zl/overlay.cfg deleted file mode 100644 index 541103127..000000000 --- a/src/overlays/actors/ovl_Dm_Zl/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Dm_Zl -z_dm_zl.c diff --git a/src/overlays/actors/ovl_Door_Ana/overlay.cfg b/src/overlays/actors/ovl_Door_Ana/overlay.cfg deleted file mode 100644 index cb3d1a5fd..000000000 --- a/src/overlays/actors/ovl_Door_Ana/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Door_Ana -z_door_ana.c diff --git a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c index 8ae44b909..9086a052d 100644 --- a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c +++ b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c @@ -141,7 +141,7 @@ void DoorAna_WaitOpen(DoorAna* this, PlayState* play) { } else { s32 destinationIdx = DOORANA_GET_ENTRANCE(&this->actor); - Play_SetupRespawnPoint(&play->state, RESPAWN_MODE_UNK_3, 0x4FF); + Play_SetupRespawnPoint(&play->state, RESPAWN_MODE_UNK_3, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_4)); gSaveContext.respawn[RESPAWN_MODE_UNK_3].pos.y = this->actor.world.pos.y; gSaveContext.respawn[RESPAWN_MODE_UNK_3].yaw = this->actor.home.rot.y; diff --git a/src/overlays/actors/ovl_Door_Shutter/overlay.cfg b/src/overlays/actors/ovl_Door_Shutter/overlay.cfg deleted file mode 100644 index f3b63c1cc..000000000 --- a/src/overlays/actors/ovl_Door_Shutter/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Door_Shutter -z_door_shutter.c diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index 116b07a6c..db564f3f2 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -328,7 +328,7 @@ void func_808A0F88(DoorShutter* this, PlayState* play) { } else if (func_808A0E28(this, play)) { Player* player = GET_PLAYER(play); - player->doorType = -1; + player->doorType = PLAYER_DOORTYPE_TALKING; player->doorActor = &this->actor; this->actor.textId = 0x1801; func_80122F28(player); @@ -357,7 +357,7 @@ void func_808A1090(DoorShutter* this, PlayState* play) { if (doorDirection != 0) { Player* player = GET_PLAYER(play); - player->doorType = 2; + player->doorType = PLAYER_DOORTYPE_SLIDING; player->doorDirection = doorDirection; player->doorActor = &this->actor; @@ -369,18 +369,18 @@ void func_808A1090(DoorShutter* this, PlayState* play) { if (this->doorType == 6) { if (gSaveContext.save.playerData.healthCapacity < (DOORSHUTTER_GET_1F(&this->actor) * 0x10)) { - player->doorType = -1; + player->doorType = PLAYER_DOORTYPE_TALKING; this->actor.textId = 0x14FC; } } else if (this->unk_166 != 0) { if (this->doorType == 5) { if (!CHECK_DUNGEON_ITEM(DUNGEON_BOSS_KEY, gSaveContext.mapIndex)) { - player->doorType = -1; + player->doorType = PLAYER_DOORTYPE_TALKING; this->actor.textId = 0x1803; } player->doorTimer += 10; } else if (DUNGEON_KEY_COUNT(gSaveContext.mapIndex) <= 0) { - player->doorType = -1; + player->doorType = PLAYER_DOORTYPE_TALKING; this->actor.textId = 0x1802; } else { player->doorTimer += 10; @@ -455,7 +455,7 @@ s32 func_808A1478(DoorShutter* this, PlayState* play, f32 arg2) { } if ((this->unk_160 != -1) && (ActorCutscene_GetCurrentIndex() == this->unk_160)) { - func_800B724C(play, &this->actor, 1); + func_800B724C(play, &this->actor, PLAYER_CSMODE_1); } } @@ -479,7 +479,7 @@ void func_808A1548(DoorShutter* this, PlayState* play) { } else if (func_808A0E28(this, play)) { Player* player = GET_PLAYER(play); - player->doorType = -1; + player->doorType = PLAYER_DOORTYPE_TALKING; player->doorActor = &this->actor; this->actor.textId = 0x1800; func_80122F28(player); @@ -572,7 +572,7 @@ void func_808A1884(DoorShutter* this, PlayState* play) { if (ActorCutscene_GetCurrentIndex() == 0x7D) { func_801226E0(play, ((void)0, gSaveContext.respawn[RESPAWN_MODE_DOWN].data)); player->unk_A86 = -1; - func_800B7298(play, NULL, 0x73); + func_800B7298(play, NULL, PLAYER_CSMODE_115); } } } @@ -623,8 +623,8 @@ void func_808A1B48(DoorShutter* this, PlayState* play) { void func_808A1C50(DoorShutter* this, PlayState* play) { if (this->unk_167++ > 30) { - if (GET_PLAYER(play)->csMode == 0x73) { - func_800B7298(play, NULL, 6); + if (GET_PLAYER(play)->csMode == PLAYER_CSMODE_115) { + func_800B7298(play, NULL, PLAYER_CSMODE_6); } DoorShutter_SetupDoor(this, play); } diff --git a/src/overlays/actors/ovl_Door_Spiral/overlay.cfg b/src/overlays/actors/ovl_Door_Spiral/overlay.cfg deleted file mode 100644 index f33e851b5..000000000 --- a/src/overlays/actors/ovl_Door_Spiral/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Door_Spiral -z_door_spiral.c diff --git a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c index 5f0031487..541e3de23 100644 --- a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c +++ b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c @@ -274,7 +274,7 @@ void DoorSpiral_Wait(DoorSpiral* this, PlayState* play) { } else if (DoorSpiral_PlayerShouldClimb(this, play)) { player = GET_PLAYER(play); - player->doorType = 4; + player->doorType = PLAYER_DOORTYPE_STAIRCASE; player->doorDirection = this->orientation; player->doorActor = &this->actor; transition = DOORSPIRAL_GET_TRANSITION_ID(&this->actor); diff --git a/src/overlays/actors/ovl_Door_Warp1/overlay.cfg b/src/overlays/actors/ovl_Door_Warp1/overlay.cfg deleted file mode 100644 index 764603654..000000000 --- a/src/overlays/actors/ovl_Door_Warp1/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Door_Warp1 -z_door_warp1.c diff --git a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c index 707150e33..7ec2245d7 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c @@ -163,8 +163,8 @@ void DoorWarp1_Init(Actor* thisx, PlayState* play) { if ((play->sceneId == SCENE_MITURIN_BS) || (play->sceneId == SCENE_HAKUGIN_BS) || (play->sceneId == SCENE_INISIE_BS) || (play->sceneId == SCENE_SEA_BS)) { - func_800FE484(); - play->interfaceCtx.restrictions.unk_312 = 1; + Environment_StopTime(); + play->interfaceCtx.restrictions.songOfTime = 1; play->interfaceCtx.restrictions.songOfSoaring = 1; } } @@ -270,7 +270,7 @@ void func_808B8E78(DoorWarp1* this, PlayState* play) { this->unk_1A4 = 700.0f; if (play->sceneId == SCENE_INISIE_N) { DoorWarp1_SetupAction(this, func_808B96A0); - } else if (gSaveContext.save.weekEventReg[86] & 0x80) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_86_80)) { this->unk_1D4 = 0; DoorWarp1_SetupAction(this, func_808B921C); } else { @@ -344,7 +344,7 @@ void func_808B921C(DoorWarp1* this, PlayState* play) { } if (func_808B866C(this, play) && !Play_InCsMode(play)) { - func_800B7298(play, &this->dyna.actor, 7); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_7); Message_StartTextbox(play, 0xF2, &this->dyna.actor); DoorWarp1_SetupAction(this, func_808B93A0); } @@ -360,14 +360,14 @@ void func_808B93A0(DoorWarp1* this, PlayState* play) { func_801477B4(play); if (play->msgCtx.choiceIndex == 0) { func_8019F208(); - func_800B7298(play, &this->dyna.actor, 9); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_9); player->unk_3A0.x = this->dyna.actor.world.pos.x; player->unk_3A0.z = this->dyna.actor.world.pos.z; this->unk_1CA = 1; DoorWarp1_SetupAction(this, func_808B9524); } else { func_8019F230(); - func_800B7298(play, &this->dyna.actor, 6); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6); DoorWarp1_SetupAction(this, func_808B94A4); } } @@ -410,8 +410,8 @@ void func_808B958C(DoorWarp1* this, PlayState* play) { this->unk_1D0++; if ((this->unk_1D0 > 120) && (gSaveContext.nextCutsceneIndex == 0xFFEF)) { func_808BA10C(this, play); - play->transitionType = TRANS_TYPE_03; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; } Math_SmoothStepToF(&this->unk_1A8, 6.0f, 0.2f, 0.02f, 0.01f); @@ -448,7 +448,7 @@ void func_808B977C(DoorWarp1* this, PlayState* play) { AudioSfx_PlaySfx(NA_SE_EV_LINK_WARP, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); - func_800B7298(play, &this->dyna.actor, 9); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_9); player->unk_3A0.x = this->dyna.actor.world.pos.x; player->unk_3A0.z = this->dyna.actor.world.pos.z; this->unk_1CA = 1; @@ -599,7 +599,7 @@ void func_808B9F10(DoorWarp1* this, PlayState* play) { Player* player = GET_PLAYER(play); Interface_SetHudVisibility(HUD_VISIBILITY_NONE); - func_800B7298(play, &this->dyna.actor, 9); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_9); player->unk_3A0.x = this->dyna.actor.world.pos.x; player->unk_3A0.z = this->dyna.actor.world.pos.z; this->unk_1CA = 20; @@ -652,7 +652,7 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) { if (this->unk_202 != 0) { if (phi_v0_2 > 0) { - gSaveContext.save.weekEventReg[7] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_07_80); } switch (phi_v0_2) { @@ -705,64 +705,64 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) { } play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; } else { switch (phi_v0_2) { case 0: - if (gSaveContext.save.weekEventReg[20] & 2) { - gSaveContext.save.weekEventReg[7] |= 0x80; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { + SET_WEEKEVENTREG(WEEKEVENTREG_07_80); play->nextEntrance = ENTRANCE(WOODFALL_TEMPLE, 1); play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; } else { play->nextEntrance = ENTRANCE(WOODFALL, 0); gSaveContext.nextCutsceneIndex = 0xFFF0; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; } break; case 1: - gSaveContext.save.weekEventReg[33] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_33_80); play->nextEntrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 7); play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; break; case 3: - if (gSaveContext.save.weekEventReg[55] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { play->nextEntrance = ENTRANCE(ZORA_CAPE, 9); gSaveContext.nextCutsceneIndex = 0xFFF0; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; } else { - gSaveContext.save.weekEventReg[55] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_55_80); play->nextEntrance = ENTRANCE(ZORA_CAPE, 8); gSaveContext.nextCutsceneIndex = 0xFFF0; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; } break; case 2: - gSaveContext.save.weekEventReg[52] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_52_20); play->nextEntrance = ENTRANCE(IKANA_CANYON, 15); gSaveContext.nextCutsceneIndex = 0xFFF2; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; break; } } } else if (DOORWARP1_GET_FF00_1(&this->dyna.actor) != 0xFF) { if (DOORWARP1_GET_FF(&this->dyna.actor) == ENDOORWARP1_FF_6) { - gSaveContext.respawnFlag = ~1; + gSaveContext.respawnFlag = -2; } play->nextEntrance = play->setupExitList[DOORWARP1_GET_FF00_3(&this->dyna.actor)]; Scene_SetExitFade(play); @@ -833,7 +833,7 @@ void func_808BA550(DoorWarp1* this, PlayState* play) { } if (this->unk_1D0 > 140) { - play->envCtx.fillScreen = 1; + play->envCtx.fillScreen = true; temp_f0 = (this->unk_1D0 - 140) / 20.0f; if (temp_f0 > 1.0f) { temp_f0 = 1.0f; @@ -886,14 +886,14 @@ void func_808BAAF4(DoorWarp1* this, PlayState* play) { phi_f2 = 85.0f; } - if (!(gSaveContext.save.weekEventReg[86] & 0x80) && (fabsf(this->dyna.actor.xzDistToPlayer) < phi_f2) && + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_86_80) && (fabsf(this->dyna.actor.xzDistToPlayer) < phi_f2) && ((player->actor.world.pos.y - 20.0f) < this->dyna.actor.world.pos.y) && (this->dyna.actor.world.pos.y < (player->actor.world.pos.y + 20.0f))) { cutscene = this->dyna.actor.cutscene; if (ActorCutscene_GetCanPlayNext(cutscene)) { ActorCutscene_Start(cutscene, &this->dyna.actor); - gSaveContext.save.weekEventReg[86] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_86_80); DoorWarp1_SetupAction(this, func_808BABF4); } else { ActorCutscene_SetIntentToPlay(cutscene); diff --git a/src/overlays/actors/ovl_Eff_Change/overlay.cfg b/src/overlays/actors/ovl_Eff_Change/overlay.cfg deleted file mode 100644 index 6ab11cfbd..000000000 --- a/src/overlays/actors/ovl_Eff_Change/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Eff_Change -z_eff_change.c diff --git a/src/overlays/actors/ovl_Eff_Change/z_eff_change.c b/src/overlays/actors/ovl_Eff_Change/z_eff_change.c index cad0ec095..9174fafc0 100644 --- a/src/overlays/actors/ovl_Eff_Change/z_eff_change.c +++ b/src/overlays/actors/ovl_Eff_Change/z_eff_change.c @@ -130,7 +130,7 @@ void EffChange_Draw(Actor* thisx, PlayState* play) { EffChange* this = THIS; AnimatedMat_DrawStepXlu(play, Lib_SegmentedToVirtual(&gameplay_keep_Matanimheader_028FEC), this->step); - mtx = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx))); + mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx)); if (mtx != NULL) { func_8012C2DC(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Eff_Dust/overlay.cfg b/src/overlays/actors/ovl_Eff_Dust/overlay.cfg deleted file mode 100644 index 2833a83d0..000000000 --- a/src/overlays/actors/ovl_Eff_Dust/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Eff_Dust -z_eff_dust.c diff --git a/src/overlays/actors/ovl_Eff_Kamejima_Wave/overlay.cfg b/src/overlays/actors/ovl_Eff_Kamejima_Wave/overlay.cfg deleted file mode 100644 index 7decfb871..000000000 --- a/src/overlays/actors/ovl_Eff_Kamejima_Wave/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Eff_Kamejima_Wave -z_eff_kamejima_wave.c diff --git a/src/overlays/actors/ovl_Eff_Lastday/overlay.cfg b/src/overlays/actors/ovl_Eff_Lastday/overlay.cfg deleted file mode 100644 index 8e1cc8e1d..000000000 --- a/src/overlays/actors/ovl_Eff_Lastday/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Eff_Lastday -z_eff_lastday.c diff --git a/src/overlays/actors/ovl_Eff_Stk/overlay.cfg b/src/overlays/actors/ovl_Eff_Stk/overlay.cfg deleted file mode 100644 index 725fd80b3..000000000 --- a/src/overlays/actors/ovl_Eff_Stk/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Eff_Stk -z_eff_stk.c diff --git a/src/overlays/actors/ovl_Eff_Zoraband/overlay.cfg b/src/overlays/actors/ovl_Eff_Zoraband/overlay.cfg deleted file mode 100644 index 57858dabd..000000000 --- a/src/overlays/actors/ovl_Eff_Zoraband/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Eff_Zoraband -z_eff_zoraband.c diff --git a/src/overlays/actors/ovl_Elf_Msg/overlay.cfg b/src/overlays/actors/ovl_Elf_Msg/overlay.cfg deleted file mode 100644 index 91ab17157..000000000 --- a/src/overlays/actors/ovl_Elf_Msg/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Elf_Msg -z_elf_msg.c diff --git a/src/overlays/actors/ovl_Elf_Msg2/overlay.cfg b/src/overlays/actors/ovl_Elf_Msg2/overlay.cfg deleted file mode 100644 index 15a73db5d..000000000 --- a/src/overlays/actors/ovl_Elf_Msg2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Elf_Msg2 -z_elf_msg2.c diff --git a/src/overlays/actors/ovl_Elf_Msg3/overlay.cfg b/src/overlays/actors/ovl_Elf_Msg3/overlay.cfg deleted file mode 100644 index e39f7e290..000000000 --- a/src/overlays/actors/ovl_Elf_Msg3/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Elf_Msg3 -z_elf_msg3.c diff --git a/src/overlays/actors/ovl_Elf_Msg4/overlay.cfg b/src/overlays/actors/ovl_Elf_Msg4/overlay.cfg deleted file mode 100644 index 2bfe9ff86..000000000 --- a/src/overlays/actors/ovl_Elf_Msg4/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Elf_Msg4 -z_elf_msg4.c diff --git a/src/overlays/actors/ovl_Elf_Msg5/overlay.cfg b/src/overlays/actors/ovl_Elf_Msg5/overlay.cfg deleted file mode 100644 index d528de342..000000000 --- a/src/overlays/actors/ovl_Elf_Msg5/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Elf_Msg5 -z_elf_msg5.c diff --git a/src/overlays/actors/ovl_Elf_Msg6/overlay.cfg b/src/overlays/actors/ovl_Elf_Msg6/overlay.cfg deleted file mode 100644 index 9ded97384..000000000 --- a/src/overlays/actors/ovl_Elf_Msg6/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Elf_Msg6 -z_elf_msg6.c diff --git a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c index e69806ac7..0ffb5c758 100644 --- a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c +++ b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c @@ -41,19 +41,19 @@ static InitChainEntry sInitChain[] = { }; s32 func_80BA15A0(void) { - if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA) && !(gSaveContext.save.weekEventReg[87] & 0x10)) { + if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_87_10)) { return true; } - if (CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) && !(gSaveContext.save.weekEventReg[87] & 0x20)) { + if (CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_87_20)) { return true; } - if (CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG) && !(gSaveContext.save.weekEventReg[87] & 0x40)) { + if (CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_87_40)) { return true; } - if (CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD) && !(gSaveContext.save.weekEventReg[87] & 0x80)) { + if (CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_87_80)) { return true; } @@ -62,24 +62,24 @@ s32 func_80BA15A0(void) { void func_80BA165C(void) { if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA)) { - gSaveContext.save.weekEventReg[87] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_87_10); } if (CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT)) { - gSaveContext.save.weekEventReg[87] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_87_20); } if (CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG)) { - gSaveContext.save.weekEventReg[87] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_87_40); } if (CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD)) { - gSaveContext.save.weekEventReg[87] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_87_80); } } s32 func_80BA16F4(ElfMsg6* this, PlayState* play) { - if (!(gSaveContext.save.weekEventReg[31] & 4) && (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_04) && (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU)) { this->actor.textId = 0x216; return false; } @@ -94,7 +94,7 @@ s32 func_80BA16F4(ElfMsg6* this, PlayState* play) { } if (!CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT)) { - if (gSaveContext.save.weekEventReg[31] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_31_01)) { this->actor.textId = 0x257; } else { this->actor.textId = 0x231; @@ -103,7 +103,7 @@ s32 func_80BA16F4(ElfMsg6* this, PlayState* play) { } if (!CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG)) { - if (gSaveContext.save.weekEventReg[31] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_31_02)) { this->actor.textId = 0x258; } else { this->actor.textId = 0x232; @@ -112,7 +112,7 @@ s32 func_80BA16F4(ElfMsg6* this, PlayState* play) { } if (!CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD)) { - if (gSaveContext.save.weekEventReg[80] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_80_04)) { this->actor.textId = 0x259; } else { this->actor.textId = 0x233; @@ -169,7 +169,7 @@ void ElfMsg6_Init(Actor* thisx, PlayState* play) { break; case 1: - if (gSaveContext.save.weekEventReg[83] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_83_02)) { Actor_Kill(&this->actor); return; } @@ -183,14 +183,14 @@ void ElfMsg6_Init(Actor* thisx, PlayState* play) { return; } - if (gSaveContext.save.weekEventReg[8] & 0x40) { - if (gSaveContext.save.weekEventReg[88] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_88_20)) { Actor_Kill(&this->actor); return; } this->actor.textId = 0x25B; } else { - if (!(gSaveContext.save.weekEventReg[74] & 0x20) || (gSaveContext.save.weekEventReg[79] & 0x10)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_74_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_79_10)) { Actor_Kill(&this->actor); return; } @@ -202,7 +202,7 @@ void ElfMsg6_Init(Actor* thisx, PlayState* play) { case 3: if (((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) && Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor))) || - (gSaveContext.save.weekEventReg[88] & 0x10) || (gSaveContext.save.weekEventReg[91] & 1) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_88_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_91_01) || (INV_CONTENT(ITEM_MASK_ZORA) == ITEM_MASK_ZORA)) { Actor_Kill(&this->actor); return; @@ -265,18 +265,18 @@ void func_80BA1CF8(ElfMsg6* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { switch (this->actor.textId) { case 0x224: - gSaveContext.save.weekEventReg[79] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_79_10); break; case 0x25B: - gSaveContext.save.weekEventReg[88] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_88_20); break; } Actor_Kill(&this->actor); return; } - if ((this->actor.textId == 0x224) && (gSaveContext.save.weekEventReg[8] & 0x40)) { + if ((this->actor.textId == 0x224) && CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) { this->actor.textId = 0x25B; } else if (func_80BA1C00(this) && (player->actor.speedXZ > 1.0f)) { player->tatlTextId = -this->actor.textId; @@ -299,19 +299,19 @@ void func_80BA1E30(ElfMsg6* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { switch (this->actor.textId) { case 0x216: - gSaveContext.save.weekEventReg[31] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_31_04); break; case 0x231: - gSaveContext.save.weekEventReg[31] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_31_01); break; case 0x232: - gSaveContext.save.weekEventReg[31] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_31_02); break; case 0x233: - gSaveContext.save.weekEventReg[80] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_80_04); break; } func_80BA165C(); @@ -330,7 +330,7 @@ void func_80BA1E30(ElfMsg6* this, PlayState* play) { } void func_80BA1F80(ElfMsg6* this, PlayState* play) { - if (((ELFMSG6_GET_F0(&this->actor)) == 1) && (gSaveContext.save.weekEventReg[83] & 2)) { + if ((ELFMSG6_GET_F0(&this->actor) == 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_83_02)) { Actor_Kill(&this->actor); return; } @@ -363,7 +363,7 @@ void func_80BA2048(ElfMsg6* this, PlayState* play) { } if (((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) && Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor))) || - (gSaveContext.save.weekEventReg[88] & 0x10) || (gSaveContext.save.weekEventReg[91] & 1) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_88_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_91_01) || (INV_CONTENT(ITEM_MASK_ZORA) == ITEM_MASK_ZORA)) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_En_Ah/overlay.cfg b/src/overlays/actors/ovl_En_Ah/overlay.cfg deleted file mode 100644 index 694256c53..000000000 --- a/src/overlays/actors/ovl_En_Ah/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ah -z_en_ah.c diff --git a/src/overlays/actors/ovl_En_Ah/z_en_ah.c b/src/overlays/actors/ovl_En_Ah/z_en_ah.c index 2c0cb4ce3..5ea851023 100644 --- a/src/overlays/actors/ovl_En_Ah/z_en_ah.c +++ b/src/overlays/actors/ovl_En_Ah/z_en_ah.c @@ -25,7 +25,7 @@ static u8 D_80BD3DB0[] = { /* 0x08 */ SCHEDULE_CMD_RET_VAL_L(1), /* 0x0B */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x20 - 0x0F), /* 0x0F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 0, 23, 0, 0x1D - 0x15), - /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(0x32, 0x20, 0x1C - 0x19), + /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_50_20, 0x1C - 0x19), /* 0x19 */ SCHEDULE_CMD_RET_VAL_L(1), /* 0x1C */ SCHEDULE_CMD_RET_NONE(), /* 0x1D */ SCHEDULE_CMD_RET_VAL_L(3), @@ -105,7 +105,7 @@ TexturePtr D_80BD3F14[] = { object_ah_Tex_006D70, object_ah_Tex_007570, object_ah_Tex_007D70, object_ah_Tex_007570, object_ah_Tex_008570, }; -s32 func_80BD2A30(EnAh* this, PlayState* play, u8 actorCat, s16 actorId) { +Actor* func_80BD2A30(EnAh* this, PlayState* play, u8 actorCat, s16 actorId) { Actor* tempActor; Actor* foundActor = NULL; @@ -554,7 +554,7 @@ void EnAh_Update(Actor* thisx, PlayState* play) { radius = this->collider.dim.radius + 60; height = this->collider.dim.height + 10; - func_8013C964(&this->actor, play, radius, height, PLAYER_AP_NONE, this->unk_2D8 & 7); + func_8013C964(&this->actor, play, radius, height, PLAYER_IA_NONE, this->unk_2D8 & 7); if (!(this->unk_2D8 & 0x10)) { Actor_MoveWithGravity(&this->actor); Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); diff --git a/src/overlays/actors/ovl_En_Akindonuts/overlay.cfg b/src/overlays/actors/ovl_En_Akindonuts/overlay.cfg deleted file mode 100644 index a3e371656..000000000 --- a/src/overlays/actors/ovl_En_Akindonuts/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Akindonuts -z_en_akindonuts.c diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c index e0c19903d..d2bdf0cee 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -257,17 +257,17 @@ void func_80BED090(PlayState* play) { Player* player = GET_PLAYER(play); if (player->transformation == PLAYER_FORM_DEKU) { - gSaveContext.save.weekEventReg[63] |= 8; - gSaveContext.save.weekEventReg[63] &= (u8)~0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_63_08); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_10); } else if (player->transformation == PLAYER_FORM_ZORA) { - gSaveContext.save.weekEventReg[63] &= (u8)~8; - gSaveContext.save.weekEventReg[63] |= 0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_08); + SET_WEEKEVENTREG(WEEKEVENTREG_63_10); } else if (player->transformation == PLAYER_FORM_GORON) { - gSaveContext.save.weekEventReg[63] |= 8; - gSaveContext.save.weekEventReg[63] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_63_08); + SET_WEEKEVENTREG(WEEKEVENTREG_63_10); } else if (player->transformation == PLAYER_FORM_HUMAN) { - gSaveContext.save.weekEventReg[63] &= (u8)~8; - gSaveContext.save.weekEventReg[63] &= (u8)~0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_08); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_10); } } @@ -275,19 +275,19 @@ s32 func_80BED140(PlayState* play) { Player* player = GET_PLAYER(play); if (player->transformation == PLAYER_FORM_DEKU) { - if ((gSaveContext.save.weekEventReg[63] & 8) && !(gSaveContext.save.weekEventReg[63] & 0x10)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_63_10)) { return true; } } else if (player->transformation == PLAYER_FORM_ZORA) { - if (!(gSaveContext.save.weekEventReg[63] & 8) && (gSaveContext.save.weekEventReg[63] & 0x10)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_63_08) && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_10)) { return true; } } else if (player->transformation == PLAYER_FORM_GORON) { - if ((gSaveContext.save.weekEventReg[63] & 8) && (gSaveContext.save.weekEventReg[63] & 0x10)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_08) && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_10)) { return true; } } else if (player->transformation == PLAYER_FORM_HUMAN) { - if (!(gSaveContext.save.weekEventReg[63] & 8) && !(gSaveContext.save.weekEventReg[63] & 0x10)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_63_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_63_10)) { return true; } } @@ -384,8 +384,8 @@ void func_80BED3BC(EnAkindonuts* this, PlayState* play) { break; case 0x15E7: - if (!(gSaveContext.save.weekEventReg[61] & 0x20)) { - gSaveContext.save.weekEventReg[61] |= 0x20; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_61_20)) { + SET_WEEKEVENTREG(WEEKEVENTREG_61_20); this->unk_33C = 0x15E8; break; } @@ -446,7 +446,7 @@ void func_80BED3BC(EnAkindonuts* this, PlayState* play) { case 0x15E5: this->unk_33C = 0x15E6; func_80BED090(play); - gSaveContext.save.weekEventReg[61] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_61_10); this->unk_32C |= 0x20; break; @@ -461,8 +461,8 @@ void func_80BED3BC(EnAkindonuts* this, PlayState* play) { void func_80BED680(EnAkindonuts* this, PlayState* play) { switch (this->unk_33C) { case 0: - if (func_80BED140(play) && !(gSaveContext.save.weekEventReg[61] & 0x40)) { - gSaveContext.save.weekEventReg[61] |= 0x40; + if (func_80BED140(play) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_61_40)) { + SET_WEEKEVENTREG(WEEKEVENTREG_61_40); this->unk_33C = 0x15F0; break; } @@ -562,8 +562,8 @@ void func_80BED8A4(EnAkindonuts* this, PlayState* play) { break; case 0x15FE: - if (!(gSaveContext.save.weekEventReg[62] & 1)) { - gSaveContext.save.weekEventReg[62] |= 1; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_62_01)) { + SET_WEEKEVENTREG(WEEKEVENTREG_62_01); this->unk_33C = 0x15FF; break; } @@ -623,7 +623,7 @@ void func_80BED8A4(EnAkindonuts* this, PlayState* play) { case 0x15FA: this->unk_33C = 0x15FB; - gSaveContext.save.weekEventReg[61] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_61_80); this->unk_32C |= 0x20; break; @@ -640,8 +640,8 @@ void func_80BEDB88(EnAkindonuts* this, PlayState* play) { switch (this->unk_33C) { case 0: - if ((player->transformation == PLAYER_FORM_DEKU) && !(gSaveContext.save.weekEventReg[62] & 2)) { - gSaveContext.save.weekEventReg[62] |= 2; + if ((player->transformation == PLAYER_FORM_DEKU) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_62_02)) { + SET_WEEKEVENTREG(WEEKEVENTREG_62_02); this->unk_33C = 0x15F0; break; } @@ -740,8 +740,8 @@ void func_80BEDDAC(EnAkindonuts* this, PlayState* play) { break; case 0x1610: - if (!(gSaveContext.save.weekEventReg[62] & 8)) { - gSaveContext.save.weekEventReg[62] |= 8; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_62_08)) { + SET_WEEKEVENTREG(WEEKEVENTREG_62_08); this->unk_33C = 0x1611; break; } @@ -796,7 +796,7 @@ void func_80BEDDAC(EnAkindonuts* this, PlayState* play) { case 0x15FA: this->unk_33C = 0x160D; - gSaveContext.save.weekEventReg[62] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_62_04); this->unk_32C |= 0x20; break; @@ -813,8 +813,8 @@ void func_80BEE070(EnAkindonuts* this, PlayState* play) { switch (this->unk_33C) { case 0: - if ((player->transformation == PLAYER_FORM_GORON) && !(gSaveContext.save.weekEventReg[62] & 0x10)) { - gSaveContext.save.weekEventReg[62] |= 0x10; + if ((player->transformation == PLAYER_FORM_GORON) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_62_10)) { + SET_WEEKEVENTREG(WEEKEVENTREG_62_10); this->unk_33C = 0x1614; break; } @@ -900,8 +900,8 @@ void func_80BEE274(EnAkindonuts* this, PlayState* play) { break; case 0x1624: - if (!(gSaveContext.save.weekEventReg[62] & 0x40)) { - gSaveContext.save.weekEventReg[62] |= 0x40; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_62_40)) { + SET_WEEKEVENTREG(WEEKEVENTREG_62_40); this->unk_33C = 0x1625; break; } @@ -957,7 +957,7 @@ void func_80BEE274(EnAkindonuts* this, PlayState* play) { case 0x1622: this->unk_33C = 0x1623; - gSaveContext.save.weekEventReg[62] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_62_20); this->unk_32C |= 0x20; break; @@ -974,8 +974,8 @@ void func_80BEE530(EnAkindonuts* this, PlayState* play) { switch (this->unk_33C) { case 0: - if ((player->transformation == PLAYER_FORM_ZORA) && !(gSaveContext.save.weekEventReg[62] & 0x80)) { - gSaveContext.save.weekEventReg[62] |= 0x80; + if ((player->transformation == PLAYER_FORM_ZORA) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_62_80)) { + SET_WEEKEVENTREG(WEEKEVENTREG_62_80); this->unk_33C = 0x162A; break; } @@ -1040,41 +1040,41 @@ void func_80BEE73C(EnAkindonuts* this, PlayState* play) { Player* player = GET_PLAYER(play); s32 pad; s32 params = ENAKINDONUTS_GET_3(&this->actor); - s32 itemActionParam = func_80123810(play); + PlayerItemAction itemAction = func_80123810(play); - if (itemActionParam > PLAYER_AP_NONE) { - if (itemActionParam == PLAYER_AP_DEED_LAND) { + if (itemAction > PLAYER_IA_NONE) { + if (itemAction == PLAYER_IA_DEED_LAND) { player->actor.textId = D_80BF048C[params]; this->unk_33C = player->actor.textId; if (this->unk_33C == 0x15E4) { - player->exchangeItemId = itemActionParam; + player->exchangeItemId = itemAction; this->actionFunc = func_80BEF20C; } else { this->actionFunc = func_80BEF18C; } - } else if (itemActionParam == PLAYER_AP_DEED_SWAMP) { + } else if (itemAction == PLAYER_IA_DEED_SWAMP) { player->actor.textId = D_80BF0494[params]; this->unk_33C = player->actor.textId; if (this->unk_33C == 0x15F9) { - player->exchangeItemId = itemActionParam; + player->exchangeItemId = itemAction; this->actionFunc = func_80BEF20C; } else { this->actionFunc = func_80BEF18C; } - } else if (itemActionParam == PLAYER_AP_DEED_MOUNTAIN) { + } else if (itemAction == PLAYER_IA_DEED_MOUNTAIN) { player->actor.textId = D_80BF049C[params]; this->unk_33C = player->actor.textId; if (this->unk_33C == 0x160C) { - player->exchangeItemId = itemActionParam; + player->exchangeItemId = itemAction; this->actionFunc = func_80BEF20C; } else { this->actionFunc = func_80BEF18C; } - } else if (itemActionParam == PLAYER_AP_DEED_OCEAN) { + } else if (itemAction == PLAYER_IA_DEED_OCEAN) { player->actor.textId = D_80BF04A4[params]; this->unk_33C = player->actor.textId; if (this->unk_33C == 0x1621) { - player->exchangeItemId = itemActionParam; + player->exchangeItemId = itemAction; this->actionFunc = func_80BEF20C; } else { this->actionFunc = func_80BEF18C; @@ -1085,7 +1085,7 @@ void func_80BEE73C(EnAkindonuts* this, PlayState* play) { this->actionFunc = func_80BEF18C; } func_801477B4(play); - } else if (itemActionParam < PLAYER_AP_NONE) { + } else if (itemAction <= PLAYER_IA_MINUS1) { this->unk_33C = D_80BF04AC[params]; func_80151938(play, this->unk_33C); this->actionFunc = func_80BEF18C; @@ -1095,7 +1095,7 @@ void func_80BEE73C(EnAkindonuts* this, PlayState* play) { void func_80BEE938(EnAkindonuts* this, PlayState* play) { switch (ENAKINDONUTS_GET_3(&this->actor)) { case 0: - if (gSaveContext.save.weekEventReg[61] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_61_10)) { if (ENAKINDONUTS_GET_4(&this->actor)) { this->unk_2DC = func_80BED680; } else { @@ -1109,7 +1109,7 @@ void func_80BEE938(EnAkindonuts* this, PlayState* play) { break; case 1: - if (gSaveContext.save.weekEventReg[61] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_61_80)) { if (ENAKINDONUTS_GET_4(&this->actor)) { this->unk_2DC = func_80BEDB88; } else { @@ -1123,7 +1123,7 @@ void func_80BEE938(EnAkindonuts* this, PlayState* play) { break; case 2: - if (gSaveContext.save.weekEventReg[62] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_62_04)) { if (ENAKINDONUTS_GET_4(&this->actor)) { this->unk_2DC = func_80BEE070; } else { @@ -1137,7 +1137,7 @@ void func_80BEE938(EnAkindonuts* this, PlayState* play) { break; case 3: - if (gSaveContext.save.weekEventReg[62] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_62_20)) { if (ENAKINDONUTS_GET_4(&this->actor)) { this->unk_2DC = func_80BEE530; } else { diff --git a/src/overlays/actors/ovl_En_Al/overlay.cfg b/src/overlays/actors/ovl_En_Al/overlay.cfg deleted file mode 100644 index ccd80736f..000000000 --- a/src/overlays/actors/ovl_En_Al/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Al -z_en_al.c diff --git a/src/overlays/actors/ovl_En_Al/z_en_al.c b/src/overlays/actors/ovl_En_Al/z_en_al.c index 7cb0d7d54..da1cc7d7e 100644 --- a/src/overlays/actors/ovl_En_Al/z_en_al.c +++ b/src/overlays/actors/ovl_En_Al/z_en_al.c @@ -200,7 +200,7 @@ Actor* func_80BDE384(EnAl* this, PlayState* play) { switch (this->unk_35C) { case 2: - if (!(gSaveContext.save.weekEventReg[89] & 8) && (gSaveContext.save.weekEventReg[85] & 0x80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_89_08) && CHECK_WEEKEVENTREG(WEEKEVENTREG_85_80)) { actor = func_80BDE1A0(this, play, ACTORCAT_NPC, ACTOR_EN_PM); } else { actor = &GET_PLAYER(play)->actor; @@ -410,7 +410,7 @@ s32 func_80BDEA14(EnAl* this, PlayState* play) { switch (this->unk_4E6) { case 0: case 1: - if ((gSaveContext.save.weekEventReg[75] & 2)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_02)) { sp18 = true; } else if (func_80BDE4E0(this, &this->unk_4E6, 0)) { sp18 = true; @@ -451,7 +451,7 @@ s32* func_80BDEABC(EnAl* this, PlayState* play) { return D_80BDFE84; case 2: - if (!(gSaveContext.save.weekEventReg[89] & 8) && (gSaveContext.save.weekEventReg[85] & 0x80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_89_08) && CHECK_WEEKEVENTREG(WEEKEVENTREG_85_80)) { this->unk_4EC = func_80BDE7FC; return D_80BDFCBC; } @@ -659,7 +659,7 @@ s32 func_80BDF308(EnAl* this, PlayState* play, ScheduleOutput* scheduleOutput) { break; case 2: - this->unk_4F0 = PLAYER_AP_NONE; + this->unk_4F0 = PLAYER_IA_NONE; this->unk_4EA = 0; func_80BDE27C(this, 2); break; @@ -672,7 +672,7 @@ s32 func_80BDF390(EnAl* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->actor.flags |= ACTOR_FLAG_1; this->actor.targetMode = 0; - this->unk_4F0 = PLAYER_AP_NONE; + this->unk_4F0 = PLAYER_IA_NONE; this->unk_4C2 = 0; this->unk_4D4 = 40.0f; @@ -699,15 +699,15 @@ void func_80BDF414(EnAl* this, PlayState* play) { switch (this->unk_4EA) { case 0: case 1: - if (!(gSaveContext.save.weekEventReg[89] & 8)) { - if (gSaveContext.save.weekEventReg[85] & 0x80) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_89_08)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_85_80)) { func_80BDE4E0(this, &this->unk_4EA, 0); } } break; case 2: - if (gSaveContext.save.weekEventReg[89] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_89_08)) { this->unk_4EA++; } break; @@ -748,7 +748,7 @@ void func_80BDF578(EnAl* this, PlayState* play) { void func_80BDF5E8(EnAl* this, PlayState* play) { ScheduleOutput sp20; - this->unk_4E0 = REG(15) + ((void)0, gSaveContext.save.daySpeed); + this->unk_4E0 = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, D_80BDFC70, &sp20) || ((this->unk_35C != sp20.result) && !func_80BDF390(this, play, &sp20))) { this->actor.shape.shadowDraw = NULL; diff --git a/src/overlays/actors/ovl_En_Am/overlay.cfg b/src/overlays/actors/ovl_En_Am/overlay.cfg deleted file mode 100644 index 8f03945db..000000000 --- a/src/overlays/actors/ovl_En_Am/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Am -z_en_am.c diff --git a/src/overlays/actors/ovl_En_An/overlay.cfg b/src/overlays/actors/ovl_En_An/overlay.cfg deleted file mode 100644 index 14a6d7d5f..000000000 --- a/src/overlays/actors/ovl_En_An/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_An -z_en_an.c diff --git a/src/overlays/actors/ovl_En_And/overlay.cfg b/src/overlays/actors/ovl_En_And/overlay.cfg deleted file mode 100644 index f62d705f0..000000000 --- a/src/overlays/actors/ovl_En_And/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_And -z_en_and.c diff --git a/src/overlays/actors/ovl_En_Ani/overlay.cfg b/src/overlays/actors/ovl_En_Ani/overlay.cfg deleted file mode 100644 index f0622d0c0..000000000 --- a/src/overlays/actors/ovl_En_Ani/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ani -z_en_ani.c diff --git a/src/overlays/actors/ovl_En_Ani/z_en_ani.c b/src/overlays/actors/ovl_En_Ani/z_en_ani.c index ec98213bb..8e98ae8a3 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c @@ -138,8 +138,7 @@ void EnAni_Init(Actor* thisx, PlayState* play) { this->actor.gravity = 0.0f; this->actor.flags |= ACTOR_FLAG_10; this->stateFlags |= ANI_STATE_CLIMBING; - gSaveContext.eventInf[1] &= (u8)~0x10; - + CLEAR_EVENTINF(EVENTINF_14); } else { // ANI_TYPE_STANDING // ( unused code ) // for some reason standing he has a large collider @@ -244,7 +243,7 @@ void EnAni_LoseBalance(EnAni* this, PlayState* play) { // frame count : 0.0f, only first frame, rest is handled in next action func Animation_Change(&this->skelAnime, &gAniLandingThenStandingUpAnim, 0.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 5.0f); this->actionFunc = EnAni_FallToGround; - gSaveContext.eventInf[1] |= 0x10; + SET_EVENTINF(EVENTINF_14); } } diff --git a/src/overlays/actors/ovl_En_Aob_01/overlay.cfg b/src/overlays/actors/ovl_En_Aob_01/overlay.cfg deleted file mode 100644 index 592d6a834..000000000 --- a/src/overlays/actors/ovl_En_Aob_01/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Aob_01 -z_en_aob_01.c diff --git a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c index 6af60b84d..84feccbd8 100644 --- a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c +++ b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c @@ -12,6 +12,8 @@ #define THIS ((EnAob01*)thisx) +//! TODO: this file require macros for its uses of weekEventReg + void EnAob01_Init(Actor* thisx, PlayState* play); void EnAob01_Destroy(Actor* thisx, PlayState* play); void EnAob01_Update(Actor* thisx, PlayState* play); @@ -100,8 +102,8 @@ void func_809C10B0(EnAob01* this, s32 arg1) { } void func_809C1124(void) { - gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)REG(15); - gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.daySpeed); + gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED; + gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.timeSpeedOffset); } void func_809C1158(EnAob01* this, PlayState* play) { @@ -218,15 +220,15 @@ void func_809C16DC(EnAob01* this, PlayState* play) { switch (gSaveContext.save.day) { case 1: if (!gSaveContext.save.isNight) { - if (!(gSaveContext.save.weekEventReg[64] & 0x80)) { - gSaveContext.save.weekEventReg[64] |= 0x80; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_64_80)) { + SET_WEEKEVENTREG(WEEKEVENTREG_64_80); this->unk_210 = 0x3520; } else { this->unk_210 = 0x352F; } } else { - if (!(gSaveContext.save.weekEventReg[65] & 1)) { - gSaveContext.save.weekEventReg[65] |= 1; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_01)) { + SET_WEEKEVENTREG(WEEKEVENTREG_65_01); this->unk_210 = 0x3530; } else { this->unk_210 = 0x352F; @@ -236,15 +238,15 @@ void func_809C16DC(EnAob01* this, PlayState* play) { case 2: if (!gSaveContext.save.isNight) { - if (!(gSaveContext.save.weekEventReg[65] & 2)) { - gSaveContext.save.weekEventReg[65] |= 2; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_02)) { + SET_WEEKEVENTREG(WEEKEVENTREG_65_02); this->unk_210 = 0x3531; } else { this->unk_210 = 0x352F; } } else { - if (!(gSaveContext.save.weekEventReg[65] & 4)) { - gSaveContext.save.weekEventReg[65] |= 4; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_04)) { + SET_WEEKEVENTREG(WEEKEVENTREG_65_04); this->unk_210 = 0x3532; } else { this->unk_210 = 0x352F; @@ -254,15 +256,15 @@ void func_809C16DC(EnAob01* this, PlayState* play) { case 3: if (!gSaveContext.save.isNight) { - if (!(gSaveContext.save.weekEventReg[65] & 8)) { - gSaveContext.save.weekEventReg[65] |= 8; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_08)) { + SET_WEEKEVENTREG(WEEKEVENTREG_65_08); this->unk_210 = 0x3533; } else { this->unk_210 = 0x352F; } } else { - if (!(gSaveContext.save.weekEventReg[65] & 0x10)) { - gSaveContext.save.weekEventReg[65] |= 0x10; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_10)) { + SET_WEEKEVENTREG(WEEKEVENTREG_65_10); this->unk_210 = 0x3534; } else { this->unk_210 = 0x352F; @@ -392,7 +394,7 @@ void func_809C16DC(EnAob01* this, PlayState* play) { if (this->unk_2D2 & 2) { this->unk_2D2 &= ~2; Rupees_ChangeBy(-this->unk_434); - func_800B7298(play, NULL, 7); + func_800B7298(play, NULL, PLAYER_CSMODE_7); play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; this->actionFunc = func_809C1C9C; @@ -412,8 +414,8 @@ void func_809C16DC(EnAob01* this, PlayState* play) { void func_809C1C9C(EnAob01* this, PlayState* play) { if (gSaveContext.rupeeAccumulator == 0) { - gSaveContext.save.weekEventReg[63] |= 1; - gSaveContext.save.weekEventReg[63] &= (u8)~2; + SET_WEEKEVENTREG(WEEKEVENTREG_63_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02); this->unk_2D2 |= 0x20; func_800FD750(0x40); play->nextEntrance = ENTRANCE(DOGGY_RACETRACK, 1); @@ -474,7 +476,7 @@ void func_809C1EC8(EnAob01* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); if (SubS_AngleDiffLessEqual(this->actor.shape.rot.y, 0x36B0, this->actor.yawTowardsPlayer)) { point.x = player->actor.world.pos.x; - point.y = player->bodyPartsPos[7].y + 3.0f; + point.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; point.z = player->actor.world.pos.z; SubS_TrackPoint(&point, &this->actor.focus.pos, &this->actor.shape.rot, &this->trackTarget, &this->headRot, &this->torsoRot, &sTrackOptions); @@ -675,7 +677,7 @@ void func_809C2788(EnAob01* this, PlayState* play) { play->nextEntrance = ENTRANCE(DOGGY_RACETRACK, 1); gSaveContext.eventInf[0] = (gSaveContext.eventInf[0] & (u8)~7) | 3; play->transitionType = TRANS_TYPE_64; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; play->transitionTrigger = TRANS_TRIGGER_START; } } @@ -761,13 +763,13 @@ void func_809C2A64(EnAob01* this, PlayState* play) { this->torsoRot = this->unk_2F2; this->actor.parent = NULL; this->actor.shape.rot.y = this->actor.world.rot.y; - if (gSaveContext.save.weekEventReg[8] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_20)) { this->actionFunc = func_809C2BE4; } else { - gSaveContext.save.weekEventReg[8] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_08_20); this->actionFunc = func_809C2BE4; } - } else if (gSaveContext.save.weekEventReg[8] & 0x20) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_20)) { Actor_PickUp(&this->actor, play, GI_RUPEE_RED, 300.0f, 300.0f); } else { Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 300.0f, 300.0f); @@ -779,12 +781,12 @@ void func_809C2BE4(EnAob01* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) { - if (gSaveContext.save.weekEventReg[63] & 2) { - gSaveContext.save.weekEventReg[63] &= (u8)~2; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_02)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02); } - if (gSaveContext.save.weekEventReg[63] & 1) { - gSaveContext.save.weekEventReg[63] &= (u8)~1; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_01)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01); } this->unk_210 = 0; @@ -833,12 +835,12 @@ void func_809C2D0C(EnAob01* this, PlayState* play) { this->unk_434 = 0; this->actor.shape.rot.y = this->actor.world.rot.y; - if (gSaveContext.save.weekEventReg[63] & 2) { - gSaveContext.save.weekEventReg[63] &= (u8)~2; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_02)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02); } - if (gSaveContext.save.weekEventReg[63] & 1) { - gSaveContext.save.weekEventReg[63] &= (u8)~1; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_01)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01); } this->unk_210 = 0x354C; @@ -967,7 +969,7 @@ void EnAob01_Destroy(Actor* thisx, PlayState* play) { EnAob01* this = THIS; if (!(this->unk_2D2 & 0x20)) { - gSaveContext.save.weekEventReg[63] &= (u8)~1; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01); } Collider_DestroyCylinder(play, &this->collider); } diff --git a/src/overlays/actors/ovl_En_Arrow/overlay.cfg b/src/overlays/actors/ovl_En_Arrow/overlay.cfg deleted file mode 100644 index 5ae277d22..000000000 --- a/src/overlays/actors/ovl_En_Arrow/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Arrow -z_en_arrow.c diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c index dd6f503ef..b07e65de3 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c @@ -474,7 +474,7 @@ void func_8088ACE0(EnArrow* this, PlayState* play) { } if (this->actor.params < ENARROW_6) { - this->actor.shape.rot.x = Math_FAtan2F(this->actor.speedXZ, -this->actor.velocity.y); + this->actor.shape.rot.x = Math_Atan2S_XY(this->actor.speedXZ, -this->actor.velocity.y); } } diff --git a/src/overlays/actors/ovl_En_Attack_Niw/overlay.cfg b/src/overlays/actors/ovl_En_Attack_Niw/overlay.cfg deleted file mode 100644 index 2b4aa71be..000000000 --- a/src/overlays/actors/ovl_En_Attack_Niw/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Attack_Niw -z_en_attack_niw.c diff --git a/src/overlays/actors/ovl_En_Az/overlay.cfg b/src/overlays/actors/ovl_En_Az/overlay.cfg deleted file mode 100644 index e929d9380..000000000 --- a/src/overlays/actors/ovl_En_Az/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Az -z_en_az.c diff --git a/src/overlays/actors/ovl_En_Az/z_en_az.c b/src/overlays/actors/ovl_En_Az/z_en_az.c index f5a028152..e87bf9d62 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -151,8 +151,8 @@ void func_80A94AB8(EnAz* this, PlayState* play, s32 spawnIndex) { play->nextEntrance = Entrance_CreateFromSpawn(spawnIndex); gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; } void func_80A94B20(PlayState* play) { @@ -207,32 +207,32 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { this->actor.targetMode = 1; switch (BEAVER_GET_PARAM_F00(thisx)) { case 0: - phi_v1 = (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 0)) && - (gSaveContext.save.weekEventReg[93] & 1); + phi_v1 = + (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 0)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01); phi_v1 = !phi_v1; break; case 2: phi_v1 = (gSaveContext.save.entrance != ENTRANCE(WATERFALL_RAPIDS, 1)) || - !(gSaveContext.save.weekEventReg[24] & 4); + !CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04); break; case 4: phi_v1 = gSaveContext.save.entrance != ENTRANCE(WATERFALL_RAPIDS, 2); break; case 1: - phi_v1 = (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 0)) && - (gSaveContext.save.weekEventReg[93] & 1); + phi_v1 = + (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 0)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01); phi_v1 = !phi_v1; break; case 3: - phi_v1 = (gSaveContext.save.entrance != ENTRANCE(WATERFALL_RAPIDS, 1)) || - (gSaveContext.save.weekEventReg[24] & 4); + phi_v1 = + (gSaveContext.save.entrance != ENTRANCE(WATERFALL_RAPIDS, 1)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04); break; case 5: phi_v1 = gSaveContext.save.entrance != ENTRANCE(WATERFALL_RAPIDS, 2); break; case 6: phi_v1 = (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 0)) && - !(gSaveContext.save.weekEventReg[93] & 1); + !CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01); phi_v1 = !phi_v1; break; default: @@ -292,7 +292,7 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { switch (gSaveContext.save.entrance) { case ENTRANCE(WATERFALL_RAPIDS, 0): - if (gSaveContext.save.weekEventReg[93] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01)) { this->unk_2FA = 5; if (this->unk_374 & 2) { this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); @@ -321,14 +321,14 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { func_80A97C0C(this, play); break; case ENTRANCE(WATERFALL_RAPIDS, 1): - if (gSaveContext.save.weekEventReg[93] & 1) { - if (gSaveContext.save.weekEventReg[24] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) { this->unk_2FA = 8; } else { this->unk_2FA = 6; } } else { - if (gSaveContext.save.weekEventReg[24] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) { this->unk_2FA = 3; } else { this->unk_2FA = 1; @@ -338,7 +338,7 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { SubS_CopyPointFromPathList(play->setupPathList, BEAVER_GET_PARAM_FF(thisx), play->setupPathList[BEAVER_GET_PARAM_FF(thisx)].count - 1, &D_80A99E80); } - if (gSaveContext.save.weekEventReg[24] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) { if (this->unk_374 & 2) { func_80A97D5C(this, play); } else { @@ -351,14 +351,14 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { } break; case ENTRANCE(WATERFALL_RAPIDS, 2): - if (gSaveContext.save.weekEventReg[93] & 1) { - if (gSaveContext.save.weekEventReg[24] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) { this->unk_2FA = 9; } else { this->unk_2FA = 7; } } else { - if (gSaveContext.save.weekEventReg[24] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) { this->unk_2FA = 4; } else { this->unk_2FA = 2; @@ -698,7 +698,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { switch (play->msgCtx.currentTextId) { case 0x70: case 0xCD: - gSaveContext.save.weekEventReg[24] &= (u8)~1; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_01); this->actor.textId = 0x10F2; SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_BOW, &this->animIndex); @@ -707,7 +707,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { break; case 0x10CE: this->actor.textId = 0x10CF; - gSaveContext.save.weekEventReg[16] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_16_40); break; case 0x10CF: this->actor.textId = 0x10D0; @@ -782,7 +782,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { break; case 0x10D9: if ((this->unk_2FA == 3) || (this->unk_2FA == 8)) { - gSaveContext.save.weekEventReg[24] &= (u8)~4; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); } func_80A94AB8(this, play, 0); func_80A979DC(this, play); @@ -866,7 +866,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { ret = 0; break; case 0x10E7: - gSaveContext.save.weekEventReg[24] &= (u8)~4; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); func_80A94AB8(this, play, 0); SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, &this->animIndex); @@ -924,7 +924,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { break; case 0x10ED: if ((this->unk_2FA == 4) || (this->unk_2FA == 9)) { - gSaveContext.save.weekEventReg[24] &= (u8)~4; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); } func_80A94AB8(this, play, 0); func_80A979DC(this, play); @@ -943,12 +943,12 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { ret = 0; break; case 0x10F1: - gSaveContext.save.weekEventReg[93] |= 1; - if (gSaveContext.save.weekEventReg[23] & 0x80) { + SET_WEEKEVENTREG(WEEKEVENTREG_93_01); + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_80)) { this->getItemId = GI_RUPEE_RED; } else { this->getItemId = GI_BOTTLE; - gSaveContext.save.weekEventReg[23] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_23_80); } SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, &this->animIndex); @@ -958,7 +958,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { break; case 0x10F2: case 0x1109: - gSaveContext.save.weekEventReg[24] &= (u8)~4; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, &this->animIndex); SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, @@ -992,7 +992,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { case 0x10F8: if (play->msgCtx.choiceIndex == 0) { func_8019F208(); - if (gSaveContext.save.weekEventReg[25] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_01)) { this->actor.textId = 0x1107; } else { this->actor.textId = 0x10FA; @@ -1044,7 +1044,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { case 0x10FE: if (play->msgCtx.choiceIndex == 0) { func_8019F208(); - if (gSaveContext.save.weekEventReg[25] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_01)) { this->actor.textId = 0x1108; } else { this->actor.textId = 0x1101; @@ -1065,7 +1065,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { ret = 0; break; case 0x1100: - gSaveContext.save.weekEventReg[24] &= (u8)~4; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, &this->animIndex); SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, @@ -1096,11 +1096,11 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { ret = 0; break; case 0x1105: - if (gSaveContext.save.weekEventReg[25] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_01)) { this->getItemId = GI_RUPEE_PURPLE; } else { this->getItemId = GI_HEART_PIECE; - gSaveContext.save.weekEventReg[25] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_25_01); } SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, &this->animIndex); @@ -1109,7 +1109,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) { ret = 7; break; case 0x1106: - gSaveContext.save.weekEventReg[24] &= (u8)~4; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, &this->animIndex); SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, @@ -1188,16 +1188,16 @@ s32 func_80A97274(EnAz* this, PlayState* play) { switch (this->unk_2FA) { case 0: default: - gSaveContext.save.weekEventReg[24] &= (u8)~4; - if (!(gSaveContext.save.weekEventReg[16] & 0x40)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); + if (!(CHECK_WEEKEVENTREG(WEEKEVENTREG_16_40))) { textId = 0x10CE; } else { textId = 0x10D4; } break; case 2: - if (gSaveContext.save.weekEventReg[24] & 1) { - gSaveContext.save.weekEventReg[24] |= 4; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_01)) { + SET_WEEKEVENTREG(WEEKEVENTREG_24_04); this->unk_3C0 = 0; textId = 0x10DD; } else { @@ -1205,26 +1205,26 @@ s32 func_80A97274(EnAz* this, PlayState* play) { } break; case 4: - if (gSaveContext.save.weekEventReg[24] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_01)) { textId = 0x10EE; } else { textId = 0x10E9; } break; case 5: - gSaveContext.save.weekEventReg[24] &= (u8)~4; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); textId = 0x10F3; break; case 7: - if (gSaveContext.save.weekEventReg[24] & 1) { - gSaveContext.save.weekEventReg[24] |= 4; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_01)) { + SET_WEEKEVENTREG(WEEKEVENTREG_24_04); textId = 0x10FB; } else { textId = 0x10E9; } break; case 9: - if (gSaveContext.save.weekEventReg[24] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_01)) { textId = 0x1102; } else { textId = 0x10E9; @@ -1337,7 +1337,7 @@ void func_80A97410(EnAz* this, PlayState* play) { func_80A97114(this, play); this->unk_378 = 2; } else if (func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, - PLAYER_AP_MINUS1)) { + PLAYER_IA_MINUS1)) { this->actor.textId = func_80A973B4(this, play); } } else { @@ -1431,8 +1431,8 @@ void func_80A97AB4(EnAz* this, PlayState* play) { func_80A979DC(this, play); } else { func_8019F230(); - if (gSaveContext.save.weekEventReg[24] & 4) { - gSaveContext.save.weekEventReg[24] &= (u8)~4; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04); } func_80151938(play, 0x10D9); } @@ -1465,13 +1465,13 @@ void func_80A97C4C(EnAz* this, PlayState* play) { } func_80A97410(this, play); if ((this->unk_2FA == 1) || (this->unk_2FA == 3) || (this->unk_2FA == 6) || (this->unk_2FA == 8)) { - gSaveContext.save.weekEventReg[24] &= (u8)~1; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_01); func_800FD750(NA_BGM_TIMED_MINI_GAME); play->nextEntrance = Entrance_CreateFromSpawn(1); gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_80; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; func_80A979DC(this, play); } else { Actor_MoveWithGravity(&this->actor); @@ -1482,12 +1482,12 @@ void func_80A97D5C(EnAz* this, PlayState* play) { Player* player = GET_PLAYER(play); player->stateFlags1 |= PLAYER_STATE1_20; - func_80112AFC(play); + Interface_InitMinigame(play); gSaveContext.minigameScore = (this->unk_374 & 2) ? 25 : 20; - play->interfaceCtx.unk_280 = 1; + play->interfaceCtx.minigameState = MINIGAME_STATE_COUNTDOWN_SETUP_3; if ((this->unk_2FA == 1) || (this->unk_2FA == 3)) { Interface_StartTimer(TIMER_ID_MINIGAME_2, 120); - } else if (gSaveContext.save.weekEventReg[25] & 1) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_01)) { Interface_StartTimer(TIMER_ID_MINIGAME_2, 100); } else { Interface_StartTimer(TIMER_ID_MINIGAME_2, 110); @@ -1498,7 +1498,7 @@ void func_80A97D5C(EnAz* this, PlayState* play) { void func_80A97E48(EnAz* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (play->interfaceCtx.unk_280 >= 8) { + if (play->interfaceCtx.minigameState >= MINIGAME_STATE_COUNTDOWN_GO) { player->stateFlags1 &= ~PLAYER_STATE1_20; func_80A97EAC(this, play); } @@ -1543,17 +1543,17 @@ void func_80A97F9C(EnAz* this, PlayState* play) { } if (SurfaceType_IsHorseBlocked(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId)) { if (func_80A94B98(this, play)) { - gSaveContext.save.weekEventReg[24] &= (u8)~1; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_01); } else { - gSaveContext.save.weekEventReg[24] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_24_01); } gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_STOP; this->unk_374 &= ~0x10; play->nextEntrance = Entrance_CreateFromSpawn(2); gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; this->actor.speedXZ = 0.0f; func_80A979DC(this, play); } else { @@ -1600,8 +1600,8 @@ void func_80A982E0(PlayState* play, ActorPathing* actorPathing) { sp28.z = actorPathing->curPoint.z - actorPathing->worldPos->z; actorPathing->distSqToCurPointXZ = Math3D_XZLengthSquared(sp28.x, sp28.z); actorPathing->distSqToCurPoint = Math3D_LengthSquared(&sp28); - actorPathing->rotToCurPoint.y = Math_FAtan2F(sp28.z, sp28.x); - actorPathing->rotToCurPoint.x = Math_FAtan2F(sqrtf(actorPathing->distSqToCurPointXZ), -sp28.y); + actorPathing->rotToCurPoint.y = Math_Atan2S_XY(sp28.z, sp28.x); + actorPathing->rotToCurPoint.x = Math_Atan2S_XY(sqrtf(actorPathing->distSqToCurPointXZ), -sp28.y); actorPathing->rotToCurPoint.z = 0; } diff --git a/src/overlays/actors/ovl_En_Baba/overlay.cfg b/src/overlays/actors/ovl_En_Baba/overlay.cfg deleted file mode 100644 index 8d3dddae0..000000000 --- a/src/overlays/actors/ovl_En_Baba/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Baba -z_en_baba.c diff --git a/src/overlays/actors/ovl_En_Baba/z_en_baba.c b/src/overlays/actors/ovl_En_Baba/z_en_baba.c index 00e63c7d6..6040076f4 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -167,13 +167,13 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) { switch (this->textId) { case 0: if (this->stateFlags & BOMB_SHOP_LADY_STATE_AUTOTALK) { - if (gSaveContext.save.weekEventReg[33] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { // Thanks. Can stock Bomb Bags tomorrow this->textId = 0x2A34; break; } - if (gSaveContext.save.weekEventReg[79] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) { this->stateFlags |= BOMB_SHOP_LADY_STATE_END_CONVERSATION; // Oh my, learned my lesson. Can't stock Bomb Bags tomorrow this->textId = 0x2A33; @@ -185,8 +185,8 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) { this->textId = 0x2A32; break; } else if (player->transformation == PLAYER_FORM_DEKU) { - if (!(gSaveContext.save.weekEventReg[79] & 0x20)) { - gSaveContext.save.weekEventReg[79] |= 0x20; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_79_20)) { + SET_WEEKEVENTREG(WEEKEVENTREG_79_20); this->stateFlags |= BOMB_SHOP_LADY_STATE_END_CONVERSATION; // Small customer, use bombs as adult this->textId = 0x2A37; @@ -197,8 +197,8 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) { this->textId = 0x2A38; } break; - } else if (!(gSaveContext.save.weekEventReg[33] & 8)) { - if (!(gSaveContext.save.weekEventReg[73] & 1)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_73_01)) { // Thought could sell Big Bomb Bags this->textId = 0x660; break; @@ -207,7 +207,7 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) { this->textId = 0x662; break; } else { - if (!(gSaveContext.save.weekEventReg[73] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_73_02)) { // Someone helped me out this->textId = 0x65A; break; @@ -234,7 +234,7 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) { Actor_ChangeFocus(&this->actor, play, &this->bombShopkeeper->actor); // I'll go next time this->textId = 0x663; - gSaveContext.save.weekEventReg[73] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_73_01); this->stateFlags |= BOMB_SHOP_LADY_STATE_END_CONVERSATION; break; @@ -254,7 +254,7 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) { Actor_ChangeFocus(&this->actor, play, &this->bombShopkeeper->actor); // I worry about you this->textId = 0x65D; - gSaveContext.save.weekEventReg[73] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_73_02); this->stateFlags |= BOMB_SHOP_LADY_STATE_END_CONVERSATION; break; @@ -341,7 +341,7 @@ void EnBaba_UpdateModel(EnBaba* this, PlayState* play) { if (SubS_AngleDiffLessEqual(this->actor.shape.rot.y, 0x36B0, this->actor.yawTowardsPlayer) && !(this->stateFlags & BOMB_SHOP_LADY_STATE_KNOCKED_OVER)) { point.x = player->actor.world.pos.x; - point.y = player->bodyPartsPos[7].y + 3.0f; + point.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; point.z = player->actor.world.pos.z; SubS_TrackPoint(&point, &this->actor.focus.pos, &this->actor.shape.rot, &this->trackTarget, &this->headRot, @@ -476,7 +476,7 @@ s32 EnBaba_FollowTimePath(EnBaba* this, PlayState* play) { void EnBaba_HandleSchedule(EnBaba* this, PlayState* play) { switch (this->scheduleResult) { case BOMB_SHOP_LADY_SCH_FOLLOW_TIME_PATH: - gSaveContext.save.weekEventReg[58] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_58_40); this->stateFlags |= BOMB_SHOP_LADY_STATE_VISIBLE; EnBaba_FollowTimePath(this, play); break; @@ -512,7 +512,7 @@ void EnBaba_FinishInit(EnBaba* this, PlayState* play) { if ((BOMB_SHOP_LADY_GET_TYPE(&this->actor) == BOMB_SHOP_LADY_TYPE_FOLLOW_SCHEDULE) && (gSaveContext.save.entrance != ENTRANCE(NORTH_CLOCK_TOWN, 7)) && (BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor) != 0x3F)) { - if ((gSaveContext.save.weekEventReg[58] & 0x40) || + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_40) || (gSaveContext.save.time >= CLOCK_TIME(0, 20) && (gSaveContext.save.time < CLOCK_TIME(6, 0)))) { Actor_Kill(&this->actor); return; @@ -524,13 +524,13 @@ void EnBaba_FinishInit(EnBaba* this, PlayState* play) { this->actionFunc = EnBaba_FollowSchedule; } else if ((BOMB_SHOP_LADY_GET_TYPE(&this->actor) == BOMB_SHOP_LADY_TYPE_IDLE) && (gSaveContext.save.entrance == ENTRANCE(NORTH_CLOCK_TOWN, 7))) { - if (gSaveContext.save.weekEventReg[81] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_81_02)) { Actor_Kill(&this->actor); return; } this->stateFlags |= BOMB_SHOP_LADY_STATE_VISIBLE; - if (gSaveContext.save.weekEventReg[33] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { this->animIndex = BOMB_SHOP_LADY_ANIM_IDLE_HOLDING_BAG; } else { this->animIndex = BOMB_SHOP_LADY_ANIM_IDLE; @@ -603,12 +603,12 @@ void EnBaba_Talk(EnBaba* this, PlayState* play) { if (this->stateFlags & BOMB_SHOP_LADY_STATE_AUTOTALK) { if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { if (play->msgCtx.unk120B1 == 0) { - gSaveContext.save.weekEventReg[81] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_81_02); EnBaba_TriggerTransition(play, ENTRANCE(NORTH_CLOCK_TOWN, 7)); return; } } else { - gSaveContext.save.weekEventReg[81] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_81_02); EnBaba_TriggerTransition(play, ENTRANCE(NORTH_CLOCK_TOWN, 7)); } } else { @@ -626,7 +626,7 @@ void EnBaba_Talk(EnBaba* this, PlayState* play) { } } else if (talkState == TEXT_STATE_DONE) { if (Message_ShouldAdvance(play) && (play->msgCtx.unk120B1 == 0)) { - gSaveContext.save.weekEventReg[81] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_81_02); EnBaba_TriggerTransition(play, ENTRANCE(NORTH_CLOCK_TOWN, 7)); } } @@ -647,14 +647,14 @@ void EnBaba_GaveBlastMask(EnBaba* this, PlayState* play) { EnBaba_HandleConversation(this, play); this->actionFunc = EnBaba_Talk; } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } void EnBaba_FollowSchedule(EnBaba* this, PlayState* play) { ScheduleOutput scheduleOutput; - this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed); + this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, sSchedule, &scheduleOutput) || ((this->scheduleResult != scheduleOutput.result) && @@ -698,7 +698,7 @@ void EnBaba_KnockedOver(EnBaba* this, PlayState* play) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } } else { - if ((gSaveContext.save.weekEventReg[79] & 0x40) && (DECR(this->sakonDeadTimer) == 0)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40) && (DECR(this->sakonDeadTimer) == 0)) { Audio_QueueSeqCmd(0x101400FF); EnBaba_TriggerTransition(play, ENTRANCE(NORTH_CLOCK_TOWN, 7)); } else { diff --git a/src/overlays/actors/ovl_En_Baguo/overlay.cfg b/src/overlays/actors/ovl_En_Baguo/overlay.cfg deleted file mode 100644 index 19e80c5e0..000000000 --- a/src/overlays/actors/ovl_En_Baguo/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Baguo -z_en_baguo.c diff --git a/src/overlays/actors/ovl_En_Baisen/overlay.cfg b/src/overlays/actors/ovl_En_Baisen/overlay.cfg deleted file mode 100644 index e1ba96f41..000000000 --- a/src/overlays/actors/ovl_En_Baisen/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Baisen -z_en_baisen.c diff --git a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c index 5716c27d5..8812ae6d3 100644 --- a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c +++ b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c @@ -71,16 +71,14 @@ void EnBaisen_Init(Actor* thisx, PlayState* play) { this->paramCopy = this->actor.params; if (this->actor.params == 0) { this->unk290 = true; - if (!(gSaveContext.save.weekEventReg[63] & 0x80) && - ((gSaveContext.save.day != 3) || !gSaveContext.save.isNight)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_63_80) && ((gSaveContext.save.day != 3) || !gSaveContext.save.isNight)) { Actor_Kill(&this->actor); } } else { this->collider.dim.radius = 30; this->collider.dim.height = 60; this->collider.dim.yShift = 0; - if ((gSaveContext.save.weekEventReg[63] & 0x80) || - ((gSaveContext.save.day == 3) && (gSaveContext.save.isNight))) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_80) || ((gSaveContext.save.day == 3) && gSaveContext.save.isNight)) { Actor_Kill(&this->actor); } } @@ -155,7 +153,7 @@ void func_80BE887C(EnBaisen* this, PlayState* play) { } else { if (this->paramCopy != 0) { this->textIdIndex = 0; - if (gSaveContext.save.weekEventReg[60] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_60_08)) { this->textIdIndex = 1; } if (Player_GetMask(play) == PLAYER_MASK_COUPLE) { diff --git a/src/overlays/actors/ovl_En_Bal/overlay.cfg b/src/overlays/actors/ovl_En_Bal/overlay.cfg deleted file mode 100644 index 53fdf3ee5..000000000 --- a/src/overlays/actors/ovl_En_Bal/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bal -z_en_bal.c diff --git a/src/overlays/actors/ovl_En_Bat/overlay.cfg b/src/overlays/actors/ovl_En_Bat/overlay.cfg deleted file mode 100644 index 1d11f79a3..000000000 --- a/src/overlays/actors/ovl_En_Bat/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bat -z_en_bat.c diff --git a/src/overlays/actors/ovl_En_Bb/overlay.cfg b/src/overlays/actors/ovl_En_Bb/overlay.cfg deleted file mode 100644 index 048245caf..000000000 --- a/src/overlays/actors/ovl_En_Bb/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bb -z_en_bb.c diff --git a/src/overlays/actors/ovl_En_Bba_01/overlay.cfg b/src/overlays/actors/ovl_En_Bba_01/overlay.cfg deleted file mode 100644 index e26bcdd36..000000000 --- a/src/overlays/actors/ovl_En_Bba_01/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bba_01 -z_en_bba_01.c diff --git a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c index 067a4da8b..1b9538146 100644 --- a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c +++ b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c @@ -111,7 +111,7 @@ void EnBba01_UpdateModel(EnBba01* this, PlayState* play) { EnHy_UpdateSkelAnime(&this->enHy, play); if (SubS_AngleDiffLessEqual(this->enHy.actor.shape.rot.y, 0x36B0, this->enHy.actor.yawTowardsPlayer)) { point.x = player->actor.world.pos.x; - point.y = player->bodyPartsPos[7].y + 3.0f; + point.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; point.z = player->actor.world.pos.z; SubS_TrackPoint(&point, &this->enHy.actor.focus.pos, &this->enHy.actor.shape.rot, &this->enHy.trackTarget, &this->enHy.headRot, &this->enHy.torsoRot, &sTrackOptions); @@ -150,7 +150,7 @@ s32 func_809CC270(EnBba01* this, PlayState* play) { Actor_GetScreenPos(play, &this->enHy.actor, &x, &y); //! @bug: Both x and y conditionals are always true, || should be an && if (!this->enHy.waitingOnInit && ((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT))) { - func_800B85E0(&this->enHy.actor, play, 30.0f, PLAYER_AP_MAGIC_BEANS); + func_800B85E0(&this->enHy.actor, play, 30.0f, PLAYER_IA_MAGIC_BEANS); } return true; } diff --git a/src/overlays/actors/ovl_En_Bbfall/overlay.cfg b/src/overlays/actors/ovl_En_Bbfall/overlay.cfg deleted file mode 100644 index 711e74e29..000000000 --- a/src/overlays/actors/ovl_En_Bbfall/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bbfall -z_en_bbfall.c diff --git a/src/overlays/actors/ovl_En_Bee/overlay.cfg b/src/overlays/actors/ovl_En_Bee/overlay.cfg deleted file mode 100644 index ef6192fc4..000000000 --- a/src/overlays/actors/ovl_En_Bee/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bee -z_en_bee.c diff --git a/src/overlays/actors/ovl_En_Bh/overlay.cfg b/src/overlays/actors/ovl_En_Bh/overlay.cfg deleted file mode 100644 index 2fea0e1e5..000000000 --- a/src/overlays/actors/ovl_En_Bh/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bh -z_en_bh.c diff --git a/src/overlays/actors/ovl_En_Bigokuta/overlay.cfg b/src/overlays/actors/ovl_En_Bigokuta/overlay.cfg deleted file mode 100644 index 40f093987..000000000 --- a/src/overlays/actors/ovl_En_Bigokuta/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bigokuta -z_en_bigokuta.c diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c index 3792c09c7..1f037a8a8 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -104,7 +104,7 @@ void EnBigokuta_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo(&this->picto.actor.colChkInfo, NULL, &sColChkInfoInit); this->cutscene = ActorCutscene_GetAdditionalCutscene(this->picto.actor.cutscene); - if (gSaveContext.save.weekEventReg[20] & 2 || + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02) || ((this->picto.actor.params != 0xFF) && Flags_GetSwitch(play, this->picto.actor.params))) { Actor_Kill(&this->picto.actor); } else { @@ -179,7 +179,7 @@ void EnBigokuta_ShootPlayer(EnBigokuta* this, PlayState* play) { } s32 EnBigokuta_ValidatePictograph(PlayState* play, Actor* thisx) { - return Snap_ValidatePictograph(play, thisx, PICTOGRAPH_BIG_OCTO, &thisx->focus.pos, &thisx->shape.rot, 280.0f, + return Snap_ValidatePictograph(play, thisx, PICTO_VALID_BIG_OCTO, &thisx->focus.pos, &thisx->shape.rot, 280.0f, 1800.0f, -1); } @@ -377,8 +377,8 @@ void EnBigokuta_PlayDeathCutscene(EnBigokuta* this, PlayState* play) { } else if (ActorCutscene_GetCanPlayNext(this->cutscene)) { ActorCutscene_Start(this->cutscene, &this->picto.actor); - if (!(gSaveContext.eventInf[4] & 2) && !(gSaveContext.eventInf[3] & 0x20)) { - func_800B724C(play, &this->picto.actor, 7); + if (!CHECK_EVENTINF(EVENTINF_41) && !CHECK_EVENTINF(EVENTINF_35)) { + func_800B724C(play, &this->picto.actor, PLAYER_CSMODE_7); } else { player = GET_PLAYER(play); player->stateFlags1 |= PLAYER_STATE1_20; @@ -453,8 +453,8 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play) { ActorCutscene_Stop(this->cutscene); Actor_Kill(&this->picto.actor); - if (!(gSaveContext.eventInf[4] & 2) && !(gSaveContext.eventInf[3] & 0x20)) { - func_800B724C(play, &this->picto.actor, 6); + if (!CHECK_EVENTINF(EVENTINF_41) && !CHECK_EVENTINF(EVENTINF_35)) { + func_800B724C(play, &this->picto.actor, PLAYER_CSMODE_6); } else { Player* player = GET_PLAYER(play); diff --git a/src/overlays/actors/ovl_En_Bigpamet/overlay.cfg b/src/overlays/actors/ovl_En_Bigpamet/overlay.cfg deleted file mode 100644 index df083a170..000000000 --- a/src/overlays/actors/ovl_En_Bigpamet/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bigpamet -z_en_bigpamet.c diff --git a/src/overlays/actors/ovl_En_Bigpo/overlay.cfg b/src/overlays/actors/ovl_En_Bigpo/overlay.cfg deleted file mode 100644 index 1519b5573..000000000 --- a/src/overlays/actors/ovl_En_Bigpo/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bigpo -z_en_bigpo.c diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c index 63c77b625..5398418f2 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -300,7 +300,7 @@ void EnBigpo_SetupSpawnCutscene(EnBigpo* this) { void EnBigpo_WaitCutsceneQueue(EnBigpo* this, PlayState* play) { if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { ActorCutscene_Start(this->actor.cutscene, &this->actor); - func_800B724C(play, &this->actor, 7); + func_800B724C(play, &this->actor, PLAYER_CSMODE_7); this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene); if (this->actor.params == ENBIGPO_REGULAR) { // and SUMMONED, got switched earlier EnBigpo_SpawnCutsceneStage1(this, play); @@ -471,7 +471,7 @@ void EnBigpo_SpawnCutsceneStage8(EnBigpo* this, PlayState* play) { } else { // ENBIGPO_REGULAR ActorCutscene_Stop(this->actor.cutscene); } - func_800B724C(play, &this->actor, 6); + func_800B724C(play, &this->actor, PLAYER_CSMODE_6); EnBigpo_SetupIdleFlying(this); // setup idle flying } } diff --git a/src/overlays/actors/ovl_En_Bigslime/overlay.cfg b/src/overlays/actors/ovl_En_Bigslime/overlay.cfg deleted file mode 100644 index c7441440e..000000000 --- a/src/overlays/actors/ovl_En_Bigslime/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bigslime -z_en_bigslime.c diff --git a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c index 5dc33095a..9cf4b425b 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -311,13 +311,11 @@ static InitChainEntry sInitChain[] = { }; void EnBigslime_Init(Actor* thisx, PlayState* play2) { - // gSaveContext.save.weekEventReg[KEY] = VALUE - // KEY | VALUE static s32 isFrogReturnedFlags[] = { - (32 << 8) | 0x40, // Woodfall Temple Frog Returned - (32 << 8) | 0x80, // Great Bay Temple Frog Returned - (33 << 8) | 0x01, // Southern Swamp Frog Returned - (33 << 8) | 0x02, // Laundry Pool Frog Returned + WEEKEVENTREG_32_40, + WEEKEVENTREG_32_80, + WEEKEVENTREG_33_01, + WEEKEVENTREG_33_02, }; PlayState* play = play2; EnBigslime* this = THIS; @@ -342,43 +340,43 @@ void EnBigslime_Init(Actor* thisx, PlayState* play2) { if (Flags_GetClear(play, play->roomCtx.curRoom.num)) { Actor_Kill(&this->actor); - if (!(gSaveContext.save.weekEventReg[isFrogReturnedFlags[this->actor.params - 1] >> 8] & - (u8)isFrogReturnedFlags[this->actor.params - 1])) { + if (!CHECK_WEEKEVENTREG(isFrogReturnedFlags[this->actor.params - 1])) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_MINIFROG, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, this->actor.params); } - } else { - this->cutscene = this->actor.cutscene; - this->actor.scale.x = this->actor.scale.z = 0.15f; - this->actor.scale.y = 0.075f; - this->vtxScaleX = this->vtxScaleZ = 0.015000001f; - this->actor.home.pos.x = GBT_ROOM_5_CENTER_X; - this->actor.home.pos.y = GBT_ROOM_5_MAX_Y - 75.0f; - this->actor.home.pos.z = GBT_ROOM_5_CENTER_Z; - for (i = 0; i < MINISLIME_NUM_SPAWN; i++) { - this->minislime[i] = (EnMinislime*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, - ACTOR_EN_MINISLIME, 0.0f, 0.0f, 0.0f, 0, 0, 0, i); - if (this->minislime[i] == NULL) { - for (i = i - 1; i >= 0; i--) { - Actor_Kill(&this->minislime[i]->actor); - } - - Actor_Kill(&this->actor); - return; - } - } - - this->minislimeFrozenTexAnim = Lib_SegmentedToVirtual(&gMinislimeFrozenTexAnim); - this->bigslimeFrozenTexAnim = Lib_SegmentedToVirtual(&gBigslimeFrozenTexAnim); - this->iceShardTexAnim = Lib_SegmentedToVirtual(&gBigslimeIceShardTexAnim); - this->actor.world.pos.y = GBT_ROOM_5_MIN_Y; - this->actor.flags &= ~ACTOR_FLAG_1; - this->actor.shape.shadowAlpha = 255; - this->gekkoScale = 0.007f; - this->actor.shape.rot.y = 0; - this->minislimeToThrow = this->minislime[0]; - EnBigslime_SetupInitEntrance(this); + return; } + + this->cutscene = this->actor.cutscene; + this->actor.scale.x = this->actor.scale.z = 0.15f; + this->actor.scale.y = 0.075f; + this->vtxScaleX = this->vtxScaleZ = 0.015000001f; + this->actor.home.pos.x = GBT_ROOM_5_CENTER_X; + this->actor.home.pos.y = GBT_ROOM_5_MAX_Y - 75.0f; + this->actor.home.pos.z = GBT_ROOM_5_CENTER_Z; + for (i = 0; i < MINISLIME_NUM_SPAWN; i++) { + this->minislime[i] = (EnMinislime*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_MINISLIME, + 0.0f, 0.0f, 0.0f, 0, 0, 0, i); + if (this->minislime[i] == NULL) { + for (i = i - 1; i >= 0; i--) { + Actor_Kill(&this->minislime[i]->actor); + } + + Actor_Kill(&this->actor); + return; + } + } + + this->minislimeFrozenTexAnim = Lib_SegmentedToVirtual(gMinislimeFrozenTexAnim); + this->bigslimeFrozenTexAnim = Lib_SegmentedToVirtual(gBigslimeFrozenTexAnim); + this->iceShardTexAnim = Lib_SegmentedToVirtual(gBigslimeIceShardTexAnim); + this->actor.world.pos.y = GBT_ROOM_5_MIN_Y; + this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.shape.shadowAlpha = 255; + this->gekkoScale = 0.007f; + this->actor.shape.rot.y = 0; + this->minislimeToThrow = this->minislime[0]; + EnBigslime_SetupInitEntrance(this); } void EnBigslime_Destroy(Actor* thisx, PlayState* play) { @@ -851,7 +849,7 @@ void EnBigslime_EndCutscene(EnBigslime* this, PlayState* play) { this->subCamId = SUB_CAM_ID_DONE; ActorCutscene_Stop(this->cutscene); this->cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); - func_800B724C(play, &this->actor, 6); + func_800B724C(play, &this->actor, PLAYER_CSMODE_6); } } @@ -940,7 +938,7 @@ void EnBigslime_SetupCutsceneStartBattle(EnBigslime* this, PlayState* play) { this->bigslimeCollider[0].base.acFlags &= ~AC_ON; Math_Vec3f_Copy(&subCam->at, &this->actor.focus.pos); - func_800B7298(play, &this->actor, 4); + func_800B7298(play, &this->actor, PLAYER_CSMODE_4); player->actor.shape.rot.y = this->actor.yawTowardsPlayer + 0x8000; player->actor.world.pos.x = Math_SinS(this->actor.yawTowardsPlayer) * 347.0f + this->actor.world.pos.x; @@ -988,7 +986,7 @@ void EnBigslime_SetupCallMinislime(EnBigslime* this, PlayState* play) { Animation_MorphToPlayOnce(&this->skelAnime, &gGekkoCallAnim, 5.0f); EnBigslime_GekkoSfxOutsideBigslime(this, NA_SE_EN_FROG_GREET); this->callTimer = 0; - func_800B7298(play, &this->actor, 7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_7); this->actionFunc = EnBigslime_CallMinislime; } @@ -1012,7 +1010,7 @@ void EnBigslime_CallMinislime(EnBigslime* this, PlayState* play) { EnBigslime_InitFallMinislime(this); play->envCtx.lightSettingOverride = 0xFF; this->callTimer = 35; - func_800B7298(play, &this->actor, 4); + func_800B7298(play, &this->actor, PLAYER_CSMODE_4); } } @@ -1626,7 +1624,7 @@ void EnBigslime_AttackPlayerInBigslime(EnBigslime* this, PlayState* play) { } play->damagePlayer(play, -4); - func_800B8E58(player, player->ageProperties->unk_92 + NA_SE_VO_LI_DAMAGE_S); + func_800B8E58(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S); this->gekkoRot.y += (s16)(Rand_S16Offset(0x4000, 0x4000) * (Rand_ZeroOne() < 0.5f ? -1 : 1)); this->gekkoPosOffset.x = Math_SinS(this->gekkoRot.y) * -50.0f; this->gekkoPosOffset.z = Math_CosS(this->gekkoRot.y) * -50.0f; @@ -2545,7 +2543,7 @@ void EnBigslime_PlayCutscene(EnBigslime* this, PlayState* play) { } else if (ActorCutscene_GetCanPlayNext(this->cutscene)) { ActorCutscene_Start(this->cutscene, &this->actor); if (this->actionFuncStored != EnBigslime_SquishFlat) { - func_800B724C(play, &this->actor, 7); + func_800B724C(play, &this->actor, PLAYER_CSMODE_7); } this->subCamId = ActorCutscene_GetCurrentSubCamId(this->cutscene); @@ -2986,16 +2984,16 @@ void EnBigslime_DrawBigslime(Actor* thisx, PlayState* play) { // Draw Bigslime gSPSegment(POLY_XLU_DISP++, 0x09, sBigslimeDynamicVtx[this->dynamicVtxState]); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, &gBigslimeNormalDL); - gSPDisplayList(POLY_XLU_DISP++, &gBigslimeVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gBigslimeNormalMaterialDL); + gSPDisplayList(POLY_XLU_DISP++, gBigslimeModelDL); // Draw frozen Bigslime if ((this->actionFunc == EnBigslime_Freeze) || (this->actionFunc == EnBigslime_FrozenGround) || (this->actionFunc == EnBigslime_FrozenFall) || (this->actionFunc == EnBigslime_Melt)) { AnimatedMat_Draw(play, this->bigslimeFrozenTexAnim); gSPSegment(POLY_XLU_DISP++, 0x09, sBigslimeTargetVtx); - gSPDisplayList(POLY_XLU_DISP++, &gBigslimeFrozenVtxDL); - gSPDisplayList(POLY_XLU_DISP++, &gBigslimeVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gBigslimeFrozenMaterialDL); + gSPDisplayList(POLY_XLU_DISP++, gBigslimeModelDL); } // Draw bubbles inside Bigslime @@ -3014,7 +3012,7 @@ void EnBigslime_DrawBigslime(Actor* thisx, PlayState* play) { billboardMtxF->zw = dynamicVtx->n.ob[2] * this->actor.scale.z * bubblesInfoPtr->scaleVtx + this->actor.world.pos.z; gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, &gBigslimeBubbleDL); + gSPDisplayList(POLY_XLU_DISP++, gBigslimeBubbleDL); } } CLOSE_DISPS(play->state.gfxCtx); @@ -3133,12 +3131,12 @@ void EnBigslime_DrawShatteringEffects(EnBigslime* this, PlayState* play) { Matrix_Translate(this->frozenPos.x, this->frozenPos.y, this->frozenPos.z, MTXMODE_NEW); Matrix_Scale(this->shockwaveScale, this->shockwaveScale, this->shockwaveScale, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, &gBigslimeShockwaveDL); + gSPDisplayList(POLY_XLU_DISP++, gBigslimeShockwaveDL); } // Draw Ice Shards AnimatedMat_Draw(play, this->iceShardTexAnim); - gSPDisplayList(POLY_XLU_DISP++, &gBigslimeIceShardDL); + gSPDisplayList(POLY_XLU_DISP++, gBigslimeIceShardDL); for (i = 0; i < BIGSLIME_NUM_ICE_SHARD; i++) { iceShardEffect = &this->iceShardEffect[i]; @@ -3147,7 +3145,7 @@ void EnBigslime_DrawShatteringEffects(EnBigslime* this, PlayState* play) { &iceShardEffect->rot); Matrix_Scale(iceShardEffect->scale, iceShardEffect->scale, iceShardEffect->scale, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, &gBigslimeIceShardVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gBigslimeIceShardVtxDL); } } diff --git a/src/overlays/actors/ovl_En_Bji_01/overlay.cfg b/src/overlays/actors/ovl_En_Bji_01/overlay.cfg deleted file mode 100644 index 6455065bd..000000000 --- a/src/overlays/actors/ovl_En_Bji_01/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bji_01 -z_en_bji_01.c diff --git a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c index 41bd94894..ed7b8c194 100644 --- a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c +++ b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c @@ -75,7 +75,7 @@ void func_809CCDE0(EnBji01* this, PlayState* play) { s32 pad[2]; Math_Vec3f_Copy(&pitchTarget, &player->actor.world.pos); - pitchTarget.y = player->bodyPartsPos[7].y + 3.0f; + pitchTarget.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; SubS_TrackPointStep(&this->actor.world.pos, &this->actor.focus.pos, this->actor.shape.rot.y, &player->actor.world.pos, &pitchTarget, &this->headZRotStep, &this->headXRotStep, &this->torsoZRotStep, &this->torsoXRotStep, 0x1554, 0x1FFE, 0xE38, 0x1C70); @@ -109,46 +109,46 @@ void func_809CCEE8(EnBji01* this, PlayState* play) { } else { this->moonsTear = (ObjMoonStone*)SubS_FindActor(play, NULL, ACTORCAT_PROP, ACTOR_OBJ_MOON_STONE); } - func_800B8500(&this->actor, play, 60.0f, 10.0f, PLAYER_AP_NONE); + func_800B8500(&this->actor, play, 60.0f, 10.0f, PLAYER_IA_NONE); } } void func_809CD028(EnBji01* this, PlayState* play) { - f32 timeBeforeMoonCrash; + f32 timeUntilMoonCrash; switch (this->actor.params) { case SHIKASHI_TYPE_DEFAULT: case SHIKASHI_TYPE_FINISHED_CONVERSATION: switch (gSaveContext.save.playerForm) { case PLAYER_FORM_DEKU: - if (gSaveContext.save.weekEventReg[17] & 0x10) { - if (gSaveContext.save.weekEventReg[74] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_17_10)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_74_80)) { this->textId = 0x5F4; } else { this->textId = 0x5E2; } } else { this->textId = 0x5EC; - gSaveContext.save.weekEventReg[17] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_17_10); } break; case PLAYER_FORM_HUMAN: if (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK) { this->textId = 0x236A; - } else if (gSaveContext.save.weekEventReg[74] & 0x10) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_74_10)) { this->textId = 0x5F6; } else { this->textId = 0x5F5; - gSaveContext.save.weekEventReg[74] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_74_10); } break; case PLAYER_FORM_GORON: case PLAYER_FORM_ZORA: - if (gSaveContext.save.weekEventReg[75] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_08)) { this->textId = 0x5E4; } else { this->textId = 0x5DC; - gSaveContext.save.weekEventReg[75] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_75_08); } break; } @@ -156,13 +156,13 @@ void func_809CD028(EnBji01* this, PlayState* play) { case SHIKASHI_TYPE_LOOKED_THROUGH_TELESCOPE: switch (gSaveContext.save.playerForm) { case PLAYER_FORM_DEKU: - if (gSaveContext.save.weekEventReg[74] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_74_80)) { this->textId = 0x5F2; } else { this->textId = 0x5F1; } func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, - PLAYER_AP_NONE); + PLAYER_IA_NONE); break; case PLAYER_FORM_HUMAN: this->textId = 0x5F7; @@ -177,11 +177,8 @@ void func_809CD028(EnBji01* this, PlayState* play) { this->textId = 0x5EA; break; case 3: - // Calculates the time left before the moon crashes. - // The day begins at CLOCK_TIME(6, 0) so it must be offset. - timeBeforeMoonCrash = (4 - CURRENT_DAY) * DAY_LENGTH - - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0)); - if (timeBeforeMoonCrash < CLOCK_TIME_F(1, 0)) { + timeUntilMoonCrash = TIME_UNTIL_MOON_CRASH; + if (timeUntilMoonCrash < CLOCK_TIME_F(1, 0)) { this->textId = 0x5E8; } else { this->textId = 0x5EB; diff --git a/src/overlays/actors/ovl_En_Bjt/overlay.cfg b/src/overlays/actors/ovl_En_Bjt/overlay.cfg deleted file mode 100644 index ab6f05a54..000000000 --- a/src/overlays/actors/ovl_En_Bjt/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bjt -z_en_bjt.c diff --git a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c index a8bcfdc88..08070b61d 100644 --- a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c +++ b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c @@ -143,27 +143,27 @@ void EnBjt_UpdateCollision(EnBjt* this, PlayState* play) { s32 EnBjt_TakeItem(s32 exchangeItem) { switch (exchangeItem) { - case PLAYER_AP_LETTER_TO_KAFEI: + case PLAYER_IA_LETTER_TO_KAFEI: Inventory_DeleteItem(ITEM_LETTER_TO_KAFEI, SLOT(ITEM_LETTER_TO_KAFEI)); break; - case PLAYER_AP_DEED_SWAMP: + case PLAYER_IA_DEED_SWAMP: Inventory_DeleteItem(ITEM_DEED_SWAMP, SLOT(ITEM_DEED_SWAMP)); break; - case PLAYER_AP_DEED_MOUNTAIN: + case PLAYER_IA_DEED_MOUNTAIN: Inventory_DeleteItem(ITEM_DEED_MOUNTAIN, SLOT(ITEM_DEED_MOUNTAIN)); break; - case PLAYER_AP_DEED_OCEAN: + case PLAYER_IA_DEED_OCEAN: Inventory_DeleteItem(ITEM_DEED_OCEAN, SLOT(ITEM_DEED_OCEAN)); break; - case PLAYER_AP_DEED_LAND: + case PLAYER_IA_DEED_LAND: Inventory_DeleteItem(ITEM_DEED_LAND, SLOT(ITEM_DEED_LAND)); break; - case PLAYER_AP_LETTER_MAMA: + case PLAYER_IA_LETTER_MAMA: Inventory_DeleteItem(ITEM_LETTER_MAMA, SLOT(ITEM_LETTER_MAMA)); break; @@ -236,7 +236,7 @@ typedef enum { s32 EnBjt_ChooseBehaviour(Actor* thisx, PlayState* play) { Player* player = GET_PLAYER(play); EnBjt* this = THIS; - s32 itemAP; + PlayerItemAction itemAction; s32 scriptBranch = 0; switch (this->behaviour) { @@ -249,19 +249,20 @@ s32 EnBjt_ChooseBehaviour(Actor* thisx, PlayState* play) { } // Fallthrough case TEXT_STATE_16: - itemAP = func_80123810(play); - if ((itemAP == PLAYER_AP_DEED_LAND) || (itemAP == PLAYER_AP_LETTER_TO_KAFEI) || - (itemAP == PLAYER_AP_DEED_SWAMP) || (itemAP == PLAYER_AP_DEED_MOUNTAIN) || - (itemAP == PLAYER_AP_DEED_OCEAN) || (itemAP == PLAYER_AP_LETTER_MAMA)) { + itemAction = func_80123810(play); + + if ((itemAction == PLAYER_IA_DEED_LAND) || (itemAction == PLAYER_IA_LETTER_TO_KAFEI) || + (itemAction == PLAYER_IA_DEED_SWAMP) || (itemAction == PLAYER_IA_DEED_MOUNTAIN) || + (itemAction == PLAYER_IA_DEED_OCEAN) || (itemAction == PLAYER_IA_LETTER_MAMA)) { EnBjt_ChangeAnim(this, TOILET_HAND_ANIM_WAITING_MORPH); this->playedSfx = false; this->behaviour++; scriptBranch = 1; // Right item - } else if (itemAP < 0) { + } else if (itemAction <= PLAYER_IA_MINUS1) { this->playedSfx = false; this->behaviour++; scriptBranch = 3; // Not showing item - } else if (itemAP != 0) { + } else if (itemAction != PLAYER_IA_NONE) { this->playedSfx = false; this->behaviour++; scriptBranch = 2; // Wrong item @@ -274,9 +275,9 @@ s32 EnBjt_ChooseBehaviour(Actor* thisx, PlayState* play) { break; case TOILET_HAND_BEHAVIOUR_TAKE_ITEM: - if (player->exchangeItemId != PLAYER_AP_NONE) { + if (player->exchangeItemId != PLAYER_IA_NONE) { EnBjt_TakeItem(player->exchangeItemId); - player->exchangeItemId = PLAYER_AP_NONE; + player->exchangeItemId = PLAYER_IA_NONE; } if (EnBjt_Vanish(this)) { this->timer = 60; @@ -389,7 +390,7 @@ void EnBjt_FollowSchedule(EnBjt* this, PlayState* play) { } else if (this->stateFlags & TOILET_HAND_STATE_VISIBLE) { // Vanish if player goes too far away or heart piece given if ((fabsf(this->actor.playerHeightRel) > 70.0f) || (this->actor.xzDistToPlayer > 140.0f) || - (gSaveContext.save.weekEventReg[90] & 0x80)) { + CHECK_WEEKEVENTREG(WEEKEVENTREG_90_80)) { SubS_UpdateFlags(&this->stateFlags, 0, 7); this->playedSfx = false; this->stateFlags &= ~TOILET_HAND_STATE_VISIBLE; @@ -398,7 +399,7 @@ void EnBjt_FollowSchedule(EnBjt* this, PlayState* play) { } else { // Appear if player approaches and heart piece not given if ((fabsf(this->actor.playerHeightRel) < 20.0f) && (this->actor.xzDistToPlayer < 70.0f) && - !(gSaveContext.save.weekEventReg[90] & 0x80)) { + !CHECK_WEEKEVENTREG(WEEKEVENTREG_90_80)) { this->stateFlags |= TOILET_HAND_STATE_APPEARING; this->playedSfx = false; } @@ -445,7 +446,7 @@ void EnBjt_Update(Actor* thisx, PlayState* play) { if (this->scheduleResult != TOILET_HAND_SCH_NONE) { EnBjt_UpdateSkelAnime(this); - func_8013C964(&this->actor, play, 60.0f, 10.0f, PLAYER_AP_NONE, this->stateFlags & 7); + func_8013C964(&this->actor, play, 60.0f, 10.0f, PLAYER_IA_NONE, this->stateFlags & 7); Actor_SetFocus(&this->actor, 26.0f); EnBjt_UpdateCollision(this, play); } diff --git a/src/overlays/actors/ovl_En_Boj_01/overlay.cfg b/src/overlays/actors/ovl_En_Boj_01/overlay.cfg deleted file mode 100644 index 01b4cce6e..000000000 --- a/src/overlays/actors/ovl_En_Boj_01/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Boj_01 -z_en_boj_01.c diff --git a/src/overlays/actors/ovl_En_Boj_02/overlay.cfg b/src/overlays/actors/ovl_En_Boj_02/overlay.cfg deleted file mode 100644 index 7deb95ef2..000000000 --- a/src/overlays/actors/ovl_En_Boj_02/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Boj_02 -z_en_boj_02.c diff --git a/src/overlays/actors/ovl_En_Boj_03/overlay.cfg b/src/overlays/actors/ovl_En_Boj_03/overlay.cfg deleted file mode 100644 index 90f393836..000000000 --- a/src/overlays/actors/ovl_En_Boj_03/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Boj_03 -z_en_boj_03.c diff --git a/src/overlays/actors/ovl_En_Boj_04/overlay.cfg b/src/overlays/actors/ovl_En_Boj_04/overlay.cfg deleted file mode 100644 index fd93a1079..000000000 --- a/src/overlays/actors/ovl_En_Boj_04/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Boj_04 -z_en_boj_04.c diff --git a/src/overlays/actors/ovl_En_Boj_05/overlay.cfg b/src/overlays/actors/ovl_En_Boj_05/overlay.cfg deleted file mode 100644 index 038e0e91c..000000000 --- a/src/overlays/actors/ovl_En_Boj_05/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Boj_05 -z_en_boj_05.c diff --git a/src/overlays/actors/ovl_En_Bom/overlay.cfg b/src/overlays/actors/ovl_En_Bom/overlay.cfg deleted file mode 100644 index c75252039..000000000 --- a/src/overlays/actors/ovl_En_Bom/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bom -z_en_bom.c diff --git a/src/overlays/actors/ovl_En_Bom/z_en_bom.c b/src/overlays/actors/ovl_En_Bom/z_en_bom.c index 42baf77bf..a25a33904 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c @@ -228,8 +228,8 @@ void func_80871058(EnBom* this, PlayState* play) { } else { Vec3f* sp58; u32 sp54 = func_800C99D4(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); - Vec3f sp48; - s16 sp46; + Vec3f slopeNormal; + s16 downwardSlopeYaw; f32 sp40; f32 sp3C; f32 sp38; @@ -253,10 +253,10 @@ void func_80871058(EnBom* this, PlayState* play) { sp40 = Math_SinS(this->actor.world.rot.y) * this->actor.speedXZ; sp3C = Math_CosS(this->actor.world.rot.y) * this->actor.speedXZ; - func_800B75A0(this->actor.floorPoly, &sp48, &sp46); + Actor_GetSlopeDirection(this->actor.floorPoly, &slopeNormal, &downwardSlopeYaw); - sp40 += 3.0f * sp48.x; - sp3C += 3.0f * sp48.z; + sp40 += 3.0f * slopeNormal.x; + sp3C += 3.0f * slopeNormal.z; sp38 = sqrtf(SQ(sp40) + SQ(sp3C)); if ((sp38 < this->actor.speedXZ) || @@ -266,7 +266,7 @@ void func_80871058(EnBom* this, PlayState* play) { } else { this->actor.speedXZ = sp38; } - this->actor.world.rot.y = Math_FAtan2F(sp3C, sp40); + this->actor.world.rot.y = Math_Atan2S_XY(sp3C, sp40); } if (!Math_StepToF(&this->actor.speedXZ, 0.0f, sp58->x)) { @@ -678,9 +678,9 @@ void func_808726DC(PlayState* play, Vec3f* arg1, Vec3f* arg2, Vec3f* arg3, s32 a Math_Vec3f_Copy(&fuseSegmentPtr->pos, arg1); Math_Vec3f_Diff(arg2, arg1, &spCC); - fuseSegmentPtr->rotY = Math_FAtan2F(spCC.z, spCC.x); + fuseSegmentPtr->rotY = Math_Atan2S_XY(spCC.z, spCC.x); distXZ = sqrtf(SQXZ(spCC)); - fuseSegmentPtr->rotX = Math_FAtan2F(distXZ, spCC.y); + fuseSegmentPtr->rotX = Math_Atan2S_XY(distXZ, spCC.y); spB0 = (arg4 / 240) + 1; @@ -718,9 +718,9 @@ void func_808726DC(PlayState* play, Vec3f* arg1, Vec3f* arg2, Vec3f* arg3, s32 a spCC.z = 0.0f; } - fuseSegmentPtr2->rotY = Math_FAtan2F(spCC.z, spCC.x); + fuseSegmentPtr2->rotY = Math_Atan2S_XY(spCC.z, spCC.x); distXZ = sqrtf(SQXZ(spCC)); - fuseSegmentPtr2->rotX = Math_FAtan2F(distXZ, spCC.y); + fuseSegmentPtr2->rotX = Math_Atan2S_XY(distXZ, spCC.y); fuseSegmentPtr2->rotY = (s16)CLAMP(BINANG_SUB(fuseSegmentPtr2->rotY, fuseSegmentPtr->rotY), -8000, 8000) + fuseSegmentPtr->rotY; diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/overlay.cfg b/src/overlays/actors/ovl_En_Bom_Bowl_Man/overlay.cfg deleted file mode 100644 index 2d762ca9b..000000000 --- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bom_Bowl_Man -z_en_bom_bowl_man.c diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c index 9dc36ff6c..da6e8d6d0 100644 --- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c +++ b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c @@ -97,7 +97,7 @@ void EnBomBowlMan_Init(Actor* thisx, PlayState* play) { this->path = SubS_GetPathByIndex(play, this->unk_29A, 0x3F); this->unk_2C8 = 80.0f; - if ((gSaveContext.save.entrance == ENTRANCE(EAST_CLOCK_TOWN, 2)) && (gSaveContext.save.weekEventReg[73] & 0x80) && + if ((gSaveContext.save.entrance == ENTRANCE(EAST_CLOCK_TOWN, 2)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_73_80) && !CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { this->unk_2D6 = this->actor.cutscene; if (this->unk_2D6 == 0) { @@ -202,8 +202,8 @@ void func_809C4BC4(EnBomBowlMan* this, PlayState* play) { func_809C493C(this, 3, 1.0f); this->unk_2D4 = this->actor.yawTowardsPlayer; this->unk_290 = this->actor.yawTowardsPlayer; - gSaveContext.save.weekEventReg[73] &= (u8)~0x10; - gSaveContext.save.weekEventReg[85] &= (u8)~2; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_73_10); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_85_02); this->unk_29C = 0; this->actionFunc = func_809C4DA4; } @@ -336,14 +336,14 @@ void func_809C51B4(EnBomBowlMan* this, PlayState* play) { gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_86; - gSaveContext.nextTransitionType = TRANS_TYPE_03; - gSaveContext.save.weekEventReg[75] &= (u8)~0x40; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_75_40); if (player->transformation == PLAYER_FORM_HUMAN) { - gSaveContext.save.weekEventReg[84] |= 0x80; - gSaveContext.save.weekEventReg[77] &= (u8)~2; + SET_WEEKEVENTREG(WEEKEVENTREG_84_80); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_77_02); } else { - gSaveContext.save.weekEventReg[73] |= 0x20; - gSaveContext.save.weekEventReg[85] &= (u8)~1; + SET_WEEKEVENTREG(WEEKEVENTREG_73_20); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_85_01); } } } @@ -365,7 +365,7 @@ void func_809C5310(EnBomBowlMan* this, PlayState* play) { if (player->actor.world.pos.x < 1510.0f) { if (player->transformation != PLAYER_FORM_DEKU) { if (this->actor.xzDistToPlayer < this->unk_2C8) { - func_800B7298(play, &this->actor, 7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_7); func_809C53A4(this); } } else { @@ -401,7 +401,7 @@ void func_809C5408(EnBomBowlMan* this, PlayState* play) { void func_809C5524(EnBomBowlMan* this, PlayState* play) { this->actor.textId = 0x730; - if (!(gSaveContext.save.weekEventReg[85] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) { this->actor.textId = 0x72F; } func_809C493C(this, 3, 1.0f); @@ -423,7 +423,7 @@ void func_809C5598(EnBomBowlMan* this, PlayState* play) { } else if (this->actor.textId == 0x734) { this->actor.textId = 0x715; } else if (this->actor.textId == 0x715) { - func_800B7298(play, &this->actor, 6); + func_800B7298(play, &this->actor, PLAYER_CSMODE_6); func_809C493C(this, 17, 1.0f); func_809C59A4(this, play); return; @@ -435,7 +435,7 @@ void func_809C5598(EnBomBowlMan* this, PlayState* play) { func_80151BB4(play, 0x24); func_80151BB4(play, 0x25); func_80151BB4(play, 0); - func_800B7298(play, &this->actor, 7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_7); this->actionFunc = func_809C5738; return; } @@ -483,8 +483,8 @@ void func_809C5738(EnBomBowlMan* this, PlayState* play) { (this->path != NULL)) { this->unk_298++; if (this->unk_298 >= this->path->count) { - gSaveContext.save.weekEventReg[84] |= 0x80; - gSaveContext.save.weekEventReg[83] &= (u8)~4; + SET_WEEKEVENTREG(WEEKEVENTREG_84_80); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_04); ActorCutscene_Stop(this->unk_2D6); Actor_Kill(&this->actor); return; @@ -510,7 +510,7 @@ void func_809C59F0(EnBomBowlMan* this, PlayState* play) { } else { this->actor.textId = 0x716; } - func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); this->actionFunc = func_809C5AA4; } else { Actor_PickUp(&this->actor, play, GI_BOMBERS_NOTEBOOK, 300.0f, 300.0f); @@ -525,7 +525,7 @@ void func_809C5AA4(EnBomBowlMan* this, PlayState* play) { this->actionFunc = func_809C5598; } } else { - func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); } } @@ -553,7 +553,7 @@ void func_809C5BA0(EnBomBowlMan* this) { void func_809C5BF4(EnBomBowlMan* this, PlayState* play) { f32 sp2C = this->skelAnime.curFrame; - s32 subCam; + Camera* subCam; if ((D_809C6104 != 0) && (this->unk_2F8 != 15)) { func_809C493C(this, 15, 1.0f); diff --git a/src/overlays/actors/ovl_En_Bom_Chu/overlay.cfg b/src/overlays/actors/ovl_En_Bom_Chu/overlay.cfg deleted file mode 100644 index d1b0f7dc2..000000000 --- a/src/overlays/actors/ovl_En_Bom_Chu/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bom_Chu -z_en_bom_chu.c diff --git a/src/overlays/actors/ovl_En_Bombal/overlay.cfg b/src/overlays/actors/ovl_En_Bombal/overlay.cfg deleted file mode 100644 index a715cfbf5..000000000 --- a/src/overlays/actors/ovl_En_Bombal/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bombal -z_en_bombal.c diff --git a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c index 91e7fbd4c..bcb7cb534 100644 --- a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c +++ b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c @@ -92,8 +92,8 @@ void func_80C05B3C(EnBombal* this, PlayState* play) { if (this->collider.base.acFlags & AC_HIT) { player = GET_PLAYER(play); this->collider.base.acFlags &= ~AC_HIT; - if (!(gSaveContext.save.weekEventReg[75] & 0x40) && !(gSaveContext.save.weekEventReg[73] & 0x10) && - !(gSaveContext.save.weekEventReg[85] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) { player->stateFlags1 |= ACTOR_FLAG_20; this->actor.flags |= ACTOR_FLAG_100000; } @@ -107,8 +107,8 @@ void func_80C05C44(EnBombal* this, PlayState* play) { s32 i; Vec3f pos; - if (!(gSaveContext.save.weekEventReg[75] & 0x40) && !(gSaveContext.save.weekEventReg[73] & 0x10) && - !(gSaveContext.save.weekEventReg[85] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) { if (ActorCutscene_GetCurrentIndex() == 0x7C) { ActorCutscene_Stop(0x7C); ActorCutscene_SetIntentToPlay(this->cutscene); @@ -135,7 +135,7 @@ void func_80C05C44(EnBombal* this, PlayState* play) { EnBombal_InitEffects(this, &pos, 10); } - gSaveContext.save.weekEventReg[83] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_83_04); Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_MUJURA_BALLOON_BROKEN); this->timer = 30; this->isPopped = true; @@ -145,8 +145,8 @@ void func_80C05C44(EnBombal* this, PlayState* play) { void func_80C05DE8(EnBombal* this, PlayState* play) { if (this->timer == 0) { - if (!(gSaveContext.save.weekEventReg[75] & 0x40) && !(gSaveContext.save.weekEventReg[73] & 0x10) && - !(gSaveContext.save.weekEventReg[85] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) { ActorCutscene_Stop(this->cutscene); } Actor_Kill(&this->actor); diff --git a/src/overlays/actors/ovl_En_Bombers/overlay.cfg b/src/overlays/actors/ovl_En_Bombers/overlay.cfg deleted file mode 100644 index 95cb0c1f8..000000000 --- a/src/overlays/actors/ovl_En_Bombers/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bombers -z_en_bombers.c diff --git a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c index 1d4d646f8..2ca62ef0a 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c @@ -104,20 +104,20 @@ void EnBombers_Init(Actor* thisx, PlayState* play) { this->unk_2BE = ENBOMBERS_GET_F(&this->actor); if (this->unk_2BC == ENBOMBERS_F0_0) { - if ((gSaveContext.save.weekEventReg[73] & 0x10) || (gSaveContext.save.weekEventReg[85] & 2)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) { Actor_Kill(&this->actor); return; } this->unk_2BE++; func_80C03ACC(this); - } else if (((gSaveContext.save.weekEventReg[73] & 0x10) || (gSaveContext.save.weekEventReg[85] & 2)) && - (((this->unk_2BE == ENBOMBERS_F_0) && (gSaveContext.save.weekEventReg[76] & 1)) || - ((this->unk_2BE == ENBOMBERS_F_1) && (gSaveContext.save.weekEventReg[76] & 2)) || - ((this->unk_2BE == ENBOMBERS_F_2) && (gSaveContext.save.weekEventReg[76] & 4)) || - ((this->unk_2BE == ENBOMBERS_F_3) && (gSaveContext.save.weekEventReg[76] & 8)) || - ((this->unk_2BE == ENBOMBERS_F_4) && (gSaveContext.save.weekEventReg[76] & 0x10)))) { - if (gSaveContext.save.weekEventReg[75] & 0x40) { + } else if ((CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) && + (((this->unk_2BE == ENBOMBERS_F_0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_76_01)) || + ((this->unk_2BE == ENBOMBERS_F_1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_76_02)) || + ((this->unk_2BE == ENBOMBERS_F_2) && CHECK_WEEKEVENTREG(WEEKEVENTREG_76_04)) || + ((this->unk_2BE == ENBOMBERS_F_3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_76_08)) || + ((this->unk_2BE == ENBOMBERS_F_4) && CHECK_WEEKEVENTREG(WEEKEVENTREG_76_10)))) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_40)) { if (this->unk_2BE == ENBOMBERS_F_0) { EnBomBowlMan* bomBowlMan = (EnBomBowlMan*)Actor_Spawn( &play->actorCtx, play, ACTOR_EN_BOM_BOWL_MAN, this->actor.world.pos.x, this->actor.world.pos.y, @@ -131,11 +131,11 @@ void EnBombers_Init(Actor* thisx, PlayState* play) { while (cs != -1) { bomBowlMan->unk_2CC[i] = cs; cs = ActorCutscene_GetAdditionalCutscene(cs); i++; } // clang-format on - gSaveContext.save.weekEventReg[76] &= (u8)~1; - gSaveContext.save.weekEventReg[76] &= (u8)~2; - gSaveContext.save.weekEventReg[76] &= (u8)~4; - gSaveContext.save.weekEventReg[76] &= (u8)~8; - gSaveContext.save.weekEventReg[76] &= (u8)~0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_02); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_04); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_08); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_10); } } Actor_Kill(&this->actor); @@ -182,7 +182,7 @@ void func_80C039A8(EnBombers* this, PlayState* play) { switch (player->transformation) { case PLAYER_FORM_HUMAN: this->actor.textId = 0x73D; - if (gSaveContext.save.weekEventReg[84] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_80)) { this->actor.textId = 0x74B; } break; @@ -196,14 +196,14 @@ void func_80C039A8(EnBombers* this, PlayState* play) { break; case PLAYER_FORM_DEKU: - if (gSaveContext.save.weekEventReg[73] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_20)) { this->actor.textId = 0x75A; - } else if (gSaveContext.save.weekEventReg[73] & 0x40) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_40)) { this->actor.textId = 0x749; - if (((this->unk_2BE == ENBOMBERS_F_1) && (gSaveContext.save.weekEventReg[74] & 1)) || - ((this->unk_2BE == ENBOMBERS_F_2) && (gSaveContext.save.weekEventReg[74] & 2)) || - ((this->unk_2BE == ENBOMBERS_F_3) && (gSaveContext.save.weekEventReg[74] & 4)) || - ((this->unk_2BE == ENBOMBERS_F_4) && (gSaveContext.save.weekEventReg[74] & 8))) { + if (((this->unk_2BE == ENBOMBERS_F_1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_74_01)) || + ((this->unk_2BE == ENBOMBERS_F_2) && CHECK_WEEKEVENTREG(WEEKEVENTREG_74_02)) || + ((this->unk_2BE == ENBOMBERS_F_3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_74_04)) || + ((this->unk_2BE == ENBOMBERS_F_4) && CHECK_WEEKEVENTREG(WEEKEVENTREG_74_08))) { this->actor.textId = 0x74A; } } else { @@ -395,22 +395,22 @@ void func_80C03FAC(EnBombers* this, PlayState* play) { } else if (this->actor.textId == 0x748) { switch (this->unk_2BE) { case ENBOMBERS_F_1: - gSaveContext.save.weekEventReg[74] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_74_01); break; case ENBOMBERS_F_2: - gSaveContext.save.weekEventReg[74] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_74_02); break; case ENBOMBERS_F_3: - gSaveContext.save.weekEventReg[74] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_74_04); break; case ENBOMBERS_F_4: - gSaveContext.save.weekEventReg[74] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_74_08); break; } - gSaveContext.save.weekEventReg[73] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_73_40); } switch (sp2A) { diff --git a/src/overlays/actors/ovl_En_Bombers2/overlay.cfg b/src/overlays/actors/ovl_En_Bombers2/overlay.cfg deleted file mode 100644 index 6cbb956fe..000000000 --- a/src/overlays/actors/ovl_En_Bombers2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bombers2 -z_en_bombers2.c diff --git a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c index 632ff3b67..74575628f 100644 --- a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c +++ b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c @@ -94,7 +94,8 @@ void EnBombers2_Init(Actor* thisx, PlayState* play) { this->jointTable, OBJECT_CS_LIMB_MAX); this->actor.targetMode = 6; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - if ((gSaveContext.save.weekEventReg[73] & 0x80) || (gSaveContext.save.entrance == ENTRANCE(EAST_CLOCK_TOWN, 2))) { + + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_80) || (gSaveContext.save.entrance == ENTRANCE(EAST_CLOCK_TOWN, 2))) { this->actor.world.pos.x += Math_SinS(this->actor.home.rot.y + 0xC100) * 50.0f; cos = Math_CosS(this->actor.home.rot.y + 0xC100) * 50.0f; this->unk_2AC = 1; @@ -165,7 +166,7 @@ void func_80C04BA0(EnBombers2* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->unk_2B6 = this->actor.world.rot.y; - gSaveContext.save.weekEventReg[86] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_86_02); func_80C04D00(this); return; } @@ -329,7 +330,7 @@ void func_80C0520C(EnBombers2* this, PlayState* play) { EnBombers2_ChangeAnim(this, 6, 1.0f); this->unk_2A8 = 0; this->unk_2C0 = 1; - gSaveContext.save.weekEventReg[73] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_73_80); ActorCutscene_Stop(this->cutscene); this->unk_2AC = 1; this->actor.textId = sTextIds[this->textIdIndex]; diff --git a/src/overlays/actors/ovl_En_Bombf/overlay.cfg b/src/overlays/actors/ovl_En_Bombf/overlay.cfg deleted file mode 100644 index 831b98c2f..000000000 --- a/src/overlays/actors/ovl_En_Bombf/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bombf -z_en_bombf.c diff --git a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c index fd5ce0bf6..0b5ffff54 100644 --- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c +++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c @@ -451,15 +451,15 @@ void EnBombf_Update(Actor* thisx, PlayState* play) { } Gfx* func_808AF86C(GraphicsContext* gfxCtx, PlayState* play) { - Gfx* head = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 6); - Gfx* gfx = head; + Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, 5 * sizeof(Gfx)); + Gfx* gfx = gfxHead; Matrix_ReplaceRotation(&play->billboardMtxF); gSPMatrix(gfx++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPEndDisplayList(gfx++); - return head; + return gfxHead; } void EnBombf_Draw(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Bomjima/overlay.cfg b/src/overlays/actors/ovl_En_Bomjima/overlay.cfg deleted file mode 100644 index 61e77897f..000000000 --- a/src/overlays/actors/ovl_En_Bomjima/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bomjima -z_en_bomjima.c diff --git a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c index a9d81c10b..b17079b6e 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -128,7 +128,7 @@ void EnBomjima_Init(Actor* thisx, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &object_cs_Skel_00F82C, &gBomberIdleAnim, this->jointTable, this->morphTable, OBJECT_CS_LIMB_MAX); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - gSaveContext.save.weekEventReg[83] &= (u8)~4; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_04); this->actor.targetMode = 0; this->unk_2E6 = ENBOMJIMA_GET_F0(&this->actor); this->unk_2E4 = ENBOMJIMA_GET_F(&this->actor); @@ -150,8 +150,8 @@ void EnBomjima_Init(Actor* thisx, PlayState* play) { func_80BFFCFC(this); } - if ((gSaveContext.save.weekEventReg[75] & 0x40) || (gSaveContext.save.weekEventReg[73] & 0x10) || - (gSaveContext.save.weekEventReg[85] & 2)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_40) || CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) { Actor_Kill(&this->actor); } } @@ -177,12 +177,12 @@ void func_80BFE32C(EnBomjima* this, PlayState* play, s32 arg2) { case 0: if (player->transformation == PLAYER_FORM_DEKU) { this->actor.textId = 0x759; - if (!(gSaveContext.save.weekEventReg[73] & 0x20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_73_20)) { this->actor.textId = 0x708; } } else if (player->transformation == PLAYER_FORM_HUMAN) { this->actor.textId = 0x75A; - if (!(gSaveContext.save.weekEventReg[84] & 0x80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_84_80)) { this->actor.textId = 0x719; } } else if ((this->unk_2C8 == 1) || (this->unk_2C8 == 2)) { @@ -362,18 +362,18 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) { func_80BFE32C(this, play, 0); if (player->transformation == PLAYER_FORM_DEKU) { - if (gSaveContext.save.weekEventReg[73] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_20)) { this->unk_2C8 = 3; func_80BFE32C(this, play, 3); - } else if (gSaveContext.save.weekEventReg[77] & 2) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_02)) { this->unk_2C8 = 11; func_80BFE32C(this, play, 2); } } else if (player->transformation == PLAYER_FORM_HUMAN) { - if (gSaveContext.save.weekEventReg[84] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_80)) { this->unk_2C8 = 0; func_80BFE32C(this, play, 3); - } else if (gSaveContext.save.weekEventReg[85] & 1) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_85_01)) { this->unk_2C8 = 11; func_80BFE32C(this, play, 2); } @@ -472,7 +472,7 @@ void func_80BFF03C(EnBomjima* this, PlayState* play) { ActorCutscene_SetIntentToPlay(this->cutscenes[0]); } else { player->stateFlags1 &= ~PLAYER_STATE1_20; - gSaveContext.save.weekEventReg[83] &= (u8)~4; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_04); this->actor.world.rot.y = Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)); this->unk_2DC = Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)); ActorCutscene_StartAndSetUnkLinkFields(this->cutscenes[0], &this->actor); @@ -518,11 +518,11 @@ void func_80BFF174(EnBomjima* this, PlayState* play) { } if (player->transformation == PLAYER_FORM_DEKU) { - if (gSaveContext.save.weekEventReg[73] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_20)) { this->unk_2C8 = 3; func_80BFE32C(this, play, 3); } else { - if (!(gSaveContext.save.weekEventReg[77] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_02)) { if (this->unk_2E8 == 0) { this->unk_2C8 = 4; } else { @@ -534,11 +534,11 @@ void func_80BFF174(EnBomjima* this, PlayState* play) { func_80BFE32C(this, play, 2); } } else if (player->transformation == PLAYER_FORM_HUMAN) { - if (gSaveContext.save.weekEventReg[84] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_80)) { this->unk_2C8 = 0; func_80BFE32C(this, play, 3); } else { - if (!(gSaveContext.save.weekEventReg[85] & 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_85_01)) { if (this->unk_2EA == 0) { this->unk_2C8 = 4; } else { @@ -578,7 +578,7 @@ void func_80BFF430(EnBomjima* this, PlayState* play) { bombal->scale = 0.0f; bombal->cutscene = this->bombalCutscene; Actor_ChangeFocus(&this->actor, play, &bombal->actor); - gSaveContext.save.weekEventReg[83] &= (u8)~4; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_04); func_80BFE65C(this); func_801477B4(play); this->actionFunc = func_80BFEA94; @@ -701,24 +701,24 @@ void func_80BFF9B0(EnBomjima* this, PlayState* play) { D_80C009F0 = 0; this->unk_2C8 = 9; if (player->transformation == PLAYER_FORM_DEKU) { - gSaveContext.save.weekEventReg[73] |= 0x10; - gSaveContext.save.weekEventReg[77] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_73_10); + SET_WEEKEVENTREG(WEEKEVENTREG_77_02); } else { - gSaveContext.save.weekEventReg[85] |= 2; - gSaveContext.save.weekEventReg[85] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_85_02); + SET_WEEKEVENTREG(WEEKEVENTREG_85_01); } - gSaveContext.save.weekEventReg[11] &= (u8)~1; - gSaveContext.save.weekEventReg[11] &= (u8)~2; - gSaveContext.save.weekEventReg[11] &= (u8)~4; - gSaveContext.save.weekEventReg[11] &= (u8)~8; - gSaveContext.save.weekEventReg[11] &= (u8)~0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_11_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_11_02); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_11_04); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_11_08); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_11_10); - gSaveContext.save.weekEventReg[76] &= (u8)~1; - gSaveContext.save.weekEventReg[76] &= (u8)~2; - gSaveContext.save.weekEventReg[76] &= (u8)~4; - gSaveContext.save.weekEventReg[76] &= (u8)~8; - gSaveContext.save.weekEventReg[76] &= (u8)~0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_02); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_04); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_08); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_10); gSaveContext.save.bombersCaughtNum = 0; gSaveContext.save.bombersCaughtOrder[0] = 0; @@ -773,7 +773,7 @@ void func_80BFFBC4(EnBomjima* this, PlayState* play) { gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_86; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; ActorCutscene_Stop(this->cutscenes[1]); } } diff --git a/src/overlays/actors/ovl_En_Bomjimb/overlay.cfg b/src/overlays/actors/ovl_En_Bomjimb/overlay.cfg deleted file mode 100644 index 3b2ee6496..000000000 --- a/src/overlays/actors/ovl_En_Bomjimb/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bomjimb -z_en_bomjimb.c diff --git a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c index 0e3a6f431..7e07ed9d6 100644 --- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c +++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c @@ -115,38 +115,38 @@ void EnBomjimb_Init(Actor* thisx, PlayState* play) { this->unk_2C6 = ENBOMJIMB_F0_0; } - if ((gSaveContext.save.weekEventReg[73] & 0x10) || (gSaveContext.save.weekEventReg[85] & 2)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) { switch (this->unk_2C8) { case ENBOMJIMB_F_0: - if (gSaveContext.save.weekEventReg[11] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_11_01)) { Actor_Kill(&this->actor); return; } break; case ENBOMJIMB_F_1: - if (gSaveContext.save.weekEventReg[11] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_11_02)) { Actor_Kill(&this->actor); return; } break; case ENBOMJIMB_F_2: - if (gSaveContext.save.weekEventReg[11] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_11_04)) { Actor_Kill(&this->actor); return; } break; case ENBOMJIMB_F_3: - if (gSaveContext.save.weekEventReg[11] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_11_08)) { Actor_Kill(&this->actor); return; } break; case ENBOMJIMB_F_4: - if (gSaveContext.save.weekEventReg[11] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_11_10)) { Actor_Kill(&this->actor); return; } @@ -154,8 +154,8 @@ void EnBomjimb_Init(Actor* thisx, PlayState* play) { } } - if ((!(gSaveContext.save.weekEventReg[73] & 0x10) && !(gSaveContext.save.weekEventReg[85] & 2)) || - (gSaveContext.save.weekEventReg[75] & 0x40)) { + if ((!CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_75_40)) { Actor_Kill(&this->actor); return; } @@ -674,8 +674,8 @@ void func_80C02740(EnBomjimb* this, PlayState* play) { return; } - if (((player->transformation == PLAYER_FORM_DEKU) && !(gSaveContext.save.weekEventReg[73] & 0x10)) || - ((player->transformation == PLAYER_FORM_HUMAN) && !(gSaveContext.save.weekEventReg[85] & 2))) { + if (((player->transformation == PLAYER_FORM_DEKU) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10)) || + ((player->transformation == PLAYER_FORM_HUMAN) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02))) { func_80C0113C(this, 17, 1.0f); Message_StartTextbox(play, 0x72E, &this->actor); player->stateFlags1 |= PLAYER_STATE1_10000000; @@ -698,28 +698,28 @@ void func_80C02740(EnBomjimb* this, PlayState* play) { switch (this->unk_2C8) { case ENBOMJIMB_F_0: - gSaveContext.save.weekEventReg[76] |= 1; - gSaveContext.save.weekEventReg[11] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_76_01); + SET_WEEKEVENTREG(WEEKEVENTREG_11_01); break; case ENBOMJIMB_F_1: - gSaveContext.save.weekEventReg[76] |= 2; - gSaveContext.save.weekEventReg[11] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_76_02); + SET_WEEKEVENTREG(WEEKEVENTREG_11_02); break; case ENBOMJIMB_F_2: - gSaveContext.save.weekEventReg[76] |= 4; - gSaveContext.save.weekEventReg[11] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_76_04); + SET_WEEKEVENTREG(WEEKEVENTREG_11_04); break; case ENBOMJIMB_F_3: - gSaveContext.save.weekEventReg[76] |= 8; - gSaveContext.save.weekEventReg[11] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_76_08); + SET_WEEKEVENTREG(WEEKEVENTREG_11_08); break; case ENBOMJIMB_F_4: - gSaveContext.save.weekEventReg[76] |= 0x10; - gSaveContext.save.weekEventReg[11] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_76_10); + SET_WEEKEVENTREG(WEEKEVENTREG_11_10); break; } @@ -799,10 +799,10 @@ void func_80C02CA4(EnBomjimb* this, PlayState* play) { gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_86; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; } - gSaveContext.save.weekEventReg[75] |= 0x40; - gSaveContext.save.weekEventReg[83] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_75_40); + SET_WEEKEVENTREG(WEEKEVENTREG_83_04); this->actionFunc = func_80C02DAC; } diff --git a/src/overlays/actors/ovl_En_Boom/overlay.cfg b/src/overlays/actors/ovl_En_Boom/overlay.cfg deleted file mode 100644 index d0ff420fd..000000000 --- a/src/overlays/actors/ovl_En_Boom/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Boom -z_en_boom.c diff --git a/src/overlays/actors/ovl_En_Box/overlay.cfg b/src/overlays/actors/ovl_En_Box/overlay.cfg deleted file mode 100644 index bdbd8b754..000000000 --- a/src/overlays/actors/ovl_En_Box/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Box -z_en_box.c diff --git a/src/overlays/actors/ovl_En_Box/z_en_box.c b/src/overlays/actors/ovl_En_Box/z_en_box.c index 0c345aa50..33dd4f69f 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -53,8 +53,8 @@ void func_80868B74(EnBox* this, PlayState* play); void EnBox_WaitOpen(EnBox* this, PlayState* play); void EnBox_Open(EnBox* this, PlayState* play); -void func_80867FBC(func_80867BDC_a0* arg0, PlayState* play, s32 arg2); -void func_80867FE4(func_80867BDC_a0* arg0, PlayState* play); +void func_80867FBC(struct_80867BDC_a0* arg0, PlayState* play, s32 arg2); +void func_80867FE4(struct_80867BDC_a0* arg0, PlayState* play); ActorInit En_Box_InitVars = { ACTOR_EN_BOX, @@ -87,7 +87,7 @@ void EnBox_SetupAction(EnBox* this, EnBoxActionFunc func) { this->actionFunc = func; } -void func_80867BDC(func_80867BDC_a0* arg0, PlayState* play, Vec3f* pos) { +void func_80867BDC(struct_80867BDC_a0* arg0, PlayState* play, Vec3f* pos) { arg0->pos = *pos; arg0->unk_0C = NULL; arg0->unk_10 = NULL; @@ -96,7 +96,7 @@ void func_80867BDC(func_80867BDC_a0* arg0, PlayState* play, Vec3f* pos) { arg0->unk_1C = 0; } -void func_80867C14(func_80867BDC_a0* arg0, PlayState* play) { +void func_80867C14(struct_80867BDC_a0* arg0, PlayState* play) { arg0->unk_18++; if (arg0->unk_18 > 85) { arg0->unk_18 = 85; @@ -115,7 +115,7 @@ void func_80867C14(func_80867BDC_a0* arg0, PlayState* play) { arg0->unk_14++; } -void func_80867C8C(func_80867BDC_a0* arg0, PlayState* play) { +void func_80867C8C(struct_80867BDC_a0* arg0, PlayState* play) { s32 temp_s6 = arg0->unk_18 - arg0->unk_1C; s32 i; f32 pad; @@ -146,7 +146,7 @@ void func_80867C8C(func_80867BDC_a0* arg0, PlayState* play) { func_8012C2DC(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gOwlStatueWhiteFlashDL); + gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); } Matrix_Pop(); gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -154,13 +154,13 @@ void func_80867C8C(func_80867BDC_a0* arg0, PlayState* play) { } } -void func_80867FBC(func_80867BDC_a0* arg0, PlayState* play, s32 arg2) { +void func_80867FBC(struct_80867BDC_a0* arg0, PlayState* play, s32 arg2) { arg0->unk_0C = func_80867C14; arg0->unk_10 = func_80867C8C; arg0->unk_20 = arg2; } -void func_80867FE4(func_80867BDC_a0* arg0, PlayState* play) { +void func_80867FE4(struct_80867BDC_a0* arg0, PlayState* play) { arg0->unk_0C = NULL; arg0->unk_10 = NULL; func_80867BDC(arg0, play, &arg0->pos); @@ -434,9 +434,9 @@ void func_80868B74(EnBox* this, PlayState* play) { this->unk_1A0++; if ((this->cutsceneIdxA != -1) && ActorCutscene_GetCurrentIndex() == this->cutsceneIdxA) { if (this->unk_1A0 == 2) { - func_800B724C(play, &this->dyna.actor, 4); + func_800B724C(play, &this->dyna.actor, PLAYER_CSMODE_4); } else if (this->unk_1A0 == 22) { - func_800B724C(play, &this->dyna.actor, 1); + func_800B724C(play, &this->dyna.actor, PLAYER_CSMODE_1); } } } else if (this->unk_1A0 < 60) { @@ -658,32 +658,34 @@ void EnBox_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, } Gfx* EnBox_SetRenderMode1(GraphicsContext* gfxCtx) { - Gfx* dl = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2); + Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, sizeof(Gfx)); + Gfx* gfx = gfxHead; - gSPEndDisplayList(dl); - return dl; + gSPEndDisplayList(gfx++); + + return gfxHead; } Gfx* EnBox_SetRenderMode2(GraphicsContext* gfxCtx) { - Gfx* dl = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2); - Gfx* cur = dl; + Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, 2 * sizeof(Gfx)); + Gfx* gfx = gfxHead; gDPSetRenderMode( - cur++, AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | G_RM_FOG_SHADE_A, + gfx++, AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | G_RM_FOG_SHADE_A, AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)); - gSPEndDisplayList(cur++); - return dl; + gSPEndDisplayList(gfx++); + return gfxHead; } Gfx* EnBox_SetRenderMode3(GraphicsContext* gfxCtx) { - Gfx* dl = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2); - Gfx* cur = dl; + Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, 2 * sizeof(Gfx)); + Gfx* gfx = gfxHead; - gDPSetRenderMode(cur++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); - gSPEndDisplayList(cur++); - return dl; + gDPSetRenderMode(gfx++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); + gSPEndDisplayList(gfx++); + return gfxHead; } void EnBox_Draw(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Box/z_en_box.h b/src/overlays/actors/ovl_En_Box/z_en_box.h index 432025f14..9cb5af18d 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.h +++ b/src/overlays/actors/ovl_En_Box/z_en_box.h @@ -5,12 +5,12 @@ #include "objects/object_box/object_box.h" struct EnBox; -struct func_80867BDC_a0; +struct struct_80867BDC_a0; typedef void (*EnBoxActionFunc)(struct EnBox*, PlayState*); -typedef void (*EnBoxUnkFunc)(struct func_80867BDC_a0* arg0, PlayState* play); +typedef void (*EnBoxUnkFunc)(struct struct_80867BDC_a0* arg0, PlayState* play); -typedef struct func_80867BDC_a0 { +typedef struct struct_80867BDC_a0 { /* 0x00 */ Vec3f pos; /* 0x0C */ EnBoxUnkFunc unk_0C; /* 0x10 */ EnBoxUnkFunc unk_10; @@ -18,7 +18,7 @@ typedef struct func_80867BDC_a0 { /* 0x18 */ s32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; -} func_80867BDC_a0; //size 0x24 +} struct_80867BDC_a0; // size 0x24 typedef enum { /* 0 */ ENBOX_TYPE_BIG, // big @@ -59,7 +59,7 @@ typedef struct EnBox { /* 0x1F1 */ u8 type; /* 0x1F2 */ u8 iceSmokeTimer; /* 0x1F3 */ s8 unk_1F3; - /* 0x1F4 */ func_80867BDC_a0 unk_1F4; + /* 0x1F4 */ struct_80867BDC_a0 unk_1F4; /* 0x218 */ s16 cutsceneIdxA; /* 0x21A */ s16 cutsceneIdxB; /* 0x21C */ s32 getItemId; diff --git a/src/overlays/actors/ovl_En_Bsb/overlay.cfg b/src/overlays/actors/ovl_En_Bsb/overlay.cfg deleted file mode 100644 index 8542407fe..000000000 --- a/src/overlays/actors/ovl_En_Bsb/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bsb -z_en_bsb.c diff --git a/src/overlays/actors/ovl_En_Bu/overlay.cfg b/src/overlays/actors/ovl_En_Bu/overlay.cfg deleted file mode 100644 index 970a005fb..000000000 --- a/src/overlays/actors/ovl_En_Bu/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bu -z_en_bu.c diff --git a/src/overlays/actors/ovl_En_Bubble/overlay.cfg b/src/overlays/actors/ovl_En_Bubble/overlay.cfg deleted file mode 100644 index 9c86d2e3f..000000000 --- a/src/overlays/actors/ovl_En_Bubble/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Bubble -z_en_bubble.c diff --git a/src/overlays/actors/ovl_En_Butte/overlay.cfg b/src/overlays/actors/ovl_En_Butte/overlay.cfg deleted file mode 100644 index 04a22c108..000000000 --- a/src/overlays/actors/ovl_En_Butte/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Butte -z_en_butte.c diff --git a/src/overlays/actors/ovl_En_Butte/z_en_butte.c b/src/overlays/actors/ovl_En_Butte/z_en_butte.c index 17c7e5802..eb3365b83 100644 --- a/src/overlays/actors/ovl_En_Butte/z_en_butte.c +++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.c @@ -155,7 +155,7 @@ void func_8091C178(EnButte* this, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 200, 200, 180, sp48); gDPSetEnvColor(POLY_XLU_DISP++, 200, 200, 210, 255); - gSPDisplayList(POLY_XLU_DISP++, gOwlStatueWhiteFlashDL); + gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); CLOSE_DISPS(play->state.gfxCtx); } @@ -287,7 +287,8 @@ void func_8091C794(EnButte* this, PlayState* play) { func_8091C0A0(this, &D_8091D324[this->unk_24E]); } - if ((ENBUTTE_GET_1(&this->actor) == ENBUTTE_1) && (player->itemActionParam == 7) && (this->unk_252 <= 0) && + if ((ENBUTTE_GET_1(&this->actor) == ENBUTTE_1) && (player->heldItemAction == PLAYER_IA_STICK) && + (this->unk_252 <= 0) && ((Math3D_XZDistanceSquared(player->actor.world.pos.x, player->actor.world.pos.z, this->actor.home.pos.x, this->actor.home.pos.z) < SQ(120.0f)) || (this->actor.xzDistToPlayer < 60.0f))) { @@ -355,7 +356,7 @@ void func_8091CBB4(EnButte* this, PlayState* play) { distSq = Math3D_XZDistanceSquared(this->actor.world.pos.x, this->actor.world.pos.z, this->actor.home.pos.x, this->actor.home.pos.z); - if ((player->itemActionParam != 7) || !(fabsf(player->actor.speedXZ) < 1.8f) || (this->unk_252 > 0) || + if ((player->heldItemAction != PLAYER_IA_STICK) || !(fabsf(player->actor.speedXZ) < 1.8f) || (this->unk_252 > 0) || !(distSq < SQ(320.0f))) { func_8091C748(this); } else if ((distSq > SQ(240.0f)) && diff --git a/src/overlays/actors/ovl_En_Cha/overlay.cfg b/src/overlays/actors/ovl_En_Cha/overlay.cfg deleted file mode 100644 index a409e7d55..000000000 --- a/src/overlays/actors/ovl_En_Cha/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Cha -z_en_cha.c diff --git a/src/overlays/actors/ovl_En_Cha/z_en_cha.c b/src/overlays/actors/ovl_En_Cha/z_en_cha.c index edf68582f..d32fe32ac 100644 --- a/src/overlays/actors/ovl_En_Cha/z_en_cha.c +++ b/src/overlays/actors/ovl_En_Cha/z_en_cha.c @@ -61,7 +61,7 @@ void EnCha_Init(Actor* thisx, PlayState* play) { this->actor.home.rot.z = 0; this->actionFunc = EnCha_Idle; this->actor.home.rot.x = this->actor.home.rot.z; - gSaveContext.save.weekEventReg[60] &= (u8)~4; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_60_04); } void EnCha_Destroy(Actor* thisx, PlayState* play) { @@ -83,16 +83,16 @@ void EnCha_Ring(EnCha* this, PlayState* play) { } void EnCha_Idle(EnCha* this, PlayState* play) { - if (gSaveContext.save.weekEventReg[60] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_60_04)) { Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_DOOR_BELL); - gSaveContext.save.weekEventReg[60] &= (u8)~4; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_60_04); this->actor.home.rot.z = 0x7D0; } if (this->collider.base.acFlags & AC_HIT) { Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_DOOR_BELL); this->actor.home.rot.z = 0x7D0; - if (!(gSaveContext.save.weekEventReg[51] & 4)) { - gSaveContext.save.weekEventReg[51] |= 4; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_51_04)) { + SET_WEEKEVENTREG(WEEKEVENTREG_51_04); this->actionFunc = EnCha_Ring; } } diff --git a/src/overlays/actors/ovl_En_Clear_Tag/overlay.cfg b/src/overlays/actors/ovl_En_Clear_Tag/overlay.cfg deleted file mode 100644 index edfefada0..000000000 --- a/src/overlays/actors/ovl_En_Clear_Tag/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Clear_Tag -z_en_clear_tag.c diff --git a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c index 40bc4aeb6..bfc828194 100644 --- a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c +++ b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c @@ -284,8 +284,8 @@ void EnClearTag_CreateLightRayEffect(EnClearTag* this, Vec3f* pos, Vec3f* veloci effect->actionTimer = Rand_ZeroFloat(10.0f); - effect->rotationY = Math_Acot2F(effect->velocity.z, effect->velocity.x); - effect->rotationX = -Math_Acot2F(sqrtf(SQXZ(effect->velocity)), effect->velocity.y); + effect->rotationY = Math_Atan2F_XY(effect->velocity.z, effect->velocity.x); + effect->rotationX = -Math_Atan2F_XY(sqrtf(SQXZ(effect->velocity)), effect->velocity.y); effect->envColor.r = 255.0f; effect->envColor.g = 255.0f; @@ -326,8 +326,8 @@ void EnClearTag_CreateIsolatedLightRayEffect(EnClearTag* this, Vec3f* pos, Vec3f effect->actionTimer = Rand_ZeroFloat(10.0f); - effect->rotationY = Math_Acot2F(effect->velocity.z, effect->velocity.x); - effect->rotationX = -Math_Acot2F(sqrtf(SQXZ(effect->velocity)), effect->velocity.y); + effect->rotationY = Math_Atan2F_XY(effect->velocity.z, effect->velocity.x); + effect->rotationX = -Math_Atan2F_XY(sqrtf(SQXZ(effect->velocity)), effect->velocity.y); effect->envColor.r = sLightRayEnvColor[colorIndex].x; effect->envColor.g = sLightRayEnvColor[colorIndex].y; @@ -560,7 +560,7 @@ void EnClearTag_UpdateCamera(EnClearTag* this, PlayState* play) { this->subCamId = Play_CreateSubCamera(play); Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE); - func_800B7298(play, &this->actor, 4); + func_800B7298(play, &this->actor, PLAYER_CSMODE_4); mainCam = Play_GetCamera(play, CAM_ID_MAIN); this->subCamEye.x = mainCam->eye.x; this->subCamEye.y = mainCam->eye.y; @@ -586,7 +586,7 @@ void EnClearTag_UpdateCamera(EnClearTag* this, PlayState* play) { mainCam->at = this->subCamAt; func_80169AFC(play, this->subCamId, 0); Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, 6); + func_800B7298(play, &this->actor, PLAYER_CSMODE_6); this->cameraState = 0; this->subCamId = SUB_CAM_ID_DONE; this->activeTimer = 20; diff --git a/src/overlays/actors/ovl_En_Cne_01/overlay.cfg b/src/overlays/actors/ovl_En_Cne_01/overlay.cfg deleted file mode 100644 index 7678c1374..000000000 --- a/src/overlays/actors/ovl_En_Cne_01/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Cne_01 -z_en_cne_01.c diff --git a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c index ed3483150..876914a2a 100644 --- a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c +++ b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c @@ -103,7 +103,7 @@ void EnCne01_UpdateModel(EnCne01* this, PlayState* play) { EnHy_UpdateSkelAnime(&this->enHy, play); if (SubS_AngleDiffLessEqual(this->enHy.actor.shape.rot.y, 0x36B0, this->enHy.actor.yawTowardsPlayer)) { point.x = player->actor.world.pos.x; - point.y = player->bodyPartsPos[7].y + 3.0f; + point.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; point.z = player->actor.world.pos.z; SubS_TrackPoint(&point, &this->enHy.actor.focus.pos, &this->enHy.actor.shape.rot, &this->enHy.trackTarget, &this->enHy.headRot, &this->enHy.torsoRot, &sTrackOptions); @@ -142,7 +142,7 @@ s32 func_809CB4A0(EnCne01* this, PlayState* play) { Actor_GetScreenPos(play, &this->enHy.actor, &x, &y); //! @bug: Both x and y conditionals are always true, || should be an && if (!this->enHy.waitingOnInit && ((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT))) { - func_800B85E0(&this->enHy.actor, play, 30.0f, PLAYER_AP_MAGIC_BEANS); + func_800B85E0(&this->enHy.actor, play, 30.0f, PLAYER_IA_MAGIC_BEANS); } return true; } diff --git a/src/overlays/actors/ovl_En_Col_Man/overlay.cfg b/src/overlays/actors/ovl_En_Col_Man/overlay.cfg deleted file mode 100644 index 4f2df34a6..000000000 --- a/src/overlays/actors/ovl_En_Col_Man/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Col_Man -z_en_col_man.c diff --git a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c index 7170ebdc8..b3038dd60 100644 --- a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c +++ b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c @@ -94,7 +94,7 @@ void EnColMan_Destroy(Actor* thisx, PlayState* play) { } void func_80AFDD60(EnColMan* this) { - if (!(gSaveContext.save.weekEventReg[56] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_56_02)) { this->actor.draw = func_80AFE414; this->actor.shape.yOffset = 700.0f; if (this->actor.params == EN_COL_MAN_HEART_PIECE) { @@ -123,14 +123,14 @@ void func_80AFDE00(EnColMan* this, PlayState* play) { this->actor.speedXZ = 0.0f; } } - if (!(gSaveContext.save.weekEventReg[56] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_56_02)) { this->actor.shape.rot.y += 0x3E8; } if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; this->actor.draw = NULL; this->actionFunc = EnColMan_SetHeartPieceCollectedAndKill; - } else if (!(gSaveContext.save.weekEventReg[56] & 2)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_56_02)) { Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 40.0f, 40.0f); } else { Actor_PickUp(&this->actor, play, GI_RECOVERY_HEART, 40.0f, 40.0f); @@ -139,7 +139,7 @@ void func_80AFDE00(EnColMan* this, PlayState* play) { void EnColMan_SetHeartPieceCollectedAndKill(EnColMan* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - gSaveContext.save.weekEventReg[56] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_56_02); Actor_Kill(&this->actor); } } @@ -244,7 +244,7 @@ void func_80AFE4AC(Actor* thisx, PlayState* play) { func_8012C2DC(play->state.gfxCtx); func_8012C28C(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gDropRecoveryHeartTex)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -266,7 +266,7 @@ void func_80AFE584(Actor* thisx, PlayState* play) { void func_80AFE650(Actor* thisx, PlayState* play) { func_8012C28C(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gDropBombTex)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_En_Cow/overlay.cfg b/src/overlays/actors/ovl_En_Cow/overlay.cfg deleted file mode 100644 index d7215aa84..000000000 --- a/src/overlays/actors/ovl_En_Cow/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Cow -z_en_cow.c diff --git a/src/overlays/actors/ovl_En_Cow/z_en_cow.c b/src/overlays/actors/ovl_En_Cow/z_en_cow.c index 778a358a8..4e9040d83 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c @@ -116,7 +116,7 @@ void EnCow_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnCow_Idle; - if (!(gSaveContext.save.weekEventReg[22] & 1) && (CURRENT_DAY != 1) && + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) && (CURRENT_DAY != 1) && (EN_COW_TYPE(thisx) == EN_COW_TYPE_ABDUCTED)) { Actor_Kill(&this->actor); return; @@ -153,7 +153,7 @@ void EnCow_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); this->flags = 0; - gSaveContext.save.weekEventReg[87] &= (u8)~1; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_87_01); } void EnCow_Destroy(Actor* thisx, PlayState* play) { @@ -289,8 +289,8 @@ void EnCow_Idle(EnCow* this, PlayState* play) { if (this->actor.xzDistToPlayer < 150.0f && ABS_ALT((s16)(this->actor.yawTowardsPlayer - this->actor.shape.rot.y)) < 25000) { if (func_801A5100() == 4) { - if (!(gSaveContext.save.weekEventReg[87] & 1)) { - gSaveContext.save.weekEventReg[87] |= 1; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_87_01)) { + SET_WEEKEVENTREG(WEEKEVENTREG_87_01); if (Inventory_HasEmptyBottle()) { this->actor.textId = 0x32C9; // Text to give milk. } else { @@ -301,7 +301,7 @@ void EnCow_Idle(EnCow* this, PlayState* play) { this->actionFunc = EnCow_Talk; } } else { - gSaveContext.save.weekEventReg[87] &= (u8)~1; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_87_01); } } diff --git a/src/overlays/actors/ovl_En_Crow/overlay.cfg b/src/overlays/actors/ovl_En_Crow/overlay.cfg deleted file mode 100644 index deb12c01d..000000000 --- a/src/overlays/actors/ovl_En_Crow/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Crow -z_en_crow.c diff --git a/src/overlays/actors/ovl_En_Dai/overlay.cfg b/src/overlays/actors/ovl_En_Dai/overlay.cfg deleted file mode 100644 index 6a1c6a929..000000000 --- a/src/overlays/actors/ovl_En_Dai/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Dai -z_en_dai.c diff --git a/src/overlays/actors/ovl_En_Dai/z_en_dai.c b/src/overlays/actors/ovl_En_Dai/z_en_dai.c index 7b758ca74..2f2496f57 100644 --- a/src/overlays/actors/ovl_En_Dai/z_en_dai.c +++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.c @@ -176,8 +176,8 @@ s32 func_80B3E5DC(EnDai* this, s32 arg1) { s32 func_80B3E69C(EnDai* this, PlayState* play) { s32 ret = false; - if ((play->csCtx.state != 0) && (play->sceneId == SCENE_12HAKUGINMAE) && (play->csCtx.currentCsIndex == 0) && - !(gSaveContext.save.weekEventReg[30] & 1)) { + if ((play->csCtx.state != CS_STATE_0) && (play->sceneId == SCENE_12HAKUGINMAE) && + (play->csCtx.currentCsIndex == 0) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_30_01)) { if (!(this->unk_1CE & 0x10)) { Flags_SetSwitch(play, 20); this->unk_1CE |= (0x80 | 0x10); @@ -192,7 +192,7 @@ s32 func_80B3E69C(EnDai* this, PlayState* play) { } else if (this->unk_1CE & 0x10) { this->unk_1CE &= ~0x10; this->unk_1CE |= 0x200; - gSaveContext.save.weekEventReg[30] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_30_01); this->actionFunc = func_80B3F00C; } @@ -522,7 +522,7 @@ void EnDai_Init(Actor* thisx, PlayState* play) { this->unk_1CE = 0; this->unk_1D6 = 0; - if (gSaveContext.save.weekEventReg[33] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { SubS_UpdateFlags(&this->unk_1CE, 3, 7); this->unk_1CE |= 0x80; this->unk_1CD = 0xFF; @@ -530,7 +530,7 @@ void EnDai_Init(Actor* thisx, PlayState* play) { return; } - if (gSaveContext.save.weekEventReg[30] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_30_01)) { Actor_Kill(&this->actor); return; } @@ -561,7 +561,7 @@ void EnDai_Update(Actor* thisx, PlayState* play) { SkelAnime_Update(&this->skelAnime); func_80B3E834(this); if (!(this->unk_1CE & 0x200)) { - func_8013C964(&this->actor, play, 0.0f, 0.0f, PLAYER_AP_NONE, this->unk_1CE & 7); + func_8013C964(&this->actor, play, 0.0f, 0.0f, PLAYER_IA_NONE, this->unk_1CE & 7); } func_80B3E460(this); } diff --git a/src/overlays/actors/ovl_En_Daiku/overlay.cfg b/src/overlays/actors/ovl_En_Daiku/overlay.cfg deleted file mode 100644 index cde668b4b..000000000 --- a/src/overlays/actors/ovl_En_Daiku/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Daiku -z_en_daiku.c diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c index d9039ad59..263b22ada 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -88,8 +88,7 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) { this->collider.dim.height = 60; this->collider.dim.yShift = 0; this->actor.flags |= ACTOR_FLAG_8000000; - if ((gSaveContext.save.weekEventReg[63] & 0x80) || - ((gSaveContext.save.day == 3) && gSaveContext.save.isNight)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_80) || ((gSaveContext.save.day == 3) && gSaveContext.save.isNight)) { Actor_Kill(&this->actor); } } else if ((gSaveContext.save.day == 3) && gSaveContext.save.isNight) { diff --git a/src/overlays/actors/ovl_En_Daiku2/overlay.cfg b/src/overlays/actors/ovl_En_Daiku2/overlay.cfg deleted file mode 100644 index c5eafa2b8..000000000 --- a/src/overlays/actors/ovl_En_Daiku2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Daiku2 -z_en_daiku2.c diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c index 711943659..0e5e7a3ea 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -167,7 +167,7 @@ void func_80BE65B4(EnDaiku2* this, PlayState* play) { switch (gSaveContext.save.day - 1) { case 0: this->unk_28A = 0; - if (gSaveContext.save.weekEventReg[64] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_64_02)) { this->unk_28A = 6; } func_80BE6408(this, 8); @@ -175,7 +175,7 @@ void func_80BE65B4(EnDaiku2* this, PlayState* play) { case 1: this->unk_28A = 2; - if (gSaveContext.save.weekEventReg[64] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_64_04)) { this->unk_28A = 7; } func_80BE6408(this, 8); @@ -309,11 +309,11 @@ void func_80BE6BC0(EnDaiku2* this, PlayState* play) { } else { switch (day) { case 0: - gSaveContext.save.weekEventReg[64] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_64_02); break; case 1: - gSaveContext.save.weekEventReg[64] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_64_04); break; } func_80BE65B4(this, play); diff --git a/src/overlays/actors/ovl_En_Death/overlay.cfg b/src/overlays/actors/ovl_En_Death/overlay.cfg deleted file mode 100644 index 17c27c850..000000000 --- a/src/overlays/actors/ovl_En_Death/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Death -z_en_death.c diff --git a/src/overlays/actors/ovl_En_Dekubaba/overlay.cfg b/src/overlays/actors/ovl_En_Dekubaba/overlay.cfg deleted file mode 100644 index cb209dea4..000000000 --- a/src/overlays/actors/ovl_En_Dekubaba/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Dekubaba -z_en_dekubaba.c diff --git a/src/overlays/actors/ovl_En_Dekunuts/overlay.cfg b/src/overlays/actors/ovl_En_Dekunuts/overlay.cfg deleted file mode 100644 index dbbc3d2ed..000000000 --- a/src/overlays/actors/ovl_En_Dekunuts/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Dekunuts -z_en_dekunuts.c diff --git a/src/overlays/actors/ovl_En_Demo_heishi/overlay.cfg b/src/overlays/actors/ovl_En_Demo_heishi/overlay.cfg deleted file mode 100644 index bff118f72..000000000 --- a/src/overlays/actors/ovl_En_Demo_heishi/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Demo_heishi -z_en_demo_heishi.c diff --git a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.h b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.h index 181198e0f..9d9714b95 100644 --- a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.h +++ b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.h @@ -26,6 +26,6 @@ typedef struct EnDemoheishi { /* 0x270 */ s16 isTalking; /* 0x272 */ s16 textIdIndex; /* 0x274 */ ColliderCylinder colliderCylinder; -} EnDemoheishi; //size = 0x2C0 +} EnDemoheishi; // size = 0x2C0 #endif // Z_EN_DEMO_HEISHI_H diff --git a/src/overlays/actors/ovl_En_Dg/overlay.cfg b/src/overlays/actors/ovl_En_Dg/overlay.cfg deleted file mode 100644 index b9e928116..000000000 --- a/src/overlays/actors/ovl_En_Dg/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Dg -z_en_dg.c diff --git a/src/overlays/actors/ovl_En_Dg/z_en_dg.c b/src/overlays/actors/ovl_En_Dg/z_en_dg.c index bd2c1e603..d9bebb404 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -10,6 +10,8 @@ #define THIS ((EnDg*)thisx) +//! TODO: this file require macros for its uses of weekEventReg + void EnDg_Init(Actor* thisx, PlayState* play); void EnDg_Destroy(Actor* thisx, PlayState* play); void EnDg_Update(Actor* thisx, PlayState* play); @@ -250,8 +252,8 @@ void EnDg_GetFloorRot(EnDg* this, Vec3f* floorRot) { sinf(0.0f); cosf(0.0f); - floorRot->x = -Math_Acot2F(1.0f, -nz * ny); - floorRot->z = Math_Acot2F(1.0f, -nx * ny); + floorRot->x = -Math_Atan2F_XY(1.0f, -nz * ny); + floorRot->z = Math_Atan2F_XY(1.0f, -nx * ny); } } @@ -308,7 +310,7 @@ s16 EnDg_GetYRotation(Path* path, s32 index, Vec3f* pos, f32* distSq) { *distSq = SQ(diffX) + SQ(diffZ); - return RADF_TO_BINANG(Math_Acot2F(diffZ, diffX)); + return RADF_TO_BINANG(Math_Atan2F_XY(diffZ, diffX)); } /** diff --git a/src/overlays/actors/ovl_En_Dinofos/overlay.cfg b/src/overlays/actors/ovl_En_Dinofos/overlay.cfg deleted file mode 100644 index 61af26795..000000000 --- a/src/overlays/actors/ovl_En_Dinofos/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Dinofos -z_en_dinofos.c diff --git a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c index e2ad9433c..643c167f0 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -369,7 +369,7 @@ void func_8089ABF4(EnDinofos* this, PlayState* play) { this->subCamId = SUB_CAM_ID_DONE; ActorCutscene_Stop(this->actor.cutscene); if (this->actor.colChkInfo.health == 0) { - func_800B724C(play, &this->actor, 6); + func_800B724C(play, &this->actor, PLAYER_CSMODE_6); } } } @@ -1206,7 +1206,7 @@ void func_8089D318(EnDinofos* this, PlayState* play) { if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { if (this->actor.colChkInfo.health == 0) { ActorCutscene_Start(this->actor.cutscene, &this->actor); - func_800B724C(play, &this->actor, 7); + func_800B724C(play, &this->actor, PLAYER_CSMODE_7); } else { ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Dnb/overlay.cfg b/src/overlays/actors/ovl_En_Dnb/overlay.cfg deleted file mode 100644 index 074d3340a..000000000 --- a/src/overlays/actors/ovl_En_Dnb/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Dnb -z_en_dnb.c diff --git a/src/overlays/actors/ovl_En_Dnh/overlay.cfg b/src/overlays/actors/ovl_En_Dnh/overlay.cfg deleted file mode 100644 index 85a45176f..000000000 --- a/src/overlays/actors/ovl_En_Dnh/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Dnh -z_en_dnh.c diff --git a/src/overlays/actors/ovl_En_Dnk/overlay.cfg b/src/overlays/actors/ovl_En_Dnk/overlay.cfg deleted file mode 100644 index 93ce82d2c..000000000 --- a/src/overlays/actors/ovl_En_Dnk/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Dnk -z_en_dnk.c diff --git a/src/overlays/actors/ovl_En_Dno/overlay.cfg b/src/overlays/actors/ovl_En_Dno/overlay.cfg deleted file mode 100644 index 9aa2bd93c..000000000 --- a/src/overlays/actors/ovl_En_Dno/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Dno -z_en_dno.c diff --git a/src/overlays/actors/ovl_En_Dno/z_en_dno.c b/src/overlays/actors/ovl_En_Dno/z_en_dno.c index 3c97b8377..12e048955 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c @@ -249,7 +249,7 @@ void EnDno_Init(Actor* thisx, PlayState* play) { switch (EN_DNO_GET_C000(thisx)) { case EN_DNO_GET_C000_0: func_80A71788(this, play); - if (!(gSaveContext.save.weekEventReg[23] & 0x20) || (gSaveContext.save.weekEventReg[93] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_93_02)) { Actor_Kill(thisx); } else { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE_WITH_CANDLE, @@ -264,7 +264,7 @@ void EnDno_Init(Actor* thisx, PlayState* play) { break; case EN_DNO_GET_C000_1: - if (gSaveContext.save.weekEventReg[23] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { Actor_Kill(thisx); } else { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE, @@ -307,7 +307,7 @@ void func_80A71B68(EnDno* this, PlayState* play) { this->unk_452 = 0; this->actor.textId = 0; if (CHECK_QUEST_ITEM(QUEST_SONG_SONATA)) { - if (gSaveContext.save.weekEventReg[27] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_27_01)) { if (!(this->unk_3B0 & 0x20)) { SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_PRAYER_LOOP, &this->animIndex); @@ -374,17 +374,17 @@ void func_80A71C3C(EnDno* this, PlayState* play) { void func_80A71E54(EnDno* this, PlayState* play) { if (CHECK_QUEST_ITEM(QUEST_SONG_SONATA)) { - if (gSaveContext.save.weekEventReg[27] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_27_01)) { this->textId = 0x811; } else { this->textId = 0x80F; - gSaveContext.save.weekEventReg[27] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_27_01); } - } else if (gSaveContext.save.weekEventReg[26] & 0x80) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_26_80)) { this->textId = 0x80B; } else { this->textId = 0x80C; - gSaveContext.save.weekEventReg[26] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_26_80); } if (this->textId != 0x811) { @@ -573,7 +573,7 @@ void func_80A724B8(EnDno* this, PlayState* play) { } void func_80A7256C(EnDno* this, PlayState* play) { - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_MINUS1); } void func_80A72598(EnDno* this, PlayState* play) { @@ -617,7 +617,7 @@ void func_80A725F8(EnDno* this, PlayState* play) { case 2: if (Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x2D8)) { - gSaveContext.save.weekEventReg[93] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_93_02); Message_StartTextbox(play, 0x802, &this->actor); } break; diff --git a/src/overlays/actors/ovl_En_Dnp/overlay.cfg b/src/overlays/actors/ovl_En_Dnp/overlay.cfg deleted file mode 100644 index ea78e5340..000000000 --- a/src/overlays/actors/ovl_En_Dnp/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Dnp -z_en_dnp.c diff --git a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c index 594ddd3d7..b504e9a11 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c @@ -211,10 +211,12 @@ s32 func_80B3CDA4(EnDnp* this, PlayState* play) { Math_SmoothStepToS(&this->unk_332, temp_s0, 3, 0x2AA8, 0x1); sp30 = player->actor.world.pos; - sp30.y = player->bodyPartsPos[7].y + 3.0f; + sp30.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; sp3C = this->actor.world.pos; sp3C.y += 10.0f; pitch = Math_Vec3f_Pitch(&sp3C, &sp30); + + //! FAKE if (1) {}; Math_SmoothStepToS(&this->unk_330, pitch, 3, 0x2AA8, 0x1); @@ -246,7 +248,7 @@ s32 func_80B3CF60(EnDnp* this, PlayState* play) { this->unk_322 |= 8; this->actionFunc = func_80B3D3F8; ret = true; - } else if (!(gSaveContext.save.weekEventReg[23] & 0x20) && Actor_HasParent(&this->actor, play)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20) && Actor_HasParent(&this->actor, play)) { SubS_UpdateFlags(&this->unk_322, 0, 7); this->unk_322 &= ~0x500; this->actor.parent = NULL; @@ -291,10 +293,10 @@ void func_80B3D11C(EnDnp* this, PlayState* play) { s32 temp_v0; s32 val; - if (!(gSaveContext.save.weekEventReg[29] & 0x40) && (play->sceneId == SCENE_MITURIN) && + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_29_40) && (play->sceneId == SCENE_MITURIN) && (play->csCtx.currentCsIndex == 0)) { this->unk_322 |= 0x20; - gSaveContext.save.weekEventReg[29] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_29_40); } if (Cutscene_CheckActorAction(play, 101)) { @@ -352,7 +354,7 @@ void func_80B3D338(EnDnp* this, PlayState* play) { } else { this->actor.textId = 0x971; player->actor.textId = this->actor.textId; - func_800B8500(&this->actor, play, 9999.9f, 9999.9f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 9999.9f, 9999.9f, PLAYER_IA_MINUS1); } } } @@ -385,7 +387,7 @@ void func_80B3D47C(EnDnp* this, PlayState* play) { void func_80B3D558(EnDnp* this, PlayState* play) { if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); - gSaveContext.save.weekEventReg[23] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_23_20); } else { ActorCutscene_SetIntentToPlay(this->actor.cutscene); } @@ -414,13 +416,13 @@ void EnDnp_Init(Actor* thisx, PlayState* play) { this->actor.cutscene = 0x10; this->actionFunc = func_80B3D47C; } else if (((EN_DNP_GET_TYPE(&this->actor) == EN_DNP_TYPE_WOODFALL_TEMPLE) && - !Inventory_HasItemInBottle(ITEM_DEKU_PRINCESS) && !(gSaveContext.save.weekEventReg[23] & 0x20)) || + !Inventory_HasItemInBottle(ITEM_DEKU_PRINCESS) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) || ((EN_DNP_GET_TYPE(&this->actor) == EN_DNP_TYPE_DEKU_KINGS_CHAMBER) && - (gSaveContext.save.weekEventReg[23] & 0x20))) { + CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20))) { Actor_SetScale(&this->actor, 0.0085f); SubS_UpdateFlags(&this->unk_322, 3, 7); this->unk_322 |= 0x400; - if ((play->sceneId == SCENE_MITURIN) && (gSaveContext.save.weekEventReg[29] & 0x40)) { + if ((play->sceneId == SCENE_MITURIN) && CHECK_WEEKEVENTREG(WEEKEVENTREG_29_40)) { this->unk_322 |= 0x20; EnDnp_ChangeAnim(this, EN_DNP_ANIM_HURRY); } @@ -456,10 +458,10 @@ void EnDnp_Update(Actor* thisx, PlayState* play) { Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); sp2C = this->collider.dim.radius + 50; sp28 = this->collider.dim.height + 30; - if ((this->unk_322 & 0x400) && !(gSaveContext.save.weekEventReg[23] & 0x20)) { + if ((this->unk_322 & 0x400) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { Actor_PickUp(&this->actor, play, GI_MAX, sp2C, sp28); } - func_8013C964(&this->actor, play, sp2C, sp28, PLAYER_AP_NONE, this->unk_322 & 7); + func_8013C964(&this->actor, play, sp2C, sp28, PLAYER_IA_NONE, this->unk_322 & 7); Actor_SetFocus(&this->actor, 30.0f); func_80B3CC80(this, play); } diff --git a/src/overlays/actors/ovl_En_Dnq/overlay.cfg b/src/overlays/actors/ovl_En_Dnq/overlay.cfg deleted file mode 100644 index 169a41621..000000000 --- a/src/overlays/actors/ovl_En_Dnq/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Dnq -z_en_dnq.c diff --git a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c index 6ae6c665c..4b1087311 100644 --- a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c +++ b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c @@ -83,7 +83,7 @@ static AnimationInfoS sAnimationInfo[] = { }; s32 EnDnq_ValidatePictograph(PlayState* play, Actor* thisx) { - return Snap_ValidatePictograph(play, thisx, PICTOGRAPH_DEKU_KING, &thisx->focus.pos, &thisx->world.rot, 120.0f, + return Snap_ValidatePictograph(play, thisx, PICTO_VALID_DEKU_KING, &thisx->focus.pos, &thisx->world.rot, 120.0f, 480.0f, 0x38E3); } @@ -259,7 +259,7 @@ s32 func_80A52B68(EnDnq* this, PlayState* play) { Player* player = GET_PLAYER(play); u16 temp = play->msgCtx.currentTextId; - if ((player->stateFlags1 & PLAYER_STATE1_40) && (player->targetActor == &this->picto.actor)) { + if ((player->stateFlags1 & PLAYER_STATE1_40) && (player->talkActor == &this->picto.actor)) { switch (temp) { case 0x89B: func_80A5257C(this, 18); @@ -309,7 +309,7 @@ void func_80A52C6C(EnDnq* this, PlayState* play) { } s32* func_80A52CF8(EnDnq* this, PlayState* play) { - if (gSaveContext.save.weekEventReg[23] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { return &D_80A53400[14]; } @@ -343,11 +343,11 @@ void func_80A52DC8(EnDnq* this, PlayState* play) { SubS_UpdateFlags(&this->unk_37C, 0, 7); } - if (!(gSaveContext.save.weekEventReg[23] & 0x20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { this->unk_390 = 70.0f; if (Inventory_HasItemInBottle(ITEM_DEKU_PRINCESS) && !Play_InCsMode(play) && (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) && (ActorCutscene_GetCurrentIndex() == -1)) { - if ((DECR(this->unk_384) == 0) && (gSaveContext.save.weekEventReg[29] & 0x40)) { + if ((DECR(this->unk_384) == 0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_29_40)) { Message_StartTextbox(play, 0x969, NULL); this->unk_384 = 200; } @@ -361,7 +361,7 @@ void func_80A52DC8(EnDnq* this, PlayState* play) { this->picto.actor.xzDistToPlayer = this->unk_394; - if (gSaveContext.save.weekEventReg[83] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_83_08)) { func_80A52A78(this, play); } else if (this->unk_3A4 == 0) { Math_ApproachS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 3, 0x2AA8); @@ -430,7 +430,7 @@ void EnDnq_Init(Actor* thisx, PlayState* play) { this->unk_386 = 0; this->unk_37C = 0; SubS_UpdateFlags(&this->unk_37C, 3, 7); - if (gSaveContext.save.weekEventReg[9] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_09_80)) { this->unk_3A4 = 1; } else { this->unk_3A4 = 0; @@ -459,7 +459,7 @@ void EnDnq_Update(Actor* thisx, PlayState* play) { this->unk_394 = this->picto.actor.xzDistToPlayer; func_80A52C6C(this, play); func_8013C964(&this->picto.actor, play, this->unk_390, fabsf(this->picto.actor.playerHeightRel) + 1.0f, - PLAYER_AP_NONE, this->unk_37C & 7); + PLAYER_IA_NONE, this->unk_37C & 7); this->picto.actor.xzDistToPlayer = this->unk_394; Actor_SetFocus(&this->picto.actor, 46.0f); func_80A52604(this, play); diff --git a/src/overlays/actors/ovl_En_Dns/overlay.cfg b/src/overlays/actors/ovl_En_Dns/overlay.cfg deleted file mode 100644 index 3fc03b217..000000000 --- a/src/overlays/actors/ovl_En_Dns/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Dns -z_en_dns.c diff --git a/src/overlays/actors/ovl_En_Dns/z_en_dns.c b/src/overlays/actors/ovl_En_Dns/z_en_dns.c index 05189cadf..a8a94d9a4 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -144,7 +144,7 @@ void func_8092C740(EnDns* this, PlayState* play) { this->unk_2CE = CLAMP(this->unk_2CE, -0x3FFC, 0x3FFC); Math_Vec3f_Copy(&sp28, &player->actor.world.pos); - sp28.y = player->bodyPartsPos[7].y + 3.0f; + sp28.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; Math_Vec3f_Copy(&sp34, &this->actor.world.pos); sp34.y += 10.0f; temp = Math_Vec3f_Pitch(&sp34, &sp28); @@ -180,7 +180,7 @@ void func_8092C934(EnDns* this) { s32* func_8092C9BC(EnDns* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (!(gSaveContext.save.weekEventReg[23] & 0x20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { if (player->transformation != PLAYER_FORM_DEKU) { return &D_8092DCB0[16]; } else if (this->unk_2FC != 0) { @@ -359,14 +359,14 @@ s32 func_8092D068(EnDns* this) { s32 ret = false; if (ENDNS_GET_8000(&this->actor)) { - if (gSaveContext.save.weekEventReg[23] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { ret = true; } } else if (ENDNS_GET_4000(&this->actor)) { - if ((gSaveContext.save.weekEventReg[9] & 0x80) && !(gSaveContext.save.weekEventReg[23] & 0x20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_09_80) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { ret = true; } - } else if (!(gSaveContext.save.weekEventReg[9] & 0x80) && !(gSaveContext.save.weekEventReg[23] & 0x20)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_09_80) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { ret = true; } @@ -397,16 +397,16 @@ void func_8092D1B8(EnDns* this, PlayState* play) { } if (!ENDNS_GET_4000(&this->actor) || (this->unk_2D2 != 0)) { - if (!(gSaveContext.save.weekEventReg[23] & 0x20) && !(gSaveContext.eventInf[1] & 0x20) && func_8092CC68(play)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20) && !CHECK_EVENTINF(EVENTINF_15) && func_8092CC68(play)) { player->stateFlags1 |= PLAYER_STATE1_20; this->unk_2C6 |= 0x100; SubS_UpdateFlags(&this->unk_2C6, 4, 7); play_sound(NA_SE_SY_FOUND); - gSaveContext.eventInf[1] |= 0x20; + SET_EVENTINF(EVENTINF_15); this->unk_2F4 = func_8092CCEC; func_8092C63C(this, EN_DNS_ANIM_WALK_1); this->actionFunc = EnDns_DoNothing; - } else if (gSaveContext.eventInf[1] & 0x40) { + } else if (CHECK_EVENTINF(EVENTINF_16)) { func_8092CCEC(this, play); func_8092C63C(this, EN_DNS_ANIM_WALK_1); this->actionFunc = func_8092D330; @@ -440,8 +440,8 @@ void func_8092D330(EnDns* this, PlayState* play) { play->nextEntrance = ENTRANCE(DEKU_PALACE, 1); gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; } } @@ -456,7 +456,7 @@ void func_8092D4D8(EnDns* this, PlayState* play) { SubS_UpdateFlags(&this->unk_2C6, 3, 7); this->unk_2F4 = NULL; if (ENDNS_GET_4000(&this->actor)) { - if (!(gSaveContext.eventInf[1] & 0x20)) { + if (!CHECK_EVENTINF(EVENTINF_15)) { this->skelAnime.curFrame = this->unk_2F0; this->actor.world.rot.y = this->unk_2DA; func_8092C63C(this, EN_DNS_ANIM_DANCE); @@ -521,14 +521,14 @@ void EnDns_Init(Actor* thisx, PlayState* play) { SubS_UpdateFlags(&this->unk_2C6, 3, 7); this->unk_2C6 |= (0x40 | 0x10); this->unk_2C6 |= 0x200; - if (gSaveContext.save.weekEventReg[9] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_09_80)) { this->unk_2FC = 1; } else { this->unk_2FC = 0; } this->actionFunc = func_8092D1B8; - gSaveContext.eventInf[1] &= (u8)~0x20; - gSaveContext.eventInf[1] &= (u8)~0x40; + CLEAR_EVENTINF(EVENTINF_15); + CLEAR_EVENTINF(EVENTINF_16); } void EnDns_Destroy(Actor* thisx, PlayState* play) { @@ -550,7 +550,7 @@ void EnDns_Update(Actor* thisx, PlayState* play) { func_8092C934(this); func_8092C86C(this, play); Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); - func_8013C964(&this->actor, play, 80.0f, 40.0f, PLAYER_AP_NONE, this->unk_2C6 & 7); + func_8013C964(&this->actor, play, 80.0f, 40.0f, PLAYER_IA_NONE, this->unk_2C6 & 7); Actor_SetFocus(&this->actor, 34.0f); func_8092C6FC(this, play); func_8092C5C0(this); diff --git a/src/overlays/actors/ovl_En_Dodongo/overlay.cfg b/src/overlays/actors/ovl_En_Dodongo/overlay.cfg deleted file mode 100644 index 05d2f0a6e..000000000 --- a/src/overlays/actors/ovl_En_Dodongo/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Dodongo -z_en_dodongo.c diff --git a/src/overlays/actors/ovl_En_Door/overlay.cfg b/src/overlays/actors/ovl_En_Door/overlay.cfg deleted file mode 100644 index 9c737bc9d..000000000 --- a/src/overlays/actors/ovl_En_Door/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Door -z_en_door.c diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c index 6230bd066..3d7e79a3d 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -57,7 +57,7 @@ u8 D_808675E4[] = { /* 0x1C */ SCHEDULE_CMD_RET_NONE(), /* 0x1D */ SCHEDULE_CMD_RET_VAL_S(8), /* 0x1F */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x3C - 0x23), - /* 0x23 */ SCHEDULE_CMD_CHECK_FLAG_S(0x1C, 0x08, 0x2E - 0x27), + /* 0x23 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_28_08, 0x2E - 0x27), /* 0x27 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(13, 0, 0x2D - 0x2B), /* 0x2B */ SCHEDULE_CMD_RET_VAL_S(9), /* 0x2D */ SCHEDULE_CMD_RET_NONE(), @@ -93,14 +93,14 @@ u8 D_8086764C[] = { u8 D_80867658[] = { /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x13 - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(0x1C, 0x08, 0x0A - 0x08), + /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_28_08, 0x0A - 0x08), /* 0x08 */ SCHEDULE_CMD_RET_VAL_S(12), /* 0x0A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 10, 22, 0, 0x12 - 0x10), /* 0x10 */ SCHEDULE_CMD_RET_VAL_S(12), /* 0x12 */ SCHEDULE_CMD_RET_NONE(), /* 0x13 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x28 - 0x17), /* 0x17 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(13, 0, 0x28 - 0x1B), - /* 0x1B */ SCHEDULE_CMD_CHECK_FLAG_S(0x33, 0x08, 0x21 - 0x1F), + /* 0x1B */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_08, 0x21 - 0x1F), /* 0x1F */ SCHEDULE_CMD_RET_VAL_S(12), /* 0x21 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(22, 0, 0x27 - 0x25), /* 0x25 */ SCHEDULE_CMD_RET_VAL_S(12), @@ -231,7 +231,7 @@ u8 D_8086773C[] = { u8 D_80867744[] = { /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x08 - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(0x63, 0x80, 0x0E - 0x08), + /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_99_80, 0x0E - 0x08), /* 0x08 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(20, 0, 0x14 - 0x0C), /* 0x0C */ SCHEDULE_CMD_RET_VAL_S(27), /* 0x0E */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(18, 0, 0x14 - 0x12), @@ -240,12 +240,12 @@ u8 D_80867744[] = { }; u8 D_8086775C[] = { - /* 0x00 */ SCHEDULE_CMD_CHECK_FLAG_S(0x34, 0x20, 0x1B - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(0x4B, 0x20, 0x1B - 0x08), - /* 0x08 */ SCHEDULE_CMD_CHECK_FLAG_S(0x0E, 0x04, 0x0E - 0x0C), + /* 0x00 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_52_20, 0x1B - 0x04), + /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_75_20, 0x1B - 0x08), + /* 0x08 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_14_04, 0x0E - 0x0C), /* 0x0C */ SCHEDULE_CMD_RET_VAL_S(29), - /* 0x0E */ SCHEDULE_CMD_CHECK_FLAG_S(0x3B, 0x01, 0x1A - 0x12), - /* 0x12 */ SCHEDULE_CMD_CHECK_FLAG_S(0x3D, 0x02, 0x18 - 0x16), + /* 0x0E */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_59_01, 0x1A - 0x12), + /* 0x12 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_61_02, 0x18 - 0x16), /* 0x16 */ SCHEDULE_CMD_RET_VAL_S(30), /* 0x18 */ SCHEDULE_CMD_RET_VAL_S(31), /* 0x1A */ SCHEDULE_CMD_RET_NONE(), @@ -465,7 +465,7 @@ void func_80866A5C(EnDoor* this, PlayState* play) { } void func_80866B20(EnDoor* this, PlayState* play) { - static s32 D_80867BC0[4]; + static s32 D_80867BC0; Player* player = GET_PLAYER(play); Vec3f playerPosRelToDoor; s16 temp_a2; @@ -475,7 +475,7 @@ void func_80866B20(EnDoor* this, PlayState* play) { u8 temp_a1; if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state) && (this->dyna.actor.textId == 0x1821)) { - D_80867BC0[0] = 1; + D_80867BC0 = true; } if (this->unk_1A1 != 0) { this->actionFunc = func_80867144; @@ -491,25 +491,25 @@ void func_80866B20(EnDoor* this, PlayState* play) { Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_DOOR_OPEN); } else if (!Player_InCsMode(play)) { Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &playerPosRelToDoor, &player->actor.world.pos); - if ((D_80867BC0[0] != 0) || ((fabsf(playerPosRelToDoor.y) < 20.0f) && (fabsf(playerPosRelToDoor.x) < 20.0f) && - (fabsf(playerPosRelToDoor.z) < 50.0f))) { + if (D_80867BC0 || ((fabsf(playerPosRelToDoor.y) < 20.0f) && (fabsf(playerPosRelToDoor.x) < 20.0f) && + (fabsf(playerPosRelToDoor.z) < 50.0f))) { yawDiff = player->actor.shape.rot.y - this->dyna.actor.shape.rot.y; if (playerPosRelToDoor.z > 0.0f) { yawDiff = (0x8000 - yawDiff); } if (ABS_ALT(yawDiff) < 0x3000) { - player->doorType = 1; + player->doorType = PLAYER_DOORTYPE_HANDLE; player->doorDirection = playerPosRelToDoor.z >= 0.0f ? 1.0f : -1.0f; player->doorActor = &this->dyna.actor; if (this->unk_1A6 != 0) { if (gSaveContext.save.inventory.dungeonKeys[((void)0, gSaveContext.mapIndex)] <= 0) { - player->doorType = -1; + player->doorType = PLAYER_DOORTYPE_TALKING; this->dyna.actor.textId = 0x1802; } else { player->doorTimer = 10; } } else if (this->unk_1A4 == 4) { - player->doorType = -1; + player->doorType = PLAYER_DOORTYPE_TALKING; this->dyna.actor.textId = 0x1800; } else if ((this->unk_1A4 == 0) || (this->unk_1A4 == 2) || (this->unk_1A4 == 3)) { s32 textIdOffset; @@ -528,16 +528,18 @@ void func_80866B20(EnDoor* this, PlayState* play) { } else if (this->unk_1A4 == 2) { baseTextId = 0x181D; } - player->doorType = -1; + player->doorType = PLAYER_DOORTYPE_TALKING; this->dyna.actor.textId = baseTextId + textIdOffset; } } else if ((this->unk_1A4 == 5) && (playerPosRelToDoor.z > 0.0f)) { ScheduleOutput sp30; - if (Schedule_RunScript(play, D_8086778C[this->switchFlag], &sp30) != 0) { + if (Schedule_RunScript(play, D_8086778C[this->switchFlag], &sp30)) { this->dyna.actor.textId = sp30.result + 0x1800; - player->doorType = ((this->dyna.actor.textId == 0x1821) && (D_80867BC0[0] != 0)) ? 5 : -1; + player->doorType = ((this->dyna.actor.textId == 0x1821) && D_80867BC0) + ? PLAYER_DOORTYPE_PROXIMITY + : PLAYER_DOORTYPE_TALKING; } } func_80122F28(player); diff --git a/src/overlays/actors/ovl_En_Door_Etc/overlay.cfg b/src/overlays/actors/ovl_En_Door_Etc/overlay.cfg deleted file mode 100644 index fa6a13d8a..000000000 --- a/src/overlays/actors/ovl_En_Door_Etc/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Door_Etc -z_en_door_etc.c diff --git a/src/overlays/actors/ovl_En_Dragon/overlay.cfg b/src/overlays/actors/ovl_En_Dragon/overlay.cfg deleted file mode 100644 index 2720fb7f1..000000000 --- a/src/overlays/actors/ovl_En_Dragon/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Dragon -z_en_dragon.c diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c index 1540e5778..18917926a 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c @@ -535,7 +535,7 @@ void EnDragon_Grab(EnDragon* this, PlayState* play) { if (this->grabTimer > sMaxGrabTimerPerPython[this->pythonIndex]) { if (this->state == DEEP_PYTHON_GRAB_STATE_START) { - func_800B7298(play, &this->actor, 6); + func_800B7298(play, &this->actor, PLAYER_CSMODE_6); this->state = DEEP_PYTHON_GRAB_STATE_GRABBED; } @@ -572,7 +572,7 @@ void EnDragon_Attack(EnDragon* this, PlayState* play) { //! @bug: This function should only pass Player*: it uses *(this + 0x153), which is meant to be //! player->currentMask, but in this case is garbage in the skelAnime - func_800B8E58((Player*)this, player->ageProperties->unk_92 + NA_SE_VO_LI_DAMAGE_S); + func_800B8E58((Player*)this, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S); Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_UTSUBO_BITE); CollisionCheck_GreenBlood(play, NULL, &player->actor.world.pos); } @@ -684,37 +684,37 @@ void EnDragon_Dead(EnDragon* this, PlayState* play) { if (Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_OT, seahorsePos.x, seahorsePos.y, seahorsePos.z, 0, this->actor.shape.rot.y, 0, 0x4000, this->actor.cutscene, this->actor.unk20, NULL)) { - gSaveContext.save.weekEventReg[13] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_13_01); switch (this->pythonIndex) { case 0: - gSaveContext.save.weekEventReg[83] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_83_10); break; case 1: - gSaveContext.save.weekEventReg[83] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_83_20); break; case 2: - gSaveContext.save.weekEventReg[83] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_83_40); break; case 3: - gSaveContext.save.weekEventReg[83] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_83_80); break; case 4: - gSaveContext.save.weekEventReg[84] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_84_01); break; case 5: - gSaveContext.save.weekEventReg[84] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_84_02); break; case 6: - gSaveContext.save.weekEventReg[84] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_84_04); break; case 7: - gSaveContext.save.weekEventReg[84] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_84_08); break; } } diff --git a/src/overlays/actors/ovl_En_Drs/overlay.cfg b/src/overlays/actors/ovl_En_Drs/overlay.cfg deleted file mode 100644 index 7a0ab3db7..000000000 --- a/src/overlays/actors/ovl_En_Drs/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Drs -z_en_drs.c diff --git a/src/overlays/actors/ovl_En_Drs/z_en_drs.c b/src/overlays/actors/ovl_En_Drs/z_en_drs.c index 75d493b41..7e232d5bd 100644 --- a/src/overlays/actors/ovl_En_Drs/z_en_drs.c +++ b/src/overlays/actors/ovl_En_Drs/z_en_drs.c @@ -108,7 +108,7 @@ void EnDrs_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot // Anju removes the Moon Mask at the start of the Couple's Mask cutscene // after that it will no longer be rendered. - if (!(gSaveContext.save.weekEventReg[87] & 2) && (limbIndex == WEDDING_DRESS_MANNEQUIN_LIMB_MASK)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_87_02) && (limbIndex == WEDDING_DRESS_MANNEQUIN_LIMB_MASK)) { OPEN_DISPS(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[temp].segment); gSPDisplayList(POLY_OPA_DISP++, &gMoonMaskDL); diff --git a/src/overlays/actors/ovl_En_Ds2n/overlay.cfg b/src/overlays/actors/ovl_En_Ds2n/overlay.cfg deleted file mode 100644 index d0764f1c1..000000000 --- a/src/overlays/actors/ovl_En_Ds2n/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ds2n -z_en_ds2n.c diff --git a/src/overlays/actors/ovl_En_Dt/overlay.cfg b/src/overlays/actors/ovl_En_Dt/overlay.cfg deleted file mode 100644 index 6eb553237..000000000 --- a/src/overlays/actors/ovl_En_Dt/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Dt -z_en_dt.c diff --git a/src/overlays/actors/ovl_En_Dy_Extra/overlay.cfg b/src/overlays/actors/ovl_En_Dy_Extra/overlay.cfg deleted file mode 100644 index 04c14d5ce..000000000 --- a/src/overlays/actors/ovl_En_Dy_Extra/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Dy_Extra -z_en_dy_extra.c diff --git a/src/overlays/actors/ovl_En_Egblock/overlay.cfg b/src/overlays/actors/ovl_En_Egblock/overlay.cfg deleted file mode 100644 index c80635d34..000000000 --- a/src/overlays/actors/ovl_En_Egblock/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Egblock -z_en_egblock.c diff --git a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c index 2a1a976f5..de26515fa 100644 --- a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c +++ b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c @@ -1,21 +1,34 @@ /* * File: z_en_egblock.c * Overlay: ovl_En_Egblock - * Description: Eyegore Block + * Description: Unused pillar. Eyegore can destroy it. */ #include "z_en_egblock.h" +#include "objects/object_eg/object_eg.h" #define FLAGS (ACTOR_FLAG_8000000) #define THIS ((EnEgblock*)thisx) +typedef enum { + /* 0 */ EGBLOCK_EFFECT_DEBRIS_SOLID, + /* 1 */ EGBLOCK_EFFECT_DEBRIS_FLAT, +} EnEgblockEffectType; + void EnEgblock_Init(Actor* thisx, PlayState* play); void EnEgblock_Destroy(Actor* thisx, PlayState* play); void EnEgblock_Update(Actor* thisx, PlayState* play); -void EnEgblock_Draw(Actor* thisx, PlayState* play); +void EnEgblock_Draw(Actor* thisx, PlayState* play2); + +void EnEgblock_Active(EnEgblock* this, PlayState* play); +void EnEgblock_DoNothing(EnEgblock* this, PlayState* play); +void EnEgblock_Inactive(EnEgblock* this, PlayState* play); + +void EnEgblock_SpawnEffect(EnEgblock* this, Vec3f* pos, s16 lifetime, s16 arg3); +void EnEgblock_UpdateEffects(EnEgblock* this, PlayState* play); +void EnEgblock_DrawEffects(EnEgblock* this, PlayState* play); -#if 0 ActorInit En_Egblock_InitVars = { ACTOR_EN_EGBLOCK, ACTORCAT_PROP, @@ -28,28 +41,191 @@ ActorInit En_Egblock_InitVars = { (ActorFunc)EnEgblock_Draw, }; -#endif +void EnEgblock_Init(Actor* thisx, PlayState* play) { + EnEgblock* this = THIS; + CollisionHeader* colHeader = NULL; + s32 pad; -extern UNK_TYPE D_06001698; -extern UNK_TYPE D_06001820; -extern UNK_TYPE D_06001BF8; + DynaPolyActor_Init(&this->dyna, 0); + CollisionHeader_GetVirtual(&gEyegoreBlockCol, &colHeader); + this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); + this->dyna.actor.colChkInfo.mass = MASS_IMMOVABLE; + this->inactive = false; + Actor_SetScale(&this->dyna.actor, 0.5f); + this->type = EGBLOCK_GET_TYPE(&this->dyna.actor); + this->paramF80 = EGBLOCK_GET_PARAM_F80(&this->dyna.actor); + this->param7F = EGBLOCK_GET_PARAM_7F(&this->dyna.actor); + if (this->type == EGBLOCK_TYPE_ACTIVE) { + this->dyna.actor.colChkInfo.health = 1; + this->actionFunc = EnEgblock_Active; + } else { + this->actionFunc = EnEgblock_DoNothing; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/EnEgblock_Init.s") +void EnEgblock_Destroy(Actor* thisx, PlayState* play) { + EnEgblock* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/EnEgblock_Destroy.s") + if (this->dyna.actor.colChkInfo.health == 1) { + DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/func_80ABA8A4.s") +void EnEgblock_Active(EnEgblock* this, PlayState* play) { + if (this->dyna.actor.colChkInfo.health <= 0) { + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/func_80ABA988.s") + //! @bug Egblock doesn't have an effect with index 2, so half of these spawns do nothing. + for (i = 0; i < ARRAY_COUNT(this->effects); i++) { + EnEgblock_SpawnEffect(this, &this->dyna.actor.world.pos, 30, (i & 1) + EGBLOCK_EFFECT_DEBRIS_FLAT); + } + DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); + Actor_SpawnFloorDustRing(play, &this->dyna.actor, &this->dyna.actor.world.pos, 30.0f, 30, 10.0f, 100, 30, true); + this->inactive = true; + this->timer = 50; + this->actionFunc = EnEgblock_Inactive; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/func_80ABA9B8.s") +void EnEgblock_Inactive(EnEgblock* this, PlayState* play) { + if (this->timer == 0) { + Actor_Kill(&this->dyna.actor); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/EnEgblock_Update.s") +void EnEgblock_DoNothing(EnEgblock* this, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/EnEgblock_Draw.s") +void EnEgblock_Update(Actor* thisx, PlayState* play) { + EnEgblock* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/func_80ABAAF4.s") + this->actionFunc(this, play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/func_80ABACB4.s") + DECR(this->timer); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/func_80ABAE64.s") + EnEgblock_UpdateEffects(this, play); +} + +void EnEgblock_Draw(Actor* thisx, PlayState* play2) { + PlayState* play = play2; + EnEgblock* this = THIS; + + func_8012C28C(play->state.gfxCtx); + + if (this->inactive != true) { + OPEN_DISPS(play->state.gfxCtx); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x80, 255, 255, 255, 255); + gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); + gSPDisplayList(POLY_OPA_DISP++, gEyegoreBlockDL); + + CLOSE_DISPS(play->state.gfxCtx); + } + + EnEgblock_DrawEffects(this, play); +} + +void EnEgblock_SpawnEffect(EnEgblock* this, Vec3f* pos, s16 lifetime, s16 arg3) { + EnEgblockEffect* effect = this->effects; + s16 i; + + for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { + if (!effect->isActive) { + effect->isActive = true; + effect->pos = *pos; + effect->pos.x += randPlusMinusPoint5Scaled(50.0f); + effect->pos.z += randPlusMinusPoint5Scaled(50.0f); + effect->timer = lifetime; + effect->alpha = 255; + effect->type = arg3; + effect->accel.x = Rand_ZeroOne() - 0.5f; + effect->accel.y = -1.0f; + effect->accel.z = Rand_ZeroOne() - 0.5f; + effect->velocity.x = 2.0f * (Rand_ZeroOne() - 0.5f); + effect->velocity.y = 5.0f + (10.0f * Rand_ZeroOne()); + effect->velocity.z = 2.0f * (Rand_ZeroOne() - 0.5f); + effect->scale = 0.5f + (0.2f * Rand_ZeroFloat(1.0f)); + effect->rot.x = randPlusMinusPoint5Scaled(0x7530); + effect->rot.y = randPlusMinusPoint5Scaled(0x7530); + effect->rot.z = randPlusMinusPoint5Scaled(0x7530); + break; + } + } +} + +void EnEgblock_UpdateEffects(EnEgblock* this, PlayState* play) { + EnEgblockEffect* effect = this->effects; + s32 i; + + for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { + if (effect->isActive) { + if (effect->type != EGBLOCK_EFFECT_DEBRIS_SOLID) { + effect->rot.x -= 0x64; + effect->rot.y -= 0x64; + effect->rot.z -= 0x64; + } + + effect->pos.x += effect->velocity.x; + effect->pos.y += effect->velocity.y; + effect->pos.z += effect->velocity.z; + + effect->velocity.x += effect->accel.x; + effect->velocity.y += effect->accel.y; + effect->velocity.z += effect->accel.z; + + if (effect->timer) { + effect->timer--; + } else { + effect->alpha -= 10; + if (effect->alpha < 10) { + effect->isActive = false; + } + } + } + } +} + +void EnEgblock_DrawEffects(EnEgblock* this, PlayState* play) { + GraphicsContext* gfxCtx = play->state.gfxCtx; + EnEgblockEffect* effect = this->effects; + s16 i; + + OPEN_DISPS(gfxCtx); + + func_8012C28C(play->state.gfxCtx); + + for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { + if (effect->isActive) { + switch (effect->type) { + case EGBLOCK_EFFECT_DEBRIS_SOLID: + case EGBLOCK_EFFECT_DEBRIS_FLAT: + Matrix_Push(); + + Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); + Matrix_Scale(effect->scale, effect->scale, effect->scale, MTXMODE_APPLY); + Matrix_RotateYS(effect->rot.y, MTXMODE_APPLY); + Matrix_RotateXS(effect->rot.x, MTXMODE_APPLY); + Matrix_RotateZS(effect->rot.z, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x80, 255, 255, 255, 255); + gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, effect->alpha); + + if (effect->type == EGBLOCK_EFFECT_DEBRIS_SOLID) { + gSPDisplayList(POLY_OPA_DISP++, gEyegoreEffectSolidDebrisDL); + } else { + gSPDisplayList(POLY_OPA_DISP++, gEyegoreEffectFlatDebrisDL); + } + + Matrix_Pop(); + break; + + default: + break; + } + } + } + + CLOSE_DISPS(gfxCtx); +} diff --git a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.h b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.h index 88abf1efe..2d875c4d2 100644 --- a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.h +++ b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.h @@ -7,11 +7,40 @@ struct EnEgblock; typedef void (*EnEgblockActionFunc)(struct EnEgblock*, PlayState*); +#define EGBLOCK_GET_PARAM_7F(thisx) ((thisx)->params & 0x7F) +#define EGBLOCK_GET_PARAM_F80(thisx) (((thisx)->params >> 7) & 0x1F) +#define EGBLOCK_GET_TYPE(thisx) (((thisx)->params >> 12) & 0xF) + +#define EGBLOCK_PARAMS(type, param1, param2) ((((type) & 0xF) << 12) | (((param1) & 0x1F) << 7) | ((param2) & 0x7F)) + +#define EGBLOCK_TYPE_ACTIVE 0 + +#define EGBLOCK_EFFECT_COUNT 50 + +typedef struct { + /* 0x00 */ u8 isActive; + /* 0x04 */ Vec3f pos; + /* 0x10 */ s16 alpha; + /* 0x12 */ s16 timer; + /* 0x14 */ s16 type; + /* 0x18 */ Vec3f velocity; + /* 0x24 */ Vec3f accel; + /* 0x30 */ Vec3s rot; + /* 0x38 */ f32 scale; +} EnEgblockEffect; // size = 0x3C + typedef struct EnEgblock { - /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x5C]; + /* 0x000 */ DynaPolyActor dyna; + /* 0x15C */ UNK_TYPE1 unk_15C[0x44]; // SkelAnime? /* 0x1A0 */ EnEgblockActionFunc actionFunc; - /* 0x1A4 */ char unk_1A4[0xC10]; + /* 0x1A4 */ s16 type; + /* 0x1A6 */ s16 paramF80; + /* 0x1A8 */ s16 param7F; + /* 0x1AA */ s16 timer; + /* 0x1AC */ s16 inactive; + /* 0x1AE */ UNK_TYPE1 unk_1AE[2]; + /* 0x1B0 */ UNK_TYPE1 unk_1B0[0x4C]; // ColliderCylinder? + /* 0x1FC */ EnEgblockEffect effects[EGBLOCK_EFFECT_COUNT]; } EnEgblock; // size = 0xDB4 #endif // Z_EN_EGBLOCK_H diff --git a/src/overlays/actors/ovl_En_Egol/overlay.cfg b/src/overlays/actors/ovl_En_Egol/overlay.cfg deleted file mode 100644 index 1073044cd..000000000 --- a/src/overlays/actors/ovl_En_Egol/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Egol -z_en_egol.c diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.c b/src/overlays/actors/ovl_En_Egol/z_en_egol.c index 6b8185249..f115ada7c 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -5,106 +5,292 @@ */ #include "z_en_egol.h" +#include "objects/object_eg/object_eg.h" +#include "objects/gameplay_keep/gameplay_keep.h" +#include "overlays/actors/ovl_En_Estone/z_en_estone.h" +#include "overlays/actors/ovl_En_Arrow/z_en_arrow.h" +#include "overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_80000000) #define THIS ((EnEgol*)thisx) +typedef enum { + /* 0 */ EYEGORE_ACTION_WAIT, + /* 1 */ EYEGORE_ACTION_STAND, + /* 2 */ EYEGORE_ACTION_WALK, + /* 3 */ EYEGORE_ACTION_RETREAT, + /* 4 */ EYEGORE_ACTION_LASER, + /* 5 */ EYEGORE_ACTION_SLAM, + /* 6 */ EYEGORE_ACTION_PUNCH, + /* 7 */ EYEGORE_ACTION_SLAM_WAIT, + /* 8 */ EYEGORE_ACTION_STUNNED, + /* 9 */ EYEGORE_ACTION_STUN_END, + /* 10 */ EYEGORE_ACTION_SLAM_END, + /* 11 */ EYEGORE_ACTION_DAMAGED, + /* 12 */ EYEGORE_ACTION_STOP, + /* 13 */ EYEGORE_ACTION_DYING, + /* 14 */ EYEGORE_ACTION_DEAD +} EnEgolAction; + +typedef enum { + /* 0 */ EYEGORE_EFFECT_IMPACT, + /* 1 */ EYEGORE_EFFECT_PIECE_LARGE, + /* 2 */ EYEGORE_EFFECT_PIECE_SMALL, + /* 3 */ EYEGORE_EFFECT_DEBRIS, +} EnEgolEffectType; + +typedef enum { + /* 0 */ EYEGORE_ANIM_STAND, + /* 1 */ EYEGORE_ANIM_WALK, + /* 2 */ EYEGORE_ANIM_SLAM, + /* 3 */ EYEGORE_ANIM_SLAM_WAIT, + /* 4 */ EYEGORE_ANIM_SLAM_END, + /* 5 */ EYEGORE_ANIM_DAMAGED, + /* 6 */ EYEGORE_ANIM_DEATH, + /* 7 */ EYEGORE_ANIM_LASER, + /* 8 */ EYEGORE_ANIM_LASER_END, // unused + /* 9 */ EYEGORE_ANIM_STUNNED, + /* 10 */ EYEGORE_ANIM_STUN_END, + /* 11 */ EYEGORE_ANIM_RETREAT, + /* 12 */ EYEGORE_ANIM_SIT, + /* 13 */ EYEGORE_ANIM_LEFT_PUNCH, + /* 14 */ EYEGORE_ANIM_RIGHT_PUNCH, + /* 15 */ EYEGORE_ANIM_MAX, +} EnEgolAnimation; + +typedef enum { + /* 0 */ EYEGORE_LASER_OFF, + /* 1 */ EYEGORE_LASER_START, + /* 2 */ EYEGORE_LASER_CHARGING, + /* 3 */ EYEGORE_LASER_FIRE, + /* 7 */ EYEGORE_LASER_ON = 7, +} EnEgolLaserState; + void EnEgol_Init(Actor* thisx, PlayState* play); void EnEgol_Destroy(Actor* thisx, PlayState* play); void EnEgol_Update(Actor* thisx, PlayState* play); -void EnEgol_Draw(Actor* thisx, PlayState* play); +void EnEgol_Draw(Actor* thisx, PlayState* play2); -#if 0 -// static ColliderJntSphElementInit sJntSphElementsInit[6] = { -static ColliderJntSphElementInit D_80A80C64[6] = { +void EnEgol_SetupWait(EnEgol* this); +void EnEgol_Wait(EnEgol* this, PlayState* play); +void EnEgol_SetupStand(EnEgol* this); +void EnEgol_Stand(EnEgol* this, PlayState* play); +void EnEgol_SetupWalk(EnEgol* this); +void EnEgol_Walk(EnEgol* this, PlayState* play); +void EnEgol_SetupRetreat(EnEgol* this); +void EnEgol_Retreat(EnEgol* this, PlayState* play); +void EnEgol_SetupLaser(EnEgol* this); +void EnEgol_Laser(EnEgol* this, PlayState* play); +void EnEgol_SetupStop(EnEgol* this); +void EnEgol_Stop(EnEgol* this, PlayState* play); +void EnEgol_SetupSlam(EnEgol* this); +void EnEgol_Slam(EnEgol* this, PlayState* play); +void EnEgol_SetupPunch(EnEgol* this); +void EnEgol_Punch(EnEgol* this, PlayState* play); +void EnEgol_SetupSlamWait(EnEgol* this); +void EnEgol_SlamWait(EnEgol* this, PlayState* play); +void EnEgol_SetupStunned(EnEgol* this); +void EnEgol_Stunned(EnEgol* this, PlayState* play); +void EnEgol_SetupStunEnd(EnEgol* this); +void EnEgol_StunEnd(EnEgol* this, PlayState* play); +void EnEgol_SetupSlamEnd(EnEgol* this); +void EnEgol_SlamEnd(EnEgol* this, PlayState* play); +void EnEgol_SetupDamaged(EnEgol* this); +void EnEgol_Damaged(EnEgol* this, PlayState* play); +void EnEgol_StartDeathCutscene(EnEgol* this, PlayState* play); +void EnEgol_Death(EnEgol* this, PlayState* play); + +void EnEgol_SpawnEffect(EnEgol* this, Vec3f* pos, Vec3s* rot, s16 lifetime, f32 scale, s16 type); +void EnEgol_UpdateEffects(EnEgol* this, PlayState* play); +void EnEgol_DrawEffects(EnEgol* this, PlayState* play); + +static ColliderJntSphElementInit sEyeJntSphElementsInit[1] = { { - { ELEMTYPE_UNK2, { 0xF7CFFFFF, 0x04, 0x10 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, }, - { 6, { { 0, 0, 0 }, 0 }, 1 }, - }, - { - { ELEMTYPE_UNK2, { 0xF7CFFFFF, 0x04, 0x10 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, }, - { 9, { { 0, 0, 0 }, 0 }, 1 }, - }, - { - { ELEMTYPE_UNK2, { 0xF7CFFFFF, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, }, - { 3, { { 0, 0, 0 }, 0 }, 1 }, - }, - { - { ELEMTYPE_UNK2, { 0xF7CFFFFF, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, }, - { 4, { { 0, 0, 0 }, 0 }, 1 }, - }, - { - { ELEMTYPE_UNK2, { 0xF7CFFFFF, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, }, - { 7, { { 0, 0, 0 }, 0 }, 1 }, - }, - { - { ELEMTYPE_UNK2, { 0xF7CFFFFF, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, }, - { 23, { { 0, 0, 0 }, 0 }, 1 }, + { + ELEMTYPE_UNK2, + { 0xF7CFFFFF, 0x00, 0x00 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_NONE, + }, + { EYEGORE_LIMB_EYE_COLLIDER, { { 0, 0, 0 }, 0 }, 1 }, }, }; -// static ColliderJntSphInit sJntSphInit = { -static ColliderJntSphInit D_80A80D3C = { - { COLTYPE_METAL, AT_ON | AT_TYPE_ENEMY, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_JNTSPH, }, - ARRAY_COUNT(sJntSphElementsInit), D_80A80C64, // sJntSphElementsInit, -}; - -// static ColliderJntSphElementInit sJntSphElementsInit[1] = { -static ColliderJntSphElementInit D_80A80C40[1] = { +static ColliderJntSphElementInit sBodySphElementsInit[6] = { { - { ELEMTYPE_UNK2, { 0xF7CFFFFF, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, }, - { 14, { { 0, 0, 0 }, 0 }, 1 }, + { + ELEMTYPE_UNK2, + { 0xF7CFFFFF, 0x04, 0x10 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_ON | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_ON, + }, + { EYEGORE_LIMB_LEFT_HAND, { { 0, 0, 0 }, 0 }, 1 }, + }, + { + { + ELEMTYPE_UNK2, + { 0xF7CFFFFF, 0x04, 0x10 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_ON | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_ON, + }, + { EYEGORE_LIMB_RIGHT_HAND, { { 0, 0, 0 }, 0 }, 1 }, + }, + { + { + ELEMTYPE_UNK2, + { 0xF7CFFFFF, 0x00, 0x00 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_ON, + }, + { EYEGORE_LIMB_HEAD, { { 0, 0, 0 }, 0 }, 1 }, + }, + { + { + ELEMTYPE_UNK2, + { 0xF7CFFFFF, 0x00, 0x00 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_NONE, + }, + { EYEGORE_LIMB_LEFT_SHOULDER, { { 0, 0, 0 }, 0 }, 1 }, + }, + { + { + ELEMTYPE_UNK2, + { 0xF7CFFFFF, 0x00, 0x00 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_NONE, + }, + { EYEGORE_LIMB_RIGHT_SHOULDER, { { 0, 0, 0 }, 0 }, 1 }, + }, + { + { + ELEMTYPE_UNK2, + { 0xF7CFFFFF, 0x00, 0x00 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_ON, + }, + { EYEGORE_LIMB_FAULDS, { { 0, 0, 0 }, 0 }, 1 }, }, }; -// static ColliderJntSphInit sJntSphInit = { -static ColliderJntSphInit D_80A80D4C = { - { COLTYPE_NONE, AT_ON | AT_TYPE_ENEMY, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_JNTSPH, }, - ARRAY_COUNT(sJntSphElementsInit), D_80A80C40, // sJntSphElementsInit, +static ColliderJntSphInit sBodyJntSphInit = { + { + COLTYPE_METAL, + AT_ON | AT_TYPE_ENEMY, + AC_ON | AC_TYPE_PLAYER, + OC1_ON | OC1_TYPE_ALL, + OC2_TYPE_1, + COLSHAPE_JNTSPH, + }, + ARRAY_COUNT(sBodySphElementsInit), + sBodySphElementsInit, }; -// static ColliderQuadInit sQuadInit = { -static ColliderQuadInit D_80A80D5C = { - { COLTYPE_NONE, AT_ON | AT_TYPE_ENEMY, AC_NONE, OC1_NONE, OC2_NONE, COLSHAPE_QUAD, }, - { ELEMTYPE_UNK0, { 0xF7CFFFFF, 0x07, 0x10 }, { 0x00000000, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NORMAL | TOUCH_UNK7, BUMP_NONE, OCELEM_NONE, }, +static ColliderJntSphInit sEyeJntSphInit = { + { + COLTYPE_NONE, + AT_ON | AT_TYPE_ENEMY, + AC_ON | AC_TYPE_PLAYER, + OC1_ON | OC1_TYPE_ALL, + OC2_TYPE_1, + COLSHAPE_JNTSPH, + }, + ARRAY_COUNT(sEyeJntSphElementsInit), + sEyeJntSphElementsInit, +}; + +static ColliderQuadInit sLaserQuadInit = { + { + COLTYPE_NONE, + AT_ON | AT_TYPE_ENEMY, + AC_NONE, + OC1_NONE, + OC2_NONE, + COLSHAPE_QUAD, + }, + { + ELEMTYPE_UNK0, + { 0xF7CFFFFF, 0x07, 0x10 }, + { 0x00000000, 0x00, 0x00 }, + TOUCH_ON | TOUCH_SFX_NORMAL | TOUCH_UNK7, + BUMP_NONE, + OCELEM_NONE, + }, { { { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } } }, }; -// static DamageTable sDamageTable = { -static DamageTable D_80A80DAC = { - /* Deku Nut */ DMG_ENTRY(0, 0xF), - /* Deku Stick */ DMG_ENTRY(0, 0xF), - /* Horse trample */ DMG_ENTRY(0, 0x0), - /* Explosives */ DMG_ENTRY(2, 0xE), - /* Zora boomerang */ DMG_ENTRY(1, 0xE), - /* Normal arrow */ DMG_ENTRY(1, 0xE), - /* UNK_DMG_0x06 */ DMG_ENTRY(0, 0x0), - /* Hookshot */ DMG_ENTRY(1, 0xE), - /* Goron punch */ DMG_ENTRY(1, 0xE), - /* Sword */ DMG_ENTRY(0, 0xF), - /* Goron pound */ DMG_ENTRY(0, 0xF), - /* Fire arrow */ DMG_ENTRY(2, 0xE), - /* Ice arrow */ DMG_ENTRY(2, 0xE), - /* Light arrow */ DMG_ENTRY(2, 0x4), - /* Goron spikes */ DMG_ENTRY(1, 0xE), - /* Deku spin */ DMG_ENTRY(1, 0xE), - /* Deku bubble */ DMG_ENTRY(1, 0xE), - /* Deku launch */ DMG_ENTRY(2, 0xE), - /* UNK_DMG_0x12 */ DMG_ENTRY(0, 0xF), - /* Zora barrier */ DMG_ENTRY(0, 0x0), - /* Normal shield */ DMG_ENTRY(0, 0x0), - /* Light ray */ DMG_ENTRY(0, 0xF), - /* Thrown object */ DMG_ENTRY(1, 0xE), - /* Zora punch */ DMG_ENTRY(1, 0xE), - /* Spin attack */ DMG_ENTRY(0, 0xF), - /* Sword beam */ DMG_ENTRY(0, 0x0), - /* Normal Roll */ DMG_ENTRY(0, 0x0), - /* UNK_DMG_0x1B */ DMG_ENTRY(0, 0x0), - /* UNK_DMG_0x1C */ DMG_ENTRY(0, 0x0), - /* Unblockable */ DMG_ENTRY(0, 0x0), - /* UNK_DMG_0x1E */ DMG_ENTRY(0, 0x0), - /* Powder Keg */ DMG_ENTRY(1, 0xF), +typedef enum { + /* 0x0 */ EYEGORE_DMGEFF_IMMUNE_0, + /* 0x4 */ EYEGORE_DMGEFF_LIGHT_ARROW = 4, + /* 0xE */ EYEGORE_DMGEFF_NONE = 0xE, + /* 0xF */ EYEGORE_DMGEFF_IMMUNE_F, +} EnEgolDamageEffect; + +static DamageTable sDamageTable = { + /* Deku Nut */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_F), + /* Deku Stick */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_F), + /* Horse trample */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0), + /* Explosives */ DMG_ENTRY(2, EYEGORE_DMGEFF_NONE), + /* Zora boomerang */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE), + /* Normal arrow */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE), + /* UNK_DMG_0x06 */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0), + /* Hookshot */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE), + /* Goron punch */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE), + /* Sword */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_F), + /* Goron pound */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_F), + /* Fire arrow */ DMG_ENTRY(2, EYEGORE_DMGEFF_NONE), + /* Ice arrow */ DMG_ENTRY(2, EYEGORE_DMGEFF_NONE), + /* Light arrow */ DMG_ENTRY(2, EYEGORE_DMGEFF_LIGHT_ARROW), + /* Goron spikes */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE), + /* Deku spin */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE), + /* Deku bubble */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE), + /* Deku launch */ DMG_ENTRY(2, EYEGORE_DMGEFF_NONE), + /* UNK_DMG_0x12 */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_F), + /* Zora barrier */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0), + /* Normal shield */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0), + /* Light ray */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_F), + /* Thrown object */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE), + /* Zora punch */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE), + /* Spin attack */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_F), + /* Sword beam */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0), + /* Normal Roll */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0), + /* UNK_DMG_0x1B */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0), + /* UNK_DMG_0x1C */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0), + /* Unblockable */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0), + /* UNK_DMG_0x1E */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0), + /* Powder Keg */ DMG_ENTRY(1, EYEGORE_DMGEFF_IMMUNE_F), +}; + +static Color_RGB8 sEyePrimColors[] = { + { 175, 255, 255 }, // light cyan + { 195, 245, 10 }, // lime green + { 255, 55, 205 }, // magenta +}; + +static Color_RGB8 sEyeEnvColors[] = { + { 255, 115, 155 }, // pink + { 40, 155, 155 }, // dark cyan + { 215, 255, 255 }, // light cyan +}; + +static Color_RGB8 sLightOrbColors[] = { + { 255, 255, 255 }, // white + { 255, 255, 255 }, // white }; ActorInit En_Egol_InitVars = { @@ -119,99 +305,1344 @@ ActorInit En_Egol_InitVars = { (ActorFunc)EnEgol_Draw, }; -#endif +void EnEgol_ChangeAnim(EnEgol* this, s32 animation) { + static AnimationHeader* sAnimations[EYEGORE_ANIM_MAX] = { + &gEyegoreStandAnim, &gEyegoreWalkAnim, &gEyegoreSlamAnim, + &gEyegoreSlamWaitAnim, &gEyegoreSlamEndAnim, &gEyegoreDamagedAnim, + &gEyegoreDeathAnim, &gEyegoreLaserAnim, &gEyegoreUnusedLaserEndAnim, + &gEyegoreStunnedAnim, &gEyegoreStunEndAnim, &gEyegoreRetreatAnim, + &gEyegoreSitAnim, &gEyegoreLeftPunchAnim, &gEyegoreRightPunchAnim, + }; + static u8 sAnimModes[EYEGORE_ANIM_MAX] = { + ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, + ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, + ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, + }; + this->animation = animation; + this->animEndFrame = Animation_GetLastFrame(sAnimations[this->animation]); + Animation_Change(&this->skelAnime, sAnimations[this->animation], 1.0f, 0.0f, this->animEndFrame, + sAnimModes[this->animation], 0.0f); +} -extern ColliderJntSphElementInit D_80A80C64[6]; -extern ColliderJntSphInit D_80A80D3C; -extern ColliderJntSphElementInit D_80A80C40[1]; -extern ColliderJntSphInit D_80A80D4C; -extern ColliderQuadInit D_80A80D5C; -extern DamageTable D_80A80DAC; +void EnEgol_FootstepEffects(EnEgol* this, PlayState* play, f32 leftFootFrame, f32 rightFootFrame) { + if (Animation_OnFrame(&this->skelAnime, leftFootFrame) || Animation_OnFrame(&this->skelAnime, rightFootFrame)) { + Vec3f spawnPos; + Player* player = GET_PLAYER(play); + s32 quakeSize; + s32 pad; -extern UNK_TYPE D_06000040; -extern UNK_TYPE D_060094E4; -extern UNK_TYPE D_0600EE4C; + Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_WALK); + quakeSize = 4 - (s32)(fabsf(player->actor.world.pos.y - this->actor.world.pos.y) * 0.02f); + if (quakeSize > 4) { + quakeSize = 4; + } else if (quakeSize < 1) { + quakeSize = 1; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7C990.s") + if (player->stateFlags3 != PLAYER_STATE3_1000000) { + func_800BC848(&this->actor, play, quakeSize, 2); + } + if (Animation_OnFrame(&this->skelAnime, leftFootFrame)) { + Math_Vec3f_Copy(&spawnPos, &this->leftFootPos); + spawnPos.y = this->actor.floorHeight; + Actor_SpawnFloorDustRing(play, &this->actor, &spawnPos, 0.0f, 10, 6.0f, 50, 30, true); + } else { + Math_Vec3f_Copy(&spawnPos, &this->rightFootPos); + spawnPos.y = this->actor.floorHeight; + Actor_SpawnFloorDustRing(play, &this->actor, &spawnPos, 0.0f, 10, 6.0f, 50, 30, true); + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7CA18.s") +void EnEgol_DestroyBlocks(EnEgol* this, PlayState* play, Vec3f pos1, Vec3f pos2) { + Actor* prop = play->actorCtx.actorLists[ACTORCAT_PROP].first; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7CBC4.s") + while (prop != NULL) { + if (prop->id != ACTOR_EN_EGBLOCK) { + prop = prop->next; + continue; + } + if (prop->colChkInfo.health > 0) { + Vec3f blockTo1; + Vec3f blockTo2; + f32 dist1; + f32 dist2; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7CD08.s") + blockTo1.x = pos1.x - prop->world.pos.x; + blockTo1.y = pos1.y - prop->world.pos.y; + blockTo1.z = pos1.z - prop->world.pos.z; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/EnEgol_Init.s") + blockTo2.x = pos2.x - prop->world.pos.x; + blockTo2.y = pos2.y - prop->world.pos.y; + blockTo2.z = pos2.z - prop->world.pos.z; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/EnEgol_Destroy.s") + dist1 = sqrtf(SQXZ(blockTo1)); + dist2 = sqrtf(SQXZ(blockTo2)); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7D140.s") + if ((dist1 < 40.0f) || (dist2 < 40.0f)) { + dist1 = sqrtf(SQ(blockTo1.y)); + dist2 = sqrtf(SQ(blockTo2.y)); + if ((dist1 < 40.0f) || (dist2 < 40.0f)) { + prop->colChkInfo.health = 0; + Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WALL_BROKEN); + break; + } + } + } + prop = prop->next; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7D168.s") +void EnEgol_GetWaypoint(EnEgol* this) { + if ((this->pathIndex != -1) && (this->path != NULL) && + !SubS_CopyPointFromPath(this->path, this->waypoint, &this->waypointPos)) { + Actor_Kill(&this->actor); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7D1E4.s") +#define EYEGORE_SET_SPH_DIM(element, centerX, centerY, centerZ, radiusV, scaleV) \ + element.dim.modelSphere.radius = radiusV; \ + element.dim.scale = scaleV; \ + element.dim.modelSphere.center.x = centerX; \ + element.dim.modelSphere.center.y = centerY; \ + element.dim.modelSphere.center.z = centerZ -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7D240.s") +void EnEgol_Init(Actor* thisx, PlayState* play) { + EnEgol* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7D27C.s") + this->actor.gravity = -2.0f; + Actor_SetScale(&this->actor, 0.015f); + this->actor.colChkInfo.damageTable = &sDamageTable; + ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 60.0f); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7D2C4.s") + this->actor.colChkInfo.mass = MASS_IMMOVABLE; + this->actor.hintId = TATL_HINT_ID_EYEGORE; + this->actor.colChkInfo.health = 8; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7D710.s") + SkelAnime_InitFlex(play, &this->skelAnime, &gEyegoreSkel, &gEyegoreStandAnim, this->jointTable, this->morphTable, + EYEGORE_LIMB_MAX); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7D780.s") + Collider_InitAndSetJntSph(play, &this->bodyCollider, &this->actor, &sBodyJntSphInit, this->bodyElements); + Collider_InitAndSetJntSph(play, &this->eyeCollider, &this->actor, &sEyeJntSphInit, this->eyeElements); + Collider_InitAndSetQuad(play, &this->laserCollider, &this->actor, &sLaserQuadInit); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7DAAC.s") + this->pathIndex = EYEGORE_GET_PATH(&this->actor); + if (this->pathIndex == 0x3F) { + this->pathIndex = -1; + Actor_Kill(&this->actor); + return; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7DAF0.s") + this->wakeupRange = this->actor.world.rot.x * 20.0f; + this->actor.world.rot.x = 0; + if (this->wakeupRange < 0.0f) { + this->wakeupRange = 200.0f; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E2E8.s") + this->minLaserRange = this->actor.world.rot.z * 20.0f; + this->actor.world.rot.z = 0; + if (this->minLaserRange < 0.0f) { + this->minLaserRange = 200.0f; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E344.s") + this->path = SubS_GetPathByIndex(play, this->pathIndex, 0x3F); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E478.s") + EYEGORE_SET_SPH_DIM(this->eyeCollider.elements[0], 500, 0, 0, 26, 1.0f); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E4B4.s") + EYEGORE_SET_SPH_DIM(this->bodyCollider.elements[0], 1800, 100, 0, 20, 1.0f); + EYEGORE_SET_SPH_DIM(this->bodyCollider.elements[1], 1800, 100, 0, 20, 1.0f); + EYEGORE_SET_SPH_DIM(this->bodyCollider.elements[2], 1000, -500, 0, 35, 1.0f); + EYEGORE_SET_SPH_DIM(this->bodyCollider.elements[3], 200, 200, 0, 25, 1.0f); + EYEGORE_SET_SPH_DIM(this->bodyCollider.elements[4], 300, 200, 0, 25, 1.0f); + EYEGORE_SET_SPH_DIM(this->bodyCollider.elements[5], 2100, -300, 0, 37, 1.0f); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E7EC.s") + this->switchFlag = EYEGORE_GET_SWITCH(&this->actor); + if (this->switchFlag == 0x7F) { + this->switchFlag = -1; + } + if ((this->switchFlag > -1) && Flags_GetSwitch(play, this->switchFlag)) { + Actor_Kill(&this->actor); + return; + } + EnEgol_SetupWait(this); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E820.s") +void EnEgol_Destroy(Actor* thisx, PlayState* play) { + EnEgol* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E924.s") + Collider_DestroyJntSph(play, &this->bodyCollider); + Collider_DestroyJntSph(play, &this->eyeCollider); + Collider_DestroyQuad(play, &this->laserCollider); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E970.s") +void EnEgol_SetupWait(EnEgol* this) { + this->actor.flags |= ACTOR_FLAG_8000000; + this->action = EYEGORE_ACTION_WAIT; + this->actionFunc = EnEgol_Wait; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E9D0.s") +void EnEgol_Wait(EnEgol* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + s16 angleToFacing = this->actor.shape.rot.y - this->actor.yawTowardsPlayer; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EA28.s") + if ((curFrame >= this->animEndFrame) && (ABS_ALT(angleToFacing) < 0x3000) && + (this->actor.xzDistToPlayer < this->wakeupRange)) { + EnEgol_SetupStand(this); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EA88.s") +void EnEgol_SetupStand(EnEgol* this) { + EnEgol_ChangeAnim(this, EYEGORE_ANIM_STAND); + this->actor.flags &= ~ACTOR_FLAG_8000000; + this->action = EYEGORE_ACTION_STAND; + Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_STAND); + this->actionFunc = EnEgol_Stand; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EAD8.s") +void EnEgol_Stand(EnEgol* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EB14.s") + if (curFrame >= this->animEndFrame) { + EnEgol_SetupWalk(this); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EB54.s") +void EnEgol_SetupWalk(EnEgol* this) { + EnEgol_ChangeAnim(this, EYEGORE_ANIM_WALK); + this->laserCount = 0; + EnEgol_GetWaypoint(this); + this->action = EYEGORE_ACTION_WALK; + this->actionFunc = EnEgol_Walk; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EB90.s") +void EnEgol_Walk(EnEgol* this, PlayState* play) { + s16 angleToFacing = this->actor.world.rot.y - this->actor.yawTowardsPlayer; + f32 curFrame = this->skelAnime.curFrame; + Player* player = GET_PLAYER(play); + Vec3f spawnPos; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EBDC.s") + Math_SmoothStepToS(&this->headRot, 0, 1, 0x3E8, 0); + Math_Vec3f_Copy(&spawnPos, &gZeroVec3f); + if (curFrame >= this->animEndFrame) { + this->laserCount++; + if (this->laserCount > 0) { + this->laserCount = 0; + if (this->actor.xzDistToPlayer > this->minLaserRange) { + EnEgol_SetupLaser(this); + return; + } + } + } + if ((this->actor.world.pos.y - 50.0f) <= player->actor.world.pos.y) { + if (Animation_OnFrame(&this->skelAnime, 24.0f)) { + Math_Vec3f_Copy(&spawnPos, &this->rightFootPos); + spawnPos.y = this->actor.floorHeight + 2.0f; + EnEgol_SpawnEffect(this, &spawnPos, &gZeroVec3s, 100, 0.005f, EYEGORE_EFFECT_IMPACT); + } + if (Animation_OnFrame(&this->skelAnime, 9.0f)) { + Math_Vec3f_Copy(&spawnPos, &this->leftFootPos); + spawnPos.y = this->actor.floorHeight + 2.0f; + EnEgol_SpawnEffect(this, &spawnPos, &gZeroVec3s, 100, 0.005f, EYEGORE_EFFECT_IMPACT); + } + } + if ((ABS_ALT(angleToFacing) < 0x3000) && (this->actor.xzDistToPlayer < 100.0f)) { + EnEgol_SetupSlam(this); + } else { + s16 angleBehind; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EC84.s") + if (!((this->skelAnime.curFrame == 0.0f) || + ((9.0f <= this->skelAnime.curFrame) && (this->skelAnime.curFrame <= 15.0f)) || + ((24.0f <= this->skelAnime.curFrame) && (this->skelAnime.curFrame <= 29.0f)))) { + Math_ApproachF(&this->actor.world.pos.x, this->waypointPos.x, 0.5f, + fabsf(Math_SinS(this->actor.world.rot.y) * 4.0f)); + Math_ApproachF(&this->actor.world.pos.z, this->waypointPos.z, 0.5f, + fabsf(Math_CosS(this->actor.world.rot.y) * 4.0f)); + } + Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &this->waypointPos), 1, + 0x7D0, 0); + EnEgol_FootstepEffects(this, play, 9.0f, 24.0f); + angleBehind = this->actor.world.rot.y - this->actor.yawTowardsPlayer + 0x8000; + if (ABS_ALT(angleBehind) < 0x2000) { + this->waypoint--; + if (this->waypoint < 0) { + this->waypoint = 0; + } + EnEgol_SetupStop(this); + } else { + f32 dx = this->actor.world.pos.x - this->waypointPos.x; + f32 dz = this->actor.world.pos.z - this->waypointPos.z; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7ED14.s") + if (sqrtf(SQ(dx) + SQ(dz)) < 4.0f) { + if (this->path != NULL) { + this->waypoint++; + if (this->waypoint >= this->path->count) { + this->waypoint -= 2; + if (this->waypoint < 0) { + this->waypoint = 0; + } + EnEgol_SetupStop(this); + } + EnEgol_GetWaypoint(this); + } + } + if (this->actor.wallBgId != BGCHECK_SCENE) { + EnEgol_DestroyBlocks(this, play, this->rightFootPos, this->leftFootPos); + } + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EFB8.s") +void EnEgol_SetupRetreat(EnEgol* this) { + EnEgol_ChangeAnim(this, EYEGORE_ANIM_RETREAT); + this->laserCount = 0; + EnEgol_GetWaypoint(this); + this->actor.world.rot.y = Math_Vec3f_Yaw(&this->actor.world.pos, &this->waypointPos); + this->actor.shape.rot.y = this->actor.world.rot.y + 0x8000; + this->action = EYEGORE_ACTION_RETREAT; + this->actionFunc = EnEgol_Retreat; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/EnEgol_Update.s") +void EnEgol_Retreat(EnEgol* this, PlayState* play) { + s16 angleToFacing = this->actor.world.rot.y - this->actor.yawTowardsPlayer; + Vec3f toWaypoint; + Vec3f spawnPos; + Player* player = GET_PLAYER(play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7F8E8.s") + if ((ABS_ALT(angleToFacing) < 0x3000) && (fabsf(this->actor.world.pos.y - player->actor.world.pos.y) < 50.0f) && + (this->actor.xzDistToPlayer < 100.0f) && (player->invincibilityTimer == 0)) { + func_800B8D50(play, &this->actor, 2.0f, (s32)randPlusMinusPoint5Scaled(0x2000) + this->actor.world.rot.y, 5.0f, + 0x10); + } + Math_Vec3f_Copy(&spawnPos, &gZeroVec3f); + if ((this->actor.world.pos.y - 50.0f) <= player->actor.world.pos.y) { + if (Animation_OnFrame(&this->skelAnime, 5.0f)) { + Math_Vec3f_Copy(&spawnPos, &this->rightFootPos); + spawnPos.y = this->actor.floorHeight + 2.0f; + EnEgol_SpawnEffect(this, &spawnPos, &gZeroVec3s, 100, 0.005f, EYEGORE_EFFECT_IMPACT); + } + if (Animation_OnFrame(&this->skelAnime, 0.0f)) { + Math_Vec3f_Copy(&spawnPos, &this->leftFootPos); + spawnPos.y = this->actor.floorHeight + 2.0f; + EnEgol_SpawnEffect(this, &spawnPos, &gZeroVec3s, 100, 0.005f, EYEGORE_EFFECT_IMPACT); + } + } + Math_ApproachF(&this->actor.world.pos.x, this->waypointPos.x, 0.5f, + fabsf(Math_SinS(this->actor.world.rot.y) * 10.0f)); + Math_ApproachF(&this->actor.world.pos.z, this->waypointPos.z, 0.5f, + fabsf(Math_CosS(this->actor.world.rot.y) * 10.0f)); + Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &this->waypointPos), 1, 0x7D0, + 0); + Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.world.rot.y + 0x8000, 1, 0x7D0, 0); + EnEgol_FootstepEffects(this, play, 5.0f, 0.0f); + toWaypoint.x = this->actor.world.pos.x - this->waypointPos.x; + toWaypoint.z = this->actor.world.pos.z - this->waypointPos.z; + if (sqrtf(SQXZ(toWaypoint)) < 4.0f) { + this->waypoint--; + if (this->waypoint < 0) { + this->waypoint = 0; + EnEgol_SetupStop(this); + } + EnEgol_GetWaypoint(this); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7FAFC.s") +void EnEgol_SetupLaser(EnEgol* this) { + EnEgol_ChangeAnim(this, EYEGORE_ANIM_LASER); + this->actionTimer = 0; + this->laserCount = 0; + this->action = EYEGORE_ACTION_LASER; + this->actionFunc = EnEgol_Laser; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/EnEgol_Draw.s") +void EnEgol_Laser(EnEgol* this, PlayState* play) { + static s16 sLaserAngles[3] = { 0x1F40, 0xBB8, 0x7D0 }; + s32 pad1; + Vec3f stonePos; + s32 pad2; + CollisionPoly* colPoly; + Vec3f hitPos; + s32 bgId; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A80508.s") + if ((ABS_ALT((s16)(this->actor.world.rot.y - this->actor.yawTowardsPlayer)) < 0x3000) && + (this->actor.xzDistToPlayer < 100.0f)) { + this->chargingLaser = false; + this->chargeLevel = 0; + this->actionTimer = 0; + this->laserState = EYEGORE_LASER_OFF; + Math_Vec3f_Copy(&this->laserScale, &gZeroVec3f); + Math_Vec3f_Copy(&this->laserScaleTarget, &gZeroVec3f); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[1], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[3], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[0], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[2], &this->laserBase); + EnEgol_SetupSlam(this); + } else if (this->actor.xzDistToPlayer < this->minLaserRange) { + this->chargingLaser = false; + this->chargeLevel = 0; + this->actionTimer = 0; + this->laserState = EYEGORE_LASER_OFF; + Math_Vec3f_Copy(&this->laserScale, &gZeroVec3f); + Math_Vec3f_Copy(&this->laserScaleTarget, &gZeroVec3f); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[1], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[3], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[0], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[2], &this->laserBase); + EnEgol_SetupWalk(this); + } else { + if (this->chargingLaser) { + switch (this->chargeLevel) { + case 0: + this->waitTimer = 10; + this->chargeLevel++; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A80750.s") + case 1: + Math_ApproachF(&this->chargeLightScale, 8.0f, 0.5f, 2.5f); + if (this->waitTimer == 0) { + this->waitTimer = 10; + this->chargeLevel++; + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A80904.s") + case 2: + Math_ApproachF(&this->chargeLightScale, 1.0f, 0.5f, 1.0f); + if (this->waitTimer == 0) { + this->chargeLevel = 0; + this->laserState = EYEGORE_LASER_FIRE; + this->chargingLaser = false; + this->chargeLightScale = 0.0f; + } + break; + + default: + break; + } + this->chargeLightRot += 0x7D0; + } + if ((this->laserState != EYEGORE_LASER_OFF) || (this->laserCount != 0)) { + Math_SmoothStepToS(&this->headRot, -0x2710, 5, 0x1F4, 5); + } else { + Math_SmoothStepToS(&this->headRot, 0, 5, 0x1F4, 5); + } + if (this->laserState == EYEGORE_LASER_OFF) { + if (this->laserCount >= 3) { + EnEgol_SetupWalk(this); + } else { + this->laserRot.x = sLaserAngles[this->laserCount]; + this->laserScaleTarget.z = 0.0f; + this->laserScale.z = 0.0f; + if (this->laserCount == 0) { + this->laserState = EYEGORE_LASER_START; + } else { + this->laserState = EYEGORE_LASER_FIRE; + this->laserScaleTarget.x = 0.03f; + this->laserScaleTarget.y = 0.03f; + } + this->laserCount++; + } + } else if (this->laserState >= EYEGORE_LASER_FIRE) { + Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_BEAM - SFX_FLAG); + if (this->laserState != EYEGORE_LASER_OFF) { + EnEgol_DestroyBlocks(this, play, this->laserCollider.dim.quad[0], this->laserCollider.dim.quad[1]); + } + //! @bug this should check walls, too + if ((this->actionTimer == 0) && BgCheck_EntityLineTest1(&play->colCtx, &this->laserCollider.dim.quad[3], + &this->laserCollider.dim.quad[1], &hitPos, &colPoly, + false, true, false, true, &bgId)) { + Vec3s rotToNorm; + f32 nx; + f32 ny; + f32 nz; + s32 pad3; + s32 i; + s32 quakeSize; + Player* player = GET_PLAYER(play); + + nx = COLPOLY_GET_NORMAL(colPoly->normal.x); + ny = COLPOLY_GET_NORMAL(colPoly->normal.y); + nz = COLPOLY_GET_NORMAL(colPoly->normal.z); + + /*! @bug The following is supposed to calculate the rotation from vertical to the collision poly normal. + * However, the calculation is performed incorrectly. The correct calculation is + * rotToNorm.x = func_80086B30(nz, ny) * 0x8000 / M_PI; + * rotToNorm.z = func_80086B30(-nx, sqrtf(1.0f - SQ(nx))) * 0x8000 / M_PI; + */ + rotToNorm.x = -func_80086B30(-nz * ny, 1.0f) * 0x8000 / M_PI; + rotToNorm.z = func_80086B30(-nx * ny, 1.0f) * 0x8000 / M_PI; + + if ((this->actor.world.pos.y - 50.0f) <= player->actor.world.pos.y) { + EnEgol_SpawnEffect(this, &hitPos, &rotToNorm, 100, 0.02f, EYEGORE_EFFECT_IMPACT); + } + quakeSize = 4 - (s32)(fabsf(player->actor.world.pos.y - this->actor.world.pos.y) * 0.02f); + if (quakeSize > 4) { + quakeSize = 4; + } else if (quakeSize < 1) { + quakeSize = 1; + } + if (player->stateFlags3 != PLAYER_STATE3_1000000) { + func_800BC848(&this->actor, play, quakeSize, 2); + } + Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_EXPLOSION); + func_800B31BC(play, &hitPos, 40, -2, 255, 20); + func_800BBFB0(play, &hitPos, 6.0f, 2, 120, 20, true); + + if ((this->actor.world.pos.y - 50.0f <= player->actor.world.pos.y) && + (this->actor.floorBgId == BGCHECK_SCENE)) { + Math_Vec3f_Copy(&stonePos, &hitPos); + stonePos.x += Math_SinS(this->actor.world.rot.y) * 60.0f; + stonePos.z += Math_CosS(this->actor.world.rot.y) * 60.0f; + for (i = 0; i < 3; i++) { + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ESTONE, stonePos.x, stonePos.y, stonePos.z, 0, + this->actor.world.rot.y, 0, ENESTONE_TYPE_SMALL); + } + } + if (this->actor.world.pos.y - 50.0f <= player->actor.world.pos.y) { + for (i = 0; i < 10; i++) { + EnEgol_SpawnEffect(this, &hitPos, &gZeroVec3s, 30, (Rand_ZeroFloat(1.0f) * 0.1f) + 0.2f, + EYEGORE_EFFECT_DEBRIS); + } + } + this->actionTimer = 1; + } + if (this->actionTimer != 0) { + this->actionTimer++; + if (this->actionTimer >= 5) { + this->laserState = EYEGORE_LASER_OFF; + Math_Vec3f_Copy(&this->laserScale, &gZeroVec3f); + Math_Vec3f_Copy(&this->laserScaleTarget, &gZeroVec3f); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[1], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[3], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[0], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[2], &this->laserBase); + this->actionTimer = 0; + } + } + Math_ApproachF(&this->laserScale.x, this->laserScaleTarget.x, 0.5f, 0.5f); + Math_ApproachF(&this->laserScale.y, this->laserScaleTarget.y, 0.5f, 0.5f); + Math_ApproachF(&this->laserScale.z, this->laserScaleTarget.z, 0.5f, 0.5f); + } + } +} + +void EnEgol_SetupStop(EnEgol* this) { + if (!this->isRetreating) { + EnEgol_ChangeAnim(this, EYEGORE_ANIM_LASER); + } else { + EnEgol_ChangeAnim(this, EYEGORE_ANIM_STUN_END); + } + this->action = EYEGORE_ACTION_STOP; + this->actionFunc = EnEgol_Stop; +} + +void EnEgol_Stop(EnEgol* this, PlayState* play) { + s32 isHome = false; + f32 curFrame = this->skelAnime.curFrame; + s16 angleToHome; + + EnEgol_FootstepEffects(this, play, 28.0f, 13.0f); + if (this->isRetreating) { + Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 5, 0xBB8, 5); + this->actor.world.rot.y = this->actor.shape.rot.y; + angleToHome = this->actor.world.rot.y - this->actor.home.rot.y; + } + if (!this->isRetreating) { + isHome = true; + } else if (ABS_ALT(angleToHome) < 0x64) { + this->actor.world.rot.y = this->actor.shape.rot.y = this->actor.home.rot.y; + isHome = true; + } + if (isHome && (curFrame >= this->animEndFrame)) { + this->isRetreating ^= true; + if (!this->isRetreating) { + EnEgol_ChangeAnim(this, EYEGORE_ANIM_SIT); + Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_SIT); + this->laserCount = 0; + this->actionFunc = EnEgol_Wait; + } else { + EnEgol_SetupRetreat(this); + } + } +} + +void EnEgol_SetupSlam(EnEgol* this) { + EnEgol_ChangeAnim(this, EYEGORE_ANIM_SLAM); + this->action = EYEGORE_ACTION_SLAM; + this->actionFunc = EnEgol_Slam; +} + +void EnEgol_Slam(EnEgol* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + + Math_SmoothStepToS(&this->headRot, 0, 1, 0x3E8, 0); + if (Animation_OnFrame(&this->skelAnime, 17.0f)) { + s32 i; + s32 spawnCount; + Player* player = GET_PLAYER(play); + Vec3f spawnPos; + f32 dyToPlayer = fabsf(player->actor.world.pos.y - this->actor.world.pos.y); + s32 quakeSize; + + Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_EXPLOSION); + quakeSize = 4 - (s32)(dyToPlayer * 0.02f); + if (quakeSize > 4) { + quakeSize = 4; + } else if (quakeSize < 1) { + quakeSize = 1; + } + func_800BC848(&this->actor, play, quakeSize, 2); + if (this->actor.floorBgId == BGCHECK_SCENE) { + Math_Vec3f_Copy(&spawnPos, &this->actor.world.pos); + spawnPos.x += Math_SinS(this->actor.world.rot.y) * 60.0f; + spawnPos.y = this->actor.floorHeight; + spawnPos.z += Math_CosS(this->actor.world.rot.y) * 60.0f; + spawnCount = Rand_S16Offset(1, 3); + for (i = 0; i < spawnCount; i++) { + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ESTONE, spawnPos.x, spawnPos.y, spawnPos.z, 0, + this->actor.world.rot.y, 0, ENESTONE_TYPE_LARGE); + } + Actor_SpawnFloorDustRing(play, &this->actor, &spawnPos, 30.0f, 30, 10.0f, 100, 30, true); + Math_Vec3f_Copy(&spawnPos, &this->actor.world.pos); + spawnPos.x += Math_SinS(this->actor.world.rot.y) * 55.0f; + spawnPos.y = this->actor.floorHeight + 2.0f; + spawnPos.z += Math_CosS(this->actor.world.rot.y) * 55.0f; + EnEgol_SpawnEffect(this, &spawnPos, &gZeroVec3s, 100, 0.03f, EYEGORE_EFFECT_IMPACT); + } + EnEgol_DestroyBlocks(this, play, this->rightHandPos, this->leftHandPos); + } + if (this->animEndFrame <= curFrame) { + EnEgol_SetupSlamWait(this); + } else if ((this->skelAnime.curFrame <= 17.0f) && (this->skelAnime.curFrame >= 10.0f)) { + CollisionCheck_SetAT(play, &play->colChkCtx, &this->bodyCollider.base); + } +} + +void EnEgol_SetupPunch(EnEgol* this) { + this->bodyCollider.elements[0].dim.modelSphere.radius = 40; + this->bodyCollider.elements[1].dim.modelSphere.radius = 40; + this->hitPlayer = false; + this->action = EYEGORE_ACTION_PUNCH; + this->actionFunc = EnEgol_Punch; +} + +void EnEgol_Punch(EnEgol* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + + Math_SmoothStepToS(&this->headRot, 0, 1, 0x3E8, 0); + if (curFrame >= this->animEndFrame) { + this->bodyCollider.elements[0].dim.modelSphere.radius = 20; + this->bodyCollider.elements[1].dim.modelSphere.radius = 20; + EnEgol_SetupWalk(this); + } else if (!this->hitPlayer) { + if ((this->bodyCollider.elements[0].info.toucherFlags & TOUCH_HIT) || + (this->bodyCollider.elements[1].info.toucherFlags & TOUCH_HIT)) { + this->hitPlayer = true; + func_800B8D50(play, &this->actor, 10.0f, this->actor.home.rot.y, 10.0f, 0); + } + if (!(this->bodyCollider.base.atFlags & AT_BOUNCED)) { + CollisionCheck_SetAT(play, &play->colChkCtx, &this->bodyCollider.base); + } + } +} + +void EnEgol_SetupSlamWait(EnEgol* this) { + EnEgol_ChangeAnim(this, EYEGORE_ANIM_SLAM_WAIT); + this->actionTimer = 0; + this->eyeCollider.elements[0].info.elemType = ELEMTYPE_UNK1; + this->action = EYEGORE_ACTION_SLAM_WAIT; + this->actionFunc = EnEgol_SlamWait; +} + +void EnEgol_SlamWait(EnEgol* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + + if (curFrame >= this->animEndFrame) { + this->actionTimer++; + if (this->actionTimer > 20) { + this->eyeCollider.elements[0].info.elemType = ELEMTYPE_UNK2; + EnEgol_SetupSlamEnd(this); + } + } +} + +void EnEgol_SetupStunned(EnEgol* this) { + EnEgol_ChangeAnim(this, EYEGORE_ANIM_STUNNED); + this->actionTimer = 0; + this->eyeCollider.elements[0].info.elemType = ELEMTYPE_UNK1; + this->bodyCollider.elements[0].dim.modelSphere.radius = 0; + this->bodyCollider.elements[1].dim.modelSphere.radius = 0; + this->action = EYEGORE_ACTION_STUNNED; + this->actionFunc = EnEgol_Stunned; +} + +void EnEgol_Stunned(EnEgol* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + + if (curFrame >= this->animEndFrame) { + this->actionTimer++; + if (this->actionTimer > 80) { + this->eyeCollider.elements->info.elemType = ELEMTYPE_UNK2; + EnEgol_SetupStunEnd(this); + } + } +} + +void EnEgol_SetupStunEnd(EnEgol* this) { + this->bodyCollider.elements[0].dim.modelSphere.radius = 20; + this->bodyCollider.elements[1].dim.modelSphere.radius = 20; + EnEgol_ChangeAnim(this, EYEGORE_ANIM_STUN_END); + this->action = EYEGORE_ACTION_STUN_END; + this->actionFunc = EnEgol_StunEnd; +} + +void EnEgol_StunEnd(EnEgol* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + + if (curFrame >= this->animEndFrame) { + EnEgol_SetupWalk(this); + } +} + +void EnEgol_SetupSlamEnd(EnEgol* this) { + EnEgol_ChangeAnim(this, EYEGORE_ANIM_SLAM_END); + this->actionTimer = 0; + this->action = EYEGORE_ACTION_SLAM_END; + this->actionFunc = EnEgol_SlamEnd; +} + +void EnEgol_SlamEnd(EnEgol* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + + if (curFrame >= this->animEndFrame) { + EnEgol_SetupWalk(this); + } +} + +void EnEgol_SetupDamaged(EnEgol* this) { + EnEgol_ChangeAnim(this, EYEGORE_ANIM_DAMAGED); + this->bodyCollider.elements[0].dim.modelSphere.radius = 20; + this->bodyCollider.elements[1].dim.modelSphere.radius = 20; + this->action = EYEGORE_ACTION_DAMAGED; + this->actionFunc = EnEgol_Damaged; +} + +void EnEgol_Damaged(EnEgol* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + + if (curFrame >= this->animEndFrame) { + if (this->actor.colChkInfo.health > 0) { + EnEgol_SetupWalk(this); + } else { + Enemy_StartFinishingBlow(play, &this->actor); + Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_DEAD); + this->actor.flags |= ACTOR_FLAG_8000000; + this->actor.flags &= ~ACTOR_FLAG_1; + this->actor.flags |= ACTOR_FLAG_100000; + this->actionFunc = EnEgol_StartDeathCutscene; + } + } +} + +void EnEgol_StartDeathCutscene(EnEgol* this, PlayState* play) { + if (!ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { + ActorCutscene_SetIntentToPlay(this->actor.cutscene); + } else { + ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene); + this->subCamFovTarget = 60.0f; + EnEgol_ChangeAnim(this, EYEGORE_ANIM_DEATH); + this->action = EYEGORE_ACTION_DYING; + this->actionFunc = EnEgol_Death; + this->actor.shape.shadowScale = 0.0f; + } +} + +void EnEgol_Death(EnEgol* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + Vec3f atOffset; + + this->subCamAt.x = 0.0f; + this->subCamAt.y = 60.0f; + this->subCamAt.z = 260.0f; + Math_Vec3f_Copy(&atOffset, &this->subCamAt); + OLib_DbCameraVec3fSum(&this->actor.world, &atOffset, &this->subCamAt, 1); + this->subCamEye.x = this->actor.world.pos.x; + this->subCamEye.y = this->actor.world.pos.y + 70.0f; + this->subCamEye.z = this->actor.world.pos.z; + Math_ApproachF(&this->subCamFov, this->subCamFovTarget, 0.3f, 10.0f); + Play_SetCameraAtEye(play, this->subCamId, &this->subCamEye, &this->subCamAt); + Play_SetCameraFov(play, this->subCamId, this->subCamFov); + if ((this->action == EYEGORE_ACTION_DEAD) && (this->waitTimer == 1)) { + if (this->switchFlag > -1) { + Flags_SetSwitch(play, this->switchFlag); + } + ActorCutscene_Stop(this->actor.cutscene); + Actor_Kill(&this->actor); + } else { + if (Animation_OnFrame(&this->skelAnime, 46.0f)) { + Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_EXPLOSION); + func_800BC848(&this->actor, play, 10, 5); + } + if ((curFrame >= this->animEndFrame) && (this->action != EYEGORE_ACTION_DEAD)) { + s32 i; + + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_SMALL_EXPLOSION); + this->waitTimer = 30; + Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_BOMB_EXPLOSION); + this->action = EYEGORE_ACTION_DEAD; + for (i = 0; i < 20; i++) { + EnEgol_SpawnEffect(this, &this->actor.world.pos, &gZeroVec3s, 10.0f + Rand_ZeroFloat(20.0f), + 0.01f + (0.02f * Rand_ZeroFloat(1.0f)), (i & 1) + EYEGORE_EFFECT_PIECE_LARGE); + } + } + } +} + +typedef enum { + /* 0 */ EYEGORE_HIT_NONE, + /* 1 */ EYEGORE_HIT_DAMAGE, + /* 2 */ EYEGORE_HIT_IMMUNE, // Makes hitmarks, but no reaction +} EyegoreHitReaction; + +void EnEgol_CollisionCheck(EnEgol* this, PlayState* play) { + s16 angleToFacing = this->actor.world.rot.y - this->actor.yawTowardsPlayer; + s32 reaction = EYEGORE_HIT_NONE; + + if ((this->action == EYEGORE_ACTION_LASER) && (this->laserCollider.base.atFlags & AT_BOUNCED)) { + this->laserCollider.base.atFlags &= ~AT_HIT; + this->laserCollider.base.atFlags &= ~AT_BOUNCED; + this->actionTimer = 0; + this->laserState = EYEGORE_LASER_OFF; + Math_Vec3f_Copy(&this->laserScale, &gZeroVec3f); + Math_Vec3f_Copy(&this->laserScaleTarget, &gZeroVec3f); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[1], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[3], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[0], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[2], &this->laserBase); + EnEgol_SetupWalk(this); + } + if (this->eyeCollider.elements[0].info.bumperFlags & BUMP_HIT) { + reaction = EYEGORE_HIT_IMMUNE; + switch (this->actor.colChkInfo.damageEffect) { + case EYEGORE_DMGEFF_LIGHT_ARROW: + if (ABS_ALT(angleToFacing) < 0x3000) { + if ((this->action == EYEGORE_ACTION_STUNNED) || (this->action == EYEGORE_ACTION_SLAM_WAIT)) { + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.focus.pos.x, + this->actor.focus.pos.y, this->actor.focus.pos.z, 0, 0, 0, + CLEAR_TAG_LARGE_LIGHT_RAYS); + this->dmgEffectTimer = 20; + reaction = EYEGORE_HIT_DAMAGE; + } else if ((this->action >= EYEGORE_ACTION_WALK) && (this->action <= EYEGORE_ACTION_STUN_END) && + !this->isRetreating) { + reaction = EYEGORE_HIT_NONE; + this->chargingLaser = false; + this->chargeLevel = 0; + this->actionTimer = 0; + this->laserState = EYEGORE_LASER_OFF; + Math_Vec3f_Copy(&this->laserScale, &gZeroVec3f); + Math_Vec3f_Copy(&this->laserScaleTarget, &gZeroVec3f); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[1], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[3], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[0], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[2], &this->laserBase); + Actor_SetColorFilter(&this->actor, 0, 120, false, 40); + Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE); + EnEgol_SetupStunned(this); + } + } + break; + + case EYEGORE_DMGEFF_NONE: + if ((this->action == EYEGORE_ACTION_SLAM_WAIT) || (this->action == EYEGORE_ACTION_STUNNED)) { + reaction = EYEGORE_HIT_DAMAGE; + } + break; + + default: + break; + } + } + if (reaction == EYEGORE_HIT_DAMAGE) { + Actor_ApplyDamage(&this->actor); + CollisionCheck_BlueBlood(play, NULL, &this->eyePos); + CollisionCheck_BlueBlood(play, NULL, &this->eyePos); + CollisionCheck_BlueBlood(play, NULL, &this->eyePos); + Actor_SetColorFilter(&this->actor, 0x4000, 255, false, 25); + Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_DAMAGE); + EnEgol_SetupDamaged(this); + } else if (reaction == EYEGORE_HIT_IMMUNE) { + Vec3f hitPos; + + hitPos.x = this->eyeCollider.elements[0].info.bumper.hitPos.x; + hitPos.y = this->eyeCollider.elements[0].info.bumper.hitPos.y; + hitPos.z = this->eyeCollider.elements[0].info.bumper.hitPos.z; + Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_SHIELD_BOUND); + EffectSsHitmark_SpawnFixedScale(play, EFFECT_HITMARK_METAL, &hitPos); + CollisionCheck_SpawnShieldParticlesMetal(play, &hitPos); + } +} + +void EnEgol_Update(Actor* thisx, PlayState* play) { + EnEgol* this = THIS; + Player* player = GET_PLAYER(play); + s32 pad; + + if (!((this->action == EYEGORE_ACTION_PUNCH) || (this->action == EYEGORE_ACTION_RETREAT) || + (this->action >= EYEGORE_ACTION_DYING))) { + s16 angleToFacing = this->actor.shape.rot.y - this->actor.yawTowardsPlayer; + s16 angleBehind = this->actor.world.rot.y - this->actor.yawTowardsPlayer + 0x8000; + + if ((ABS_ALT(angleToFacing) > 0x1888) && (ABS_ALT(angleBehind) > 0x2000) && + (this->actor.xzDistToPlayer < 100.0f)) { + if (angleToFacing < 0) { + if (this->animation != EYEGORE_ANIM_LEFT_PUNCH) { + EnEgol_ChangeAnim(this, EYEGORE_ANIM_LEFT_PUNCH); + } + } else if (this->animation != EYEGORE_ANIM_RIGHT_PUNCH) { + EnEgol_ChangeAnim(this, EYEGORE_ANIM_RIGHT_PUNCH); + } + this->chargingLaser = false; + this->chargeLevel = 0; + this->actionTimer = 0; + this->laserState = EYEGORE_LASER_OFF; + Math_Vec3f_Copy(&this->laserScale, &gZeroVec3f); + Math_Vec3f_Copy(&this->laserScaleTarget, &gZeroVec3f); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[1], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[3], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[0], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[2], &this->laserBase); + EnEgol_SetupPunch(this); + } + } + if (this->action != EYEGORE_ACTION_WAIT) { + SkelAnime_Update(&this->skelAnime); + } + if (this->laserState == EYEGORE_LASER_OFF) { + Math_ApproachZeroF(&this->laserLightScale, 0.5f, 0.5f); + } else if (this->laserState >= EYEGORE_LASER_FIRE) { + Math_ApproachF(&this->laserLightScale, 1.0f, 0.5f, 0.5f); + } + Actor_SetScale(&this->actor, 0.015f); + + if (!((this->action == EYEGORE_ACTION_STOP) || (this->action == EYEGORE_ACTION_RETREAT))) { + this->actor.shape.rot.y = this->actor.world.rot.y; + } + this->texScroll += 12; + DECR(this->waitTimer); + DECR(this->eyeShutTimer); + DECR(this->dmgEffectTimer); + + EnEgol_UpdateEffects(this, play); + this->actionFunc(this, play); + Math_Vec3f_Copy(&this->actor.focus.pos, &this->eyePos); + this->actor.focus.rot.x = this->actor.world.rot.x; + this->actor.focus.rot.y = this->actor.world.rot.y; + this->actor.focus.rot.z = this->actor.world.rot.z; + if (!((this->action == EYEGORE_ACTION_SLAM_WAIT) || (this->action == EYEGORE_ACTION_WAIT) || + (this->action == EYEGORE_ACTION_RETREAT) || (this->action == EYEGORE_ACTION_STAND) || + (this->action == EYEGORE_ACTION_LASER) || (this->action == EYEGORE_ACTION_STUNNED) || + (this->action == EYEGORE_ACTION_DAMAGED) || (this->action == EYEGORE_ACTION_DYING))) { + + this->pupilRot.x = Math_Vec3f_Pitch(&this->eyePos, &player->actor.world.pos); + this->pupilRot.y = -Math_Vec3f_Yaw(&this->eyePos, &player->actor.world.pos); + + this->pupilRot.y += this->actor.world.rot.y; + + if (this->pupilRot.x > 0x7D0) { + this->pupilRot.x = 0x7D0; + } else if (this->pupilRot.x < -0x7D0) { + this->pupilRot.x = -0x7D0; + } + if (this->pupilRot.y > 0x1770) { + this->pupilRot.y = 0x1770; + } else if (this->pupilRot.y < -0x1770) { + this->pupilRot.y = -0x1770; + } + } else { + this->pupilRot.x = this->pupilRot.y = 0; + } + if (this->eyeShutTimer == 0) { + if (((this->action == EYEGORE_ACTION_WALK) || (this->action == EYEGORE_ACTION_LASER)) && !this->isRetreating) { + Actor* projectile = func_800BC270(play, &this->actor, 80.0f, 0x138B0); + // last argument is DMG_ZORA_BOOMERANG | DMG_HOOKSHOT | DMG_NORMAL_ARROW | DMG_FIRE_ARROW | DMG_ICE_ARROW | + // DMG_LIGHT_ARROW | DMG_DEKU_BUBBLE + + if ((projectile != NULL) && !((projectile->id == ACTOR_EN_ARROW) && (projectile->params == ENARROW_5))) { + this->eyelidRotTarget = 0xFA0; + this->eyeShutTimer = 20; + if (this->action == EYEGORE_ACTION_LASER) { + this->chargingLaser = false; + this->chargeLevel = 0; + this->actionTimer = 0; + this->laserState = EYEGORE_LASER_OFF; + Math_Vec3f_Copy(&this->laserScale, &gZeroVec3f); + Math_Vec3f_Copy(&this->laserScaleTarget, &gZeroVec3f); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[1], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[3], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[0], &this->laserBase); + Math_Vec3f_Copy(&this->laserCollider.dim.quad[2], &this->laserBase); + EnEgol_SetupWalk(this); + } + } + } else { + this->eyelidRotTarget = 0; + } + } else if (this->eyeShutTimer == 1) { + this->eyelidRotTarget = 0; + } + Math_SmoothStepToS(&this->eyelidRot, this->eyelidRotTarget, 1, 0x7D0, 0); + EnEgol_CollisionCheck(this, play); + Actor_MoveWithGravity(&this->actor); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 50.0f, 50.0f, 0x1D); + if (this->action != EYEGORE_ACTION_DEAD) { + //! @bug This should be ||, not &&. As is, the check always succeeds. + if (!((this->action == EYEGORE_ACTION_DAMAGED) && (this->action == EYEGORE_ACTION_DYING))) { + CollisionCheck_SetAC(play, &play->colChkCtx, &this->eyeCollider.base); + CollisionCheck_SetAC(play, &play->colChkCtx, &this->bodyCollider.base); + } + CollisionCheck_SetOC(play, &play->colChkCtx, &this->bodyCollider.base); + } + if (this->laserState >= EYEGORE_LASER_ON) { + CollisionCheck_SetAT(play, &play->colChkCtx, &this->laserCollider.base); + } +} + +s32 EnEgol_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { + EnEgol* this = THIS; + + if (limbIndex == EYEGORE_LIMB_HEAD) { + rot->z += this->headRot; + } + if (limbIndex == EYEGORE_LIMB_UPPER_EYELID) { + rot->z += this->eyelidRot; + } + if (limbIndex == EYEGORE_LIMB_LOWER_EYELID) { + rot->z += -1 * this->eyelidRot; + } + if (limbIndex == EYEGORE_LIMB_PUPIL) { + rot->y += this->pupilRot.y; + rot->z += this->pupilRot.x; + } + if (limbIndex == EYEGORE_LIMB_EYEBALL) { + s32 eyeColorIndex = 0; + + OPEN_DISPS(play->state.gfxCtx); + + if ((this->action == EYEGORE_ACTION_DAMAGED) || (this->action == EYEGORE_ACTION_DYING)) { + eyeColorIndex = 2; + } else if ((this->action == EYEGORE_ACTION_STUNNED) || (this->action == EYEGORE_ACTION_SLAM_WAIT)) { + eyeColorIndex = 1; + } + this->eyePrimColor.r = sEyePrimColors[eyeColorIndex].r; + this->eyePrimColor.g = sEyePrimColors[eyeColorIndex].g; + this->eyePrimColor.b = sEyePrimColors[eyeColorIndex].b; + this->eyeEnvColor.r = sEyeEnvColors[eyeColorIndex].r; + this->eyeEnvColor.g = sEyeEnvColors[eyeColorIndex].g; + this->eyeEnvColor.b = sEyeEnvColors[eyeColorIndex].b; + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0xFF, (u8)this->eyePrimColor.r, (u8)this->eyePrimColor.g, + (u8)this->eyePrimColor.b, 255); + gDPSetEnvColor(POLY_OPA_DISP++, (u8)this->eyeEnvColor.r, (u8)this->eyeEnvColor.g, (u8)this->eyeEnvColor.b, 255); + gSPSegment(POLY_OPA_DISP++, 0x09, func_8012CB28(play->state.gfxCtx, 0, this->texScroll)); + + CLOSE_DISPS(play->state.gfxCtx); + } + return false; +} + +void EnEgol_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { + EnEgol* this = THIS; + Vec3f footOffset = { 1000.0f, 0.0f, 0.0f }; + Vec3f zeroVec = { 0.0f, 0.0f, 0.0f }; + + if (limbIndex == EYEGORE_LIMB_LEFT_HAND) { + Matrix_MultVec3f(&gZeroVec3f, &this->leftHandPos); + } + if (limbIndex == EYEGORE_LIMB_RIGHT_HAND) { + Matrix_MultVec3f(&gZeroVec3f, &this->rightHandPos); + } + if (limbIndex == EYEGORE_LIMB_LASER_ATTACH) { + Matrix_MultVec3f(&gZeroVec3f, &this->eyePos); + } + if ((limbIndex == EYEGORE_LIMB_LASER_ATTACH) && (this->laserState >= EYEGORE_LASER_FIRE)) { + Vec3f laserLengthZ = { 0.0f, 0.0f, 0.0f }; + Vec3f laserVec; + f32 targetScale; + f32 targetHeight; + + Matrix_MultVec3f(&zeroVec, &this->laserBase); + this->laserCollider.dim.quad[3].x = + this->laserBase.x + Math_SinS(this->actor.world.rot.y + 0x4000) * this->laserScale.x * 77.0f; + this->laserCollider.dim.quad[3].y = this->laserBase.y; + this->laserCollider.dim.quad[3].z = + this->laserBase.z + Math_CosS(this->actor.world.rot.y + 0x4000) * this->laserScale.x * 77.0f; + this->laserCollider.dim.quad[2].x = + this->laserBase.x + Math_SinS(this->actor.world.rot.y + 0xC000) * this->laserScale.x * 77.0f; + this->laserCollider.dim.quad[2].y = this->laserBase.y; + this->laserCollider.dim.quad[2].z = + this->laserBase.z + Math_CosS(this->actor.world.rot.y + 0xC000) * this->laserScale.x * 77.0f; + + targetScale = this->laserScale.z; + targetHeight = this->laserCollider.dim.quad[3].y; + + while ((targetHeight + 20.0f > this->actor.floorHeight) && (targetScale < 10.0f)) { + Matrix_Push(); + Matrix_RotateYS(this->actor.world.rot.y, MTXMODE_NEW); + Matrix_RotateXS(this->laserRot.x, MTXMODE_APPLY); + laserLengthZ.z = targetScale * 700.0f; + Matrix_MultVec3f(&laserLengthZ, &laserVec); + Matrix_Pop(); + targetHeight = this->laserCollider.dim.quad[3].y + laserVec.y; + targetScale += 0.01f; + } + this->laserScaleTarget.z = targetScale; + Matrix_Push(); + Matrix_RotateYS(this->actor.world.rot.y, MTXMODE_NEW); + Matrix_RotateXS(this->laserRot.x, MTXMODE_APPLY); + laserLengthZ.z = this->laserScale.z * 700.0f; + Matrix_MultVec3f(&laserLengthZ, &laserVec); + Matrix_Pop(); + this->laserCollider.dim.quad[1].x = this->laserCollider.dim.quad[3].x + laserVec.x; + this->laserCollider.dim.quad[1].y = this->laserCollider.dim.quad[3].y + laserVec.y; + this->laserCollider.dim.quad[1].z = this->laserCollider.dim.quad[3].z + laserVec.z; + this->laserCollider.dim.quad[0].x = this->laserCollider.dim.quad[2].x + laserVec.x; + this->laserCollider.dim.quad[0].y = this->laserCollider.dim.quad[2].y + laserVec.y; + this->laserCollider.dim.quad[0].z = this->laserCollider.dim.quad[2].z + laserVec.z; + Collider_SetQuadVertices(&this->laserCollider, &this->laserCollider.dim.quad[0], + &this->laserCollider.dim.quad[1], &this->laserCollider.dim.quad[2], + &this->laserCollider.dim.quad[3]); + this->laserState = EYEGORE_LASER_ON; + } + if ((limbIndex == EYEGORE_LIMB_LASER_ATTACH) && (this->laserState == EYEGORE_LASER_START)) { + this->chargingLaser = true; + this->laserState = EYEGORE_LASER_CHARGING; + this->laserScaleTarget.x = 0.03f; + this->laserScaleTarget.y = 0.03f; + } + if (limbIndex == EYEGORE_LIMB_LEFT_FOOT) { + Matrix_MultVec3f(&footOffset, &this->leftFootPos); + } + if (limbIndex == EYEGORE_LIMB_RIGHT_FOOT) { + Matrix_MultVec3f(&footOffset, &this->rightFootPos); + } + if ((limbIndex == EYEGORE_LIMB_HEAD) || (limbIndex == EYEGORE_LIMB_LEFT_SHOULDER) || + (limbIndex == EYEGORE_LIMB_LEFT_ARM) || (limbIndex == EYEGORE_LIMB_LEFT_HAND) || + (limbIndex == EYEGORE_LIMB_RIGHT_SHOULDER) || (limbIndex == EYEGORE_LIMB_RIGHT_ARM) || + (limbIndex == EYEGORE_LIMB_RIGHT_HAND) || (limbIndex == EYEGORE_LIMB_UPPER_EYELID) || + (limbIndex == EYEGORE_LIMB_LOWER_EYELID) || (limbIndex == EYEGORE_LIMB_HIPS) || + (limbIndex == EYEGORE_LIMB_LEFT_SHIN) || (limbIndex == EYEGORE_LIMB_RIGHT_SHIN)) { + Matrix_MultZero(&this->limbPos[this->limbPosIndex]); + this->limbPosIndex++; + if (this->limbPosIndex >= ARRAY_COUNT(this->limbPos)) { + this->limbPosIndex = 0; + } + } + Collider_UpdateSpheres(limbIndex, &this->bodyCollider); + Collider_UpdateSpheres(limbIndex, &this->eyeCollider); +} + +void EnEgol_Draw(Actor* thisx, PlayState* play2) { + PlayState* play = play2; + EnEgol* this = THIS; + + OPEN_DISPS(play->state.gfxCtx); + + func_8012C28C(play->state.gfxCtx); + if (this->action != EYEGORE_ACTION_DEAD) { + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gEyegoreEyeLaserTexAnim)); + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, + EnEgol_OverrideLimbDraw, EnEgol_PostLimbDraw, &this->actor); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); + } + if (this->dmgEffectTimer != 0) { + f32 drawDmgEffAlpha = 0.05f * this->dmgEffectTimer; + + Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 0.8f, 0.8f, + drawDmgEffAlpha, ACTOR_DRAW_DMGEFF_LIGHT_ORBS); + } + if (this->laserState >= EYEGORE_LASER_FIRE) { + this->laserRot.y = this->actor.world.rot.y; + gSPSegment(POLY_OPA_DISP++, 0x08, func_8012CB28(play->state.gfxCtx, 0, this->texScroll)); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + Matrix_Translate(this->laserBase.x, this->laserBase.y, this->laserBase.z, MTXMODE_NEW); + Matrix_RotateZYX(this->laserRot.x, this->laserRot.y, 0, MTXMODE_APPLY); + Matrix_Scale(this->laserScale.x, this->laserScale.y, this->laserScale.z, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, gEyegoreLaserDL); + } + if (((this->action == EYEGORE_ACTION_LASER) && (this->laserState >= EYEGORE_LASER_FIRE)) || this->chargingLaser) { + func_8012C2DC(play->state.gfxCtx); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL); + if (!this->chargingLaser) { + s32 i; + f32 laserLightScaleMod; + f32 laserLightAlpha; + + gDPSetEnvColor(POLY_XLU_DISP++, 155, 255, 255, 128); + Matrix_Translate(this->eyePos.x, this->eyePos.y, this->eyePos.z, MTXMODE_NEW); + Matrix_Scale(this->laserLightScale, this->laserLightScale, this->laserLightScale, MTXMODE_APPLY); + + laserLightScaleMod = 10.0f; + laserLightAlpha = 80.0f; + for (i = 0; i < ARRAY_COUNT(sLightOrbColors); i++) { + Matrix_Push(); + Matrix_Scale(laserLightScaleMod, laserLightScaleMod, laserLightScaleMod, MTXMODE_APPLY); + Matrix_ReplaceRotation(&play->billboardMtxF); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, sLightOrbColors[i].r, sLightOrbColors[i].g, sLightOrbColors[i].b, + laserLightAlpha); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); + Matrix_Pop(); + laserLightScaleMod = 3.0f; + laserLightAlpha = 200.0f; + } + } else { + gDPSetEnvColor(POLY_XLU_DISP++, 155, 255, 255, 128); + Matrix_Translate(this->eyePos.x, this->eyePos.y, this->eyePos.z, MTXMODE_NEW); + Matrix_Scale(this->chargeLightScale, this->chargeLightScale, this->chargeLightScale, MTXMODE_APPLY); + Matrix_Push(); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_RotateZS(this->chargeLightRot, MTXMODE_APPLY); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL); + Matrix_Pop(); + } + } + EnEgol_DrawEffects(this, play); + + CLOSE_DISPS(play->state.gfxCtx); +} + +void EnEgol_SpawnEffect(EnEgol* this, Vec3f* pos, Vec3s* rot, s16 lifetime, f32 scale, s16 type) { + EnEgolEffect* effect = this->effects; + s16 i; + + for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { + if (!effect->isActive) { + effect->isActive = true; + effect->scale = scale; + effect->pos = *pos; + effect->timer = lifetime; + effect->alpha = 255; + effect->type = type; + effect->rot.x = randPlusMinusPoint5Scaled(0x7530); + effect->rot.y = randPlusMinusPoint5Scaled(0x7530); + effect->rot.z = randPlusMinusPoint5Scaled(0x7530); + if ((effect->type == EYEGORE_EFFECT_PIECE_LARGE) || (effect->type == EYEGORE_EFFECT_PIECE_SMALL)) { + effect->accel.y = -1.0f; + effect->velocity.x = 4.0f * (Rand_ZeroOne() - 0.5f); + effect->velocity.y = 10.0f + (10.0f * Rand_ZeroOne()); + effect->velocity.z = 4.0f * (Rand_ZeroOne() - 0.5f); + break; + } else if (effect->type == EYEGORE_EFFECT_DEBRIS) { + effect->accel.y = -1.0f; + effect->velocity.x = 0.5f * (Rand_ZeroOne() - 0.5f); + effect->velocity.y = 5.0f + (5.0f * Rand_ZeroOne()); + effect->velocity.z = 0.5f * (Rand_ZeroOne() - 0.5f); + effect->timer = 20.0f + Rand_ZeroFloat(10.0f); + break; + } else if (effect->type == EYEGORE_EFFECT_IMPACT) { + effect->rot.x = rot->x; + effect->rot.y = 0; + effect->rot.z = rot->z; + break; + } + } + } +} + +void EnEgol_UpdateEffects(EnEgol* this, PlayState* play) { + EnEgolEffect* effect = this->effects; + s32 i; + + for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { + if (effect->isActive) { + if (this->action == EYEGORE_ACTION_DYING) { + effect->timer = 0; + } + if (effect->type != EYEGORE_EFFECT_IMPACT) { + effect->rot.x += 0x100; + effect->rot.z += 0x130; + + effect->pos.x += effect->velocity.x; + effect->pos.y += effect->velocity.y; + effect->pos.z += effect->velocity.z; + + effect->velocity.y += effect->accel.y; + } + if (effect->timer != 0) { + effect->timer--; + } else if (effect->type == EYEGORE_EFFECT_IMPACT) { + effect->alpha -= 10; + if (effect->alpha < 10) { + effect->isActive = false; + } + } else { + effect->isActive = false; + } + } + } +} + +void EnEgol_DrawEffects(EnEgol* this, PlayState* play) { + GraphicsContext* gfxCtx = play->state.gfxCtx; + EnEgolEffect* effect = this->effects; + s16 i; + + OPEN_DISPS(gfxCtx); + + func_8012C28C(play->state.gfxCtx); + for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { + if (effect->isActive) { + Matrix_Push(); + + Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); + Matrix_RotateXS(effect->rot.x, MTXMODE_APPLY); + Matrix_RotateYS(effect->rot.y, MTXMODE_APPLY); + Matrix_RotateZS(effect->rot.z, MTXMODE_APPLY); + Matrix_Scale(effect->scale, effect->scale, effect->scale, MTXMODE_APPLY); + + switch (effect->type) { + case EYEGORE_EFFECT_IMPACT: + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 155, 155, 155, 255); + Matrix_Translate(0.0f, 50.0f, 0.0f, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, effect->alpha); + gSPDisplayList(POLY_OPA_DISP++, gEyegoreEffectImpactDL); + break; + + case EYEGORE_EFFECT_PIECE_LARGE: + case EYEGORE_EFFECT_PIECE_SMALL: + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, effect->alpha); + if (effect->type == EYEGORE_EFFECT_PIECE_LARGE) { + gSPDisplayList(POLY_OPA_DISP++, gEyegoreEffectLargeBodyPieceDL); + } else { + gSPDisplayList(POLY_OPA_DISP++, gEyegoreEffectSmallBodyPieceDL); + } + break; + + case EYEGORE_EFFECT_DEBRIS: + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); + gSPDisplayList(POLY_OPA_DISP++, gEyegoreEffectSolidDebrisDL); + break; + + default: + break; + } + Matrix_Pop(); + } + } + + CLOSE_DISPS(gfxCtx); +} diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.h b/src/overlays/actors/ovl_En_Egol/z_en_egol.h index bfcc53231..cec69e5a1 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.h +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.h @@ -2,16 +2,94 @@ #define Z_EN_EGOL_H #include "global.h" +#include "objects/object_eg/object_eg.h" struct EnEgol; typedef void (*EnEgolActionFunc)(struct EnEgol*, PlayState*); +#define EYEGORE_GET_PATH(thisx) ((thisx)->params & 0x3F) +#define EYEGORE_GET_SWITCH(thisx) (((thisx)->params >> 6) & 0x7F) + +#define EYEGORE_PARAMS(switch, path) ((((switch) & 0x7F) << 6) | ((path) & 0x3F)) + +#define EYEGORE_EFFECT_COUNT 100 + +typedef struct { + /* 0x00 */ u8 isActive; + /* 0x04 */ Vec3f pos; + /* 0x10 */ s16 alpha; + /* 0x12 */ s16 timer; + /* 0x14 */ s16 type; + /* 0x18 */ Vec3f velocity; + /* 0x24 */ Vec3f accel; + /* 0x30 */ Vec3s rot; + /* 0x38 */ f32 scale; +} EnEgolEffect; // size = 0x3C + typedef struct EnEgol { /* 0x0000 */ Actor actor; - /* 0x0144 */ char unk_144[0x164]; + /* 0x0144 */ SkelAnime skelAnime; + /* 0x0188 */ Vec3s jointTable[EYEGORE_LIMB_MAX]; + /* 0x0218 */ Vec3s morphTable[EYEGORE_LIMB_MAX]; /* 0x02A8 */ EnEgolActionFunc actionFunc; - /* 0x02AC */ char unk_2AC[0x1BC4]; + /* 0x02AC */ Path* path; + /* 0x02B0 */ s16 waypoint; + /* 0x02B2 */ s16 action; + /* 0x02B4 */ s16 waitTimer; + /* 0x02B6 */ s16 eyeShutTimer; + /* 0x02B4 */ s16 headRot; + /* 0x02BA */ s16 switchFlag; + /* 0x02BC */ s16 dmgEffectTimer; + /* 0x02C0 */ Vec3f limbPos[12]; + /* 0x0350 */ s16 limbPosIndex; + /* 0x0352 */ s16 pathIndex; + /* 0x0354 */ s32 animation; + /* 0x0358 */ u8 isRetreating; + /* 0x035C */ f32 animEndFrame; + /* 0x0360 */ f32 wakeupRange; + /* 0x0364 */ f32 minLaserRange; + /* 0x0368 */ UNK_TYPE1 unk_368[4]; // f32? + /* 0x036C */ f32 laserLightScale; + /* 0x0370 */ f32 chargeLightScale; + /* 0x0374 */ s16 eyelidRot; + /* 0x0376 */ s16 eyelidRotTarget; + /* 0x0378 */ s16 actionTimer; + /* 0x037C */ s32 laserCount; + /* 0x0380 */ s32 chargingLaser; + /* 0x0384 */ s16 chargeLightRot; + /* 0x0388 */ s32 chargeLevel; + /* 0x038C */ s32 hitPlayer; + /* 0x0390 */ UNK_TYPE1 unk_390[0xC]; // Vec3f? + /* 0x039C */ Vec3f eyePos; + /* 0x03A8 */ Vec3f laserBase; + /* 0x03B4 */ Vec3f laserScale; + /* 0x03C0 */ Vec3f laserScaleTarget; + /* 0x03CC */ UNK_TYPE1 unk_3CC[0xC]; // Vec3f? + /* 0x03D8 */ Vec3f leftFootPos; + /* 0x03E4 */ Vec3f rightFootPos; + /* 0x03F0 */ Vec3f leftHandPos; + /* 0x03FC */ Vec3f rightHandPos; + /* 0x0408 */ Vec3f waypointPos; + /* 0x0414 */ Vec3s pupilRot; + /* 0x041A */ Vec3s laserRot; + /* 0x0420 */ Color_RGB16 eyePrimColor; + /* 0x0426 */ Color_RGB16 eyeEnvColor; + /* 0x042C */ s16 laserState; + /* 0x0430 */ s32 texScroll; + /* 0x0434 */ EnEgolEffect effects[EYEGORE_EFFECT_COUNT]; + /* 0x1BA4 */ ColliderJntSph bodyCollider; + /* 0x1BC4 */ ColliderJntSphElement bodyElements[6]; + /* 0x1D44 */ ColliderJntSph eyeCollider; + /* 0x1D64 */ ColliderJntSphElement eyeElements[1]; + /* 0x1DA4 */ ColliderQuad laserCollider; + /* 0x1E24 */ UNK_TYPE1 unk_1E24[4]; + /* 0x1E28 */ s16 subCamId; + /* 0x1E2C */ f32 subCamFov; + /* 0x1E30 */ f32 subCamFovTarget; + /* 0x1E34 */ Vec3f subCamAt; + /* 0x1E40 */ Vec3f subCamEye; + /* 0x1E4C */ UNK_TYPE1 unk_1E4C[0x24]; // Vec3f[3]? } EnEgol; // size = 0x1E70 #endif // Z_EN_EGOL_H diff --git a/src/overlays/actors/ovl_En_Elf/overlay.cfg b/src/overlays/actors/ovl_En_Elf/overlay.cfg deleted file mode 100644 index cc1ddac28..000000000 --- a/src/overlays/actors/ovl_En_Elf/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Elf -z_en_elf.c diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/src/overlays/actors/ovl_En_Elf/z_en_elf.c index 6d21e23e5..54d5c3210 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -565,17 +565,17 @@ void func_8088D9BC(EnElf* this, PlayState* play) { switch (this->unk_244) { case 0: - targetYaw = Math_FAtan2F(-(this->actor.world.pos.z - vec->z), -(this->actor.world.pos.x - vec->x)); + targetYaw = Math_Atan2S_XY(-(this->actor.world.pos.z - vec->z), -(this->actor.world.pos.x - vec->x)); break; case 3: - targetYaw = Math_FAtan2F(-(this->actor.world.pos.z - player->actor.world.pos.z), - -(this->actor.world.pos.x - player->actor.world.pos.x)); + targetYaw = Math_Atan2S_XY(-(this->actor.world.pos.z - player->actor.world.pos.z), + -(this->actor.world.pos.x - player->actor.world.pos.x)); break; case 2: - targetYaw = Math_FAtan2F(this->actor.world.pos.z - player->actor.world.pos.z, - this->actor.world.pos.x - player->actor.world.pos.x); + targetYaw = Math_Atan2S_XY(this->actor.world.pos.z - player->actor.world.pos.z, + this->actor.world.pos.x - player->actor.world.pos.x); break; default: @@ -719,7 +719,7 @@ void func_8088E018(EnElf* this, PlayState* play) { } else { Actor_Kill(&this->actor); } - this->unk_258 = Math_FAtan2F(this->actor.velocity.z, this->actor.velocity.x); + this->unk_258 = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x); } void func_8088E0E0(EnElf* this, PlayState* play) { @@ -766,7 +766,7 @@ void func_8088E0F0(EnElf* this, PlayState* play) { return; } - this->unk_258 = Math_FAtan2F(this->actor.velocity.z, this->actor.velocity.x); + this->unk_258 = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x); func_8088F5F4(this, play, 32); Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FIATY_HEAL - SFX_FLAG); } @@ -799,8 +799,8 @@ void func_8088E304(EnElf* this, PlayState* play) { this->unk_224.z = Math_SinS(this->unk_248) * -this->unk_254; this->unk_248 += this->unk_24C; - func_8088D7F8(this, &player->bodyPartsPos[0]); - this->unk_258 = Math_FAtan2F(this->actor.velocity.z, this->actor.velocity.x); + func_8088D7F8(this, &player->bodyPartsPos[PLAYER_BODYPART_WAIST]); + this->unk_258 = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x); func_8088F5F4(this, play, 0x20); Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FIATY_HEAL - SFX_FLAG); } @@ -823,9 +823,9 @@ void func_8088E484(EnElf* this, PlayState* play) { this->unk_254 = 1.0f; } - func_8088D7F8(this, &player->bodyPartsPos[0]); + func_8088D7F8(this, &player->bodyPartsPos[PLAYER_BODYPART_WAIST]); Actor_SetScale(&this->actor, (1.0f - (SQ(this->unk_250) * SQ(1.0f / 9.0f))) * 0.008f); - this->unk_258 = Math_FAtan2F(this->actor.velocity.z, this->actor.velocity.x); + this->unk_258 = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x); func_8088F5F4(this, play, 32); Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FIATY_HEAL - SFX_FLAG); } @@ -872,7 +872,7 @@ void func_8088E60C(EnElf* this, PlayState* play) { Lights_PointGlowSetInfo(&this->lightInfoGlow, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 255, 255, 255, glowLightRadius); - this->unk_258 = Math_FAtan2F(this->actor.velocity.z, this->actor.velocity.x); + this->unk_258 = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x); Actor_SetScale(&this->actor, this->actor.scale.x); } @@ -915,11 +915,11 @@ void func_8088E850(EnElf* this, PlayState* play) { } } else { this->actor.shape.rot.x = 0; - distFromLinksHead = Math_Vec3f_DistXYZ(&player->bodyPartsPos[8], &this->actor.world.pos); + distFromLinksHead = Math_Vec3f_DistXYZ(&player->bodyPartsPos[PLAYER_BODYPART_HAT], &this->actor.world.pos); switch (this->unk_244) { case 5: - func_8088D660(this, &player->bodyPartsPos[8], 1.0f - (this->unk_24A * 0.033333335f)); - xScale = Math_Vec3f_DistXYZ(&player->bodyPartsPos[8], &this->actor.world.pos); + func_8088D660(this, &player->bodyPartsPos[PLAYER_BODYPART_HAT], 1.0f - (this->unk_24A * 0.033333335f)); + xScale = Math_Vec3f_DistXYZ(&player->bodyPartsPos[PLAYER_BODYPART_HAT], &this->actor.world.pos); if (distFromLinksHead < 7.0f) { this->unk_25C = 0; @@ -935,12 +935,12 @@ void func_8088E850(EnElf* this, PlayState* play) { break; case 6: - func_8088D660(this, &player->bodyPartsPos[8], 0.2f); - this->actor.world.pos = player->bodyPartsPos[8]; + func_8088D660(this, &player->bodyPartsPos[PLAYER_BODYPART_HAT], 0.2f); + this->actor.world.pos = player->bodyPartsPos[PLAYER_BODYPART_HAT]; break; case 9: - nextPos = player->bodyPartsPos[8]; + nextPos = player->bodyPartsPos[PLAYER_BODYPART_HAT]; nextPos.y += 1500.0f * this->actor.scale.y; func_8088D7F8(this, &nextPos); @@ -967,8 +967,8 @@ void func_8088E850(EnElf* this, PlayState* play) { default: arrowPointedActor = play->actorCtx.targetContext.arrowPointedActor; - if ((player->stateFlags1 & PLAYER_STATE1_40) && (player->targetActor != NULL)) { - Math_Vec3f_Copy(&nextPos, &player->targetActor->focus.pos); + if ((player->stateFlags1 & PLAYER_STATE1_40) && (player->talkActor != NULL)) { + Math_Vec3f_Copy(&nextPos, &player->talkActor->focus.pos); } else { Math_Vec3f_Copy(&nextPos, &play->actorCtx.targetContext.unk0); } @@ -1085,10 +1085,10 @@ void func_8088EFA4(EnElf* this, PlayState* play) { } if (this->fairyFlags & 1) { - if ((arrayPointerActor == NULL) || (player->unk_730 == NULL)) { + if ((arrayPointerActor == NULL) || (player->targetedActor == NULL)) { this->fairyFlags ^= 1; } - } else if ((arrayPointerActor != NULL) && (player->unk_730 != NULL)) { + } else if ((arrayPointerActor != NULL) && (player->targetedActor != NULL)) { u8 temp = this->unk_269; u16 targetSfxId = this->unk_269 == 0 ? NA_SE_PL_WALK_GROUND - SFX_FLAG : NA_SE_PL_WALK_GROUND - SFX_FLAG; @@ -1230,8 +1230,8 @@ void func_8088F214(EnElf* this, PlayState* play) { if (sp34 != this->unk_244) { func_8088C51C(this, sp34); if (sp34 == 9) { - this->unk_254 = Math_Vec3f_DistXZ(&player->bodyPartsPos[8], &this->actor.world.pos); - this->unk_248 = Math_Vec3f_Yaw(&this->actor.world.pos, &player->bodyPartsPos[8]); + this->unk_254 = Math_Vec3f_DistXZ(&player->bodyPartsPos[PLAYER_BODYPART_HAT], &this->actor.world.pos); + this->unk_248 = Math_Vec3f_Yaw(&this->actor.world.pos, &player->bodyPartsPos[PLAYER_BODYPART_HAT]); } } } @@ -1281,11 +1281,13 @@ void func_8088FA38(EnElf* this, PlayState* play) { if (this->unk_234 != NULL) { refPos = this->unk_234->world.pos; } else { - if ((player->unk_730 == NULL) || (&player->actor == player->unk_730) || (&this->actor == player->unk_730) || - (this->unk_264 & 4)) { - refPos.x = player->bodyPartsPos[7].x + (Math_SinS(player->actor.shape.rot.y) * 20.0f); - refPos.y = player->bodyPartsPos[7].y + 5.0f; - refPos.z = player->bodyPartsPos[7].z + (Math_CosS(player->actor.shape.rot.y) * 20.0f); + if ((player->targetedActor == NULL) || (&player->actor == player->targetedActor) || + (&this->actor == player->targetedActor) || (this->unk_264 & 4)) { + refPos.x = + player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + (Math_SinS(player->actor.shape.rot.y) * 20.0f); + refPos.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 5.0f; + refPos.z = + player->bodyPartsPos[PLAYER_BODYPART_HEAD].z + (Math_CosS(player->actor.shape.rot.y) * 20.0f); this->unk_264 &= ~4; } } @@ -1416,7 +1418,7 @@ void func_8088FE64(Actor* thisx, PlayState* play2) { if (!gSaveContext.save.isNight) { func_80151938(play, 0x248); } else if ((gSaveContext.save.time < CLOCK_TIME(6, 0)) && - (gSaveContext.save.weekEventReg[74] & 0x20)) { + CHECK_WEEKEVENTREG(WEEKEVENTREG_74_20)) { func_80151938(play, 0x225); } else { func_80151938(play, 0x249); @@ -1456,7 +1458,7 @@ void func_8089010C(Actor* thisx, PlayState* play) { gSaveContext.save.playerData.tatlTimer = 0; } - if ((player->tatlTextId == 0) && (player->unk_730 == NULL)) { + if ((player->tatlTextId == 0) && (player->targetedActor == NULL)) { if ((gSaveContext.save.playerData.tatlTimer >= 600) && (gSaveContext.save.playerData.tatlTimer <= 3000)) { player->tatlTextId = QuestHint_GetTatlTextId(play); } @@ -1579,7 +1581,7 @@ void EnElf_Draw(Actor* thisx, PlayState* play) { (!Cutscene_CheckActorAction(play, 201) || (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 201)]->action != 6)) && (!(player->stateFlags1 & PLAYER_STATE1_100000) || (kREG(90) < this->actor.projectedPos.z))) { - Gfx* dListHead = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Gfx) * 4); + Gfx* gfx = GRAPH_ALLOC(play->state.gfxCtx, 4 * sizeof(Gfx)); f32 alphaScale; s32 envAlpha; @@ -1592,19 +1594,19 @@ void EnElf_Draw(Actor* thisx, PlayState* play) { alphaScale = (this->disappearTimer < 0) ? (this->disappearTimer * 0.0011666666f) + 1.0f : 1.0f; - gSPSegment(POLY_XLU_DISP++, 0x08, dListHead); + gSPSegment(POLY_XLU_DISP++, 0x08, gfx); - gDPPipeSync(dListHead++); - gDPSetPrimColor(dListHead++, 0, 0x01, (u8)(s8)this->innerColor.r, (u8)(s8)this->innerColor.g, + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0x01, (u8)(s8)this->innerColor.r, (u8)(s8)this->innerColor.g, (u8)(s8)this->innerColor.b, (u8)(s8)(this->innerColor.a * alphaScale)); if (this->fairyFlags & 4) { - gDPSetRenderMode(dListHead++, G_RM_PASS, G_RM_CLD_SURF2); + gDPSetRenderMode(gfx++, G_RM_PASS, G_RM_CLD_SURF2); } else { - gDPSetRenderMode(dListHead++, G_RM_PASS, G_RM_ZB_CLD_SURF2); + gDPSetRenderMode(gfx++, G_RM_PASS, G_RM_ZB_CLD_SURF2); } - gSPEndDisplayList(dListHead); + gSPEndDisplayList(gfx); gDPSetEnvColor(POLY_XLU_DISP++, (u8)(s8)this->outerColor.r, (u8)(s8)this->outerColor.g, (u8)(s8)this->outerColor.b, (u8)(s8)(envAlpha * alphaScale)); diff --git a/src/overlays/actors/ovl_En_Elfbub/overlay.cfg b/src/overlays/actors/ovl_En_Elfbub/overlay.cfg deleted file mode 100644 index 91957fdd0..000000000 --- a/src/overlays/actors/ovl_En_Elfbub/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Elfbub -z_en_elfbub.c diff --git a/src/overlays/actors/ovl_En_Elfgrp/overlay.cfg b/src/overlays/actors/ovl_En_Elfgrp/overlay.cfg deleted file mode 100644 index a371edb2f..000000000 --- a/src/overlays/actors/ovl_En_Elfgrp/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Elfgrp -z_en_elfgrp.c diff --git a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c index b90d3978f..169d56fdd 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c @@ -11,6 +11,8 @@ #define THIS ((EnElfgrp*)thisx) +//! TODO: this file require macros for its uses of weekEventReg + void EnElfgrp_Init(Actor* thisx, PlayState* play); void EnElfgrp_Destroy(Actor* thisx, PlayState* play); void EnElfgrp_Update(Actor* thisx, PlayState* play); @@ -91,7 +93,7 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) { switch (this->unk_147) { case ENELFGRP_1: - if (gSaveContext.save.weekEventReg[23] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) { func_80A396B0(this, 1); } else { this->unk_14A |= 4; @@ -146,7 +148,7 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) { this->unk_14A |= 2; func_80A396B0(this, 6); } - } else if ((gSaveContext.save.weekEventReg[8] & 0x80)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_80)) { func_80A39DC8(this, play, 24, 0); this->actionFunc = func_80A3A398; if (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU) { @@ -421,7 +423,7 @@ void func_80A3A398(EnElfgrp* this, PlayState* play) { } if ((this->unk_14A & 4) != 0) { - gSaveContext.save.weekEventReg[23] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_23_02); } if (this->unk_14A & 0x10) { diff --git a/src/overlays/actors/ovl_En_Elforg/overlay.cfg b/src/overlays/actors/ovl_En_Elforg/overlay.cfg deleted file mode 100644 index 124b13ce0..000000000 --- a/src/overlays/actors/ovl_En_Elforg/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Elforg -z_en_elforg.c diff --git a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c index 60c5b3364..803a66ac4 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -80,7 +80,7 @@ void EnElforg_Init(Actor* thisx, PlayState* play) { switch (STRAY_FAIRY_TYPE(thisx)) { case STRAY_FAIRY_TYPE_CLOCK_TOWN: - if (gSaveContext.save.weekEventReg[8] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_80)) { Actor_Kill(thisx); return; } @@ -220,7 +220,7 @@ void EnElforg_MoveToTargetFairyFountain(EnElforg* this, Vec3f* homePos) { EnElforg_ApproachTargetYPosition(this, homePos); xDifference = this->actor.world.pos.x - homePos->x; zDifference = this->actor.world.pos.z - homePos->z; - targetAngle = Math_FAtan2F(-zDifference, -xDifference); + targetAngle = Math_Atan2S_XY(-zDifference, -xDifference); xzDistance = sqrtf(SQ(xDifference) + SQ(zDifference)); if ((this->targetDistanceFromHome + 10.0f) < xzDistance) { @@ -247,7 +247,7 @@ void EnElforg_MoveToTarget(EnElforg* this, Vec3f* targetPos) { this->actor.shape.yOffset += 100.0f * Math_SinS(this->timer << 9); EnElforg_ApproachTargetYPosition(this, targetPos); - targetAngle = Math_FAtan2F(-(this->actor.world.pos.z - targetPos->z), -(this->actor.world.pos.x - targetPos->x)); + targetAngle = Math_Atan2S_XY(-(this->actor.world.pos.z - targetPos->z), -(this->actor.world.pos.x - targetPos->x)); if (this->targetSpeedXZ > 2.0f) { Math_SmoothStepToS(&this->actor.world.rot.y, targetAngle, 2, 0x400, 0x100); @@ -293,7 +293,7 @@ void EnElforg_TurnInFairy(EnElforg* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); this->actor.shape.yOffset *= 0.9f; this->actor.speedXZ = 5.0f; - EnElforg_ApproachTargetYPosition(this, &player->bodyPartsPos[0]); + EnElforg_ApproachTargetYPosition(this, &player->bodyPartsPos[PLAYER_BODYPART_WAIST]); xzDistToPlayer = this->actor.xzDistToPlayer; if (xzDistToPlayer < 0.0f) { @@ -393,7 +393,7 @@ void EnElforg_CirclePlayer(EnElforg* this, PlayState* play) { this->actor.world.pos.x = (Math_SinS(this->timer << 12) * distanceFromPlayer) + playerActor->world.pos.x; this->actor.world.pos.z = (Math_CosS(this->timer << 12) * distanceFromPlayer) + playerActor->world.pos.z; - this->actor.world.pos.y = player->bodyPartsPos[0].y; + this->actor.world.pos.y = player->bodyPartsPos[PLAYER_BODYPART_WAIST].y; EnElforg_SpawnSparkles(this, play, 16); } @@ -412,7 +412,7 @@ void EnElforg_SetupFairyCollected(EnElforg* this, PlayState* play) { Player* player = GET_PLAYER(play); this->actor.world.pos.x = playerActor->world.pos.x; - this->actor.world.pos.y = player->bodyPartsPos[0].y; + this->actor.world.pos.y = player->bodyPartsPos[PLAYER_BODYPART_WAIST].y; this->actor.world.pos.z = playerActor->world.pos.z; this->actionFunc = EnElforg_FairyCollected; this->timer = 0; @@ -430,7 +430,7 @@ void EnElforg_ClockTownFairyCollected(EnElforg* this, PlayState* play) { player->actor.freezeTimer = 0; player->stateFlags1 &= ~PLAYER_STATE1_20000000; Actor_Kill(&this->actor); - gSaveContext.save.weekEventReg[8] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_08_80); ActorCutscene_Stop(0x7C); return; } @@ -452,7 +452,7 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); if (Player_GetMask(play) == PLAYER_MASK_GREAT_FAIRY) { - pos = player->bodyPartsPos[0]; + pos = player->bodyPartsPos[PLAYER_BODYPART_WAIST]; this->targetSpeedXZ = 5.0f; EnElforg_MoveToTarget(this, &pos); } else { diff --git a/src/overlays/actors/ovl_En_Encount1/overlay.cfg b/src/overlays/actors/ovl_En_Encount1/overlay.cfg deleted file mode 100644 index 132566c38..000000000 --- a/src/overlays/actors/ovl_En_Encount1/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Encount1 -z_en_encount1.c diff --git a/src/overlays/actors/ovl_En_Encount2/overlay.cfg b/src/overlays/actors/ovl_En_Encount2/overlay.cfg deleted file mode 100644 index 31c83ff6f..000000000 --- a/src/overlays/actors/ovl_En_Encount2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Encount2 -z_en_encount2.c diff --git a/src/overlays/actors/ovl_En_Encount3/overlay.cfg b/src/overlays/actors/ovl_En_Encount3/overlay.cfg deleted file mode 100644 index 552775655..000000000 --- a/src/overlays/actors/ovl_En_Encount3/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Encount3 -z_en_encount3.c diff --git a/src/overlays/actors/ovl_En_Encount4/overlay.cfg b/src/overlays/actors/ovl_En_Encount4/overlay.cfg deleted file mode 100644 index 124d2e4b4..000000000 --- a/src/overlays/actors/ovl_En_Encount4/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Encount4 -z_en_encount4.c diff --git a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c index ccb9d16b5..311668bfe 100644 --- a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c +++ b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c @@ -152,7 +152,7 @@ void func_809C42A8(EnEncount4* this, PlayState* play) { this->actionFunc = func_809C464C; return; - } else if ((gSaveContext.save.weekEventReg[85] & 0x40) || (this->unk_14C >= 2) || + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_85_40) || (this->unk_14C >= 2) || (this->actor.xzDistToPlayer > 240.0f)) { return; } diff --git a/src/overlays/actors/ovl_En_Ending_Hero/overlay.cfg b/src/overlays/actors/ovl_En_Ending_Hero/overlay.cfg deleted file mode 100644 index a512a6a47..000000000 --- a/src/overlays/actors/ovl_En_Ending_Hero/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ending_Hero -z_en_ending_hero.c diff --git a/src/overlays/actors/ovl_En_Ending_Hero2/overlay.cfg b/src/overlays/actors/ovl_En_Ending_Hero2/overlay.cfg deleted file mode 100644 index eeddcc9c7..000000000 --- a/src/overlays/actors/ovl_En_Ending_Hero2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ending_Hero2 -z_en_ending_hero2.c diff --git a/src/overlays/actors/ovl_En_Ending_Hero3/overlay.cfg b/src/overlays/actors/ovl_En_Ending_Hero3/overlay.cfg deleted file mode 100644 index 13ddc6d82..000000000 --- a/src/overlays/actors/ovl_En_Ending_Hero3/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ending_Hero3 -z_en_ending_hero3.c diff --git a/src/overlays/actors/ovl_En_Ending_Hero4/overlay.cfg b/src/overlays/actors/ovl_En_Ending_Hero4/overlay.cfg deleted file mode 100644 index 314fdd562..000000000 --- a/src/overlays/actors/ovl_En_Ending_Hero4/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ending_Hero4 -z_en_ending_hero4.c diff --git a/src/overlays/actors/ovl_En_Ending_Hero5/overlay.cfg b/src/overlays/actors/ovl_En_Ending_Hero5/overlay.cfg deleted file mode 100644 index 1b49c5572..000000000 --- a/src/overlays/actors/ovl_En_Ending_Hero5/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ending_Hero5 -z_en_ending_hero5.c diff --git a/src/overlays/actors/ovl_En_Ending_Hero6/overlay.cfg b/src/overlays/actors/ovl_En_Ending_Hero6/overlay.cfg deleted file mode 100644 index d6911ffa0..000000000 --- a/src/overlays/actors/ovl_En_Ending_Hero6/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ending_Hero6 -z_en_ending_hero6.c diff --git a/src/overlays/actors/ovl_En_Estone/overlay.cfg b/src/overlays/actors/ovl_En_Estone/overlay.cfg deleted file mode 100644 index b847b42fa..000000000 --- a/src/overlays/actors/ovl_En_Estone/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Estone -z_en_estone.c diff --git a/src/overlays/actors/ovl_En_Estone/z_en_estone.c b/src/overlays/actors/ovl_En_Estone/z_en_estone.c index 67a3042ee..c55ab5272 100644 --- a/src/overlays/actors/ovl_En_Estone/z_en_estone.c +++ b/src/overlays/actors/ovl_En_Estone/z_en_estone.c @@ -1,10 +1,12 @@ /* * File: z_en_estone.c * Overlay: ovl_En_Estone - * Description: Eyegore Rubble + * Description: Rubble from Eyegore's attacks */ #include "z_en_estone.h" +#include "objects/object_eg/object_eg.h" +#include "objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20) @@ -12,13 +14,15 @@ void EnEstone_Init(Actor* thisx, PlayState* play); void EnEstone_Destroy(Actor* thisx, PlayState* play); -void EnEstone_Update(Actor* thisx, PlayState* play); -void EnEstone_Draw(Actor* thisx, PlayState* play); +void EnEstone_Update(Actor* thisx, PlayState* play2); +void EnEstone_Draw(Actor* thisx, PlayState* play2); -void func_80A9A1DC(EnEstone* this, PlayState* play); -void func_80A9A4B0(EnEstone* this, PlayState* play); +void EnEstone_Active(EnEstone* this, PlayState* play); +void EnEstone_Inactive(EnEstone* this, PlayState* play); +void EnEstone_SpawnEffect(EnEstone* this, Vec3f* pos, Vec3f* velocity, Vec3f* accel, f32 scale, s16 lifetime); +void EnEstone_UpdateEffects(EnEstone* this, PlayState* play); +void EnEstone_DrawEffects(EnEstone* this, PlayState* play); -#if 0 ActorInit En_Estone_InitVars = { ACTOR_EN_ESTONE, ACTORCAT_PROP, @@ -31,33 +35,250 @@ ActorInit En_Estone_InitVars = { (ActorFunc)EnEstone_Draw, }; -// static ColliderCylinderInit sCylinderInit = { -static ColliderCylinderInit D_80A9AB70 = { - { COLTYPE_HARD, AT_ON | AT_TYPE_ENEMY, AC_ON | AC_TYPE_PLAYER, OC1_NONE, OC2_TYPE_2, COLSHAPE_CYLINDER, }, - { ELEMTYPE_UNK0, { 0xF7CFFFFF, 0x00, 0x04 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, }, +static ColliderCylinderInit sCylinderInit = { + { + COLTYPE_HARD, + AT_ON | AT_TYPE_ENEMY, + AC_ON | AC_TYPE_PLAYER, + OC1_NONE, + OC2_TYPE_2, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK0, + { 0xF7CFFFFF, 0x00, 0x04 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_ON | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_NONE, + }, { 30, 30, -10, { 0, 0, 0 } }, }; -#endif +void EnEstone_Init(Actor* thisx, PlayState* play) { + EnEstone* this = THIS; + Vec3f accel; + Vec3f velocity; + f32 scale; + s32 i; + s32 pad; -extern ColliderCylinderInit D_80A9AB70; + ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 15.0f); + this->rotVel.x = this->rotVel.y = this->rotVel.z = randPlusMinusPoint5Scaled(1.0f) * 20.0f; + Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); + this->actor.colChkInfo.mass = MASS_IMMOVABLE; + this->actor.world.rot.y += (s16)randPlusMinusPoint5Scaled(0x2710); + this->actor.shape.rot.y = this->actor.world.rot.y; -extern UNK_TYPE D_06010240; + if (this->actor.params == ENESTONE_TYPE_LARGE) { + this->actor.speedXZ = Rand_ZeroFloat(5.0f) + 2.0f; + this->scale = (Rand_ZeroFloat(1.0f) * 0.005f) + 0.005f; + this->actor.velocity.y = Rand_ZeroFloat(10.0f) + 15.0f; + this->actor.gravity = -2.0f; + } else { + this->actor.speedXZ = Rand_ZeroFloat(3.0f) + 1.0f; + this->scale = (Rand_ZeroFloat(1.0f) * 0.003f) + 0.003f; + this->actor.velocity.y = Rand_ZeroFloat(5.0f) + 7.0f; + this->actor.gravity = -1.0f; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/EnEstone_Init.s") + this->collider.dim.radius = this->scale * 3000.0f; + this->collider.dim.height = this->scale * 3000.0f; + this->collider.dim.yShift = this->scale * -1300.0f; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/EnEstone_Destroy.s") + for (i = 0; i < 7; i++) { + accel.x = 0.5f * (Rand_ZeroOne() - 0.5f); + accel.y = -1.0f; + accel.z = 0.5f * (Rand_ZeroOne() - 0.5f); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/func_80A9A1DC.s") + velocity.x = 2.0f * (Rand_ZeroOne() - 0.5f); + velocity.y = 8.0f + (Rand_ZeroOne() * 10.0f); + velocity.z = 2.0f * (Rand_ZeroOne() - 0.5f); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/func_80A9A4B0.s") + scale = (Rand_ZeroFloat(1.0f) * 0.001f) + 0.001f; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/EnEstone_Update.s") + EnEstone_SpawnEffect(this, &this->actor.world.pos, &velocity, &accel, scale, 70); + } + this->timer = 5; + this->inactive = false; + Actor_SetScale(&this->actor, 1.0f); + this->actionFunc = EnEstone_Active; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/EnEstone_Draw.s") +void EnEstone_Destroy(Actor* thisx, PlayState* play) { + EnEstone* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/func_80A9A774.s") + Collider_DestroyCylinder(play, &this->collider); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/func_80A9A870.s") +void EnEstone_Active(EnEstone* this, PlayState* play) { + Player* player = GET_PLAYER(play); + Vec3f accel; + Vec3f velocity; + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/func_80A9A9C0.s") + if ((this->actor.floorHeight == -10000.0f) || ((player->actor.world.pos.y - 200.0f) > this->actor.world.pos.y)) { + Actor_Kill(&this->actor); + return; + } + if (((this->actor.bgCheckFlags & 1) && (this->actor.velocity.y < 0.0f)) || (this->collider.base.atFlags & 4)) { + this->collider.base.atFlags &= ~4; + if (this->actor.params == ENESTONE_TYPE_LARGE) { + for (i = 0; i < 2; i++) { + accel.x = 2.0f * (Rand_ZeroOne() - 0.5f); + accel.y = -1.0f; + accel.z = 2.0f * (Rand_ZeroOne() - 0.5f); + velocity.x = 3.0f * (Rand_ZeroOne() - 0.5f); + velocity.y = 5.0f + (Rand_ZeroOne() * 10.0f); + velocity.z = 3.0f * (Rand_ZeroOne() - 0.5f); + EnEstone_SpawnEffect(this, &this->actor.world.pos, &velocity, &accel, + 0.003f + (0.002f * Rand_ZeroFloat(1.0f)), 20); + } + } + Math_Vec3f_Copy(&velocity, &this->actor.world.pos); + velocity.y = this->actor.floorHeight; + Actor_SpawnFloorDustRing(play, &this->actor, &velocity, 0.0f, 10, 6.0f, 50, 30, true); + this->actor.velocity.y = this->actor.gravity = 0.0f; + this->actor.speedXZ *= 0.3f; + this->actor.shape.shadowScale = 0.0f; + this->inactive = true; + this->timer = 50; + Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WALL_BROKEN); + this->actionFunc = EnEstone_Inactive; + } else { + //! FAKE: https://decomp.me/scratch/YiPVN + label: + this->actor.shape.shadowScale = 4500.0f * this->scale; + Actor_SetScale(&this->actor, this->scale); + } +} + +void EnEstone_Inactive(EnEstone* this, PlayState* play) { + if (this->timer == 0) { + Actor_Kill(&this->actor); + } +} + +void EnEstone_Update(Actor* thisx, PlayState* play2) { + PlayState* play = play2; + EnEstone* this = THIS; + + DECR(this->timer); + + this->actionFunc(this, play); + + this->rot.x -= this->rotVel.x; + this->rot.y -= this->rotVel.y; + this->rot.z -= this->rotVel.z; + + Actor_MoveWithGravity(&this->actor); + if ((this->timer == 0) && !this->inactive) { + Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 50.0f, 100.0f, 0x1C); + } + if (!this->inactive) { + Collider_UpdateCylinder(&this->actor, &this->collider); + CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); + CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); + } + EnEstone_UpdateEffects(this, play); +} + +void EnEstone_Draw(Actor* thisx, PlayState* play2) { + PlayState* play = play2; + EnEstone* this = THIS; + + if (this->inactive != true) { + Matrix_Push(); + + OPEN_DISPS(play->state.gfxCtx); + + Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); + Matrix_RotateXFApply(this->rot.x * (M_PI / 180.0f)); + Matrix_RotateYF(this->rot.y * (M_PI / 180.0f), MTXMODE_APPLY); + Matrix_RotateZF(this->rot.z * (M_PI / 180.0f), MTXMODE_APPLY); + Matrix_Scale(this->scale, this->scale, this->scale, MTXMODE_APPLY); + Matrix_Translate(0.0f, 0.0f, 0.0f, MTXMODE_APPLY); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255); + gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, gEyegoreStoneDL); + + CLOSE_DISPS(play->state.gfxCtx); + + Matrix_Pop(); + } + EnEstone_DrawEffects(this, play); +} + +void EnEstone_SpawnEffect(EnEstone* this, Vec3f* pos, Vec3f* velocity, Vec3f* accel, f32 scale, s16 lifetime) { + EnEstoneEffect* effect = this->effects; + s16 i; + + for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { + if (!effect->isActive) { + effect->isActive = true; + effect->pos = *pos; + effect->velocity = *velocity; + effect->accel = *accel; + effect->scale = scale; + effect->timer = lifetime; + effect->rot.x = randPlusMinusPoint5Scaled(0x7530); + effect->rot.y = randPlusMinusPoint5Scaled(0x7530); + effect->rot.z = randPlusMinusPoint5Scaled(0x7530); + break; + } + } +} + +void EnEstone_UpdateEffects(EnEstone* this, PlayState* play) { + EnEstoneEffect* effect = this->effects; + s32 i; + + for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { + if (effect->isActive) { + effect->rot.x += 0x100; + effect->rot.z += 0x130; + + effect->pos.x += effect->velocity.x; + effect->pos.y += effect->velocity.y; + effect->pos.z += effect->velocity.z; + + effect->velocity.y += effect->accel.y; + if ((effect->pos.y < this->actor.floorHeight) && (effect->velocity.y < 0.0f)) { + effect->timer = 0; + Actor_SpawnFloorDustRing(play, &this->actor, &effect->pos, 0.0f, 5, 3.0f, 30, 15, true); + } + if (effect->timer != 0) { + effect->timer--; + } else { + effect->isActive = false; + } + } + } +} + +void EnEstone_DrawEffects(EnEstone* this, PlayState* play) { + EnEstoneEffect* effect = this->effects; + GraphicsContext* gfxCtx = play->state.gfxCtx; + s16 i; + + OPEN_DISPS(gfxCtx); + + func_8012C28C(play->state.gfxCtx); + for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { + if (effect->isActive) { + Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); + Matrix_RotateXS(effect->rot.x, MTXMODE_APPLY); + Matrix_RotateYS(effect->rot.y, MTXMODE_APPLY); + Matrix_RotateZS(effect->rot.z, MTXMODE_APPLY); + Matrix_Scale(effect->scale, effect->scale, effect->scale, MTXMODE_APPLY); + Matrix_Translate(0.0f, 0.0f, 0.0f, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x80, 255, 255, 255, 255); + gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); + gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_06AB30); + } + } + + CLOSE_DISPS(gfxCtx); +} diff --git a/src/overlays/actors/ovl_En_Estone/z_en_estone.h b/src/overlays/actors/ovl_En_Estone/z_en_estone.h index 8e4fa075d..ceb26c9c6 100644 --- a/src/overlays/actors/ovl_En_Estone/z_en_estone.h +++ b/src/overlays/actors/ovl_En_Estone/z_en_estone.h @@ -7,10 +7,33 @@ struct EnEstone; typedef void (*EnEstoneActionFunc)(struct EnEstone*, PlayState*); +#define ENESTONE_EFFECT_COUNT 200 + +typedef enum { + /* 0 */ ENESTONE_TYPE_LARGE, + /* 1 */ ENESTONE_TYPE_SMALL, +} EnEstoneType; + +typedef struct { + /* 0x00 */ u8 isActive; + /* 0x04 */ Vec3f pos; + /* 0x10 */ Vec3f velocity; + /* 0x1C */ Vec3f accel; + /* 0x28 */ Vec3s rot; + /* 0x30 */ f32 scale; + /* 0x34 */ s16 timer; +} EnEstoneEffect; // size = 0x38 + typedef struct EnEstone { /* 0x0000 */ Actor actor; /* 0x0144 */ EnEstoneActionFunc actionFunc; - /* 0x0148 */ char unk_148[0x2C2C]; + /* 0x0148 */ f32 scale; + /* 0x014C */ Vec3f rot; + /* 0x0158 */ Vec3f rotVel; + /* 0x0164 */ s16 timer; + /* 0x0166 */ s16 inactive; + /* 0x0168 */ ColliderCylinder collider; + /* 0x01B4 */ EnEstoneEffect effects[ENESTONE_EFFECT_COUNT]; } EnEstone; // size = 0x2D74 #endif // Z_EN_ESTONE_H diff --git a/src/overlays/actors/ovl_En_Fall/overlay.cfg b/src/overlays/actors/ovl_En_Fall/overlay.cfg deleted file mode 100644 index 48cfdea22..000000000 --- a/src/overlays/actors/ovl_En_Fall/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Fall -z_en_fall.c diff --git a/src/overlays/actors/ovl_En_Fall/z_en_fall.c b/src/overlays/actors/ovl_En_Fall/z_en_fall.c index aaf3958cb..ea76ef074 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -220,7 +220,7 @@ void EnFall_Setup(EnFall* this, PlayState* play) { this->actor.draw = EnFall_Moon_Draw; this->actionFunc = EnFall_StoppedClosedMouthMoon_PerformCutsceneActions; Actor_SetScale(&this->actor, this->scale * 3.0f); - if (!(gSaveContext.save.weekEventReg[25] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_25_02)) { Actor_Kill(&this->actor); } break; @@ -229,7 +229,7 @@ void EnFall_Setup(EnFall* this, PlayState* play) { this->actionFunc = EnFall_ClockTowerOrTitleScreenMoon_PerformCutsceneActions; Actor_SetScale(&this->actor, this->scale * 3.0f); this->actor.draw = EnFall_Moon_Draw; - if (gSaveContext.save.weekEventReg[25] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_02)) { Actor_Kill(&this->actor); } break; @@ -326,7 +326,7 @@ void EnFall_CrashingMoon_HandleGiantsCutscene(EnFall* this, PlayState* play) { case 2: if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) && CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG) && CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD)) { - if (gSaveContext.save.weekEventReg[93] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_04)) { if (ActorCutscene_GetCanPlayNext(0xC)) { ActorCutscene_Start(0xC, &this->actor); sGiantsCutsceneState++; @@ -335,7 +335,7 @@ void EnFall_CrashingMoon_HandleGiantsCutscene(EnFall* this, PlayState* play) { } } else if (ActorCutscene_GetCanPlayNext(0xB)) { ActorCutscene_Start(0xB, &this->actor); - gSaveContext.save.weekEventReg[93] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_93_04); sGiantsCutsceneState++; } else { ActorCutscene_SetIntentToPlay(0xB); @@ -344,8 +344,8 @@ void EnFall_CrashingMoon_HandleGiantsCutscene(EnFall* this, PlayState* play) { play->nextEntrance = ENTRANCE(CLOCK_TOWER_ROOFTOP, 0); gSaveContext.nextCutsceneIndex = 0xFFF2; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_02; - gSaveContext.nextTransitionType = TRANS_TYPE_02; + play->transitionType = TRANS_TYPE_FADE_BLACK; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; sGiantsCutsceneState = 9; } break; @@ -518,8 +518,8 @@ void EnFall_MoonsTear_Fall(EnFall* this, PlayState* play) { if (this->actor.draw != NULL) { if (Math_Vec3f_StepTo(&this->actor.world.pos, &this->actor.home.pos, this->actor.speedXZ) <= 0.0f) { Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_GORON_BOUND_1); - gSaveContext.save.weekEventReg[74] |= 0x80; - gSaveContext.save.weekEventReg[74] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_74_80); + SET_WEEKEVENTREG(WEEKEVENTREG_74_20); Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_TEST, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, -2); Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y, @@ -784,7 +784,7 @@ void EnFall_LodMoon_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_OPA_DISP++, gLodmoonEyesDL); gSPLoadGeometryMode(POLY_OPA_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH); gSPDisplayList(POLY_OPA_DISP++, gLodmoonMoonDL); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Fall2/overlay.cfg b/src/overlays/actors/ovl_En_Fall2/overlay.cfg deleted file mode 100644 index 4219364f5..000000000 --- a/src/overlays/actors/ovl_En_Fall2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Fall2 -z_en_fall2.c diff --git a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c index e2eaefe26..33cf9a64d 100644 --- a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c +++ b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c @@ -158,7 +158,7 @@ void EnFall2_Draw(Actor* thisx, PlayState* play) { func_8012C2DC(play->state.gfxCtx); AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(object_fall2_Matanimheader_008840)); - mtx = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx))); + mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx)); if (mtx != NULL) { func_8012C2DC(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Famos/overlay.cfg b/src/overlays/actors/ovl_En_Famos/overlay.cfg deleted file mode 100644 index 375bd1638..000000000 --- a/src/overlays/actors/ovl_En_Famos/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Famos -z_en_famos.c diff --git a/src/overlays/actors/ovl_En_Fg/overlay.cfg b/src/overlays/actors/ovl_En_Fg/overlay.cfg deleted file mode 100644 index 712186262..000000000 --- a/src/overlays/actors/ovl_En_Fg/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Fg -z_en_fg.c diff --git a/src/overlays/actors/ovl_En_Fire_Rock/overlay.cfg b/src/overlays/actors/ovl_En_Fire_Rock/overlay.cfg deleted file mode 100644 index e1d38e60a..000000000 --- a/src/overlays/actors/ovl_En_Fire_Rock/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Fire_Rock -z_en_fire_rock.c diff --git a/src/overlays/actors/ovl_En_Firefly/overlay.cfg b/src/overlays/actors/ovl_En_Firefly/overlay.cfg deleted file mode 100644 index 8b88be0b8..000000000 --- a/src/overlays/actors/ovl_En_Firefly/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Firefly -z_en_firefly.c diff --git a/src/overlays/actors/ovl_En_Firefly2/overlay.cfg b/src/overlays/actors/ovl_En_Firefly2/overlay.cfg deleted file mode 100644 index 0872be9ea..000000000 --- a/src/overlays/actors/ovl_En_Firefly2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Firefly2 -z_en_firefly2.c diff --git a/src/overlays/actors/ovl_En_Fish/overlay.cfg b/src/overlays/actors/ovl_En_Fish/overlay.cfg deleted file mode 100644 index a78daf631..000000000 --- a/src/overlays/actors/ovl_En_Fish/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Fish -z_en_fish.c diff --git a/src/overlays/actors/ovl_En_Fish2/overlay.cfg b/src/overlays/actors/ovl_En_Fish2/overlay.cfg deleted file mode 100644 index cba83b735..000000000 --- a/src/overlays/actors/ovl_En_Fish2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Fish2 -z_en_fish2.c diff --git a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c index fc469da81..c7dd18369 100644 --- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c +++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c @@ -163,27 +163,27 @@ void EnFish2_Init(Actor* thisx, PlayState* play) { this->morphTable, 24); this->actor.colChkInfo.mass = MASS_IMMOVABLE; if (this->unk_344 == 0) { - if (gSaveContext.save.weekEventReg[81] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_81_10)) { this->unk_2C0 = 1; } - if (gSaveContext.save.weekEventReg[81] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_81_20)) { this->unk_2C0 = 2; } - if (gSaveContext.save.weekEventReg[81] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_81_40)) { this->unk_2C0 = 3; } } else { - if (gSaveContext.save.weekEventReg[81] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_81_80)) { this->unk_2C0 = 1; } - if (gSaveContext.save.weekEventReg[82] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_82_01)) { this->unk_2C0 = 2; } - if (gSaveContext.save.weekEventReg[82] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_82_02)) { this->unk_2C0 = 3; } } @@ -619,18 +619,18 @@ void func_80B297FC(EnFish2* this, PlayState* play) { this->unk_2C0++; if (this->unk_344 == 0) { if (this->unk_2C0 == 1) { - gSaveContext.save.weekEventReg[81] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_81_10); } else if (this->unk_2C0 == 2) { - gSaveContext.save.weekEventReg[81] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_81_20); } else if (this->unk_2C0 == 3) { - gSaveContext.save.weekEventReg[81] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_81_40); } } else if (this->unk_2C0 == 1) { - gSaveContext.save.weekEventReg[81] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_81_80); } else if (this->unk_2C0 == 2) { - gSaveContext.save.weekEventReg[82] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_82_01); } else if (this->unk_2C0 == 3) { - gSaveContext.save.weekEventReg[82] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_82_02); } if (this->unk_2B0 != 0) { @@ -890,12 +890,12 @@ void func_80B2A498(EnFish2* this, PlayState* play) { temp_v0->speedXZ = 4.0f; temp_v0->velocity.y = 15.0f; Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_PIECE_OF_HEART); - gSaveContext.save.weekEventReg[81] &= (u8)~0x10; - gSaveContext.save.weekEventReg[81] &= (u8)~0x20; - gSaveContext.save.weekEventReg[81] &= (u8)~0x40; - gSaveContext.save.weekEventReg[81] &= (u8)~0x80; - gSaveContext.save.weekEventReg[82] &= (u8)~1; - gSaveContext.save.weekEventReg[82] &= (u8)~2; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_81_10); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_81_20); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_81_40); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_81_80); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_82_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_82_02); } } diff --git a/src/overlays/actors/ovl_En_Fishing/overlay.cfg b/src/overlays/actors/ovl_En_Fishing/overlay.cfg deleted file mode 100644 index 193cfdb5f..000000000 --- a/src/overlays/actors/ovl_En_Fishing/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Fishing -z_en_fishing.c diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index 62ffba4d0..a64e8a947 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -3,7 +3,7 @@ * Overlay: ovl_En_Fishing * Description: Fishing Pond Elements (Owner, Fish, Props, Effects...) */ - +#include "prevent_bss_reordering.h" #include "z_en_fishing.h" #include "z64rumble.h" #include "z64shrink_window.h" @@ -846,7 +846,7 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) { D_8090CD04 = 20; play->specialEffects = sFishingEffects; - REG(15) = 1; // gTimeIncrement in OoT + R_TIME_SPEED = 1; D_809171FC = 0; D_809171F6 = 10; @@ -1158,7 +1158,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { for (i = 0; i < 100; i++) { if (effect->type == FS_EFF_RIPPLE) { if (flag == 0) { - gSPDisplayList(POLY_XLU_DISP++, gFishingRippleSetupDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingRippleMaterialDL); gDPSetEnvColor(POLY_XLU_DISP++, 155, 155, 155, 0); flag++; } @@ -1170,7 +1170,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gFishingRippleVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingRippleModelDL); } effect++; } @@ -1180,7 +1180,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { for (i = 0; i < 100; i++) { if (effect->type == FS_EFF_DUST_SPLASH) { if (flag == 0) { - gSPDisplayList(POLY_XLU_DISP++, gFishingDustSplashSetupDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingDustSplashMaterialDL); gDPSetEnvColor(POLY_XLU_DISP++, 200, 200, 200, 0); flag++; } @@ -1193,7 +1193,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gFishingDustSplashVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingDustSplashModelDL); } effect++; } @@ -1203,7 +1203,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { for (i = 0; i < 100; i++) { if (effect->type == FS_EFF_WATER_DUST) { if (flag == 0) { - gSPDisplayList(POLY_OPA_DISP++, gFishingWaterDustSetupDL); + gSPDisplayList(POLY_OPA_DISP++, gFishingWaterDustMaterialDL); gDPSetEnvColor(POLY_OPA_DISP++, 40, 90, 80, 128); flag++; } @@ -1220,7 +1220,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, gFishingWaterDustVtxDL); + gSPDisplayList(POLY_OPA_DISP++, gFishingWaterDustModelDL); } effect++; } @@ -1230,7 +1230,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { for (i = 0; i < 100; i++) { if (effect->type == FS_EFF_BUBBLE) { if (flag == 0) { - gSPDisplayList(POLY_XLU_DISP++, gFishingBubbleSetupDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingBubbleMaterialDL); gDPSetEnvColor(POLY_XLU_DISP++, 150, 150, 150, 0); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); flag++; @@ -1242,7 +1242,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gFishingBubbleVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingBubbleModelDL); } effect++; } @@ -1266,7 +1266,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gFishingRainDropVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingRainDropModelDL); } effect++; } @@ -1278,7 +1278,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { for (i = 30; i < EFFECT_COUNT; i++) { if (effect->type == FS_EFF_RAIN_RIPPLE) { if (flag == 0) { - gSPDisplayList(POLY_XLU_DISP++, gFishingRippleSetupDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingRippleMaterialDL); gDPSetEnvColor(POLY_XLU_DISP++, 155, 155, 155, 0); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 130); flag++; @@ -1289,7 +1289,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gFishingRippleVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingRippleModelDL); } effect++; } @@ -1299,7 +1299,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { for (i = 30; i < EFFECT_COUNT; i++) { if (effect->type == FS_EFF_RAIN_SPLASH) { if (flag == 0) { - gSPDisplayList(POLY_XLU_DISP++, gFishingRainSplashSetupDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingRainSplashMaterialDL); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, KREG(19) + 80); flag++; } @@ -1317,7 +1317,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gFishingRainSplashVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingRainSplashModelDL); } effect++; } @@ -1481,9 +1481,9 @@ void EnFishing_UpdateLine(PlayState* play, Vec3f* basePos, Vec3f* pos, Vec3f* ro dy = spD8 - (pos + i - 1)->y; dz = (pos + i)->z - (pos + i - 1)->z; - ry = Math_Acot2F(dz, dx); + ry = Math_Atan2F_XY(dz, dx); dist = sqrtf(SQ(dx) + SQ(dz)); - rx = -Math_Acot2F(dist, dy); + rx = -Math_Atan2F_XY(dist, dy); (rot + i - 1)->y = ry; (rot + i - 1)->x = rx; @@ -1517,9 +1517,9 @@ void EnFishing_UpdateLinePos(Vec3f* pos) { dy = (pos + i)->y - (pos + i + 1)->y; dz = (pos + i)->z - (pos + i + 1)->z; - ry = Math_Acot2F(dz, dx); + ry = Math_Atan2F_XY(dz, dx); dist = sqrtf(SQ(dx) + SQ(dz)); - rx = -Math_Acot2F(dist, dy); + rx = -Math_Atan2F_XY(dist, dy); Matrix_RotateYF(ry, MTXMODE_NEW); Matrix_RotateXFApply(rx); @@ -1559,9 +1559,9 @@ void EnFishing_DrawLureHook(PlayState* play, Vec3f* pos, Vec3f* refPos, u8 hookI dy = refPos->y - pos->y + offsetY; dz = refPos->z - pos->z; - ry = Math_Acot2F(dz, dx); + ry = Math_Atan2F_XY(dz, dx); dist = sqrtf(SQ(dx) + SQ(dz)); - rx = -Math_Acot2F(dist, dy); + rx = -Math_Atan2F_XY(dist, dy); Matrix_RotateYF(ry, MTXMODE_NEW); Matrix_RotateXFApply(rx); @@ -1680,9 +1680,9 @@ void EnFishing_UpdateSinkingLure(PlayState* play) { dy = (pos + i)->y - (pos + i - 1)->y + offsetY; dz = (pos + i)->z - (pos + i - 1)->z + offsetZ; - ry = Math_Acot2F(dz, dx); + ry = Math_Atan2F_XY(dz, dx); dist = sqrtf(SQ(dx) + SQ(dz)); - rx = -Math_Acot2F(dist, dy); + rx = -Math_Atan2F_XY(dist, dy); Matrix_RotateYF(ry, MTXMODE_NEW); Matrix_RotateXFApply(rx); @@ -1710,7 +1710,7 @@ void EnFishing_DrawSinkingLure(PlayState* play) { if (sLurePos.y < WATER_SURFACE_Y(play)) { func_8012C28C(play->state.gfxCtx); - gSPDisplayList(POLY_OPA_DISP++, gFishingSinkingLureSegmentSetupDL); + gSPDisplayList(POLY_OPA_DISP++, gFishingSinkingLureSegmentMaterialDL); for (i = SINKING_LURE_SEG_COUNT - 1; i >= 0; i--) { if ((i + D_80911F20) < SINKING_LURE_SEG_COUNT) { @@ -1721,13 +1721,13 @@ void EnFishing_DrawSinkingLure(PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, gFishingSinkingLureSegmentVtxDL); + gSPDisplayList(POLY_OPA_DISP++, gFishingSinkingLureSegmentModelDL); } } } else { func_8012C2DC(play->state.gfxCtx); - gSPDisplayList(POLY_XLU_DISP++, gFishingSinkingLureSegmentSetupDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingSinkingLureSegmentMaterialDL); for (i = SINKING_LURE_SEG_COUNT - 1; i >= 0; i--) { if ((i + D_80911F20) < SINKING_LURE_SEG_COUNT) { @@ -1738,7 +1738,7 @@ void EnFishing_DrawSinkingLure(PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gFishingSinkingLureSegmentVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingSinkingLureSegmentModelDL); } } } @@ -1850,7 +1850,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot) Matrix_Scale(D_809101C8, 1.0f, dist, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gFishingLineVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingLineModelDL); } else { for (i = spB4; i < LINE_SEG_COUNT - 1; i++) { if ((i == LINE_SEG_COUNT - 3) && (D_80917206 == 0) && (D_8090CD14 == 3)) { @@ -1878,7 +1878,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot) gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gFishingLineVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingLineModelDL); break; } @@ -1888,7 +1888,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot) Matrix_Scale(D_809101C8, 1.0f, 0.005f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gFishingLineVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingLineModelDL); } } @@ -2168,7 +2168,7 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) { if (D_80917204 == 18) { D_8090CD14 = 1; sLurePos = sRodTipPos; - Matrix_RotateYF(BINANG_TO_RAD(player->actor.shape.rot.y), MTXMODE_NEW); + Matrix_RotateYF(BINANG_TO_RAD_ALT(player->actor.shape.rot.y), MTXMODE_NEW); sp90.x = 0.0f; sp90.y = 0.0f; sp90.z = 25.0f; @@ -2214,7 +2214,7 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) { sLureRot.y = sReelLineRot[LINE_SEG_COUNT - 2].y; } else { sLureRot.x = 0.0f; - sLureRot.y = Math_Acot2F(spD0, spD8) + M_PI; + sLureRot.y = Math_Atan2F_XY(spD0, spD8) + M_PI; } phi_f16 = sqrtf(SQ(spD8) + SQ(spD4) + SQ(spD0)); @@ -2399,7 +2399,7 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) { sp90.x = player->actor.world.pos.x - sLurePos.x; sp90.z = player->actor.world.pos.z - sLurePos.z; - sp90.y = Math_Acot2F(sp90.z, sp90.x); + sp90.y = Math_Atan2F_XY(sp90.z, sp90.x); D_809101B0 = (sp70 * D_809101BC) + sp90.y; D_809101BC *= -1.0f; @@ -2963,10 +2963,10 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { sp12C = this->unk_1AC.y - this->actor.world.pos.y; sp128 = this->unk_1AC.z - this->actor.world.pos.z; - spFC = Math_FAtan2F(sp128, sp130); + spFC = Math_Atan2S_XY(sp128, sp130); sp124 = sqrtf(SQ(sp130) + SQ(sp128)); - spFE = Math_FAtan2F(sp124, sp12C); + spFE = Math_Atan2S_XY(sp124, sp12C); sp124 = sqrtf(SQ(sp130) + SQ(sp128) + SQ(sp12C)); if ((this->unk_198 != 0) && (this->unk_150 != 2) && (this->unk_150 != 3) && (this->unk_150 != 4)) { @@ -3847,9 +3847,12 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { sp10C.y = -10.0f; sp10C.z = 5.0f; Matrix_MultVec3f(&sp10C, &sp100); - Math_ApproachF(&this->actor.world.pos.x, player->bodyPartsPos[15].x + sp100.x, 1.0f, 6.0f); - Math_ApproachF(&this->actor.world.pos.y, player->bodyPartsPos[15].y + sp100.y, 1.0f, 6.0f); - Math_ApproachF(&this->actor.world.pos.z, player->bodyPartsPos[15].z + sp100.z, 1.0f, 6.0f); + Math_ApproachF(&this->actor.world.pos.x, player->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].x + sp100.x, 1.0f, + 6.0f); + Math_ApproachF(&this->actor.world.pos.y, player->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].y + sp100.y, 1.0f, + 6.0f); + Math_ApproachF(&this->actor.world.pos.z, player->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].z + sp100.z, 1.0f, + 6.0f); D_809101C0 = 188.0f; @@ -4250,7 +4253,7 @@ void EnFishing_HandleReedContact(FishingProp* prop, Vec3f* entityPos) { f32 distXZ = sqrtf(SQ(dx) + SQ(dz)); if (distXZ <= 20.0f) { - prop->rotY = Math_Acot2F(dz, dx); + prop->rotY = Math_Atan2F_XY(dz, dx); Math_ApproachF(&prop->rotX, (20.0f - distXZ) * 0.03f, 0.2f, 0.2f); } @@ -4262,7 +4265,7 @@ void EnFishing_HandleLilyPadContact(FishingProp* prop, Vec3f* entityPos, u8 fish f32 distXZ = sqrtf(SQ(dx) + SQ(dz)); if (distXZ <= 40.0f) { - Math_ApproachS(&prop->lilyPadAngle, Math_FAtan2F(dz, dx), 10, 0x300); + Math_ApproachS(&prop->lilyPadAngle, Math_Atan2S_XY(dz, dx), 10, 0x300); } if (fishTimer && (distXZ <= 60.0f)) { @@ -4351,7 +4354,7 @@ void EnFishing_DrawPondProps(PlayState* play) { for (i = 0; i < POND_PROP_COUNT; i++) { if (prop->type == FS_PROP_REED) { if (flag == 0) { - gSPDisplayList(POLY_XLU_DISP++, gFishingReedSetupDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingReedMaterialDL); flag++; } @@ -4364,7 +4367,7 @@ void EnFishing_DrawPondProps(PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gFishingReedVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingReedModelDL); } } @@ -4376,7 +4379,7 @@ void EnFishing_DrawPondProps(PlayState* play) { for (i = 0; i < POND_PROP_COUNT; i++) { if (prop->type == FS_PROP_WOOD_POST) { if (flag == 0) { - gSPDisplayList(POLY_OPA_DISP++, gFishingWoodPostSetupDL); + gSPDisplayList(POLY_OPA_DISP++, gFishingWoodPostMaterialDL); flag++; } @@ -4386,7 +4389,7 @@ void EnFishing_DrawPondProps(PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, gFishingWoodPostVtxDL); + gSPDisplayList(POLY_OPA_DISP++, gFishingWoodPostModelDL); } } @@ -4398,7 +4401,7 @@ void EnFishing_DrawPondProps(PlayState* play) { for (i = 0; i < POND_PROP_COUNT; i++) { if (prop->type == FS_PROP_LILY_PAD) { if (flag == 0) { - gSPDisplayList(POLY_XLU_DISP++, gFishingLilyPadSetupDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingLilyPadMaterialDL); flag++; } @@ -4411,7 +4414,7 @@ void EnFishing_DrawPondProps(PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gFishingLilyPadVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gFishingLilyPadModelDL); } } @@ -4423,7 +4426,7 @@ void EnFishing_DrawPondProps(PlayState* play) { for (i = 0; i < POND_PROP_COUNT; i++) { if (prop->type == FS_PROP_ROCK) { if (flag == 0) { - gSPDisplayList(POLY_OPA_DISP++, gFishingRockSetupDL); + gSPDisplayList(POLY_OPA_DISP++, gFishingRockMaterialDL); flag++; } @@ -4434,7 +4437,7 @@ void EnFishing_DrawPondProps(PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, gFishingRockVtxDL); + gSPDisplayList(POLY_OPA_DISP++, gFishingRockModelDL); } } @@ -4557,9 +4560,9 @@ void EnFishing_UpdateGroupFishes(PlayState* play) { dx = fish->unk_10.x - fish->pos.x; dy = fish->unk_10.y - fish->pos.y; dz = fish->unk_10.z - fish->pos.z; - spD4 = Math_FAtan2F(dz, dx); + spD4 = Math_Atan2S_XY(dz, dx); dist = sqrtf(SQ(dx) + SQ(dz)); - spD6 = Math_FAtan2F(dist, dy); + spD6 = Math_Atan2S_XY(dist, dy); if ((dist < 10.0f) || (((fish->timer % 32) == 0) && (Rand_ZeroOne() > 0.5f))) { fish->unk_10.y = basePos[groupIndex].y + randPlusMinusPoint5Scaled(10.0f); @@ -4650,7 +4653,7 @@ void EnFishing_DrawGroupFishes(PlayState* play) { for (i = 0; i < GROUP_FISH_COUNT; i++) { if (fish->type != FS_GROUP_FISH_NONE) { if (flag == 0) { - gSPDisplayList(POLY_OPA_DISP++, gFishingGroupFishSetupDL); + gSPDisplayList(POLY_OPA_DISP++, gFishingGroupFishMaterialDL); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 155, 155, 155, 255); flag++; } @@ -4663,7 +4666,7 @@ void EnFishing_DrawGroupFishes(PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, gFishingGroupFishVtxDL); + gSPDisplayList(POLY_OPA_DISP++, gFishingGroupFishModelDL); } } fish++; @@ -5176,7 +5179,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { spFC.x = sLurePos.x - player->actor.world.pos.x; spFC.z = sLurePos.z - player->actor.world.pos.z; lureDistXZ = sqrtf(SQXZ(spFC)); - Matrix_RotateYF(Math_Acot2F(spFC.z, spFC.x), MTXMODE_NEW); + Matrix_RotateYF(Math_Atan2F_XY(spFC.z, spFC.x), MTXMODE_NEW); sp114.x = 0.0f; sp114.y = 0.0f; @@ -5286,7 +5289,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { sSubCamId = Play_CreateSubCamera(play); Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); Play_ChangeCameraStatus(play, sSubCamId, CAM_STATUS_ACTIVE); - func_800B7298(play, &this->actor, 4); + func_800B7298(play, &this->actor, PLAYER_CSMODE_4); mainCam = Play_GetCamera(play, CAM_ID_MAIN); sSubCamEye.x = mainCam->eye.x; @@ -5313,7 +5316,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { func_80169AFC(play, sSubCamId, 0); Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, 6); + func_800B7298(play, &this->actor, PLAYER_CSMODE_6); D_8090CD4C = 0; sSubCamId = SUB_CAM_ID_DONE; D_8090CD50 = 30; @@ -5327,7 +5330,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { sSubCamId = Play_CreateSubCamera(play); Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT); Play_ChangeCameraStatus(play, sSubCamId, CAM_STATUS_ACTIVE); - func_800B7298(play, &this->actor, 4); + func_800B7298(play, &this->actor, PLAYER_CSMODE_4); mainCam = Play_GetCamera(play, CAM_ID_MAIN); sSubCamEye.x = mainCam->eye.x; @@ -5358,7 +5361,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { D_8090CD54 = 1; Math_ApproachF(&D_80911F64, 71.0f, 0.5f, 3.0f); - Matrix_RotateYF(BINANG_TO_RAD(player->actor.shape.rot.y), MTXMODE_NEW); + Matrix_RotateYF(BINANG_TO_RAD_ALT(player->actor.shape.rot.y), MTXMODE_NEW); sp114.x = Math_SinS(play->gameplayFrames * 0x1000); sp114.y = D_80911F64; @@ -5414,7 +5417,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { mainCam->at = sSubCamAt; func_80169AFC(play, sSubCamId, 0); Cutscene_End(play, &play->csCtx); - func_800B7298(play, &this->actor, 6); // arg2 changed from 7 to 6 in MM + func_800B7298(play, &this->actor, + PLAYER_CSMODE_6); // arg2 changed from PLAYER_CSMODE_7 to PLAYER_CSMODE_6 in MM D_8090CD4C = 0; sSubCamId = SUB_CAM_ID_DONE; player->unk_B28 = -5; diff --git a/src/overlays/actors/ovl_En_Floormas/overlay.cfg b/src/overlays/actors/ovl_En_Floormas/overlay.cfg deleted file mode 100644 index 16ece1e42..000000000 --- a/src/overlays/actors/ovl_En_Floormas/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Floormas -z_en_floormas.c diff --git a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c index 4fd3c46d8..3ad6809dc 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c @@ -719,7 +719,7 @@ void func_808D217C(EnFloormas* this, Player* player) { this->actor.speedXZ = 0.0f; this->actor.velocity.y = 0.0f; func_808D08D0(this); - ptr = &D_808D3900[(void)0, gSaveContext.save.playerForm]; + ptr = &D_808D3900[GET_PLAYER_FORM]; this->actor.home.pos.x = ptr->z * Math_SinS(this->actor.shape.rot.y); this->actor.home.pos.y = CLAMP(-this->actor.playerHeightRel, ptr->x, ptr->y); this->actor.home.pos.z = ptr->z * Math_CosS(this->actor.shape.rot.y); @@ -762,7 +762,7 @@ void func_808D22C8(EnFloormas* this, PlayState* play) { this->actor.speedXZ = -3.0f; func_808D1740(this); } else if ((this->unk_190 % 20) == 0) { - func_800B8E58(player, NA_SE_VO_LI_DAMAGE_S + player->ageProperties->unk_92); + func_800B8E58(player, NA_SE_VO_LI_DAMAGE_S + player->ageProperties->voiceSfxIdOffset); play->damagePlayer(play, -4); } Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FLOORMASTER_SM_STICK - SFX_FLAG); diff --git a/src/overlays/actors/ovl_En_Fr/overlay.cfg b/src/overlays/actors/ovl_En_Fr/overlay.cfg deleted file mode 100644 index b21ec2145..000000000 --- a/src/overlays/actors/ovl_En_Fr/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Fr -z_en_fr.c diff --git a/src/overlays/actors/ovl_En_Fsn/overlay.cfg b/src/overlays/actors/ovl_En_Fsn/overlay.cfg deleted file mode 100644 index c173063cf..000000000 --- a/src/overlays/actors/ovl_En_Fsn/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Fsn -z_en_fsn.c diff --git a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c index ec85119e8..0fa23e71a 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -153,7 +153,7 @@ u16 EnFsn_GetWelcome(PlayState* play) { void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { switch (this->textId) { case 0: - if (!(gSaveContext.save.weekEventReg[80] & 0x10)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_10)) { this->textId = 0x29E0; break; } else { @@ -166,7 +166,7 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { this->flags |= ENFSN_GIVE_ITEM; this->flags |= ENFSN_GAVE_LETTER_TO_MAMA; this->getItemId = GI_LETTER_TO_MAMA; - gSaveContext.save.weekEventReg[80] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_80_10); this->textId = 0x29F1; break; } else { @@ -186,7 +186,7 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { this->flags |= ENFSN_GIVE_ITEM; this->flags |= ENFSN_GAVE_LETTER_TO_MAMA; this->getItemId = GI_LETTER_TO_MAMA; - gSaveContext.save.weekEventReg[80] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_80_10); this->textId = 0x29F1; break; case 0x29F1: @@ -212,7 +212,7 @@ void EnFsn_HandleSetupResumeInteraction(EnFsn* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play) && this->cutsceneState == ENFSN_CUTSCENESTATE_STOPPED) { Actor_ProcessTalkRequest(&this->actor, &play->state); - func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); if (ENFSN_IS_SHOP(&this->actor)) { this->actor.textId = 0; } @@ -301,8 +301,8 @@ void EnFsn_CursorLeftRight(EnFsn* this) { } s16 EnFsn_GetThirdDayItemId(void) { - if (!(gSaveContext.save.weekEventReg[33] & 4) && CURRENT_DAY == 3) { - if (!(gSaveContext.save.weekEventReg[33] & 8) && !(gSaveContext.save.weekEventReg[79] & 0x40)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04) && CURRENT_DAY == 3) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) { return SI_BOMB_BAG_30_1; } return SI_MASK_ALL_NIGHT; @@ -335,7 +335,7 @@ s32 EnFsn_HasItemsToSell(void) { } if ((STOLEN_ITEM_1 != STOLEN_ITEM_NONE) || (STOLEN_ITEM_2 != STOLEN_ITEM_NONE) || - !(gSaveContext.save.weekEventReg[33] & 4)) { + !CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04)) { return true; } @@ -441,9 +441,9 @@ s32 EnFsn_FacingShopkeeperDialogResult(EnFsn* this, PlayState* play) { func_8019F208(); if (CURRENT_DAY != 3) { this->actor.textId = 0x29FB; - } else if (gSaveContext.save.weekEventReg[33] & 4) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04)) { this->actor.textId = 0x29FF; - } else if (!(gSaveContext.save.weekEventReg[33] & 8) && !(gSaveContext.save.weekEventReg[79] & 0x40)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) { this->actor.textId = 0x29D7; } else { this->actor.textId = 0x29D8; @@ -801,7 +801,7 @@ void EnFsn_BeginInteraction(EnFsn* this, PlayState* play) { ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor); this->cutsceneState = ENFSN_CUTSCENESTATE_PLAYING; if (Player_GetMask(play) == PLAYER_MASK_NONE) { - func_8011552C(play, 16); + func_8011552C(play, DO_ACTION_NEXT); if (EnFsn_HasItemsToSell()) { this->actionFunc = EnFsn_AskBuyOrSell; } else { @@ -839,7 +839,7 @@ void EnFsn_StartBuying(EnFsn* this, PlayState* play) { this->actionFunc = EnFsn_DeterminePrice; break; case 0x29CF: - player->exchangeItemId = PLAYER_AP_NONE; + player->exchangeItemId = PLAYER_IA_NONE; this->actionFunc = EnFsn_SetupDeterminePrice; break; } @@ -861,10 +861,9 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) { Message_StartTextbox(play, this->actor.textId, &this->actor); break; case 0x29D2: - if (gSaveContext.save.weekEventReg[33] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04)) { this->actor.textId = 0x2A01; - } else if (!(gSaveContext.save.weekEventReg[33] & 8) && - !(gSaveContext.save.weekEventReg[79] & 0x40)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) { this->actor.textId = 0x29D3; } else { this->actor.textId = 0x29D4; @@ -881,7 +880,7 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) { } } } else if (talkState == TEXT_STATE_CHOICE) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); if (!EnFsn_TestEndInteraction(this, play, CONTROLLER1(&play->state)) && Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: @@ -916,12 +915,13 @@ void EnFsn_SetupDeterminePrice(EnFsn* this, PlayState* play) { void EnFsn_DeterminePrice(EnFsn* this, PlayState* play) { Player* player = GET_PLAYER(play); - s32 itemActionParam; + PlayerItemAction itemAction; u8 buttonItem; if (Message_GetState(&play->msgCtx) == TEXT_STATE_16) { - itemActionParam = func_80123810(play); - if (itemActionParam > PLAYER_AP_NONE) { + itemAction = func_80123810(play); + + if (itemAction > PLAYER_IA_NONE) { buttonItem = GET_CUR_FORM_BTN_ITEM(player->heldItemButton); this->price = (buttonItem < ITEM_MOON_TEAR) ? gItemPrices[buttonItem] : 0; if (this->price > 0) { @@ -934,7 +934,7 @@ void EnFsn_DeterminePrice(EnFsn* this, PlayState* play) { } this->actor.textId = player->actor.textId; func_801477B4(play); - } else if (itemActionParam < PLAYER_AP_NONE) { + } else if (itemAction <= PLAYER_IA_MINUS1) { if (CURRENT_DAY == 3) { this->actor.textId = 0x29DF; } else { @@ -982,7 +982,7 @@ void EnFsn_MakeOffer(EnFsn* this, PlayState* play) { break; case 1: func_8019F230(); - player->exchangeItemId = PLAYER_AP_NONE; + player->exchangeItemId = PLAYER_IA_NONE; this->actionFunc = EnFsn_SetupDeterminePrice; break; } @@ -997,7 +997,7 @@ void EnFsn_GiveItem(EnFsn* this, PlayState* play) { } this->actor.parent = NULL; if (ENFSN_IS_SHOP(&this->actor) && !this->isSelling) { - func_80123D50(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_AP_BOTTLE); + Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE); } this->actionFunc = EnFsn_SetupResumeInteraction; } else if (this->isSelling == true) { @@ -1038,7 +1038,7 @@ void EnFsn_ResumeInteraction(EnFsn* this, PlayState* play) { this->actionFunc = EnFsn_ConverseBackroom; } } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } @@ -1052,7 +1052,7 @@ void EnFsn_ResumeShoppingInteraction(EnFsn* this, PlayState* play) { } else if (this->actor.textId != 0x29D6) { this->actionFunc = EnFsn_AskCanBuyAterRunningOutOfItems; } else { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = true; this->actionFunc = EnFsn_FaceShopkeeperSelling; @@ -1103,7 +1103,7 @@ void EnFsn_BrowseShelf(EnFsn* this, PlayState* play) { this->stickLeftPrompt.isEnabled = true; EnFsn_UpdateCursorPos(this, play); if (talkstate == TEXT_STATE_5) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); if (!EnFsn_HasPlayerSelectedItem(this, play, CONTROLLER1(&play->state))) { EnFsn_CursorLeftRight(this); if (this->cursorIndex != prevCursorIdx) { @@ -1145,7 +1145,7 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, PlayState* play) { switch (item->canBuyFunc(play, item)) { case CANBUY_RESULT_SUCCESS_2: func_8019F208(); - gSaveContext.save.weekEventReg[33] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_33_04); case CANBUY_RESULT_SUCCESS_1: if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) { ActorCutscene_Stop(this->cutscene); @@ -1205,7 +1205,7 @@ void EnFsn_SelectItem(EnFsn* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); if (EnFsn_TakeItemOffShelf(this) && (talkState == TEXT_STATE_CHOICE)) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); if (!EnFsn_TestCancelOption(this, play, CONTROLLER1(&play->state)) && Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: @@ -1325,7 +1325,7 @@ void EnFsn_FaceShopkeeperSelling(EnFsn* this, PlayState* play) { u8 cursorIndex; if (talkState == TEXT_STATE_CHOICE) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); if (!EnFsn_TestEndInteraction(this, play, CONTROLLER1(&play->state)) && (!Message_ShouldAdvance(play) || !EnFsn_FacingShopkeeperDialogResult(this, play)) && this->stickAccumX > 0) { @@ -1333,7 +1333,7 @@ void EnFsn_FaceShopkeeperSelling(EnFsn* this, PlayState* play) { if (cursorIndex != CURSOR_INVALID) { this->cursorIndex = cursorIndex; this->actionFunc = EnFsn_LookToShelf; - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); this->stickRightPrompt.isEnabled = false; play_sound(NA_SE_SY_CURSOR); } @@ -1416,7 +1416,7 @@ void EnFsn_Init(Actor* thisx, PlayState* play) { EnFsn_GetCutscenes(this); EnFsn_InitShop(this, play); } else { - if ((gSaveContext.save.weekEventReg[33] & 8) || (gSaveContext.save.weekEventReg[79] & 0x40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) || CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Fu/overlay.cfg b/src/overlays/actors/ovl_En_Fu/overlay.cfg deleted file mode 100644 index 0cc55f8eb..000000000 --- a/src/overlays/actors/ovl_En_Fu/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Fu -z_en_fu.c diff --git a/src/overlays/actors/ovl_En_Fu/z_en_fu.c b/src/overlays/actors/ovl_En_Fu/z_en_fu.c index 8b035faed..f43d24432 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -119,7 +119,7 @@ void func_809616E0(EnFu* this, PlayState* play) { for (i = 0; i < this->unk_520; i++) { temp_f20 = this->actor.world.pos.x - this->unk_538[i].x; temp_f22 = this->actor.world.pos.z - this->unk_538[i].z; - atan = Math_FAtan2F(temp_f22, temp_f20); + atan = Math_Atan2S_XY(temp_f22, temp_f20); if (!spA0 || ((i % 2) != 0)) { Actor_Spawn(&play->actorCtx, play, this->unk_544, this->unk_538[i].x, this->unk_538[i].y, @@ -229,8 +229,8 @@ void EnFu_Init(Actor* thisx, PlayState* play) { void EnFu_Destroy(Actor* thisx, PlayState* play) { EnFu* this = THIS; - gSaveContext.save.weekEventReg[63] &= (u8)~1; - gSaveContext.save.weekEventReg[8] &= (u8)~1; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_08_01); Collider_DestroyCylinder(play, &this->collider); } @@ -388,9 +388,9 @@ void func_80962340(EnFu* this, PlayState* play) { if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { Message_StartTextbox(play, 0x287E, &this->actor); this->unk_552 = 0x287E; - } else if ((CURRENT_DAY == 3) && (gSaveContext.save.weekEventReg[22] & 0x10) && - (gSaveContext.save.weekEventReg[22] & 0x20)) { - if ((gSaveContext.save.weekEventReg[22] & 0x40)) { + } else if ((CURRENT_DAY == 3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_10) && + CHECK_WEEKEVENTREG(WEEKEVENTREG_22_20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_40)) { Message_StartTextbox(play, 0x2883, &this->actor); this->unk_552 = 0x2883; } else { @@ -532,8 +532,8 @@ void func_80962660(EnFu* this, PlayState* play) { break; case 0x287D: - gSaveContext.save.weekEventReg[63] |= 1; - gSaveContext.save.weekEventReg[63] &= (u8)~2; + SET_WEEKEVENTREG(WEEKEVENTREG_63_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02); func_801477B4(play); player->stateFlags1 |= PLAYER_STATE1_20; this->unk_53C = 0; @@ -605,8 +605,8 @@ void func_809628D0(EnFu* this, PlayState* play) { case 0x2884: case 0x2887: case 0x288A: - gSaveContext.save.weekEventReg[63] &= (u8)~1; - gSaveContext.save.weekEventReg[63] &= (u8)~2; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02); func_809622FC(this); break; @@ -737,7 +737,7 @@ void func_80962EBC(EnFu* this, PlayState* play) { void func_80962F10(EnFu* this) { this->unk_548 = 0; this->actor.flags &= ~ACTOR_FLAG_1; - gSaveContext.save.weekEventReg[8] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_08_01); this->actionFunc = func_80962F4C; } @@ -800,7 +800,7 @@ void func_80962F4C(EnFu* this, PlayState* play) { gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] = SECONDS_TO_TIMER(0); gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_STOP; Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900); - func_8011B4E0(play, 1); + Interface_SetPerfectLetters(play, PERFECT_LETTERS_TYPE_1); this->unk_54A = 3; func_809632D0(this); } @@ -824,7 +824,7 @@ void func_809632D0(EnFu* this) { Interface_SetHudVisibility(HUD_VISIBILITY_ALL); } - gSaveContext.save.weekEventReg[8] &= (u8)~1; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_08_01); if (this->unk_2D4 != NULL) { BgFuMizu* mizu = this->unk_2D4; @@ -848,7 +848,7 @@ void func_80963350(EnFu* this, PlayState* play) { D_80964C24 = 1; } - if ((this->unk_54A == 3) && (play->interfaceCtx.unk_286 == 0)) { + if ((this->unk_54A == 3) && !play->interfaceCtx.perfectLettersOn) { this->unk_54A = 2; D_80964C24 = 1; } @@ -878,7 +878,7 @@ void func_80963560(EnFu* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; func_80963610(this); - } else if ((this->unk_552 == 0x2880) && !(gSaveContext.save.weekEventReg[22] & 0x80)) { + } else if ((this->unk_552 == 0x2880) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_80)) { Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f); } else { Actor_PickUp(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f); @@ -895,13 +895,13 @@ void func_80963630(EnFu* this, PlayState* play) { Player* player = GET_PLAYER(play); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if ((gSaveContext.save.weekEventReg[22] & 0x10) && (gSaveContext.save.weekEventReg[22] & 0x20) && - (CURRENT_DAY == 3) && (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { - if (gSaveContext.save.weekEventReg[22] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_20) && (CURRENT_DAY == 3) && + (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_40)) { Message_StartTextbox(play, 0x2884, &this->actor); this->unk_552 = 0x2884; - } else if (!(gSaveContext.save.weekEventReg[22] & 0x80)) { - gSaveContext.save.weekEventReg[22] |= 0x80; + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_80)) { + SET_WEEKEVENTREG(WEEKEVENTREG_22_80); Message_StartTextbox(play, 0x2882, &this->actor); this->unk_552 = 0x2882; } else { @@ -920,22 +920,22 @@ void func_80963630(EnFu* this, PlayState* play) { if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { switch (CURRENT_DAY) { case 1: - gSaveContext.save.weekEventReg[22] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_22_10); break; case 2: - gSaveContext.save.weekEventReg[22] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_22_20); break; case 3: - gSaveContext.save.weekEventReg[22] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_22_40); break; } } player->stateFlags1 &= ~PLAYER_STATE1_20; } else { this->actor.child->freezeTimer = 10; - func_800B85E0(&this->actor, play, 500.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 500.0f, PLAYER_IA_MINUS1); } } @@ -1019,7 +1019,7 @@ void func_809639D0(EnFu* this, PlayState* play) { if (CUR_UPG_VALUE(UPG_BOMB_BAG) == 0) { Message_StartTextbox(play, 0x2853, &this->actor); this->unk_552 = 0x2853; - } else if (gSaveContext.save.weekEventReg[22] & 0x10) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_10)) { Message_StartTextbox(play, 0x284D, &this->actor); this->unk_552 = 0x284D; } else if (this->unk_53E == 1) { @@ -1043,7 +1043,7 @@ void func_809639D0(EnFu* this, PlayState* play) { } else if (CUR_UPG_VALUE(UPG_BOMB_BAG) == 0) { Message_StartTextbox(play, 0x2853, &this->actor); this->unk_552 = 0x2853; - } else if (!(gSaveContext.save.weekEventReg[22] & 0x10)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_10)) { if (this->unk_53E == 1) { Message_StartTextbox(play, 0x285B, &this->actor); this->unk_552 = 0x285B; @@ -1052,7 +1052,7 @@ void func_809639D0(EnFu* this, PlayState* play) { Message_StartTextbox(play, 0x285D, &this->actor); this->unk_552 = 0x285D; } - } else if (gSaveContext.save.weekEventReg[22] & 0x20) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_20)) { Message_StartTextbox(play, 0x2855, &this->actor); this->unk_552 = 0x2855; } else if (this->unk_53E == 1) { @@ -1076,15 +1076,15 @@ void func_809639D0(EnFu* this, PlayState* play) { } else if (CUR_UPG_VALUE(UPG_QUIVER) == 0) { Message_StartTextbox(play, 0x284B, &this->actor); this->unk_552 = 0x284B; - } else if (gSaveContext.save.weekEventReg[22] & 0x40) { - if ((gSaveContext.save.weekEventReg[22] & 0x10) && (gSaveContext.save.weekEventReg[22] & 0x20)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_20)) { Message_StartTextbox(play, 0x285F, &this->actor); this->unk_552 = 0x285F; } else { Message_StartTextbox(play, 0x2861, &this->actor); this->unk_552 = 0x2861; } - } else if ((gSaveContext.save.weekEventReg[22] & 0x10) && (gSaveContext.save.weekEventReg[22] & 0x20)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_20)) { if (this->unk_53E == 1) { Message_StartTextbox(play, 0x2863, &this->actor); this->unk_552 = 0x2863; @@ -1093,7 +1093,7 @@ void func_809639D0(EnFu* this, PlayState* play) { Message_StartTextbox(play, 0x2865, &this->actor); this->unk_552 = 0x2865; } - } else if ((gSaveContext.save.weekEventReg[22] & 0x10) || (gSaveContext.save.weekEventReg[22] & 0x20)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_20)) { if (this->unk_53E == 1) { Message_StartTextbox(play, 0x2867, &this->actor); this->unk_552 = 0x2867; @@ -1448,7 +1448,7 @@ void func_80964950(PlayState* play, EnFuUnkStruct* ptr, s32 len) { OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); for (i = 0; i < len; i++, ptr++) { diff --git a/src/overlays/actors/ovl_En_Fu_Kago/overlay.cfg b/src/overlays/actors/ovl_En_Fu_Kago/overlay.cfg deleted file mode 100644 index 9a946e309..000000000 --- a/src/overlays/actors/ovl_En_Fu_Kago/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Fu_Kago -z_en_fu_kago.c diff --git a/src/overlays/actors/ovl_En_Fu_Mato/overlay.cfg b/src/overlays/actors/ovl_En_Fu_Mato/overlay.cfg deleted file mode 100644 index 78253baff..000000000 --- a/src/overlays/actors/ovl_En_Fu_Mato/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Fu_Mato -z_en_fu_mato.c diff --git a/src/overlays/actors/ovl_En_Fz/overlay.cfg b/src/overlays/actors/ovl_En_Fz/overlay.cfg deleted file mode 100644 index 0eba400a5..000000000 --- a/src/overlays/actors/ovl_En_Fz/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Fz -z_en_fz.c diff --git a/src/overlays/actors/ovl_En_Fz/z_en_fz.c b/src/overlays/actors/ovl_En_Fz/z_en_fz.c index 04ae61b72..f7d1d7cd1 100644 --- a/src/overlays/actors/ovl_En_Fz/z_en_fz.c +++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.c @@ -1003,7 +1003,7 @@ void func_80934464(EnFz* this, PlayState* play) { gDPPipeSync(POLY_XLU_DISP++); if (flag == 0) { - gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamDL); + gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamMaterialDL); flag++; } @@ -1017,7 +1017,7 @@ void func_80934464(EnFz* this, PlayState* play) { Matrix_Scale(ptr->unk_30, ptr->unk_30, 1.0f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamVtxDL); + gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamModelDL); } } diff --git a/src/overlays/actors/ovl_En_Gakufu/overlay.cfg b/src/overlays/actors/ovl_En_Gakufu/overlay.cfg deleted file mode 100644 index 9f421707a..000000000 --- a/src/overlays/actors/ovl_En_Gakufu/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Gakufu -z_en_gakufu.c diff --git a/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c b/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c index f6a227015..55dc23737 100644 --- a/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c +++ b/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c @@ -145,20 +145,20 @@ void EnGakufu_Init(Actor* thisx, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_2000000; if (EnGakufu_IsPlayerInRange(this, play)) { - gSaveContext.eventInf[3] |= 2; + SET_EVENTINF(EVENTINF_31); } else { - gSaveContext.eventInf[3] &= (u8)~2; + CLEAR_EVENTINF(EVENTINF_31); } this->actionFunc = EnGakufu_WaitForSong; - gSaveContext.eventInf[3] &= (u8)~4; + CLEAR_EVENTINF(EVENTINF_32); } void EnGakufu_Destroy(Actor* thisx, PlayState* play) { EnGakufu* this = THIS; if (GAKUFU_GET_TYPE(&this->actor) != GAKUFU_MILK_BAR) { - gSaveContext.eventInf[3] &= (u8)~2; + CLEAR_EVENTINF(EVENTINF_31); } } @@ -231,23 +231,23 @@ void EnGakufu_PlayRewardCutscene(EnGakufu* this, PlayState* play) { /** * Waits for the notes on the wall to be played and updates the corresponding flags - * (gSaveContext.eventInf[3] & 2) is checking if Player is within range of the wall - * (gSaveContext.eventInf[3] & 4) is checking if Player has played the notes of the wall + * EVENTINF_31 is used to track if Player is within range of the wall + * EVENTINF_32 is used to track if Player has played the notes of the wall */ void EnGakufu_WaitForSong(EnGakufu* this, PlayState* play) { - if (gSaveContext.eventInf[3] & 2) { - if (gSaveContext.eventInf[3] & 4) { - gSaveContext.eventInf[3] &= (u8)~2; - gSaveContext.eventInf[3] &= (u8)~4; + if (CHECK_EVENTINF(EVENTINF_31)) { + if (CHECK_EVENTINF(EVENTINF_32)) { + CLEAR_EVENTINF(EVENTINF_31); + CLEAR_EVENTINF(EVENTINF_32); this->actionFunc = EnGakufu_PlayRewardCutscene; EnGakufu_PlayRewardCutscene(this, play); this->actor.draw = NULL; } else if (!EnGakufu_IsPlayerInRange(this, play)) { - gSaveContext.eventInf[3] &= (u8)~2; + CLEAR_EVENTINF(EVENTINF_31); } } else if (EnGakufu_IsPlayerInRange(this, play)) { - gSaveContext.eventInf[3] |= 2; + SET_EVENTINF(EVENTINF_31); } } diff --git a/src/overlays/actors/ovl_En_Gamelupy/overlay.cfg b/src/overlays/actors/ovl_En_Gamelupy/overlay.cfg deleted file mode 100644 index a9b07ebae..000000000 --- a/src/overlays/actors/ovl_En_Gamelupy/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Gamelupy -z_en_gamelupy.c diff --git a/src/overlays/actors/ovl_En_Gb2/overlay.cfg b/src/overlays/actors/ovl_En_Gb2/overlay.cfg deleted file mode 100644 index d604decdc..000000000 --- a/src/overlays/actors/ovl_En_Gb2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Gb2 -z_en_gb2.c diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c index 6effae85c..d6643dbeb 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -120,8 +120,8 @@ s32 func_80B0F660(EnGb2* this, PlayState* play) { } void func_80B0F6DC(EnGb2* this) { - if (!(gSaveContext.save.weekEventReg[54] & 0x20)) { - gSaveContext.save.weekEventReg[54] |= 0x20; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_54_20)) { + SET_WEEKEVENTREG(WEEKEVENTREG_54_20); this->unk_26E = 0x14D0; } else { this->unk_26E = 0x14D1; @@ -131,15 +131,15 @@ void func_80B0F6DC(EnGb2* this) { } void func_80B0F728(EnGb2* this, PlayState* play) { - if (gSaveContext.eventInf[4] & 0x10) { + if (CHECK_EVENTINF(EVENTINF_44)) { func_80B0FBF0(this, play); this->unk_26E = 0x14E1; - if (gSaveContext.eventInf[4] & 0x80) { + if (CHECK_EVENTINF(EVENTINF_47)) { this->unk_288 = 10; } else { this->unk_288 = 30; } - } else if (gSaveContext.eventInf[4] & 0x20) { + } else if (CHECK_EVENTINF(EVENTINF_45)) { func_80B0FBF0(this, play); this->unk_26E = 0x14E0; this->unk_26C |= 2; @@ -147,9 +147,9 @@ void func_80B0F728(EnGb2* this, PlayState* play) { this->unk_26E = 0x14DC; } - gSaveContext.eventInf[4] &= (u8)~0x10; - gSaveContext.eventInf[4] &= (u8)~0x20; - gSaveContext.eventInf[4] &= (u8)~0x40; + CLEAR_EVENTINF(EVENTINF_44); + CLEAR_EVENTINF(EVENTINF_45); + CLEAR_EVENTINF(EVENTINF_46); this->actionFunc = func_80B10584; } @@ -159,7 +159,7 @@ u16 func_80B0F7FC(EnGb2* this) { return 0x14D1; case 0x14D1: - if (gSaveContext.eventInf[4] & 0x80) { + if (CHECK_EVENTINF(EVENTINF_47)) { return 0x14E4; } @@ -179,7 +179,7 @@ u16 func_80B0F7FC(EnGb2* this) { return 0x14D3; case 0x14D2: - if (gSaveContext.eventInf[4] & 0x80) { + if (CHECK_EVENTINF(EVENTINF_47)) { return 0x14E5; } return 0x14D4; @@ -208,7 +208,7 @@ u16 func_80B0F8F8(EnGb2* this) { case 0x14DE: this->unk_26C |= 2; - gSaveContext.save.weekEventReg[54] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_54_80); return 0x14DF; case 0x14E1: @@ -226,7 +226,7 @@ u16 func_80B0F97C(EnGb2* this) { return 0x14F7; case 0x14F7: - gSaveContext.save.weekEventReg[76] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_76_80); this->unk_26C |= 2; return 0x14F8; @@ -259,7 +259,7 @@ s32 func_80B0FA48(EnGb2* this, PlayState* play) { return false; case PLAYER_MASK_CAPTAIN: - if (!(gSaveContext.save.weekEventReg[80] & 0x40)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_40)) { this->unk_26E = 0x14EB; return false; } @@ -267,7 +267,7 @@ s32 func_80B0FA48(EnGb2* this, PlayState* play) { return true; } - if (!(gSaveContext.save.weekEventReg[80] & 0x20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_20)) { this->unk_26E = 0x14EF; return false; } else { @@ -370,9 +370,9 @@ void func_80B0FE7C(PlayState* play) { } void func_80B0FEBC(EnGb2* this, PlayState* play) { - if ((play->msgCtx.ocarinaMode == OCARINA_SONG_ELEGY) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) { + if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) { play->msgCtx.ocarinaMode = 4; - gSaveContext.eventInf[4] |= 0x80; + SET_EVENTINF(EVENTINF_47); this->unk_26E = 0x14D1; this->unk_288 = 10; } @@ -395,7 +395,7 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) { play->msgCtx.stateTimer = 4; this->unk_26E = 0x14D1; this->unk_288 = 30; - gSaveContext.eventInf[4] &= (u8)~0x80; + CLEAR_EVENTINF(EVENTINF_47); this->unk_26C &= ~2; this->actionFunc = func_80B0FEBC; } else { @@ -433,7 +433,7 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) { Rupees_ChangeBy(-this->unk_288); play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; - func_800B7298(play, NULL, 7); + func_800B7298(play, NULL, PLAYER_CSMODE_7); this->actionFunc = func_80B11344; break; @@ -488,8 +488,8 @@ void func_80B10344(EnGb2* this, PlayState* play) { if (this->unk_280 == 3) { this->unk_26C &= ~0x200; gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP; - func_800FE498(); - gSaveContext.eventInf[4] |= 0x40; + Environment_StartTime(); + SET_EVENTINF(EVENTINF_46); func_80B0FE7C(play); } else if (this->unk_280 == 2) { if (this->unk_26C & 0x400) { @@ -507,8 +507,8 @@ void func_80B10344(EnGb2* this, PlayState* play) { if (gSaveContext.save.playerData.health < 49) { gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP; - gSaveContext.eventInf[4] |= 0x40; - gSaveContext.eventInf[4] |= 0x20; + SET_EVENTINF(EVENTINF_46); + SET_EVENTINF(EVENTINF_45); if ((this->unk_268 != NULL) && (this->unk_268->update == NULL)) { this->unk_268 = NULL; @@ -521,8 +521,8 @@ void func_80B10344(EnGb2* this, PlayState* play) { func_80B0FE7C(play); } else if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_1] == SECONDS_TO_TIMER(0)) { gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP; - gSaveContext.eventInf[4] |= 0x40; - gSaveContext.eventInf[4] |= 0x10; + SET_EVENTINF(EVENTINF_46); + SET_EVENTINF(EVENTINF_44); if ((this->unk_268 != NULL) && (this->unk_268->update == NULL)) { this->unk_268 = NULL; @@ -564,7 +564,7 @@ void func_80B10634(EnGb2* this, PlayState* play) { } else { this->unk_26E = 0x14D1; this->unk_288 = 30; - gSaveContext.eventInf[4] &= (u8)~0x80; + CLEAR_EVENTINF(EVENTINF_47); this->actionFunc = func_80B0FEBC; } } else { @@ -585,7 +585,7 @@ void func_80B10634(EnGb2* this, PlayState* play) { Rupees_ChangeBy(-this->unk_288); play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; - func_800B7298(play, NULL, 7); + func_800B7298(play, NULL, PLAYER_CSMODE_7); this->actionFunc = func_80B11344; } break; @@ -617,7 +617,7 @@ void func_80B10868(EnGb2* this, PlayState* play) { void func_80B10924(EnGb2* this, PlayState* play) { s32 sp24; - if (gSaveContext.save.weekEventReg[54] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_40)) { sp24 = 5; } else { sp24 = 12; @@ -626,7 +626,7 @@ void func_80B10924(EnGb2* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; if (sp24 == 12) { - gSaveContext.save.weekEventReg[54] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_54_40); } else { Rupees_ChangeBy(50); } @@ -707,9 +707,9 @@ void func_80B10B5C(EnGb2* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10000; Message_StartTextbox(play, this->unk_26E, &this->actor); if (this->unk_26E == 0x14EB) { - gSaveContext.save.weekEventReg[80] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_80_40); } else if (this->unk_26E == 0x14EF) { - gSaveContext.save.weekEventReg[80] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_80_20); } this->unk_26C &= ~0x20; this->unk_290 = 0; @@ -885,14 +885,14 @@ void EnGb2_Init(Actor* thisx, PlayState* play) { switch (ENGB2_GET_7(&this->actor)) { case ENGB2_7_0: - if (gSaveContext.save.weekEventReg[54] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_80)) { Actor_Kill(&this->actor); - } else if (gSaveContext.save.weekEventReg[52] & 0x20) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20)) { Actor_Kill(&this->actor); } if (gSaveContext.save.entrance == ENTRANCE(GHOST_HUT, 1)) { - func_800FE484(); + Environment_StopTime(); this->actionFunc = func_80B10240; break; } @@ -901,7 +901,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) { this->actor.flags |= ACTOR_FLAG_10; this->actor.flags |= ACTOR_FLAG_2000000; - if (gSaveContext.eventInf[4] & 0x40) { + if (CHECK_EVENTINF(EVENTINF_46)) { func_80B0F728(this, play); } else { func_80B0FBF0(this, play); @@ -910,7 +910,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) { break; case ENGB2_7_1: - if ((play->curSpawn == 1) || (gSaveContext.save.weekEventReg[80] & 0x80)) { + if ((play->curSpawn == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_80_80)) { Actor_Kill(&this->actor); return; } @@ -940,7 +940,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) { return; } - if (gSaveContext.save.weekEventReg[76] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_76_80)) { this->actor.draw = NULL; this->unk_26C |= 0x100; this->actor.flags &= ~ACTOR_FLAG_1; diff --git a/src/overlays/actors/ovl_En_Ge1/overlay.cfg b/src/overlays/actors/ovl_En_Ge1/overlay.cfg deleted file mode 100644 index ebd643e2a..000000000 --- a/src/overlays/actors/ovl_En_Ge1/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ge1 -z_en_ge1.c diff --git a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c index cbc8511b7..3d4f4bd3d 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -384,10 +384,10 @@ void EnGe1_Update(Actor* thisx, PlayState* play) { } s32 EnGe1_ValidatePictograph(PlayState* play, Actor* thisx) { - s32 ret = Snap_ValidatePictograph(play, thisx, PICTOGRAPH_PIRATE_GOOD, &thisx->focus.pos, &thisx->shape.rot, 10.0f, + s32 ret = Snap_ValidatePictograph(play, thisx, PICTO_VALID_PIRATE_GOOD, &thisx->focus.pos, &thisx->shape.rot, 10.0f, 400.0f, -1); - ret |= Snap_ValidatePictograph(play, thisx, PICTOGRAPH_PIRATE_TOO_FAR, &thisx->focus.pos, &thisx->shape.rot, 10.0f, + ret |= Snap_ValidatePictograph(play, thisx, PICTO_VALID_PIRATE_TOO_FAR, &thisx->focus.pos, &thisx->shape.rot, 10.0f, 1200.0f, -1); return ret; diff --git a/src/overlays/actors/ovl_En_Ge2/overlay.cfg b/src/overlays/actors/ovl_En_Ge2/overlay.cfg deleted file mode 100644 index 965bfcf19..000000000 --- a/src/overlays/actors/ovl_En_Ge2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ge2 -z_en_ge2.c diff --git a/src/overlays/actors/ovl_En_Ge3/overlay.cfg b/src/overlays/actors/ovl_En_Ge3/overlay.cfg deleted file mode 100644 index 5eec23b4b..000000000 --- a/src/overlays/actors/ovl_En_Ge3/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ge3 -z_en_ge3.c diff --git a/src/overlays/actors/ovl_En_Geg/overlay.cfg b/src/overlays/actors/ovl_En_Geg/overlay.cfg deleted file mode 100644 index 412bb71c1..000000000 --- a/src/overlays/actors/ovl_En_Geg/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Geg -z_en_geg.c diff --git a/src/overlays/actors/ovl_En_Geg/z_en_geg.c b/src/overlays/actors/ovl_En_Geg/z_en_geg.c index f88aab950..1da6c1a61 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -355,7 +355,7 @@ s32 func_80BB1D64(EnGeg* this, PlayState* play) { sp40 = player->actor.world.pos; } else { sp40 = player->actor.world.pos; - sp40.y = player->bodyPartsPos[7].y + 3.0f; + sp40.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; } sp34 = this->actor.world.pos; @@ -453,7 +453,7 @@ void func_80BB221C(EnGeg* this, PlayState* play) { } } else { this->unk_230 &= ~4; - if (gSaveContext.save.weekEventReg[35] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_35_40)) { if (Actor_ProcessTalkRequest(&this->actor, &play->state) && (this->unk_230 & 8)) { this->unk_496 = 0xD62; Message_StartTextbox(play, this->unk_496, &this->actor); @@ -464,7 +464,7 @@ void func_80BB221C(EnGeg* this, PlayState* play) { this->unk_230 |= 8; } } else if (Actor_ProcessTalkRequest(&this->actor, &play->state) && (this->unk_230 & 8)) { - gSaveContext.save.weekEventReg[35] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_35_40); this->unk_496 = 0xD5E; this->unk_49A = this->unk_49C[0]; Message_StartTextbox(play, this->unk_496, &this->actor); @@ -656,7 +656,7 @@ void func_80BB2B1C(EnGeg* this, PlayState* play) { if (ActorCutscene_GetCurrentIndex() != this->unk_49C[4]) { if (ActorCutscene_GetCanPlayNext(this->unk_498)) { - gSaveContext.save.weekEventReg[37] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_37_08); if (this->actor.child != NULL) { Actor_Kill(this->actor.child); } @@ -798,7 +798,7 @@ void func_80BB31B8(EnGeg* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; - gSaveContext.save.weekEventReg[61] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_61_01); if (getItemId == GI_MASK_DON_GERO) { this->unk_230 |= 0x40; } @@ -861,7 +861,7 @@ void EnGeg_Init(Actor* thisx, PlayState* play) { s32 pad2; s32 sp34[] = { 0x3E, 0xF64 }; - if (gSaveContext.save.weekEventReg[61] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_61_01)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Gg/overlay.cfg b/src/overlays/actors/ovl_En_Gg/overlay.cfg deleted file mode 100644 index 5c782de1b..000000000 --- a/src/overlays/actors/ovl_En_Gg/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Gg -z_en_gg.c diff --git a/src/overlays/actors/ovl_En_Gg/z_en_gg.c b/src/overlays/actors/ovl_En_Gg/z_en_gg.c index 8b2f8d091..a6c2a31ec 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c @@ -123,13 +123,13 @@ s32 func_80B34FB4(EnGg* this, PlayState* play) { s16 pitch; sp40 = player->actor.world.pos; - sp40.y = player->bodyPartsPos[7].y + 3.0f; + sp40.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; sp34 = this->actor.world.pos; sp34.y += 70.0f; pitch = Math_Vec3f_Pitch(&sp34, &sp40); if ((this->actor.xzDistToPlayer < 250.0f) && (this->actor.xzDistToPlayer > 50.0f) && - (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80) || (gSaveContext.save.weekEventReg[19] & 0x80))) { + (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80))) { Math_SmoothStepToS(&this->unk_2E8, pitch, 4, 0x2AA8, 1); } else { Math_SmoothStepToS(&this->unk_2E8, 0, 4, 0x2AA8, 1); @@ -212,7 +212,7 @@ void func_80B352A4(EnGg* this, PlayState* play) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); break; } - gSaveContext.save.weekEventReg[19] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_19_80); this->actionFunc = func_80B3556C; } else if ((this->unk_2E6 == 0) && ((this->actor.textId == 0xCED) || (this->actor.textId == 0xCEE))) { if (sp26 < (lastFrame - 1)) { @@ -225,7 +225,7 @@ void func_80B352A4(EnGg* this, PlayState* play) { } void func_80B35450(EnGg* this, PlayState* play) { - if ((gSaveContext.save.weekEventReg[91] & 0x10) && (play->csCtx.state == 0)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_91_10) && (play->csCtx.state == 0)) { func_80B359DC(this, play); } @@ -236,7 +236,7 @@ void func_80B35450(EnGg* this, PlayState* play) { this->unk_308 = 1; this->actionFunc = func_80B352A4; } else if ((this->actor.xzDistToPlayer < 200.0f) && (this->actor.xzDistToPlayer > 50.0f)) { - if (gSaveContext.save.weekEventReg[19] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) { func_800B863C(&this->actor, play); this->actor.textId = 0xCEE; } else if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80)) { @@ -400,8 +400,8 @@ void func_80B359DC(EnGg* this, PlayState* play) { if ((player->transformation == PLAYER_FORM_HUMAN) && (play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) { - if (!(gSaveContext.save.weekEventReg[19] & 0x80)) { - gSaveContext.save.weekEventReg[19] |= 0x80; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) { + SET_WEEKEVENTREG(WEEKEVENTREG_19_80); } this->unk_307 = true; } @@ -530,7 +530,7 @@ void func_80B35C84(EnGgStruct* ptr, PlayState* play) { Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gOwlStatueWhiteFlashDL); + gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); } Matrix_Pop(); @@ -554,7 +554,7 @@ void func_80B35C84(EnGgStruct* ptr, PlayState* play) { Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gOwlStatueWhiteFlashDL); + gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); } Matrix_Pop(); @@ -607,7 +607,7 @@ void func_80B3610C(EnGgStruct* ptr, PlayState* play) { Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gOwlStatueWhiteFlashDL); + gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); } Matrix_Pop(); @@ -660,9 +660,9 @@ void EnGg_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - gSaveContext.save.weekEventReg[20] &= (u8)~4; - gSaveContext.save.weekEventReg[20] &= (u8)~8; - gSaveContext.save.weekEventReg[20] &= (u8)~0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10); this->actor.flags &= ~ACTOR_FLAG_80; this->unk_310 = this->actor.home.pos.y; this->unk_2DC = this->actor.cutscene; @@ -690,7 +690,7 @@ void EnGg_Update(Actor* thisx, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_1; } - if (gSaveContext.save.weekEventReg[19] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) { if (play->csCtx.state == 0) { this->actor.flags |= ACTOR_FLAG_1; } else { @@ -708,10 +708,10 @@ void EnGg_Update(Actor* thisx, PlayState* play) { func_80B35968(this, play); } - if (!(gSaveContext.save.weekEventReg[91] & 0x10) && - ((gSaveContext.save.weekEventReg[19] & 0x80) || CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80) || + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_91_10) && + (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80) || CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80) || (this->unk_308 == 1))) { - gSaveContext.save.weekEventReg[91] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_91_10); } this->actionFunc(this, play); @@ -789,7 +789,7 @@ void EnGg_Draw(Actor* thisx, PlayState* play) { this->unk_344.unk_38(&this->unk_344, play); } - if (gSaveContext.save.weekEventReg[19] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) { func_8012C28C(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B36DFC[this->unk_2E2])); diff --git a/src/overlays/actors/ovl_En_Gg2/overlay.cfg b/src/overlays/actors/ovl_En_Gg2/overlay.cfg deleted file mode 100644 index 24b42b858..000000000 --- a/src/overlays/actors/ovl_En_Gg2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Gg2 -z_en_gg2.c diff --git a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c index acec19c76..6da3b1378 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c @@ -81,7 +81,7 @@ s32 func_80B3AC94(EnGg2* this, PlayState* play) { s16 pitch; sp40 = player->actor.world.pos; - sp40.y = player->bodyPartsPos[7].y + 3.0f; + sp40.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; sp34 = this->actor.world.pos; sp34.y += 70.0f; @@ -214,17 +214,17 @@ void func_80B3B294(EnGg2* this, PlayState* play) { if (this->unk_2F1 == 0) { if (play->sceneId == SCENE_11GORONNOSATO) { - gSaveContext.save.weekEventReg[20] |= 4; - gSaveContext.save.weekEventReg[20] &= (u8)~8; - gSaveContext.save.weekEventReg[20] &= (u8)~0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_20_04); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10); } else if (play->sceneId == SCENE_17SETUGEN) { - gSaveContext.save.weekEventReg[20] &= (u8)~4; - gSaveContext.save.weekEventReg[20] |= 8; - gSaveContext.save.weekEventReg[20] &= (u8)~0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04); + SET_WEEKEVENTREG(WEEKEVENTREG_20_08); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10); } else if (play->sceneId == SCENE_10YUKIYAMANOMURA) { - gSaveContext.save.weekEventReg[20] &= (u8)~4; - gSaveContext.save.weekEventReg[20] &= (u8)~8; - gSaveContext.save.weekEventReg[20] |= 0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08); + SET_WEEKEVENTREG(WEEKEVENTREG_20_10); } if (this->unk_1D8 != NULL) { @@ -240,17 +240,17 @@ void func_80B3B294(EnGg2* this, PlayState* play) { } else { this->unk_2F1 = 1; if (play->sceneId == SCENE_11GORONNOSATO) { - gSaveContext.save.weekEventReg[20] |= 4; - gSaveContext.save.weekEventReg[20] &= (u8)~8; - gSaveContext.save.weekEventReg[20] &= (u8)~0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_20_04); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10); } else if (play->sceneId == SCENE_17SETUGEN) { - gSaveContext.save.weekEventReg[20] &= (u8)~4; - gSaveContext.save.weekEventReg[20] |= 8; - gSaveContext.save.weekEventReg[20] &= (u8)~0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04); + SET_WEEKEVENTREG(WEEKEVENTREG_20_08); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10); } else if (play->sceneId == SCENE_10YUKIYAMANOMURA) { - gSaveContext.save.weekEventReg[20] &= (u8)~4; - gSaveContext.save.weekEventReg[20] &= (u8)~8; - gSaveContext.save.weekEventReg[20] |= 0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08); + SET_WEEKEVENTREG(WEEKEVENTREG_20_10); } } } @@ -360,7 +360,7 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) { return; } - if (gSaveContext.save.weekEventReg[91] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_91_10)) { Actor_Kill(&this->actor); return; } @@ -381,16 +381,16 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) { this->unk_2EA = 0; if (play->sceneId == SCENE_11GORONNOSATO) { - gSaveContext.save.weekEventReg[20] &= (u8)~4; - gSaveContext.save.weekEventReg[20] &= (u8)~8; - gSaveContext.save.weekEventReg[20] &= (u8)~0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10); this->unk_2EE = 0; Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0); this->actionFunc = func_80B3AFB0; } else if (play->sceneId == SCENE_17SETUGEN) { - if ((gSaveContext.save.weekEventReg[20] & 4) && !(gSaveContext.save.weekEventReg[20] & 8) && - !(gSaveContext.save.weekEventReg[20] & 0x10)) { - gSaveContext.save.weekEventReg[20] &= (u8)~4; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_04) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_08) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_10)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04); this->unk_2EE = 8; Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0); this->actionFunc = func_80B3B05C; @@ -398,9 +398,9 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) { Actor_Kill(&this->actor); } } else if (play->sceneId == SCENE_10YUKIYAMANOMURA) { - if (!(gSaveContext.save.weekEventReg[20] & 4) && (gSaveContext.save.weekEventReg[20] & 8) && - !(gSaveContext.save.weekEventReg[20] & 0x10)) { - gSaveContext.save.weekEventReg[20] &= (u8)~8; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_20_04) && CHECK_WEEKEVENTREG(WEEKEVENTREG_20_08) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_10)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08); this->unk_2EE = 8; Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0); this->actionFunc = func_80B3B05C; @@ -408,9 +408,9 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) { Actor_Kill(&this->actor); } } else { - gSaveContext.save.weekEventReg[20] &= (u8)~4; - gSaveContext.save.weekEventReg[20] &= (u8)~8; - gSaveContext.save.weekEventReg[20] &= (u8)~0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10); Actor_Kill(&this->actor); } } diff --git a/src/overlays/actors/ovl_En_Giant/overlay.cfg b/src/overlays/actors/ovl_En_Giant/overlay.cfg deleted file mode 100644 index a56d149b7..000000000 --- a/src/overlays/actors/ovl_En_Giant/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Giant -z_en_giant.c diff --git a/src/overlays/actors/ovl_En_Giant/z_en_giant.c b/src/overlays/actors/ovl_En_Giant/z_en_giant.c index d44306b09..dbd180359 100644 --- a/src/overlays/actors/ovl_En_Giant/z_en_giant.c +++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.c @@ -183,7 +183,7 @@ void EnGiant_Init(Actor* thisx, PlayState* play) { } if (GIANT_TYPE_IS_CLOCK_TOWER_SUCCESS(type)) { - if (!(gSaveContext.save.weekEventReg[25] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_25_02)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Ginko_Man/overlay.cfg b/src/overlays/actors/ovl_En_Ginko_Man/overlay.cfg deleted file mode 100644 index 5d02f02dc..000000000 --- a/src/overlays/actors/ovl_En_Ginko_Man/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ginko_Man -z_en_ginko_man.c diff --git a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c index fa555bc3a..88d55dc14 100644 --- a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c +++ b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c @@ -118,7 +118,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { switch (this->curTextId) { case 0x44C: // "Hey there, little guy! Won't you deposit some Rupees? (first dialogue) Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); - if (gSaveContext.save.weekEventReg[10] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_10_08)) { Message_StartTextbox(play, 0x44E, &this->actor); this->curTextId = 0x44E; //" ...So, what'll it be? Deposit Rupees Don't deposit Rupees" } else { @@ -165,18 +165,18 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { break; case 0x45A: // "All right, little guy, now I've got a total of [rupees] from you!" if (((gSaveContext.save.bankRupees & 0xFFFF) >= 200) && (this->previousBankValue < 200) && - !(gSaveContext.save.weekEventReg[59] & 0x40)) { - gSaveContext.save.weekEventReg[59] |= 0x40; + !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_40)) { + SET_WEEKEVENTREG(WEEKEVENTREG_59_40); Message_StartTextbox(play, 0x45B, &this->actor); this->curTextId = 0x45B; // "What's this? You've already saved up 200 Rupees!?! } else if (((gSaveContext.save.bankRupees & 0xFFFF) >= 1000) && ((this->previousBankValue) < 1000) && - !(gSaveContext.save.weekEventReg[59] & 0x80)) { - gSaveContext.save.weekEventReg[59] |= 0x80; + !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_80)) { + SET_WEEKEVENTREG(WEEKEVENTREG_59_80); Message_StartTextbox(play, 0x45C, &this->actor); this->curTextId = 0x45C; // "What's this? You've already saved up 1000 Rupees!?! } else if ((gSaveContext.save.bankRupees & 0xFFFF) >= 5000) { - if ((this->previousBankValue < 5000) && !(gSaveContext.save.weekEventReg[60] & 1)) { - gSaveContext.save.weekEventReg[60] |= 1; + if ((this->previousBankValue < 5000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_60_01)) { + SET_WEEKEVENTREG(WEEKEVENTREG_60_01); Message_StartTextbox(play, 0x45D, &this->actor); this->curTextId = 0x45D; // "What's this? You've already saved up 5000 Rupees?! } else if (this->previousBankValue < (s16)(gSaveContext.save.bankRupees & 0xFFFF)) { @@ -524,14 +524,14 @@ void EnGinkoMan_BankAward(EnGinkoMan* this, PlayState* play) { this->actor.parent = NULL; EnGinkoMan_SetupBankAward2(this); } else if (this->curTextId == 0x45B) { // "Whats this, you already saved up 200?" - if (!(gSaveContext.save.weekEventReg[10] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_10_08)) { Actor_PickUp(&this->actor, play, GI_WALLET_ADULT + CUR_UPG_VALUE(UPG_WALLET), 500.0f, 100.0f); } else { Actor_PickUp(&this->actor, play, GI_RUPEE_BLUE, 500.0f, 100.0f); } } else if (this->curTextId == 0x45C) { // "Whats this, you already saved up 5000?" Actor_PickUp(&this->actor, play, GI_RUPEE_BLUE, 500.0f, 100.0f); - } else if (!(gSaveContext.save.weekEventReg[59] & 8)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_08)) { Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f); } else { Actor_PickUp(&this->actor, play, GI_RUPEE_BLUE, 500.0f, 100.0f); @@ -546,10 +546,10 @@ void EnGinkoMan_SetupBankAward2(EnGinkoMan* this) { // separate function to handle bank rewards... called while the player is receiving the award void EnGinkoMan_BankAward2(EnGinkoMan* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if (!(gSaveContext.save.weekEventReg[10] & 8) && (this->curTextId == 0x45B)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_10_08) && (this->curTextId == 0x45B)) { // "What's this? You've already saved up 200 Rupees!?! Well, little guy, here's your special gift. Take // it!" - gSaveContext.save.weekEventReg[10] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_10_08); Message_StartTextbox(play, 0x47A, &this->actor); this->curTextId = 0x47A; // Message after receiving reward for depositing 200 rupees. } else { @@ -561,13 +561,13 @@ void EnGinkoMan_BankAward2(EnGinkoMan* this, PlayState* play) { EnGinkoMan_SetupDialogue(this); } else if (this->curTextId == 0x45D) { // saved up 5000 rupees for HP if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - if (!(gSaveContext.save.weekEventReg[59] & 8)) { - gSaveContext.save.weekEventReg[59] |= 8; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_08)) { + SET_WEEKEVENTREG(WEEKEVENTREG_59_08); } EnGinkoMan_SetupIdle(this); } } else { - func_800B85E0(&this->actor, play, 500.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 500.0f, PLAYER_IA_MINUS1); } } diff --git a/src/overlays/actors/ovl_En_GirlA/overlay.cfg b/src/overlays/actors/ovl_En_GirlA/overlay.cfg deleted file mode 100644 index 2083a3377..000000000 --- a/src/overlays/actors/ovl_En_GirlA/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_GirlA -z_en_girla.c diff --git a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c index 0c6ad8a41..65df46284 100644 --- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c +++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c @@ -205,13 +205,13 @@ s32 EnGirlA_CanBuyPotionGreen(PlayState* play, EnGirlA* this) { } s32 EnGirlA_CanBuyPotionBlue(PlayState* play, EnGirlA* this) { - if (!(gSaveContext.save.weekEventReg[53] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_53_08)) { return CANBUY_RESULT_CANNOT_GET_NOW; } if (!Inventory_HasEmptyBottle()) { return CANBUY_RESULT_NEED_EMPTY_BOTTLE; } - if (!(gSaveContext.save.weekEventReg[53] & 0x10)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_53_10)) { return CANBUY_RESULT_SUCCESS_2; } if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { diff --git a/src/overlays/actors/ovl_En_Gk/overlay.cfg b/src/overlays/actors/ovl_En_Gk/overlay.cfg deleted file mode 100644 index 15b8f08e6..000000000 --- a/src/overlays/actors/ovl_En_Gk/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Gk -z_en_gk.c diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.c b/src/overlays/actors/ovl_En_Gk/z_en_gk.c index 627c8d369..9704d6204 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -120,7 +120,7 @@ u16 func_80B50410(EnGk* this, PlayState* play) { if (play->sceneId == SCENE_17SETUGEN2) { if (player->transformation == PLAYER_FORM_GORON) { - if (!(gSaveContext.save.weekEventReg[40] & 0x80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_40_80)) { switch (this->unk_31C) { case 0xE7A: return 0xE7B; @@ -133,7 +133,7 @@ u16 func_80B50410(EnGk* this, PlayState* play) { case 0xE7E: return 0xE7F; case 0xE7F: - gSaveContext.save.weekEventReg[40] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_40_80); this->unk_1E4 |= 1; return 0xE80; default: @@ -143,7 +143,7 @@ u16 func_80B50410(EnGk* this, PlayState* play) { this->unk_1E4 |= 1; return 0xE81; } - } else if (!(gSaveContext.save.weekEventReg[41] & 1)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_01)) { switch (this->unk_31C) { case 0xE82: return 0xE83; @@ -154,7 +154,7 @@ u16 func_80B50410(EnGk* this, PlayState* play) { case 0xE7E: return 0xE7F; case 0xE7F: - gSaveContext.save.weekEventReg[41] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_41_01); this->unk_1E4 |= 1; return 0xE80; default: @@ -166,12 +166,12 @@ u16 func_80B50410(EnGk* this, PlayState* play) { } } else if (play->sceneId == SCENE_GORONRACE) { if (player->transformation == PLAYER_FORM_GORON) { - if (!(gSaveContext.save.weekEventReg[41] & 4)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_04)) { if (this->unk_31C == 0xE88) { - if (!(gSaveContext.save.weekEventReg[41] & 8) || Inventory_HasEmptyBottle()) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_08) || Inventory_HasEmptyBottle()) { return 0xE89; } - gSaveContext.save.weekEventReg[41] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_41_04); this->unk_1E4 |= 1; return 0xE94; } @@ -179,10 +179,10 @@ u16 func_80B50410(EnGk* this, PlayState* play) { } if ((this->unk_31C == 0xE8D) || (this->unk_31C == 0xE98)) { - if (!(gSaveContext.save.weekEventReg[41] & 8) || Inventory_HasEmptyBottle()) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_08) || Inventory_HasEmptyBottle()) { return 0xE89; } - gSaveContext.save.weekEventReg[41] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_41_04); this->unk_1E4 |= 1; return 0xE94; } @@ -193,12 +193,12 @@ u16 func_80B50410(EnGk* this, PlayState* play) { return 0xE98; } - if (!(gSaveContext.save.weekEventReg[41] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_02)) { switch (this->unk_31C) { case 0xE85: return 0xE86; case 0xE86: - gSaveContext.save.weekEventReg[41] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_41_02); this->unk_1E4 |= 1; return 0xE87; default: @@ -216,7 +216,7 @@ u16 func_80B50410(EnGk* this, PlayState* play) { u16 func_80B50710(EnGk* this) { switch (this->unk_31C) { case 0xE8E: - gSaveContext.save.weekEventReg[41] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_41_04); this->unk_1E4 &= ~0x10; this->unk_1E4 |= 1; return 0xE8F; @@ -225,7 +225,7 @@ u16 func_80B50710(EnGk* this) { return 0xE8B; case 0xE8B: - gSaveContext.save.weekEventReg[41] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_41_04); this->unk_1E4 |= 0x10; this->unk_1E4 |= 1; return 0xE8C; @@ -442,7 +442,7 @@ s32 func_80B5100C(EnGk* this, PlayState* play) { this->unk_324 = CLAMP(this->unk_324, -0x1C70, 0x1C70); sp40 = player->actor.world.pos; - sp40.y = player->bodyPartsPos[7].y + 3.0f; + sp40.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; sp34 = this->actor.world.pos; sp34.y += 70.0f; @@ -630,7 +630,7 @@ void func_80B51760(EnGk* this, PlayState* play) { } } else { if (Flags_GetSwitch(play, ENGK_GET_3F00(&this->actor))) { - gSaveContext.save.weekEventReg[40] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_40_40); this->actionFunc = func_80B51D9C; return; } @@ -722,8 +722,8 @@ void func_80B51B40(EnGk* this, PlayState* play) { if (this->unk_31C == 0xE8F) { play->nextEntrance = ENTRANCE(GORON_RACETRACK, 1); play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; Magic_Add(play, MAGIC_FILL_TO_CAPACITY); } else { this->actionFunc = func_80B51760; @@ -829,7 +829,7 @@ void func_80B51EA4(EnGk* this, PlayState* play) { } void func_80B51FD0(EnGk* this, PlayState* play) { - if (!(gSaveContext.save.weekEventReg[22] & 4)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { if (this->unk_1E4 & 2) { func_801A4748(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); } else { @@ -847,7 +847,7 @@ void func_80B5202C(EnGk* this, PlayState* play) { if (!func_80B50854(this, play)) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - gSaveContext.save.weekEventReg[24] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_24_80); this->actionFunc = func_80B51698; } else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) { func_800B863C(&this->actor, play); @@ -895,7 +895,7 @@ void func_80B5227C(EnGk* this, PlayState* play) { func_800B14D4(play, 20.0f, &this->actor.home.pos); this->unk_350 = 60; if (!(this->unk_1E4 & 0x80)) { - gSaveContext.save.weekEventReg[22] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_22_04); } Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_SIT_IMT); this->unk_350 = 0x4000; @@ -906,7 +906,7 @@ void func_80B5227C(EnGk* this, PlayState* play) { void func_80B52340(EnGk* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->unk_1E4 |= 4; - if (gSaveContext.eventInf[1] & 2) { + if (CHECK_EVENTINF(EVENTINF_11)) { this->unk_31C = 0xE90; this->actionFunc = func_80B52430; } else { @@ -955,7 +955,7 @@ void func_80B52430(EnGk* this, PlayState* play) { void func_80B5253C(EnGk* this, PlayState* play) { s32 sp24; - if (gSaveContext.save.weekEventReg[41] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_41_08)) { sp24 = 0x93; } else { sp24 = 0x6A; @@ -964,7 +964,7 @@ void func_80B5253C(EnGk* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; if (sp24 == 0x6A) { - gSaveContext.save.weekEventReg[41] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_41_08); } this->actionFunc = func_80B525E0; } else { @@ -985,7 +985,7 @@ void func_80B525E0(EnGk* this, PlayState* play) { void func_80B52654(EnGk* this, PlayState* play) { this->unk_350 += 0x400; if ((this->unk_1E4 & 0x80) && (play->csCtx.frames == 250)) { - gSaveContext.save.weekEventReg[22] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_22_04); } this->unk_354 = Math_SinS(this->unk_350) * 0.006f * 0.06f; @@ -1027,7 +1027,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_80B51760; } } else if (play->sceneId == SCENE_GORONRACE) { - if (gSaveContext.save.weekEventReg[33] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { if (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1)) { this->actionFunc = func_80B51760; } else if (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 2)) { @@ -1042,7 +1042,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); } } else if (ENGK_GET_F(&this->actor) == ENGK_F_2) { - if (!(gSaveContext.save.weekEventReg[22] & 4)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { this->actionFunc = func_80B51FD0; this->actor.draw = NULL; this->actor.flags |= ACTOR_FLAG_10; @@ -1050,7 +1050,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) { } else { Actor_Kill(&this->actor); } - } else if (!(gSaveContext.save.weekEventReg[22] & 4)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { this->unk_2E4 = 0; this->unk_318 = this->actor.cutscene; this->actor.flags |= ACTOR_FLAG_10; @@ -1074,7 +1074,7 @@ void EnGk_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if ((ENGK_GET_F(&this->actor) == ENGK_F_1) || - ((ENGK_GET_F(&this->actor) == ENGK_F_0) && !(gSaveContext.save.weekEventReg[22] & 4))) { + ((ENGK_GET_F(&this->actor) == ENGK_F_0) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04))) { func_80B507A0(this, play); SkelAnime_Update(&this->skelAnime); Actor_TrackPlayer(play, &this->actor, &this->unk_1D8, &this->unk_1DE, this->actor.focus.pos); @@ -1233,7 +1233,7 @@ void EnGk_Draw(Actor* thisx, PlayState* play) { func_8012C28C(play->state.gfxCtx); - if ((ENGK_GET_F(&this->actor) == ENGK_F_0) && (gSaveContext.save.weekEventReg[22] & 4)) { + if ((ENGK_GET_F(&this->actor) == ENGK_F_0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { Matrix_RotateXS(-0x4000, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_En_Gm/overlay.cfg b/src/overlays/actors/ovl_En_Gm/overlay.cfg deleted file mode 100644 index d39cd1d30..000000000 --- a/src/overlays/actors/ovl_En_Gm/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Gm -z_en_gm.c diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.c b/src/overlays/actors/ovl_En_Gm/z_en_gm.c index b64edb3ae..01146c0cf 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -80,7 +80,7 @@ static u8 D_80951820[] = { /* 0x134 */ SCHEDULE_CMD_RET_TIME(12, 55, 13, 0, 20), /* 0x13A */ SCHEDULE_CMD_RET_NONE(), /* 0x13B */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(2, 0x1EB - 0x140), - /* 0x140 */ SCHEDULE_CMD_CHECK_FLAG_L(0x32, 0x01, 0x1CD - 0x145), + /* 0x140 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_50_01, 0x1CD - 0x145), /* 0x145 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x17A - 0x149), /* 0x149 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 0, 18, 0, 0x174 - 0x14F), /* 0x14F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 21, 0, 0x16E - 0x155), @@ -463,7 +463,7 @@ s32 func_8094E52C(EnGm* this, PlayState* play) { } case 2: - if (!(gSaveContext.save.weekEventReg[86] & 0x40) && (this->unk_3E0 == 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_86_40) && (this->unk_3E0 == 2)) { ActorCutscene_Stop(sp2A); } else { Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), &this->actor); @@ -632,8 +632,8 @@ s32 func_8094EB1C(EnGm* this, PlayState* play) { switch (this->unk_3E0) { case 0: - if ((gSaveContext.save.weekEventReg[50] & 1) || (gSaveContext.save.weekEventReg[51] & 0x80) || - (gSaveContext.save.weekEventReg[75] & 2)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_50_01) || CHECK_WEEKEVENTREG(WEEKEVENTREG_51_80) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_75_02)) { ret = true; break; } @@ -739,14 +739,14 @@ s32 func_8094EE84(EnGm* this, PlayState* play) { this->actor.child = this->unk_268; this->unk_264 = func_8094EDBC(this, play); - if ((this->unk_258 == 5) && !(gSaveContext.save.weekEventReg[50] & 1) && - !(gSaveContext.save.weekEventReg[51] & 0x80) && !(gSaveContext.save.weekEventReg[75] & 2)) { + if ((this->unk_258 == 5) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_50_01) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_51_80) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_75_02)) { this->unk_3A4 |= 0x20; } else if ((this->unk_258 != 1) && (this->unk_258 != 5) && (this->unk_258 != 7)) { this->unk_3A4 |= 0x20; } - if ((this->unk_258 == 3) && (gSaveContext.save.weekEventReg[75] & 1)) { + if ((this->unk_258 == 3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_75_01)) { this->unk_3A4 &= ~0x20; } @@ -860,7 +860,7 @@ void func_8094F3D0(EnGm* this, PlayState* play) { s32 talkState = Message_GetState(&play->msgCtx); s32 textId = play->msgCtx.currentTextId; - if ((&this->actor == player->targetActor) && ((textId < 0xFF) || (textId > 0x200)) && (talkState == TEXT_STATE_3) && + if ((&this->actor == player->talkActor) && ((textId < 0xFF) || (textId > 0x200)) && (talkState == TEXT_STATE_3) && (this->prevTalkState == TEXT_STATE_3)) { if ((play->state.frames % 3) == 0) { if (this->unk_3AC == 120.0f) { @@ -1105,7 +1105,7 @@ s32 func_8094FCC4(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { func_8094E054(this, play, 0); } else { func_8094E054(this, play, 9); - this->skelAnime.moveFlags = 0x10; + this->skelAnime.moveFlags = ANIM_FLAG_NOMOVE; } this->unk_3A4 |= 0x100; this->unk_3A4 |= 0x200; @@ -1137,7 +1137,7 @@ s32 func_8094FE10(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { func_8094E054(this, play, 11); SubS_UpdateFlags(&this->unk_3A4, 3, 7); this->unk_268 = al; - if (!(gSaveContext.save.weekEventReg[86] & 0x20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_86_20)) { this->unk_3C8 = 2; this->unk_3CA = 2; this->unk_3CC = 8; @@ -1181,7 +1181,7 @@ s32 func_8094FF04(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { } else { Math_Vec3f_Copy(&this->actor.world.pos, &sp30); func_8094E054(this, play, 9); - this->skelAnime.moveFlags = 0x10; + this->skelAnime.moveFlags = ANIM_FLAG_NOMOVE; } this->unk_400 = 0; this->unk_3A4 |= 0x100; @@ -1352,7 +1352,7 @@ s32 func_80950490(EnGm* this, PlayState* play) { }; s32 pad; - if ((gSaveContext.save.weekEventReg[50] & 1) || (gSaveContext.save.weekEventReg[51] & 0x80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_50_01) || CHECK_WEEKEVENTREG(WEEKEVENTREG_51_80)) { if (this->unk_400 == 0) { this->unk_3C8 = 1; this->unk_3CA = 1; @@ -1582,7 +1582,7 @@ void func_80950C24(EnGm* this, PlayState* play) { void func_80950CDC(EnGm* this, PlayState* play) { ScheduleOutput sp20; - this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed); + this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, D_80951820, &sp20) || ((this->unk_258 != sp20.result) && !func_80950280(this, play, &sp20))) { @@ -1711,7 +1711,7 @@ void EnGm_Update(Actor* thisx, PlayState* play) { func_8094DFF8(this, play); func_8094E2D0(this); func_8094F2E8(this); - func_8013C964(&this->actor, play, this->unk_3B4, 30.0f, PLAYER_AP_NONE, this->unk_3A4 & 7); + func_8013C964(&this->actor, play, this->unk_3B4, 30.0f, PLAYER_IA_NONE, this->unk_3A4 & 7); if ((this->unk_258 != 3) && (this->unk_258 != 5) && (this->unk_258 != 8)) { Actor_MoveWithGravity(&this->actor); Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); diff --git a/src/overlays/actors/ovl_En_Go/overlay.cfg b/src/overlays/actors/ovl_En_Go/overlay.cfg deleted file mode 100644 index 3ab4530a4..000000000 --- a/src/overlays/actors/ovl_En_Go/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Go -z_en_go.c diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.c b/src/overlays/actors/ovl_En_Go/z_en_go.c index 86b0b1b41..e1250dbc6 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -538,7 +538,7 @@ s32 func_80A1222C(EnGo* this, PlayState* play) { if (((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) && (this->unk_3EC == 0) && (this->actor.xzDistToPlayer < 400.0f)) || - (!(gSaveContext.save.weekEventReg[22] & 4) && (play->sceneId == SCENE_16GORON_HOUSE) && + (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04) && (play->sceneId == SCENE_16GORON_HOUSE) && (gSaveContext.sceneLayer == 0) && (this->unk_3EC == 0) && (play->csCtx.currentCsIndex == 1))) { ret = true; } @@ -945,7 +945,7 @@ void func_80A132C8(EnGo* this, PlayState* play) { if ((fabsf(this->actor.playerHeightRel) > 20.0f) || (this->actor.xzDistToPlayer > 300.0f)) { SubS_UpdateFlags(&this->unk_390, 3, 7); } else if ((player->transformation != PLAYER_FORM_GORON) || (ABS_ALT(temp_v1) >= 0x1C70) || - (gSaveContext.save.weekEventReg[21] & 4) || (gSaveContext.save.weekEventReg[21] & 8)) { + CHECK_WEEKEVENTREG(WEEKEVENTREG_21_04) || CHECK_WEEKEVENTREG(WEEKEVENTREG_21_08)) { SubS_UpdateFlags(&this->unk_390, 3, 7); } else { SubS_UpdateFlags(&this->unk_390, 4, 7); @@ -953,7 +953,7 @@ void func_80A132C8(EnGo* this, PlayState* play) { } void func_80A133A8(EnGo* this, PlayState* play) { - if (gSaveContext.save.weekEventReg[21] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_08)) { SubS_UpdateFlags(&this->unk_390, 3, 7); } else { SubS_UpdateFlags(&this->unk_390, 4, 7); @@ -988,7 +988,7 @@ Actor* func_80A13400(EnGo* this, PlayState* play) { } void func_80A134B0(EnGo* this, PlayState* play, s32 arg2) { - if ((gSaveContext.save.weekEventReg[18] & 0x80) || (play->actorCtx.flags & ACTORCTX_FLAG_0) || arg2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_80) || (play->actorCtx.flags & ACTORCTX_FLAG_0) || arg2) { this->colliderSphere.dim.modelSphere.radius = 300; } else { this->colliderSphere.dim.modelSphere.radius = 380; @@ -1178,7 +1178,7 @@ s32 func_80A13B1C(EnGo* this, PlayState* play) { func_80A13728(this, play); this->unk_3C4++; this->unk_3C2 = 0; - gSaveContext.save.weekEventReg[88] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_88_40); } break; @@ -1198,19 +1198,19 @@ s32 func_80A13B1C(EnGo* this, PlayState* play) { if (this->unk_3C0 >= 65) { switch (player->transformation) { case PLAYER_FORM_HUMAN: - gSaveContext.save.weekEventReg[88] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_88_80); break; case PLAYER_FORM_GORON: - gSaveContext.save.weekEventReg[89] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_89_04); break; case PLAYER_FORM_ZORA: - gSaveContext.save.weekEventReg[89] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_89_02); break; case PLAYER_FORM_DEKU: - gSaveContext.save.weekEventReg[89] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_89_01); break; } ret = true; @@ -1376,7 +1376,7 @@ void func_80A143A8(EnGo* this, PlayState* play) { void func_80A14430(EnGo* this, PlayState* play) { if (((gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 0)) || (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 2))) && - (gSaveContext.save.weekEventReg[33] & 0x80)) { + (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80))) { func_80A14018(this, play); this->actionFunc = func_80A149B0; } else { @@ -1414,7 +1414,7 @@ void func_80A145AC(EnGo* this, PlayState* play) { if ((ENGO_GET_70(&this->actor) == ENGO_70_1) && (((play->sceneId == SCENE_10YUKIYAMANOMURA2) && (gSaveContext.sceneLayer == 1) && (play->csCtx.currentCsIndex == 0)) || - !(gSaveContext.save.weekEventReg[21] & 8))) { + !CHECK_WEEKEVENTREG(WEEKEVENTREG_21_08))) { this->actor.child = func_80A13400(this, play); this->actor.child->child = &this->actor; func_80A141D4(this, play); @@ -1426,7 +1426,7 @@ void func_80A145AC(EnGo* this, PlayState* play) { } void func_80A14668(EnGo* this, PlayState* play) { - if (!(gSaveContext.save.weekEventReg[22] & 4)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { func_80A14324(this, play); this->actionFunc = func_80A149B0; } else { @@ -1571,7 +1571,7 @@ void func_80A14B30(EnGo* this, PlayState* play) { this->unk_390 &= ~0x200; this->unk_390 |= 0x8000; this->actor.shape.yOffset = 0.0f; - } else if ((this->unk_3EC != 0) && (gSaveContext.save.weekEventReg[22] & 4)) { + } else if ((this->unk_3EC != 0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { this->actor.scale.x = this->unk_3A4 - (Math_SinS(this->unk_3AE) * 0.001f); this->actor.scale.y = (Math_SinS(this->unk_3AE) * 0.001f) + this->unk_3A4; this->actor.scale.z = (Math_SinS(this->unk_3AE) * 0.001f) + this->unk_3A4; @@ -1816,7 +1816,7 @@ void func_80A153FC(EnGo* this, PlayState* play) { } s32* func_80A15684(EnGo* this, PlayState* play) { - static s32 D_80A16704[] = { + static s32* D_80A16704[] = { D_80A16100, D_80A16164, }; @@ -1929,10 +1929,10 @@ void EnGo_Update(Actor* thisx, PlayState* play) { } else { phi_f0 = this->colliderCylinder.dim.radius + 40; } - func_8013C964(&this->actor, play, phi_f0, 20.0f, PLAYER_AP_NONE, this->unk_390 & 7); + func_8013C964(&this->actor, play, phi_f0, 20.0f, PLAYER_IA_NONE, this->unk_390 & 7); } else if ((this->unk_390 & 0x200) && (this->unk_3EC != 0)) { phi_f0 = this->colliderCylinder.dim.radius + 40; - func_8013C964(&this->actor, play, phi_f0, 20.0f, PLAYER_AP_NONE, this->unk_390 & 7); + func_8013C964(&this->actor, play, phi_f0, 20.0f, PLAYER_IA_NONE, this->unk_390 & 7); } if ((ENGO_GET_F(&this->actor) != ENGO_F_8) && (ENGO_GET_F(&this->actor) != ENGO_F_2) && diff --git a/src/overlays/actors/ovl_En_Goroiwa/overlay.cfg b/src/overlays/actors/ovl_En_Goroiwa/overlay.cfg deleted file mode 100644 index 0f4bb5a32..000000000 --- a/src/overlays/actors/ovl_En_Goroiwa/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Goroiwa -z_en_goroiwa.c diff --git a/src/overlays/actors/ovl_En_Grasshopper/overlay.cfg b/src/overlays/actors/ovl_En_Grasshopper/overlay.cfg deleted file mode 100644 index a5fa8bb0a..000000000 --- a/src/overlays/actors/ovl_En_Grasshopper/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Grasshopper -z_en_grasshopper.c diff --git a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c index cedd5c894..eb7948ffb 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c @@ -390,7 +390,7 @@ void EnGrasshopper_Fly(EnGrasshopper* this, PlayState* play) { } } - if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(gSaveContext.eventInf[4] & 2) && !this->shouldTurn && + if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !CHECK_EVENTINF(EVENTINF_41) && !this->shouldTurn && (this->actor.xzDistToPlayer < 200.0f)) { EnGrasshopper_SetupApproachPlayer(this, play); } else { diff --git a/src/overlays/actors/ovl_En_Gs/overlay.cfg b/src/overlays/actors/ovl_En_Gs/overlay.cfg deleted file mode 100644 index 0fc22a856..000000000 --- a/src/overlays/actors/ovl_En_Gs/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Gs -z_en_gs.c diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.c b/src/overlays/actors/ovl_En_Gs/z_en_gs.c index 5bd3826c7..08133cc63 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -170,7 +170,7 @@ void EnGs_Destroy(Actor* thisx, PlayState* play) { EnGs* this = THIS; Collider_DestroyCylinder(play, &this->collider); - func_80165690(); + Play_DisableMotionBlur(); } void func_80997D14(EnGs* this, PlayState* play) { @@ -184,7 +184,7 @@ void func_80997D38(EnGs* this, PlayState* play) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { if (this->actor.xzDistToPlayer <= D_8099A408[this->actor.params]) { func_8013E8F8(&this->actor, play, D_8099A408[this->actor.params], D_8099A408[this->actor.params], - PLAYER_AP_NONE, 0x2000, 0x2000); + PLAYER_IA_NONE, 0x2000, 0x2000); } } @@ -372,7 +372,7 @@ void func_809984F4(EnGs* this, PlayState* play) { } } while (gossipStone != NULL); - func_800B7298(play, &this->actor, 7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_7); this->actionFunc = func_809985B8; } @@ -459,29 +459,29 @@ void func_8099874C(EnGs* this, PlayState* play) { this->unk_20C = -1; switch (this->unk_194) { case 1: - if (!(gSaveContext.save.weekEventReg[77] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_08)) { this->unk_20C = 6; - gSaveContext.save.weekEventReg[77] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_77_08); } break; case 3: - if (!(gSaveContext.save.weekEventReg[77] & 0x10)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_10)) { this->unk_20C = 6; - gSaveContext.save.weekEventReg[77] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_77_10); } break; case 2: - if (!(gSaveContext.save.weekEventReg[77] & 0x20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_20)) { this->unk_20C = 6; - gSaveContext.save.weekEventReg[77] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_77_20); } break; } - if (!(gSaveContext.save.weekEventReg[90] & 0x10)) { - gSaveContext.save.weekEventReg[90] |= 0x10; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_90_10)) { + SET_WEEKEVENTREG(WEEKEVENTREG_90_10); this->unk_20C = 12; } @@ -902,16 +902,16 @@ void func_80999AC0(EnGs* this) { void func_80999B34(EnGs* this) { if (this->unk_216 > 0) { if (this->unk_218 == 0) { - func_8016566C(this->unk_216); + Play_EnableMotionBlur(this->unk_216); this->unk_218 = this->unk_216; } else { - func_80165658(this->unk_218); + Play_SetMotionBlurAlpha(this->unk_218); } } else if (this->unk_218 > 0) { Math_StepToS(&this->unk_218, this->unk_216, 20); - func_80165658(this->unk_218); + Play_SetMotionBlurAlpha(this->unk_218); if (this->unk_218 <= 0) { - func_80165690(); + Play_DisableMotionBlur(); } } } diff --git a/src/overlays/actors/ovl_En_Guard_Nuts/overlay.cfg b/src/overlays/actors/ovl_En_Guard_Nuts/overlay.cfg deleted file mode 100644 index 135b80f6c..000000000 --- a/src/overlays/actors/ovl_En_Guard_Nuts/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Guard_Nuts -z_en_guard_nuts.c diff --git a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c index b1d7ed422..b13bca1dd 100644 --- a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c +++ b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c @@ -109,7 +109,7 @@ void EnGuardNuts_Init(Actor* thisx, PlayState* play) { sGuardCount++; // If you have returned deku princess guards will init burrowed. - if (!(gSaveContext.save.weekEventReg[23] & 0x20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { EnGuardNuts_SetupWait(this); } else { EnGuardNuts_Burrow(this, play); @@ -158,10 +158,10 @@ void EnGuardNuts_Wait(EnGuardNuts* this, PlayState* play) { if (player->transformation == PLAYER_FORM_DEKU) { // this is the palace of... this->guardTextIndex = 0; - if ((gSaveContext.save.weekEventReg[17] & 4) && (!this->hasCompletedConversation)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_17_04) && (!this->hasCompletedConversation)) { // I told you not to enter!! this->guardTextIndex = 7; - } else if (gSaveContext.save.weekEventReg[12] & 0x40) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_40)) { // come to see the monkey again? this->guardTextIndex = 4; } @@ -234,7 +234,7 @@ void func_80ABB590(EnGuardNuts* this, PlayState* play) { if (D_80ABBE38[this->guardTextIndex] == 2) { func_801477B4(play); D_80ABBE20 = 2; - gSaveContext.save.weekEventReg[12] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_12_40); EnGuardNuts_Burrow(this, play); } else { this->guardTextIndex++; @@ -300,7 +300,7 @@ void EnGuardNuts_Unburrow(EnGuardNuts* this, PlayState* play) { Vec3f digPos; // If you have returned Deku Princess, guards will not unburrow - if (!(gSaveContext.save.weekEventReg[23] & 0x20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { yawDiff = ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.home.rot.y)); if ((yawDiff < 0x4000) && ((D_80ABBE20 == 0) || (this->actor.xzDistToPlayer > 150.0f))) { Math_Vec3f_Copy(&digPos, &this->actor.world.pos); diff --git a/src/overlays/actors/ovl_En_Guruguru/overlay.cfg b/src/overlays/actors/ovl_En_Guruguru/overlay.cfg deleted file mode 100644 index 727ca7b59..000000000 --- a/src/overlays/actors/ovl_En_Guruguru/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Guruguru -z_en_guruguru.c diff --git a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c index 342415fec..f7eddbe6f 100644 --- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c +++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c @@ -119,10 +119,10 @@ void func_80BC6E10(EnGuruguru* this) { this->textIdIndex = 0; this->unk270 = 0; if (this->actor.params == 0) { - if (gSaveContext.save.weekEventReg[38] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_38_10)) { this->textIdIndex = 1; } - } else if (gSaveContext.save.weekEventReg[38] & 0x40) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_38_40)) { this->textIdIndex = 2; } else { this->textIdIndex = 3; @@ -131,8 +131,8 @@ void func_80BC6E10(EnGuruguru* this) { this->headZRotTarget = 0; this->unk268 = 1; this->actor.textId = textIDs[this->textIdIndex]; - if ((this->textIdIndex == 0 || this->textIdIndex == 1) && (gSaveContext.save.weekEventReg[77] & 4)) { - if (!(gSaveContext.save.weekEventReg[88] & 4)) { + if ((this->textIdIndex == 0 || this->textIdIndex == 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_88_04)) { this->actor.textId = 0x295F; } else { this->actor.textId = 0x2960; @@ -153,7 +153,7 @@ void func_80BC6F14(EnGuruguru* this, PlayState* play) { this->textIdIndex = 3; if (player->transformation == PLAYER_FORM_DEKU) { this->textIdIndex = 13; - if (gSaveContext.save.weekEventReg[79] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_04)) { this->textIdIndex = 14; } } @@ -212,16 +212,16 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) { this->headZRotTarget = 0; if ((this->textIdIndex == 13) || (this->textIdIndex == 14)) { func_80151BB4(play, 0x13); - gSaveContext.save.weekEventReg[79] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_79_04); func_80BC6E10(this); return; } if (this->actor.params == 0) { if (this->actor.textId == 0x295F) { - gSaveContext.save.weekEventReg[88] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_88_04); } if (this->actor.textId == 0x292A) { - gSaveContext.save.weekEventReg[38] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_38_10); } func_80151BB4(play, 0x13); func_80BC6E10(this); @@ -232,7 +232,7 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) { return; } if (this->textIdIndex == 12) { - gSaveContext.save.weekEventReg[38] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_38_40); func_801A3B48(0); func_80151BB4(play, 0x36); func_80151BB4(play, 0x13); @@ -295,9 +295,9 @@ void func_80BC7440(EnGuruguru* this, PlayState* play) { this->textIdIndex++; this->actor.textId = textIDs[this->textIdIndex]; func_801A3B48(1); - func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); this->unk268 = 0; - gSaveContext.save.weekEventReg[38] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_38_40); this->actionFunc = func_80BC7520; } else { Actor_PickUp(&this->actor, play, GI_MASK_BREMEN, 300.0f, 300.0f); @@ -309,7 +309,7 @@ void func_80BC7520(EnGuruguru* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80BC7068; } else { - func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); } } diff --git a/src/overlays/actors/ovl_En_Hakurock/overlay.cfg b/src/overlays/actors/ovl_En_Hakurock/overlay.cfg deleted file mode 100644 index 93c363b8d..000000000 --- a/src/overlays/actors/ovl_En_Hakurock/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Hakurock -z_en_hakurock.c diff --git a/src/overlays/actors/ovl_En_Hanabi/overlay.cfg b/src/overlays/actors/ovl_En_Hanabi/overlay.cfg deleted file mode 100644 index 67feefe27..000000000 --- a/src/overlays/actors/ovl_En_Hanabi/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Hanabi -z_en_hanabi.c diff --git a/src/overlays/actors/ovl_En_Hata/overlay.cfg b/src/overlays/actors/ovl_En_Hata/overlay.cfg deleted file mode 100644 index e670da262..000000000 --- a/src/overlays/actors/ovl_En_Hata/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Hata -z_en_hata.c diff --git a/src/overlays/actors/ovl_En_Heishi/overlay.cfg b/src/overlays/actors/ovl_En_Heishi/overlay.cfg deleted file mode 100644 index 3b8a0e40e..000000000 --- a/src/overlays/actors/ovl_En_Heishi/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Heishi -z_en_heishi.c diff --git a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c index c7fc4eea8..756f37eb8 100644 --- a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c +++ b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c @@ -72,16 +72,14 @@ void EnHeishi_Init(Actor* thisx, PlayState* play) { if (this->paramsCopy == 0) { this->shouldSetHeadRotation = 1; - if (!(gSaveContext.save.weekEventReg[63] & 0x80) && - !((gSaveContext.save.day == 3) && gSaveContext.save.isNight)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_63_80) && !((gSaveContext.save.day == 3) && gSaveContext.save.isNight)) { Actor_Kill(&this->actor); } } else { this->colliderCylinder.dim.radius = 30; this->colliderCylinder.dim.height = 60; this->colliderCylinder.dim.yShift = 0; - if ((gSaveContext.save.weekEventReg[63] & 0x80) || - ((gSaveContext.save.day == 3) && gSaveContext.save.isNight)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_80) || ((gSaveContext.save.day == 3) && gSaveContext.save.isNight)) { Actor_Kill(&this->actor); } } diff --git a/src/overlays/actors/ovl_En_Hg/overlay.cfg b/src/overlays/actors/ovl_En_Hg/overlay.cfg deleted file mode 100644 index d3037b31d..000000000 --- a/src/overlays/actors/ovl_En_Hg/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Hg -z_en_hg.c diff --git a/src/overlays/actors/ovl_En_Hg/z_en_hg.c b/src/overlays/actors/ovl_En_Hg/z_en_hg.c index 38062e995..e100a2de3 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c @@ -47,7 +47,7 @@ typedef enum { /* 3 */ HG_CS_SONG_OF_HEALING, } HgCsIndex; -const ActorInit En_Hg_InitVars = { +ActorInit En_Hg_InitVars = { ACTOR_EN_HG, ACTORCAT_PROP, FLAGS, @@ -142,7 +142,7 @@ void EnHg_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit2); - if ((gSaveContext.save.weekEventReg[75] & 0x20) || (gSaveContext.save.weekEventReg[52] & 0x20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20)) { Actor_Kill(&this->actor); } this->actor.targetMode = 1; @@ -326,7 +326,7 @@ void EnHg_HandleCsAction(EnHg* this, PlayState* play) { break; case 6: - gSaveContext.save.weekEventReg[75] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_75_20); Actor_Kill(&this->actor); break; } @@ -405,9 +405,8 @@ void EnHg_WaitForPlayerAction(EnHg* this, PlayState* play) { } else { if ((this->actor.xzDistToPlayer < 60.0f) && (fabsf(this->actor.playerHeightRel) < 40.0f)) { if ((this->actionFunc != EnHg_PlayCutscene) && (this->actionFunc != EnHg_HandleCsAction)) { - - if (!(gSaveContext.save.weekEventReg[61] & 2)) { - gSaveContext.save.weekEventReg[61] |= 2; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_61_02)) { + SET_WEEKEVENTREG(WEEKEVENTREG_61_02); this->cutsceneIndex = HG_CS_FIRST_ENCOUNTER; } else { this->cutsceneIndex = HG_CS_SUBSEQUENT_ENCOUNTER; diff --git a/src/overlays/actors/ovl_En_Hgo/overlay.cfg b/src/overlays/actors/ovl_En_Hgo/overlay.cfg deleted file mode 100644 index 242079637..000000000 --- a/src/overlays/actors/ovl_En_Hgo/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Hgo -z_en_hgo.c diff --git a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c index 56a88e45b..f7a9df82a 100644 --- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c +++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c @@ -48,7 +48,7 @@ typedef enum { /* 6 */ HGO_ANIM_TOSS, } HgoAnimation; -const ActorInit En_Hgo_InitVars = { +ActorInit En_Hgo_InitVars = { ACTOR_EN_HGO, ACTORCAT_NPC, FLAGS, @@ -103,12 +103,13 @@ void EnHgo_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&thisx->colChkInfo, NULL, &sColChkInfoInit); thisx->targetMode = 6; + this->eyeIndex = 0; this->blinkTimer = 0; this->textId = 0; this->talkFlags = TALK_FLAG_NONE; this->isInCutscene = false; - if ((gSaveContext.save.weekEventReg[75] & 0x20) || (gSaveContext.save.weekEventReg[52] & 0x20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20)) { EnHgo_SetupTalk(this); } else { thisx->draw = NULL; @@ -221,7 +222,7 @@ void EnHgo_HandlePlayerChoice(EnHgo* this, PlayState* play) { break; case 0x1590: - if (gSaveContext.save.weekEventReg[14] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) { Message_StartTextbox(play, 0x1591, &this->actor); this->textId = 0x1591; break; @@ -341,7 +342,7 @@ s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play) { return true; } - if ((play->csCtx.state == 0) && (((gSaveContext.save.weekEventReg[75]) & 0x20)) && + if ((play->csCtx.state == CS_STATE_0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) && (this->actionFunc == EnHgo_DoNothing)) { this->actor.shape.rot.y = this->actor.world.rot.y; Actor_Spawn(&play->actorCtx, play, ACTOR_ELF_MSG2, this->actor.focus.pos.x, this->actor.focus.pos.y, diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/overlay.cfg b/src/overlays/actors/ovl_En_Hidden_Nuts/overlay.cfg deleted file mode 100644 index 491a14d60..000000000 --- a/src/overlays/actors/ovl_En_Hidden_Nuts/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Hidden_Nuts -z_en_hidden_nuts.c diff --git a/src/overlays/actors/ovl_En_Hint_Skb/overlay.cfg b/src/overlays/actors/ovl_En_Hint_Skb/overlay.cfg deleted file mode 100644 index 95449a9a4..000000000 --- a/src/overlays/actors/ovl_En_Hint_Skb/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Hint_Skb -z_en_hint_skb.c diff --git a/src/overlays/actors/ovl_En_Hit_Tag/overlay.cfg b/src/overlays/actors/ovl_En_Hit_Tag/overlay.cfg deleted file mode 100644 index e7ee964c9..000000000 --- a/src/overlays/actors/ovl_En_Hit_Tag/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Hit_Tag -z_en_hit_tag.c diff --git a/src/overlays/actors/ovl_En_Holl/overlay.cfg b/src/overlays/actors/ovl_En_Holl/overlay.cfg deleted file mode 100644 index 35c8d8f8e..000000000 --- a/src/overlays/actors/ovl_En_Holl/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Holl -z_en_holl.c diff --git a/src/overlays/actors/ovl_En_Honotrap/overlay.cfg b/src/overlays/actors/ovl_En_Honotrap/overlay.cfg deleted file mode 100644 index 4a20640de..000000000 --- a/src/overlays/actors/ovl_En_Honotrap/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Honotrap -z_en_honotrap.c diff --git a/src/overlays/actors/ovl_En_Horse/overlay.cfg b/src/overlays/actors/ovl_En_Horse/overlay.cfg deleted file mode 100644 index 90043637c..000000000 --- a/src/overlays/actors/ovl_En_Horse/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Horse -z_en_horse.c diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c index f8fff70fc..5ffc364c3 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -674,7 +674,7 @@ s32 EnHorse_PlayerCanMove(EnHorse* this, PlayState* play) { (((this->stateFlags & ENHORSE_FLAG_19) || (this->stateFlags & ENHORSE_FLAG_29)) && !this->inRace) || (this->action == ENHORSE_ACTION_HBA) || (player->actor.flags & ACTOR_FLAG_100) || (play->csCtx.state != CS_STATE_0) || (ActorCutscene_GetCurrentIndex() != -1) || - (player->stateFlags1 & PLAYER_STATE1_20) || (player->csMode != 0)) { + (player->stateFlags1 & PLAYER_STATE1_20) || (player->csMode != PLAYER_CSMODE_0)) { return false; } return true; @@ -792,8 +792,8 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) { this->stateFlags = 0; } - if (((play->sceneId == SCENE_KOEPONARACE) && (GET_RACE_FLAGS == 1)) || - ((gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0)) && Cutscene_GetSceneLayer(play))) { + if (((play->sceneId == SCENE_KOEPONARACE) && (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_START)) || + ((gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0)) && (Cutscene_GetSceneLayer(play) != 0))) { this->stateFlags |= ENHORSE_FLAG_25; } @@ -875,7 +875,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) { EnHorse_InitCutscene(this, play); } else if (thisx->params == ENHORSE_10) { EnHorse_InitHorsebackArchery(this); - func_80112AFC(play); + Interface_InitMinigame(play); } else if (thisx->params == ENHORSE_14) { func_808846F0(this, play); if ((play->sceneId == SCENE_LOST_WOODS) && !Cutscene_IsPlaying(play)) { @@ -1131,6 +1131,7 @@ void EnHorse_StartMountedIdle(EnHorse* this) { } } } + curFrame = this->skin.skelAnime.curFrame; Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.0f, curFrame, Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, -3.0f); @@ -1569,7 +1570,7 @@ void EnHorse_Stopping(EnHorse* this, PlayState* play) { if ((this->stateFlags & ENHORSE_STOPPING_NEIGH_SOUND) && (this->skin.skelAnime.curFrame > 29.0f)) { this->actor.speedXZ = 0.0f; if ((Rand_ZeroOne() > 0.5f) && - ((gSaveContext.save.entrance != ENTRANCE(ROMANI_RANCH, 0)) || !Cutscene_GetSceneLayer(play))) { + ((gSaveContext.save.entrance != ENTRANCE(ROMANI_RANCH, 0)) || (Cutscene_GetSceneLayer(play) == 0))) { if (this->stateFlags & ENHORSE_DRAW) { if (this->type == HORSE_TYPE_2) { Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH); @@ -2471,7 +2472,7 @@ void func_808819D8(EnHorse* this, PlayState* play) { func_8088168C(this); } - if (GET_RACE_FLAGS == 3) { + if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_3) { this->rider->unk488 = 7; } else { EnHorse_SetIngoAnimation(this->animIndex, this->skin.skelAnime.curFrame, this->unk_394 & 1, @@ -2916,22 +2917,23 @@ void EnHorse_UpdateHorsebackArchery(EnHorse* this, PlayState* play) { EnHorse_PlayWalkingSound(this); } - if (play->interfaceCtx.hbaAmmo == 0) { + if (play->interfaceCtx.minigameAmmo == 0) { this->hbaTimer++; } - sp28 = Audio_IsSequencePlaying(0x41); + sp28 = Audio_IsSequencePlaying(NA_BGM_HORSE_GOAL); EnHorse_UpdateHbaRaceInfo(this, play, &sHbaInfo); - if (((this->hbaFlags & 1) || (this->hbaTimer > 45)) && (sp28 != 1) && (gSaveContext.minigameState != 3)) { + if (((this->hbaFlags & 1) || (this->hbaTimer > 45)) && (sp28 != 1) && + (gSaveContext.minigameStatus != MINIGAME_STATUS_END)) { gSaveContext.save.cutscene = 0; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_64; } - if (play->interfaceCtx.hbaAmmo) {} + if (play->interfaceCtx.minigameAmmo) {} - if (((play->interfaceCtx.hbaAmmo == 0) || (this->hbaFlags & 2)) && (this->hbaFlags & 4)) { + if (((play->interfaceCtx.minigameAmmo == 0) || (this->hbaFlags & 2)) && (this->hbaFlags & 4)) { this->hbaFlags &= ~4; Audio_QueueSeqCmd(0x8041); } diff --git a/src/overlays/actors/ovl_En_Horse_Game_Check/overlay.cfg b/src/overlays/actors/ovl_En_Horse_Game_Check/overlay.cfg deleted file mode 100644 index b950cc9c2..000000000 --- a/src/overlays/actors/ovl_En_Horse_Game_Check/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Horse_Game_Check -z_en_horse_game_check.c diff --git a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c index 7b2e349e7..e650ef6d3 100644 --- a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c +++ b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c @@ -59,7 +59,7 @@ s32 func_808F8AA0(EnHorseGameCheck* this, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); - if (GET_RACE_FLAGS != RACE_FLAG_START) { + if (GET_WEEKEVENTREG_RACE_FLAGS != WEEKEVENTREG_RACE_FLAG_START) { Actor_Kill(&this->dyna.actor); return false; } @@ -116,13 +116,13 @@ s32 func_808F8CCC(EnHorseGameCheck* this, PlayState* play2) { this->unk_168 = 0; this->unk_174 = 0; - if (GET_RACE_FLAGS != RACE_FLAG_START) { + if (GET_WEEKEVENTREG_RACE_FLAGS != WEEKEVENTREG_RACE_FLAG_START) { Actor_Kill(&this->dyna.actor); return false; } Interface_StartTimer(TIMER_ID_MINIGAME_2, 0); - play->interfaceCtx.unk_280 = 1; + play->interfaceCtx.minigameState = MINIGAME_STATE_COUNTDOWN_SETUP_3; this->horse1 = (EnHorse*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1149.0f, -106.0f, 470.0f, 0, 0x7FFF, 0, ENHORSE_PARAMS(ENHORSE_PARAM_BANDIT, ENHORSE_4)); @@ -140,7 +140,7 @@ s32 func_808F8CCC(EnHorseGameCheck* this, PlayState* play2) { Camera_ChangeSetting(play->cameraPtrs[CAM_ID_MAIN], CAM_SET_FREE0); Play_SetCameraAtEye(play, CAM_ID_MAIN, &mainCamAt, &mainCamEye); Play_SetCameraFov(play, CAM_ID_MAIN, 45.0f); - func_800FE484(); + Environment_StopTime(); return false; } @@ -156,16 +156,16 @@ s32 func_808F8EB0(EnHorseGameCheck* this, PlayState* play) { return false; } - if (GET_RACE_FLAGS == RACE_FLAG_3) { + if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_3) { play->transitionType = TRANS_TYPE_64; - gSaveContext.nextTransitionType = TRANS_TYPE_02; - } else if (GET_RACE_FLAGS == RACE_FLAG_2) { + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; + } else if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_2) { play->transitionType = TRANS_TYPE_80; - gSaveContext.nextTransitionType = TRANS_TYPE_03; - } else if (GET_RACE_FLAGS == RACE_FLAG_4) { - SET_RACE_FLAGS(RACE_FLAG_3); - play->transitionType = TRANS_TYPE_02; - gSaveContext.nextTransitionType = TRANS_TYPE_02; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; + } else if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_4) { + SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_3); + play->transitionType = TRANS_TYPE_FADE_BLACK; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; } D_801BDA9C = 0; @@ -212,10 +212,10 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) { if ((this->unk_168 > 50) && !(this->unk_164 & 2)) { this->unk_164 |= 2; - } else if ((play->interfaceCtx.unk_280 >= 8) && !(this->unk_164 & 1)) { + } else if ((play->interfaceCtx.minigameState >= MINIGAME_STATE_COUNTDOWN_GO) && !(this->unk_164 & 1)) { this->unk_164 |= 1; horse->inRace = true; - } else if ((play->interfaceCtx.unk_280 >= 8) && !(this->unk_164 & 8)) { + } else if ((play->interfaceCtx.minigameState >= MINIGAME_STATE_COUNTDOWN_GO) && !(this->unk_164 & 8)) { EnHorse* horse = this->horse1; horse->inRace = true; @@ -252,7 +252,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) { play_sound(NA_SE_SY_START_SHOT); this->unk_164 |= 0x40000; gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; - SET_RACE_FLAGS(RACE_FLAG_4); + SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_4); this->unk_174 = 60; } @@ -285,7 +285,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) { play_sound(NA_SE_SY_START_SHOT); this->unk_164 |= 0x40000; gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; - SET_RACE_FLAGS(RACE_FLAG_3); + SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_3); this->unk_174 = 60; } @@ -318,7 +318,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) { play_sound(NA_SE_SY_START_SHOT); this->unk_164 |= 0x02000000; gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; - SET_RACE_FLAGS(RACE_FLAG_3); + SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_3); this->unk_174 = 60; } @@ -347,7 +347,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) { play_sound(NA_SE_SY_START_SHOT); this->unk_164 |= 0x800; gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; - SET_RACE_FLAGS(RACE_FLAG_2); + SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_2); this->unk_174 = 60; } return true; diff --git a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h index 52cdc2b64..d43f1f90c 100644 --- a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h +++ b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h @@ -25,22 +25,6 @@ enum { /* 10 */ ENHORSEGAMECHECK_FF_MAX, }; -#define RACE_FLAG_END 0 -#define RACE_FLAG_START 1 -#define RACE_FLAG_2 2 -#define RACE_FLAG_3 3 -#define RACE_FLAG_4 4 -#define RACE_FLAGS 7 - -#define GET_RACE_FLAGS (gSaveContext.save.weekEventReg[92] & RACE_FLAGS) - -#define SET_RACE_FLAGS(flag) \ - { \ - gSaveContext.save.weekEventReg[92] &= (u8)~RACE_FLAGS; \ - gSaveContext.save.weekEventReg[92] = \ - gSaveContext.save.weekEventReg[92] | (u8)((gSaveContext.save.weekEventReg[92] & ~RACE_FLAGS) | (flag)); \ - } (void)0 - typedef struct EnHorseGameCheck { /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ s32 unk_15C; diff --git a/src/overlays/actors/ovl_En_Horse_Link_Child/overlay.cfg b/src/overlays/actors/ovl_En_Horse_Link_Child/overlay.cfg deleted file mode 100644 index 09ec53e20..000000000 --- a/src/overlays/actors/ovl_En_Horse_Link_Child/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Horse_Link_Child -z_en_horse_link_child.c diff --git a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c index c02558a84..a10504720 100644 --- a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c +++ b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c @@ -345,7 +345,7 @@ void func_808DF194(EnHorseLinkChild* this, PlayState* play) { sp4C = SkelAnime_Update(&this->skin.skelAnime); if ((sp4C != 0) || (this->unk_148 == 1) || (this->unk_148 == 0)) { - if ((gSaveContext.save.weekEventReg[1] & 0x20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_01_20)) { f32 sp44 = Math3D_Distance(&this->actor.world.pos, &this->actor.home.pos); s32 pad; diff --git a/src/overlays/actors/ovl_En_Hs/overlay.cfg b/src/overlays/actors/ovl_En_Hs/overlay.cfg deleted file mode 100644 index dab1cacf7..000000000 --- a/src/overlays/actors/ovl_En_Hs/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Hs -z_en_hs.c diff --git a/src/overlays/actors/ovl_En_Hs/z_en_hs.c b/src/overlays/actors/ovl_En_Hs/z_en_hs.c index cb6e58759..2eb1c71a6 100644 --- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c +++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c @@ -162,7 +162,7 @@ void func_80953098(EnHs* this, PlayState* play) { this->actionFunc = func_8095345C; this->actor.flags |= ACTOR_FLAG_10000; this->stateFlags |= 0x10; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { this->stateFlags |= 8; if (INV_CONTENT(ITEM_MASK_BUNNY) == ITEM_MASK_BUNNY) { @@ -218,14 +218,14 @@ void EnHs_SceneTransitToBunnyHoodDialogue(EnHs* this, PlayState* play) { if (DECR(this->stateTimer) == 0) { play->nextEntrance = play->setupExitList[HS_GET_EXIT_INDEX(&this->actor)]; play->transitionTrigger = TRANS_TRIGGER_START; - gSaveContext.save.weekEventReg[25] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_25_08); this->actionFunc = EnHs_DoNothing; } } void func_80953354(EnHs* this, PlayState* play) { if (!Play_InCsMode(play)) { - func_800B7298(play, &this->actor, 7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_7); this->actionFunc = EnHs_SceneTransitToBunnyHoodDialogue; } } @@ -239,7 +239,7 @@ void func_809533A0(EnHs* this, PlayState* play) { } else if (this->stateFlags & 0x10) { sp1E = 0x33F9; this->stateFlags &= ~0x10; - } else if (gSaveContext.save.weekEventReg[25] & 8) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_08)) { sp1E = 0x33F4; } else { sp1E = 0x33F5; @@ -264,7 +264,7 @@ void func_8095345C(EnHs* this, PlayState* play) { this->actionFunc = func_80953354; this->stateTimer = 40; } else if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_10000)) { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); this->stateFlags |= 1; } else if ((this->actor.xzDistToPlayer < 120.0f) && Player_IsFacingActor(&this->actor, 0x2000, play)) { func_800B8614(&this->actor, play, 130.0f); diff --git a/src/overlays/actors/ovl_En_Hs2/overlay.cfg b/src/overlays/actors/ovl_En_Hs2/overlay.cfg deleted file mode 100644 index a34ed88c5..000000000 --- a/src/overlays/actors/ovl_En_Hs2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Hs2 -z_en_hs2.c diff --git a/src/overlays/actors/ovl_En_Ig/overlay.cfg b/src/overlays/actors/ovl_En_Ig/overlay.cfg deleted file mode 100644 index fa0125cbf..000000000 --- a/src/overlays/actors/ovl_En_Ig/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ig -z_en_ig.c diff --git a/src/overlays/actors/ovl_En_Ig/z_en_ig.c b/src/overlays/actors/ovl_En_Ig/z_en_ig.c index af614450d..2468e5961 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -25,7 +25,7 @@ static u8 D_80BF3260[] = { /* 0x05 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x57 - 0x09), /* 0x09 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 25, 15, 45, 0x51 - 0x0F), /* 0x0F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 45, 15, 50, 0x4B - 0x15), - /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(0x4B, 0x10, 0x1A - 0x19), + /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_75_10, 0x1A - 0x19), /* 0x19 */ SCHEDULE_CMD_RET_NONE(), /* 0x1A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 50, 16, 55, 0x45 - 0x20), /* 0x20 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 55, 17, 15, 0x3F - 0x26), @@ -42,7 +42,7 @@ static u8 D_80BF3260[] = { /* 0x5B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 45, 15, 50, 0xAF - 0x61), /* 0x61 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 50, 16, 10, 0xA9 - 0x67), /* 0x67 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 10, 16, 30, 0xA3 - 0x6D), - /* 0x6D */ SCHEDULE_CMD_CHECK_FLAG_S(0x4B, 0x10, 0x8A - 0x71), + /* 0x6D */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_75_10, 0x8A - 0x71), /* 0x71 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 30, 16, 50, 0x84 - 0x77), /* 0x77 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 50, 16, 55, 0x7E - 0x7D), /* 0x7D */ SCHEDULE_CMD_RET_NONE(), @@ -372,7 +372,7 @@ s32 func_80BF17BC(EnIg* this, PlayState* play) { case 1: case 3: - if (!(gSaveContext.save.weekEventReg[75] & 0x10) && (this->unk_3F6 == 3)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_10) && (this->unk_3F6 == 3)) { ActorCutscene_Stop(sp2A); this->unk_3F6 = 5; } else { @@ -876,7 +876,7 @@ void func_80BF2A50(EnIg* this, PlayState* play) { void func_80BF2AF8(EnIg* this, PlayState* play) { ScheduleOutput sp20; - this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed); + this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, D_80BF3260, &sp20) || ((this->scheduleResult != sp20.result) && !func_80BF2368(this, play, &sp20))) { @@ -950,7 +950,7 @@ void EnIg_Update(Actor* thisx, PlayState* play) { func_80BF1258(this); func_80BF13E4(this); func_80BF15EC(this); - func_8013C964(&this->actor, play, 60.0f, 30.0f, PLAYER_AP_NONE, this->unk_3D0 & 7); + func_8013C964(&this->actor, play, 60.0f, 30.0f, PLAYER_IA_NONE, this->unk_3D0 & 7); Actor_MoveWithGravity(&this->actor); Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); func_80BF1354(this, play); diff --git a/src/overlays/actors/ovl_En_Ik/overlay.cfg b/src/overlays/actors/ovl_En_Ik/overlay.cfg deleted file mode 100644 index c4cc60ed3..000000000 --- a/src/overlays/actors/ovl_En_Ik/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ik -z_en_ik.c diff --git a/src/overlays/actors/ovl_En_In/overlay.cfg b/src/overlays/actors/ovl_En_In/overlay.cfg deleted file mode 100644 index 2a1b953aa..000000000 --- a/src/overlays/actors/ovl_En_In/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_In -z_en_in.c diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c index ba51fb858..3a83564e5 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -224,7 +224,7 @@ s32 func_808F33B8(void) { s32 ret = (((gSaveContext.save.day == 1) && ((gSaveContext.save.time >= CLOCK_TIME(5, 30)) && (gSaveContext.save.time <= CLOCK_TIME(6, 0)))) || (gSaveContext.save.day >= 2)) && - !(gSaveContext.save.weekEventReg[22] & 1); + !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01); return ret; } @@ -238,7 +238,7 @@ void func_808F3414(EnIn* this, PlayState* play) { } if (SubS_AngleDiffLessEqual(this->actor.shape.rot.y, 0x2710, this->actor.yawTowardsPlayer)) { point.x = player->actor.world.pos.x; - point.y = player->bodyPartsPos[7].y + 3.0f; + point.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; point.z = player->actor.world.pos.z; SubS_TrackPoint(&point, &this->actor.focus.pos, &this->actor.shape.rot, &this->trackTarget, &this->headRot, &this->torsoRot, &sTrackOptions); @@ -336,7 +336,7 @@ void func_808F38F8(EnIn* this, PlayState* play) { } void func_808F395C(EnIn* this, PlayState* play) { - if (this->unk4B0 == RACE_FLAG_END) { + if (this->unk4B0 == WEEKEVENTREG_RACE_FLAG_END) { this->actionFunc = func_808F5A94; } if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -352,30 +352,30 @@ void func_808F39DC(EnIn* this, PlayState* play) { u16 textId = 0; if (gSaveContext.save.day != 3) { - switch (GET_RACE_FLAGS) { - case RACE_FLAG_2: + switch (GET_WEEKEVENTREG_RACE_FLAGS) { + case WEEKEVENTREG_RACE_FLAG_2: textId = 0x347A; break; - case RACE_FLAG_3: + case WEEKEVENTREG_RACE_FLAG_3: textId = 0x3476; break; } - SET_RACE_FLAGS(RACE_FLAG_END); + SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_END); } else { - switch (GET_RACE_FLAGS) { - case RACE_FLAG_2: + switch (GET_WEEKEVENTREG_RACE_FLAGS) { + case WEEKEVENTREG_RACE_FLAG_2: textId = 0x349D; break; - case RACE_FLAG_3: + case WEEKEVENTREG_RACE_FLAG_3: textId = 0x3499; break; } - SET_RACE_FLAGS(RACE_FLAG_END); + SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_END); } this->actor.flags |= ACTOR_FLAG_10000; this->actor.textId = textId; this->actionFunc = func_808F395C; - if (this->unk4B0 == RACE_FLAG_2) { + if (this->unk4B0 == WEEKEVENTREG_RACE_FLAG_2) { Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_IN_LOST); } else { Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_IN_JOY0); @@ -388,7 +388,7 @@ void func_808F3AD4(EnIn* this, PlayState* play) { this->unk48C = 1; this->actionFunc = func_808F5A94; } else { - func_800B85E0(&this->actor, play, 200.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); } } @@ -412,7 +412,7 @@ void func_808F3BD4(EnIn* this, PlayState* play) { this->unk48C = 1; this->actionFunc = func_808F5A94; } else { - func_800B85E0(&this->actor, play, 200.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); } } @@ -436,7 +436,7 @@ void func_808F3CD4(EnIn* this, PlayState* play) { this->unk48C = 1; this->actionFunc = func_808F5A94; } else { - func_800B85E0(&this->actor, play, 200.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); } } @@ -458,7 +458,7 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { u16 textId = 0; if (Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER) { - if (!(gSaveContext.save.weekEventReg[63] & 0x40)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) { textId = 0x34A9; } else if (this->unk4AC & 8) { textId = 0x34B1; @@ -475,14 +475,14 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { textId = 0x345C; } else if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { textId = 0x3460; - } else if (!(gSaveContext.save.weekEventReg[15] & 8)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_15_08)) { textId = 0x3458; } else { textId = 0x345B; } break; case 1: - if (!(gSaveContext.save.weekEventReg[15] & 0x10)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_15_10)) { textId = 0x3463; } else { textId = 0x346B; @@ -494,7 +494,7 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA || gSaveContext.save.playerForm == PLAYER_FORM_GORON) { textId = 0x3484; - } else if (!(gSaveContext.save.weekEventReg[56] & 4)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_56_04)) { textId = 0x346D; } else { textId = 0x3482; @@ -505,7 +505,7 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { textId = 0x348A; } else if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { textId = 0x348B; - } else if (!(gSaveContext.save.weekEventReg[16] & 1)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_16_01)) { textId = 0x3486; } else { textId = 0x3489; @@ -514,7 +514,7 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { case 5: if (func_808F33B8()) { textId = 0x34B3; - } else if (!(gSaveContext.save.weekEventReg[16] & 2)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_16_02)) { textId = 0x348E; } else { textId = 0x3493; @@ -526,7 +526,7 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA || gSaveContext.save.playerForm == PLAYER_FORM_GORON) { textId = 0x34A7; - } else if (!(gSaveContext.save.weekEventReg[16] & 4)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_16_04)) { textId = 0x3495; } else { textId = 0x34A5; @@ -578,7 +578,7 @@ s32 func_808F4150(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx) func_8019F208(); if (gSaveContext.save.playerData.rupees >= play->msgCtx.unk1206C) { Rupees_ChangeBy(-play->msgCtx.unk1206C); - if (!(gSaveContext.save.weekEventReg[57] & 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_57_01)) { func_808F4108(this, play, 0x3474); } else if (this->unk4AC & 8) { func_808F4108(this, play, 0x3475); @@ -604,7 +604,7 @@ s32 func_808F4270(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx, func_8019F208(); if (gSaveContext.save.playerData.rupees >= fee) { Rupees_ChangeBy(-fee); - if (!(gSaveContext.save.weekEventReg[57] & 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_57_01)) { if (arg4 != 0) { Actor_ContinueText(play, &this->actor, 0x3474); } else { @@ -635,7 +635,7 @@ s32 func_808F4270(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx, s32 func_808F43E0(EnIn* this) { this->unk48C = 0; this->actor.textId = 0; - SET_RACE_FLAGS(RACE_FLAG_END); + SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_END); return 0; } @@ -652,7 +652,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x34A9: func_808F4108(this, play, 0x34AA); - gSaveContext.save.weekEventReg[63] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_63_40); ret = false; break; case 0x34AA: @@ -683,7 +683,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0: switch (textId) { case 0x3458: - gSaveContext.save.weekEventReg[15] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_15_08); Actor_ContinueText(play, &this->actor, 0x3459); ret = false; break; @@ -732,7 +732,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 1: switch (textId) { case 0x3463: - gSaveContext.save.weekEventReg[15] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_15_10); Actor_ContinueText(play, &this->actor, 0x3464); ret = false; break; @@ -808,21 +808,21 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x3472: func_808F43E0(this); - gSaveContext.save.weekEventReg[56] &= (u8)~8; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); func_80151BB4(play, 0x11); ret = true; break; case 0x3473: - gSaveContext.save.weekEventReg[56] &= (u8)~8; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); func_80151BB4(play, 0x11); break; case 0x3475: - SET_RACE_FLAGS(RACE_FLAG_START); + SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_START); func_800FD750(NA_BGM_HORSE); play->nextEntrance = ENTRANCE(GORMAN_TRACK, 5); - play->transitionType = TRANS_TYPE_05; + play->transitionType = TRANS_TYPE_FADE_WHITE_FAST; play->transitionTrigger = TRANS_TRIGGER_START; - gSaveContext.save.weekEventReg[57] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_57_01); break; case 0x3478: if (msgCtx->choiceIndex == 0) { @@ -830,14 +830,14 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } else { func_8019F230(); - gSaveContext.save.weekEventReg[56] &= (u8)~8; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); func_808F4108(this, play, 0x3479); ret = false; } break; case 0x347B: func_808F4108(this, play, 0x347C); - gSaveContext.save.weekEventReg[56] &= (u8)~8; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; } @@ -846,8 +846,8 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { switch (textId) { case 0x346D: func_808F4108(this, play, 0x346E); - gSaveContext.save.weekEventReg[56] |= 4; - gSaveContext.save.weekEventReg[56] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_56_04); + SET_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; case 0x346F: @@ -856,7 +856,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x3482: func_808F4108(this, play, 0x3483); - gSaveContext.save.weekEventReg[56] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; case 0x3484: @@ -876,7 +876,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; break; case 0x3477: - gSaveContext.save.weekEventReg[56] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_56_08); func_808F4108(this, play, 0x3478); ret = false; break; @@ -887,7 +887,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { Actor_ContinueText(play, &this->actor, 0x347E); ret = false; } else { - gSaveContext.save.weekEventReg[56] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_56_08); func_808F4108(this, play, 0x347B); ret = false; } @@ -943,7 +943,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { switch (textId) { case 0x3486: Actor_ContinueText(play, &this->actor, 0x3487); - gSaveContext.save.weekEventReg[16] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_16_01); ret = false; break; case 0x3487: @@ -984,7 +984,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x348E: case 0x34B3: Actor_ContinueText(play, &this->actor, 0x348F); - gSaveContext.save.weekEventReg[16] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_16_02); ret = false; break; case 0x3493: @@ -1036,8 +1036,8 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x3495: func_808F4108(this, play, 0x3496); - gSaveContext.save.weekEventReg[16] |= 4; - gSaveContext.save.weekEventReg[56] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_16_04); + SET_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; case 0x3497: @@ -1052,11 +1052,11 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x34A5: func_808F4108(this, play, 0x34A6); - gSaveContext.save.weekEventReg[56] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; case 0x3473: - gSaveContext.save.weekEventReg[56] &= (u8)~8; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); func_80151BB4(play, 0x11); break; case 0x3474: @@ -1064,12 +1064,12 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; break; case 0x3475: - SET_RACE_FLAGS(RACE_FLAG_START); + SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_START); func_800FD750(NA_BGM_HORSE); play->nextEntrance = ENTRANCE(GORMAN_TRACK, 5); - play->transitionType = TRANS_TYPE_05; + play->transitionType = TRANS_TYPE_FADE_WHITE_FAST; play->transitionTrigger = TRANS_TRIGGER_START; - gSaveContext.save.weekEventReg[57] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_57_01); break; case 0x349D: EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_1); @@ -1078,7 +1078,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { Actor_ContinueText(play, &this->actor, 0x34A1); ret = false; } else { - gSaveContext.save.weekEventReg[56] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_56_08); func_808F4108(this, play, 0x349E); ret = false; } @@ -1161,13 +1161,13 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x3472: func_808F43E0(this); - gSaveContext.save.weekEventReg[56] &= (u8)~8; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); func_80151BB4(play, 0x11); ret = true; break; case 0x349E: func_808F4108(this, play, 0x349F); - gSaveContext.save.weekEventReg[56] &= (u8)~8; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; } @@ -1303,8 +1303,8 @@ void func_808F5A94(EnIn* this, PlayState* play) { void func_808F5B58(EnIn* this, PlayState* play) { if (func_800F41E4(play, &play->actorCtx)) { - if ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && gSaveContext.save.weekEventReg[63] & 0x40) || - gSaveContext.save.weekEventReg[56] & 8) { + if ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_56_08)) { if (gSaveContext.save.day == 3) { func_808F5728(play, this, 6, &this->unk48C); } else { @@ -1312,7 +1312,7 @@ void func_808F5B58(EnIn* this, PlayState* play) { } } } else if (Player_GetMask(play) != PLAYER_MASK_CIRCUS_LEADER || - (Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && gSaveContext.save.weekEventReg[63] & 0x40)) { + (Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40))) { if (gSaveContext.save.day == 3) { func_808F5728(play, this, 4, &this->unk48C); } else { @@ -1322,11 +1322,11 @@ void func_808F5B58(EnIn* this, PlayState* play) { } void func_808F5C98(EnIn* this, PlayState* play) { - if (this->unk4B0 == RACE_FLAG_END) { + if (this->unk4B0 == WEEKEVENTREG_RACE_FLAG_END) { this->actionFunc = func_808F5B58; } - if ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && gSaveContext.save.weekEventReg[63] & 0x40) || - gSaveContext.save.weekEventReg[56] & 8) { + if ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_56_08)) { if (gSaveContext.save.day != 3) { func_808F5728(play, this, 2, &this->unk48C); } else { @@ -1334,7 +1334,7 @@ void func_808F5C98(EnIn* this, PlayState* play) { } } if (this->unk4A8 == 2) { - if (this->unk4B0 == RACE_FLAG_2) { + if (this->unk4B0 == WEEKEVENTREG_RACE_FLAG_2) { Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_IN_LOST); } else { Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_IN_JOY0); @@ -1366,7 +1366,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) { this->unk48C = 0; this->unk4AC = 0; type = ENIN_GET_TYPE(thisx); - this->unk4B0 = GET_RACE_FLAGS; + this->unk4B0 = GET_WEEKEVENTREG_RACE_FLAGS; if (type == ENIN_HORSE_RIDER_BLUE_SHIRT || type == ENIN_BLUE_SHIRT) { this->unk4AC |= 8; } @@ -1387,19 +1387,21 @@ void EnIn_Init(Actor* thisx, PlayState* play) { this->path = SubS_GetPathByIndex(play, ENIN_GET_PATH(&this->actor), 0x3F); this->unk23D = 0; if (type == ENIN_YELLOW_SHIRT || type == ENIN_BLUE_SHIRT) { - if (GET_RACE_FLAGS == RACE_FLAG_2 || GET_RACE_FLAGS == RACE_FLAG_3) { - gSaveContext.save.weekEventReg[56] &= (u8)~8; + if ((GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_2) || + (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_3)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); this->unk4A8 = 0; this->unk4AC |= 2; func_808F35AC(this, play); this->unk23C = 0; D_801BDAA0 = 0; - if (GET_RACE_FLAGS == RACE_FLAG_2) { + + if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_2) { EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_6); } else { EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_4); } - if (GET_RACE_FLAGS == RACE_FLAG_2) { + if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_2) { this->skelAnime.curFrame = ((Rand_ZeroOne() * 0.6f) + 0.2f) * this->skelAnime.endFrame; } if (this->unk4AC & 8) { @@ -1408,8 +1410,8 @@ void EnIn_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_808F5C98; } } else { - if (GET_RACE_FLAGS != RACE_FLAG_START) { - gSaveContext.save.weekEventReg[56] &= (u8)~8; + if (GET_WEEKEVENTREG_RACE_FLAGS != WEEKEVENTREG_RACE_FLAG_START) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); this->unk23C = 0; this->unk4AC |= 2; if (type == ENIN_BLUE_SHIRT) { @@ -1417,7 +1419,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) { EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_0); this->actionFunc = func_808F5A94; } else { - if (gSaveContext.save.weekEventReg[52] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_KANBAN, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, this->actor.shape.rot.x, this->actor.shape.rot.y, this->actor.shape.rot.z, 0xF); @@ -1428,7 +1430,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) { } } } else { - if (gSaveContext.save.weekEventReg[52] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { Actor_Kill(&this->actor); } else { EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_7); @@ -1479,7 +1481,7 @@ void func_808F6334(EnIn* this, PlayState* play) { this->unk4C4 = CLAMP(this->unk4C4, 0.0f, 80.0f); Matrix_Translate(this->unk4C4, 0.0f, 0.0f, MTXMODE_APPLY); - if ((&this->actor == player->targetActor) && + if ((&this->actor == player->talkActor) && !((play->msgCtx.currentTextId >= 0xFF) && (play->msgCtx.currentTextId <= 0x200)) && (talkState == TEXT_STATE_3) && (this->prevTalkState == TEXT_STATE_3)) { if (!(play->state.frames & 1)) { diff --git a/src/overlays/actors/ovl_En_Insect/overlay.cfg b/src/overlays/actors/ovl_En_Insect/overlay.cfg deleted file mode 100644 index f439a7c1b..000000000 --- a/src/overlays/actors/ovl_En_Insect/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Insect -z_en_insect.c diff --git a/src/overlays/actors/ovl_En_Invadepoh/overlay.cfg b/src/overlays/actors/ovl_En_Invadepoh/overlay.cfg deleted file mode 100644 index a05f98b61..000000000 --- a/src/overlays/actors/ovl_En_Invadepoh/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Invadepoh -z_en_invadepoh.c diff --git a/src/overlays/actors/ovl_En_Invadepoh/z_en_invadepoh.c b/src/overlays/actors/ovl_En_Invadepoh/z_en_invadepoh.c index e669102a3..f1ebe1bb2 100644 --- a/src/overlays/actors/ovl_En_Invadepoh/z_en_invadepoh.c +++ b/src/overlays/actors/ovl_En_Invadepoh/z_en_invadepoh.c @@ -3,7 +3,7 @@ * Overlay: ovl_En_Invadepoh * Description: Ranch nighttime actors */ - +#include "prevent_bss_reordering.h" #include "z_en_invadepoh.h" #include "overlays/actors/ovl_En_Door/z_en_door.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -830,7 +830,7 @@ s32 func_80B440B8(EnInvadepoh* this, f32 arg1, f32 arg2) { sp40 = temp_a3->x - sp48->x; sp3C = temp_a3->z - sp48->z; - sp1E = Math_FAtan2F(sp3C, sp40); + sp1E = Math_Atan2S_XY(sp3C, sp40); sp38 = Math_CosS(sp1E); sp34 = Math_SinS(sp1E); sp30 = this->actor.world.pos.x - sp48->x; @@ -1160,8 +1160,8 @@ s32 func_80B44C80(EnInvadepoh* this, PlayState* play) { } Math_SmoothStepToS(&this->actor.world.rot.y, - Math_FAtan2F(((sp60.z + temp_f0_2) * 0.9f) + sp6C.z, ((sp60.x + temp_f0_3) * 0.9f) + sp6C.x), 4, - 0xFA0, 0x64); + Math_Atan2S_XY(((sp60.z + temp_f0_2) * 0.9f) + sp6C.z, ((sp60.x + temp_f0_3) * 0.9f) + sp6C.x), + 4, 0xFA0, 0x64); Actor_MoveWithGravity(&this->actor); if (func_80B440B8(this, 50.0f, 15.0f)) { phi_v0 = 4; @@ -1283,7 +1283,7 @@ void func_80B451A0(EnInvadepoh* this, PlayState* play) { } if (D_80B4E940 == 0) { - if (gSaveContext.save.weekEventReg[22] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { D_80B4E940 = 3; } else { D_80B4E940 = 4; @@ -1745,8 +1745,9 @@ void EnInvadepoh_InitRomani(EnInvadepoh* this, PlayState* play) { if (this->bankIndex < 0) { Actor_Kill(&this->actor); } + if (temp == 5) { - if (gSaveContext.save.weekEventReg[22] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { Actor_Kill(&this->actor); return; } @@ -1762,7 +1763,7 @@ void EnInvadepoh_InitRomani(EnInvadepoh* this, PlayState* play) { return; } } else if (temp == 0xC) { - if (!(gSaveContext.save.weekEventReg[22] & 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { Actor_Kill(&this->actor); } D_80B503F4 = this; @@ -1817,7 +1818,7 @@ void EnInvadepoh_InitCremia(EnInvadepoh* this, PlayState* play) { if (this->bankIndex < 0) { Actor_Kill(&this->actor); } - if (!(gSaveContext.save.weekEventReg[22] & 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { Actor_Kill(&this->actor); } D_80B503F8 = this; @@ -1954,7 +1955,7 @@ void func_80B46FA8(EnInvadepoh* this, PlayState* play) { s32 i; if ((gSaveContext.save.time < CLOCK_TIME(6, 0)) && (gSaveContext.save.time >= CLOCK_TIME(5, 15))) { - gSaveContext.save.weekEventReg[22] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_22_01); func_80B47064(this); } else { func_80B457A0(this); @@ -2039,7 +2040,7 @@ void func_80B47298(EnInvadepoh* this, PlayState* play) { play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_72; gSaveContext.nextTransitionType = TRANS_TYPE_72; - gSaveContext.save.weekEventReg[89] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_89_10); func_80B47304(this); } @@ -3015,7 +3016,7 @@ void func_80B49C38(EnInvadepoh* this, PlayState* play) { if (this->unk378 == 0) { temp_v0_2 = func_800FE620(play); if (temp_v0_2 > 0) { - temp_v0_2 = (REG(15) * -16.0f / temp_v0_2) - 0.5f; + temp_v0_2 = (R_TIME_SPEED * -16.0f / temp_v0_2) - 0.5f; this->unk378 = func_80B45550(this, play, SQ(80.0f), temp_v0_2); } } @@ -3059,7 +3060,7 @@ void func_80B49DFC(EnInvadepoh* this, PlayState* play) { substruct->unk26.y = CLAMP(temp_v1, -0x1F40, 0x1F40); if (Actor_TextboxIsClosing(&this->actor, play)) { if (this->actor.textId == 0x332D) { - gSaveContext.save.weekEventReg[54] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_54_10); this->actor.textId = 0x332E; } func_80B49BD0(this); @@ -3084,8 +3085,8 @@ void func_80B49F88(Actor* thisx, PlayState* play) { func_80B44C24(this, play); func_80B43F0C(this); func_80B4516C(this); - if (0x20 & gSaveContext.save.weekEventReg[21]) { - if (gSaveContext.save.weekEventReg[54] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_10)) { this->actor.textId = 0x332E; } else { this->actor.textId = 0x332D; @@ -3286,7 +3287,7 @@ void func_80B4A81C(EnInvadepoh* this, PlayState* play) { if (Actor_TextboxIsClosing(&this->actor, play)) { if (this->actor.textId == 0x332D) { - gSaveContext.save.weekEventReg[54] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_54_10); this->actor.textId = 0x332E; } if (this->pathIndex == this->endPoint) { @@ -3325,8 +3326,8 @@ void func_80B4A9C8(Actor* thisx, PlayState* play) { func_80B43F0C(this); func_800B4AEC(play, &this->actor, 50.0f); func_80B4516C(this); - if (gSaveContext.save.weekEventReg[21] & 0x20) { - if (gSaveContext.save.weekEventReg[54] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_10)) { this->actor.textId = 0x332E; } else { this->actor.textId = 0x332D; @@ -3374,7 +3375,7 @@ void func_80B4ACDC(EnInvadepoh* this) { } void func_80B4ACF0(EnInvadepoh* this, PlayState* play) { - if (gSaveContext.save.weekEventReg[22] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { this->actor.draw = func_80B4E324; this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); func_80B4AD3C(this); @@ -3402,7 +3403,7 @@ void func_80B4ADB8(EnInvadepoh* this) { void func_80B4ADCC(EnInvadepoh* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->textId == 0x3331) { - if (gSaveContext.save.weekEventReg[22] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_02)) { EnInvadepoh_SetTextID(this, play, 0x3334); func_80151BB4(play, 0x1D); func_80151BB4(play, 5); @@ -3434,7 +3435,7 @@ void func_80B4AEDC(EnInvadepoh* this, PlayState* play) { } if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; - gSaveContext.save.weekEventReg[22] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_22_02); func_80B4AF80(this); } else { Actor_PickUp(&this->actor, play, GI_MILK_BOTTLE, 2000.0f, 2000.0f); @@ -3453,7 +3454,7 @@ void func_80B4AF94(EnInvadepoh* this, PlayState* play) { func_80151BB4(play, 5); func_80B4ADB8(this); } else { - func_800B85E0(&this->actor, play, 2000.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 2000.0f, PLAYER_IA_MINUS1); } } @@ -3967,7 +3968,7 @@ void func_80B4C730(EnInvadepoh* this, PlayState* play) { if (this->unk378 == 0) { temp_v0_2 = func_800FE620(play); if (temp_v0_2 > 0) { - temp_v0_2 = (REG(15) * -23.0f / temp_v0_2) - 0.5f; + temp_v0_2 = (R_TIME_SPEED * -23.0f / temp_v0_2) - 0.5f; this->unk378 = func_80B45550(this, play, SQ(80.0f), temp_v0_2); } } @@ -4525,7 +4526,7 @@ void func_80B4E3F0(Actor* thisx, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(POLY_XLU_DISP++, 0xFF, 0x80, 255, 255, 0, 180); gDPSetEnvColor(POLY_XLU_DISP++, 255, 50, 0, 0); - gSPDisplayList(POLY_XLU_DISP++, gOwlStatueWhiteFlashDL); + gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); if (func_80B456A8(play, &sp5C)) { func_800F9824(play, &play->envCtx, &play->view, play->state.gfxCtx, sp5C, 20.0f, 9.0f, 0, 0); } diff --git a/src/overlays/actors/ovl_En_Invadepoh_Demo/overlay.cfg b/src/overlays/actors/ovl_En_Invadepoh_Demo/overlay.cfg deleted file mode 100644 index 192412f5f..000000000 --- a/src/overlays/actors/ovl_En_Invadepoh_Demo/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Invadepoh_Demo -z_en_invadepoh_demo.c diff --git a/src/overlays/actors/ovl_En_Invisible_Ruppe/overlay.cfg b/src/overlays/actors/ovl_En_Invisible_Ruppe/overlay.cfg deleted file mode 100644 index 18c1eed56..000000000 --- a/src/overlays/actors/ovl_En_Invisible_Ruppe/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Invisible_Ruppe -z_en_invisible_ruppe.c diff --git a/src/overlays/actors/ovl_En_Ishi/overlay.cfg b/src/overlays/actors/ovl_En_Ishi/overlay.cfg deleted file mode 100644 index 689d8deb5..000000000 --- a/src/overlays/actors/ovl_En_Ishi/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ishi -z_en_ishi.c diff --git a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c index f0d7f380a..f911bc4f4 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c @@ -318,7 +318,7 @@ void func_8095DFF0(EnIshi* this, PlayState* play) { Matrix_MultVecY(1.0f, &sp30); sp2C = Math3D_Parallel(&sp30, &D_8095F778); if (sp2C < 0.707f) { - temp_v1_2 = Math_FAtan2F(sp30.z, sp30.x) - sp3C->world.rot.y; + temp_v1_2 = Math_Atan2S_XY(sp30.z, sp30.x) - sp3C->world.rot.y; if (ABS_ALT(temp_v1_2) > 0x4000) { sp3C->world.rot.y = BINANG_ROT180(sp3C->world.rot.y); } diff --git a/src/overlays/actors/ovl_En_Ja/overlay.cfg b/src/overlays/actors/ovl_En_Ja/overlay.cfg deleted file mode 100644 index aab759e94..000000000 --- a/src/overlays/actors/ovl_En_Ja/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ja -z_en_ja.c diff --git a/src/overlays/actors/ovl_En_Ja/z_en_ja.c b/src/overlays/actors/ovl_En_Ja/z_en_ja.c index 2a1e7f725..39a28c4bd 100644 --- a/src/overlays/actors/ovl_En_Ja/z_en_ja.c +++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.c @@ -177,7 +177,7 @@ s32 func_80BC1B60(EnJa* this, PlayState* play) { this->unk_35A = CLAMP(this->unk_35A, -0x1C70, 0x1C70); if (this->unk_1D8.player->actor.id == ACTOR_PLAYER) { - sp40.y = this->unk_1D8.player->bodyPartsPos[7].y + 3.0f; + sp40.y = this->unk_1D8.player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; } else { Math_Vec3f_Copy(&sp40, &this->unk_1D8.player->actor.focus.pos); } @@ -220,7 +220,7 @@ void func_80BC1E40(EnJa* this, PlayState* play) { f32 phi_f0; if (((play->msgCtx.currentTextId < 0xFF) || (play->msgCtx.currentTextId > 0x200)) && (talkState == TEXT_STATE_3) && - (this->prevTalkState == TEXT_STATE_3) && (&this->actor == player->targetActor)) { + (this->prevTalkState == TEXT_STATE_3) && (&this->actor == player->talkActor)) { if ((play->state.frames % 2) == 0) { if (this->unk_348 != 0.0f) { this->unk_348 = 0.0f; @@ -301,7 +301,7 @@ void func_80BC2150(EnJa* this, PlayState* play) { void func_80BC21A8(EnJa* this, PlayState* play) { ScheduleOutput sp18; - this->unk_35C = REG(15) + ((void)0, gSaveContext.save.daySpeed); + this->unk_35C = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, D_80BC35F0, &sp18) || ((this->unk_1D8.unk_00 != sp18.result) && !func_80BC20D0(this, play, &sp18))) { this->actor.shape.shadowDraw = NULL; @@ -385,7 +385,7 @@ void EnJa_Update(Actor* thisx, PlayState* play) { radius = this->collider.dim.radius + 30; height = this->collider.dim.height + 10; - func_8013C964(&this->actor, play, radius, height, PLAYER_AP_NONE, this->unk_340 & 7); + func_8013C964(&this->actor, play, radius, height, PLAYER_IA_NONE, this->unk_340 & 7); if (this->unk_1D8.unk_00 != 2) { Actor_MoveWithGravity(&this->actor); diff --git a/src/overlays/actors/ovl_En_Jc_Mato/overlay.cfg b/src/overlays/actors/ovl_En_Jc_Mato/overlay.cfg deleted file mode 100644 index 361e01617..000000000 --- a/src/overlays/actors/ovl_En_Jc_Mato/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Jc_Mato -z_en_jc_mato.c diff --git a/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c b/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c index 181b88e4f..03cc41f20 100644 --- a/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c +++ b/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c @@ -94,7 +94,7 @@ s32 EnJcMato_CheckForHit(EnJcMato* this, PlayState* play) { if ((this->collider.base.acFlags & AC_HIT) && !this->hitFlag && (this->actor.colChkInfo.damageEffect == 0xF)) { this->collider.base.acFlags &= ~AC_HIT; Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR); - play->interfaceCtx.unk_25C = 1; + play->interfaceCtx.minigamePoints = 1; this->hitFlag = true; return 1; } else { @@ -140,7 +140,7 @@ void EnJcMato_Update(Actor* thisx, PlayState* play) { EnJcMato* this = THIS; this->actionFunc(this, play); - if (!(gSaveContext.eventInf[4] & 1)) { + if (!CHECK_EVENTINF(EVENTINF_40)) { EnJcMato_CheckForHit(this, play); } } diff --git a/src/overlays/actors/ovl_En_Jg/overlay.cfg b/src/overlays/actors/ovl_En_Jg/overlay.cfg deleted file mode 100644 index a60b43afc..000000000 --- a/src/overlays/actors/ovl_En_Jg/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Jg -z_en_jg.c diff --git a/src/overlays/actors/ovl_En_Jg/z_en_jg.c b/src/overlays/actors/ovl_En_Jg/z_en_jg.c index 259d58b18..e7c2ad78d 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -214,7 +214,7 @@ s16 EnJg_GetWalkingYRotation(Path* path, s32 pointIndex, Vec3f* pos, f32* distSQ *distSQ = SQ(diffX) + SQ(diffZ); - return RADF_TO_BINANG(Math_Acot2F(diffZ, diffX)); + return RADF_TO_BINANG(Math_Atan2F_XY(diffZ, diffX)); } s32 EnJg_ReachedPoint(EnJg* this, Path* path, s32 pointIndex) { @@ -493,14 +493,14 @@ void EnJg_Talk(EnJg* this, PlayState* play) { temp = this->textId; if ((temp == 0xDBB) || (temp == 0xDBC)) { - if (!(gSaveContext.save.weekEventReg[24] & 0x80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_24_80)) { // The player hasn't talked to the Goron Child at least once, so they can't learn // the Lullaby Intro. End the current conversation with the player. play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; this->flags &= ~FLAG_LOOKING_AT_PLAYER; this->actionFunc = EnJg_SetupWalk; - } else if (((gSaveContext.save.weekEventReg[24] & 0x40)) || + } else if ((CHECK_WEEKEVENTREG(WEEKEVENTREG_24_40)) || (CHECK_QUEST_ITEM(QUEST_SONG_LULLABY) || CHECK_QUEST_ITEM(QUEST_SONG_LULLABY_INTRO))) { // The player already has the Lullaby or Lullaby Intro, so say "I'm counting on you" this->textId = EnJg_GetNextTextId(this); @@ -700,7 +700,7 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) { } else { this->csAction = 99; this->freezeTimer = 1000; - gSaveContext.save.weekEventReg[24] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_24_40); this->actionFunc = EnJg_Idle; } } @@ -830,7 +830,7 @@ s32 EnJg_GetNextTextId(EnJg* this) { return 0xDDC; // Everyone would accept you case 0xDDC: // Everyone would accept you - gSaveContext.save.weekEventReg[77] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_77_80); return 0xDDD; // Think it over slowly default: @@ -848,7 +848,7 @@ s32 EnJg_GetStartingConversationTextId(EnJg* this, PlayState* play) { if (!EN_JG_IS_IN_GORON_SHRINE(&this->actor)) { if (player->transformation == PLAYER_FORM_GORON) { - if ((gSaveContext.save.weekEventReg[24] & 0x10) || CHECK_QUEST_ITEM(QUEST_SONG_LULLABY) || + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_10) || CHECK_QUEST_ITEM(QUEST_SONG_LULLABY) || CHECK_QUEST_ITEM(QUEST_SONG_LULLABY_INTRO)) { // The player has already talked as a Goron at least once. return 0xDBC; // Following me won't do you any good @@ -858,7 +858,7 @@ s32 EnJg_GetStartingConversationTextId(EnJg* this, PlayState* play) { return 0xDB6; // "Hunh???" } - if (gSaveContext.save.weekEventReg[24] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_20)) { // The player has already talked as a non-Goron at least once. return 0xDB5; // This is our problem (repeat) } @@ -868,7 +868,7 @@ s32 EnJg_GetStartingConversationTextId(EnJg* this, PlayState* play) { } if (player->transformation == PLAYER_FORM_GORON) { - if (gSaveContext.save.weekEventReg[77] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_80)) { // The player has heard the Goron Shrine cheer as a Goron at least once. return 0xDDE; // Come back after entering the race } @@ -908,9 +908,9 @@ void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play if (this->textId == 0xDAC) { this->action = EN_JG_ACTION_FIRST_THAW; } else if (this->textId == 0xDAE) { - gSaveContext.save.weekEventReg[24] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_24_20); } else if (this->textId == 0xDB6) { - gSaveContext.save.weekEventReg[24] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_24_10); } Message_StartTextbox(play, this->textId, &this->actor); diff --git a/src/overlays/actors/ovl_En_Jgame_Tsn/overlay.cfg b/src/overlays/actors/ovl_En_Jgame_Tsn/overlay.cfg deleted file mode 100644 index 9d3fbbf9d..000000000 --- a/src/overlays/actors/ovl_En_Jgame_Tsn/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Jgame_Tsn -z_en_jgame_tsn.c diff --git a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c index 6f313f0d2..2db753d01 100644 --- a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c +++ b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c @@ -141,7 +141,7 @@ void EnJgameTsn_Destroy(Actor* thisx, PlayState* play) { EnJgameTsn* this = THIS; Collider_DestroyCylinder(play, &this->collider); - gSaveContext.save.weekEventReg[90] &= (u8)~0x20; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_20); } void func_80C13B74(EnJgameTsn* this) { @@ -284,9 +284,9 @@ void func_80C1410C(EnJgameTsn* this, PlayState* play) { player->stateFlags1 |= PLAYER_STATE1_20; func_801A2BB8(0x25); - play->interfaceCtx.unk_280 = 1; - func_80112AFC(play); - gSaveContext.save.weekEventReg[90] |= 0x20; + play->interfaceCtx.minigameState = MINIGAME_STATE_COUNTDOWN_SETUP_3; + Interface_InitMinigame(play); + SET_WEEKEVENTREG(WEEKEVENTREG_90_20); Interface_StartTimer(TIMER_ID_MINIGAME_2, 120); this->actionFunc = func_80C1418C; } @@ -294,7 +294,7 @@ void func_80C1410C(EnJgameTsn* this, PlayState* play) { void func_80C1418C(EnJgameTsn* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (play->interfaceCtx.unk_280 == 8) { + if (play->interfaceCtx.minigameState == MINIGAME_STATE_COUNTDOWN_GO) { func_80C141DC(this); player->stateFlags1 &= ~PLAYER_STATE1_20; } @@ -370,7 +370,7 @@ void func_80C144F8(EnJgameTsn* this, PlayState* play) { play->nextEntrance = ENTRANCE(GREAT_BAY_COAST, 13); play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_80; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; } void func_80C14540(EnJgameTsn* this) { @@ -379,11 +379,11 @@ void func_80C14540(EnJgameTsn* this) { void func_80C14554(EnJgameTsn* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { - if (!(gSaveContext.save.weekEventReg[82] & 0x10)) { - gSaveContext.save.weekEventReg[82] |= 0x10; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_82_10)) { + SET_WEEKEVENTREG(WEEKEVENTREG_82_10); } func_80C145FC(this); - } else if (gSaveContext.save.weekEventReg[82] & 0x10) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_82_10)) { Actor_PickUp(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f); } else { Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f); @@ -478,9 +478,9 @@ void func_80C147B4(EnJgameTsn* this, PlayState* play) { case 0x10A0: case 0x10A1: func_801477B4(play); - gSaveContext.minigameState = 3; + gSaveContext.minigameStatus = MINIGAME_STATUS_END; gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_STOP; - gSaveContext.save.weekEventReg[90] &= (u8)~0x20; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_20); func_80C144E4(this); break; @@ -563,14 +563,14 @@ s32 func_80C14BCC(EnJgameTsn* this, PlayState* play) { if (phi_s3 == this->unk_218) { Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR); *this->unk_208[phi_s3] |= OBJLUPYGAMELIFT_DISPLAY_CORRECT; - play->interfaceCtx.unk_25C = 1; + play->interfaceCtx.minigamePoints = 1; return true; } if (*this->unk_208[phi_s3] & OBJLUPYGAMELIFT_IGNITE_FIRE) { Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR); *this->unk_208[phi_s3] |= OBJLUPYGAMELIFT_DISPLAY_CORRECT; - play->interfaceCtx.unk_25C = 1; + play->interfaceCtx.minigamePoints = 1; } else { *this->unk_208[phi_s3] |= OBJLUPYGAMELIFT_DISPLAY_INCORRECT; Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_ERROR); diff --git a/src/overlays/actors/ovl_En_Js/overlay.cfg b/src/overlays/actors/ovl_En_Js/overlay.cfg deleted file mode 100644 index 6923c80b4..000000000 --- a/src/overlays/actors/ovl_En_Js/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Js -z_en_js.c diff --git a/src/overlays/actors/ovl_En_Js/z_en_js.c b/src/overlays/actors/ovl_En_Js/z_en_js.c index 51296413e..ecfaa6b8b 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -110,11 +110,11 @@ void EnJs_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_8096A6F4; Animation_PlayLoop(&this->skelAnime, &gMoonChildSittingAnim); - func_8016566C(0x3C); + Play_EnableMotionBlur(60); - if (gSaveContext.save.weekEventReg[84] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_20)) { Inventory_DeleteItem(ITEM_MASK_FIERCE_DEITY, SLOT(ITEM_MASK_FIERCE_DEITY)); - gSaveContext.save.weekEventReg[84] &= (u8)~0x20; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_84_20); } break; case 1: @@ -151,7 +151,7 @@ void EnJs_Destroy(Actor* thisx, PlayState* play) { paramsF = ENJS_GET_TYPE(&this->actor); switch (paramsF) { case 0: - func_80165690(); + Play_DisableMotionBlur(); break; case 5: case 6: @@ -372,34 +372,34 @@ s32 EnJs_GetRemainingMasks(void) { return count; } -void EnJs_TakeMask(s32 actionParams, s32 childType) { +void EnJs_TakeMask(s32 itemActions, s32 childType) { u8* masksGivenOnMoon = gSaveContext.masksGivenOnMoon; s32 temp = 0; if ((childType >= 0) && (childType < 9)) { - actionParams -= PLAYER_AP_MASK_TRUTH; + itemActions -= PLAYER_IA_MASK_TRUTH; childType *= 3; - if (actionParams < 8) { - masksGivenOnMoon[childType] |= 1 << actionParams; - masksGivenOnMoon[temp] |= 1 << actionParams; + if (itemActions < 8) { + masksGivenOnMoon[childType] |= 1 << itemActions; + masksGivenOnMoon[temp] |= 1 << itemActions; return; } - actionParams -= 8; + itemActions -= 8; childType++; temp++; - if (actionParams < 8) { - masksGivenOnMoon[childType] |= 1 << actionParams; - masksGivenOnMoon[temp] |= 1 << actionParams; + if (itemActions < 8) { + masksGivenOnMoon[childType] |= 1 << itemActions; + masksGivenOnMoon[temp] |= 1 << itemActions; return; } - actionParams -= 8; + itemActions -= 8; childType++; temp++; - if (actionParams < 6) { - masksGivenOnMoon[childType] |= 1 << actionParams; - masksGivenOnMoon[temp] |= 1 << actionParams; + if (itemActions < 6) { + masksGivenOnMoon[childType] |= 1 << itemActions; + masksGivenOnMoon[temp] |= 1 << itemActions; } } } @@ -529,34 +529,36 @@ void func_8096971C(EnJs* this, PlayState* play) { } void func_80969748(EnJs* this, PlayState* play) { - s32 itemActionParam; + PlayerItemAction itemAction; Player* player = GET_PLAYER(play); SkelAnime_Update(&this->skelAnime); Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 6, 0x1838, 0x64); this->actor.shape.rot.y = this->actor.world.rot.y; if (Message_GetState(&play->msgCtx) == TEXT_STATE_16) { - itemActionParam = func_80123810(play); - if (itemActionParam != PLAYER_AP_NONE) { + itemAction = func_80123810(play); + + if (itemAction != PLAYER_IA_NONE) { this->actionFunc = func_80969898; } - if (itemActionParam > PLAYER_AP_NONE) { + if (itemAction > PLAYER_IA_NONE) { func_801477B4(play); - if ((itemActionParam >= PLAYER_AP_MASK_TRUTH) && (itemActionParam <= PLAYER_AP_MASK_GIANT)) { - EnJs_TakeMask(itemActionParam, ENJS_GET_TYPE(&this->actor)); - Inventory_UnequipItem(itemActionParam - 4); + if ((itemAction >= PLAYER_IA_MASK_TRUTH) && (itemAction <= PLAYER_IA_MASK_GIANT)) { + EnJs_TakeMask(itemAction, ENJS_GET_TYPE(&this->actor)); + Inventory_UnequipItem(itemAction - 4); if (!func_809692A8(ENJS_GET_TYPE(&this->actor))) { player->actor.textId = 0x2212; } else { player->actor.textId = 0x2213; } - } else if ((itemActionParam >= PLAYER_AP_MASK_FIERCE_DEITY) && (itemActionParam <= PLAYER_AP_MASK_DEKU)) { + } else if ((itemAction >= PLAYER_IA_MASK_FIERCE_DEITY) && (itemAction <= PLAYER_IA_MASK_DEKU)) { player->actor.textId = 0x2211; } else { player->actor.textId = 0x2210; } } - if (itemActionParam <= PLAYER_AP_MINUS1) { + + if (itemAction <= PLAYER_IA_MINUS1) { func_80151938(play, 0x2216); } } @@ -606,7 +608,7 @@ void func_80969898(EnJs* this, PlayState* play) { case 0x2210: case 0x2211: case 0x2212: - player->exchangeItemId = PLAYER_AP_NONE; + player->exchangeItemId = PLAYER_IA_NONE; func_80151938(play, 0xFF); this->actionFunc = func_80969748; break; @@ -675,34 +677,37 @@ void func_80969B5C(EnJs* this, PlayState* play) { } void func_80969C54(EnJs* this, PlayState* play) { - s32 itemActionParam; + PlayerItemAction itemAction; Player* player = GET_PLAYER(play); SkelAnime_Update(&this->skelAnime); Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 6, 0x1838, 0x64); this->actor.shape.rot.y = this->actor.world.rot.y; if (Message_GetState(&play->msgCtx) == TEXT_STATE_16) { - itemActionParam = func_80123810(play); - if (itemActionParam != PLAYER_AP_NONE) { + itemAction = func_80123810(play); + + if (itemAction != PLAYER_IA_NONE) { this->actionFunc = func_80969DA4; } - if (itemActionParam > PLAYER_AP_NONE) { + + if (itemAction > PLAYER_IA_NONE) { func_801477B4(play); - if ((itemActionParam >= PLAYER_AP_MASK_TRUTH) && (itemActionParam <= PLAYER_AP_MASK_GIANT)) { - EnJs_TakeMask(itemActionParam, ENJS_GET_TYPE(&this->actor)); - Inventory_UnequipItem(itemActionParam - 4); + if ((itemAction >= PLAYER_IA_MASK_TRUTH) && (itemAction <= PLAYER_IA_MASK_GIANT)) { + EnJs_TakeMask(itemAction, ENJS_GET_TYPE(&this->actor)); + Inventory_UnequipItem(itemAction - 4); if (!func_809692A8(ENJS_GET_TYPE(&this->actor))) { player->actor.textId = 0x2221; } else { player->actor.textId = 0x2222; } - } else if ((itemActionParam >= PLAYER_AP_MASK_FIERCE_DEITY) && (itemActionParam <= PLAYER_AP_MASK_DEKU)) { + } else if ((itemAction >= PLAYER_IA_MASK_FIERCE_DEITY) && (itemAction <= PLAYER_IA_MASK_DEKU)) { player->actor.textId = 0x2220; } else { player->actor.textId = 0x221D; } } - if (itemActionParam <= PLAYER_AP_MINUS1) { + + if (itemAction <= PLAYER_IA_MINUS1) { func_80151938(play, 0x221E); } } @@ -760,7 +765,7 @@ void func_80969DA4(EnJs* this, PlayState* play) { } break; case 0x2222: - player->exchangeItemId = PLAYER_AP_NONE; + player->exchangeItemId = PLAYER_IA_NONE; func_80151938(play, play->msgCtx.currentTextId + 1); break; case 0x2223: @@ -786,7 +791,7 @@ void func_80969DA4(EnJs* this, PlayState* play) { case 0x221D: case 0x2220: case 0x2221: - player->exchangeItemId = PLAYER_AP_NONE; + player->exchangeItemId = PLAYER_IA_NONE; func_80151938(play, 0xFF); this->actionFunc = func_80969C54; break; @@ -850,10 +855,10 @@ void func_8096A1E8(EnJs* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10000; this->actionFunc = func_8096A38C; Message_StartTextbox(play, 0x2208, &this->actor); - gSaveContext.save.weekEventReg[84] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_84_20); func_809696EC(this, 0); } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -865,7 +870,7 @@ void func_8096A2C0(EnJs* this, PlayState* play) { this->actor.parent = NULL; this->actor.flags |= ACTOR_FLAG_10000; this->actionFunc = func_8096A1E8; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { Actor_PickUp(&this->actor, play, GI_MASK_FIERCE_DEITY, 10000.0f, 1000.0f); } diff --git a/src/overlays/actors/ovl_En_Jso/overlay.cfg b/src/overlays/actors/ovl_En_Jso/overlay.cfg deleted file mode 100644 index 050d8bc67..000000000 --- a/src/overlays/actors/ovl_En_Jso/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Jso -z_en_jso.c diff --git a/src/overlays/actors/ovl_En_Jso2/overlay.cfg b/src/overlays/actors/ovl_En_Jso2/overlay.cfg deleted file mode 100644 index 907202195..000000000 --- a/src/overlays/actors/ovl_En_Jso2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Jso2 -z_en_jso2.c diff --git a/src/overlays/actors/ovl_En_Kaizoku/overlay.cfg b/src/overlays/actors/ovl_En_Kaizoku/overlay.cfg deleted file mode 100644 index 4f77e7de7..000000000 --- a/src/overlays/actors/ovl_En_Kaizoku/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Kaizoku -z_en_kaizoku.c diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c index 3057328ce..70ca7313a 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -12,43 +12,141 @@ void EnKaizoku_Init(Actor* thisx, PlayState* play); void EnKaizoku_Destroy(Actor* thisx, PlayState* play); -void EnKaizoku_Update(Actor* thisx, PlayState* play); +void EnKaizoku_Update(Actor* thisx, PlayState* play2); +void EnKaizoku_Draw(Actor* thisx, PlayState* play); -#if 0 -// static DamageTable sDamageTable = { -static DamageTable D_80B8AB3C = { - /* Deku Nut */ DMG_ENTRY(0, 0x1), - /* Deku Stick */ DMG_ENTRY(1, 0xF), - /* Horse trample */ DMG_ENTRY(0, 0x0), - /* Explosives */ DMG_ENTRY(1, 0xF), - /* Zora boomerang */ DMG_ENTRY(0, 0x1), - /* Normal arrow */ DMG_ENTRY(1, 0xF), - /* UNK_DMG_0x06 */ DMG_ENTRY(0, 0x0), - /* Hookshot */ DMG_ENTRY(0, 0x1), - /* Goron punch */ DMG_ENTRY(1, 0xE), - /* Sword */ DMG_ENTRY(1, 0xE), - /* Goron pound */ DMG_ENTRY(0, 0xD), - /* Fire arrow */ DMG_ENTRY(2, 0x2), - /* Ice arrow */ DMG_ENTRY(2, 0x3), - /* Light arrow */ DMG_ENTRY(2, 0x4), - /* Goron spikes */ DMG_ENTRY(1, 0xE), - /* Deku spin */ DMG_ENTRY(0, 0x1), - /* Deku bubble */ DMG_ENTRY(1, 0xE), - /* Deku launch */ DMG_ENTRY(2, 0xE), - /* UNK_DMG_0x12 */ DMG_ENTRY(0, 0x1), - /* Zora barrier */ DMG_ENTRY(0, 0x5), - /* Normal shield */ DMG_ENTRY(0, 0x0), - /* Light ray */ DMG_ENTRY(0, 0x0), - /* Thrown object */ DMG_ENTRY(1, 0xE), - /* Zora punch */ DMG_ENTRY(1, 0xE), - /* Spin attack */ DMG_ENTRY(1, 0xD), - /* Sword beam */ DMG_ENTRY(0, 0x0), - /* Normal Roll */ DMG_ENTRY(0, 0x0), - /* UNK_DMG_0x1B */ DMG_ENTRY(0, 0x0), - /* UNK_DMG_0x1C */ DMG_ENTRY(0, 0x0), - /* Unblockable */ DMG_ENTRY(0, 0x0), - /* UNK_DMG_0x1E */ DMG_ENTRY(0, 0x0), - /* Powder Keg */ DMG_ENTRY(1, 0xE), +s32 EnKaizoku_ValidatePictograph(PlayState* play, Actor* actor); +void func_80B85F48(EnKaizoku* this); +void func_80B85FA8(EnKaizoku* this, PlayState* play); +void func_80B868B8(EnKaizoku* this, PlayState* play); +void func_80B86B58(EnKaizoku* this); +void func_80B86B74(EnKaizoku* this, PlayState* play); +void func_80B872A4(EnKaizoku* this); +void func_80B872F4(EnKaizoku* this, PlayState* play); +void func_80B874D8(EnKaizoku* this, PlayState* play); +void func_80B8760C(EnKaizoku* this, PlayState* play); +void func_80B87900(EnKaizoku* this); +void func_80B8798C(EnKaizoku* this, PlayState* play); +void func_80B87C7C(EnKaizoku* this); +void func_80B87CF8(PlayState* play, Vec3f* pos); +void func_80B87D3C(EnKaizoku* this, PlayState* play); +void func_80B87E28(EnKaizoku* this); +void func_80B87E9C(EnKaizoku* this, PlayState* play); +void func_80B87F70(EnKaizoku* this); +void func_80B87FDC(EnKaizoku* this, PlayState* play2); +void func_80B88214(EnKaizoku* this); +void func_80B88278(EnKaizoku* this, PlayState* play); +void func_80B8833C(EnKaizoku* this); +void func_80B88378(EnKaizoku* this, PlayState* play); +void func_80B88770(EnKaizoku* this); +void func_80B887AC(EnKaizoku* this, PlayState* play); +void func_80B88910(EnKaizoku* this); +void func_80B88964(EnKaizoku* this, PlayState* play); +void func_80B88CD8(EnKaizoku* this); +void func_80B88D6C(EnKaizoku* this, PlayState* play); +void func_80B89280(EnKaizoku* this, PlayState* play); +void func_80B894C0(EnKaizoku* this, PlayState* play); +void func_80B8971C(EnKaizoku* this, PlayState* play); + +typedef enum EnKaizokuAction { + /* 0 */ KAIZOKU_ACTION_0, + /* 1 */ KAIZOKU_ACTION_1, + /* 2 */ KAIZOKU_ACTION_2, + /* 3 */ KAIZOKU_ACTION_3, + /* 4 */ KAIZOKU_ACTION_4, + /* 5 */ KAIZOKU_ACTION_5, + /* 6 */ KAIZOKU_ACTION_6, + /* 7 */ KAIZOKU_ACTION_7, + /* 8 */ KAIZOKU_ACTION_8, + /* 9 */ KAIZOKU_ACTION_9, + /* 10 */ KAIZOKU_ACTION_10, + /* 11 */ KAIZOKU_ACTION_11, + /* 12 */ KAIZOKU_ACTION_12, + /* 13 */ KAIZOKU_ACTION_13, + /* 14 */ KAIZOKU_ACTION_14, + /* 15 */ KAIZOKU_ACTION_15, + /* 16 */ KAIZOKU_ACTION_16 +} EnKaizokuAction; + +u16 D_80B8A8D0[] = { + 0x11A4, 0x11A5, 0x11A6, 0x11A7, 0x11A8, 0x11A9, 0x11AA, 0x11AB, 0x11AC, 0x11AD, +}; + +Vec3f D_80B8A8E4[] = { + { -70.0f, 9.0f, 30.0f }, { -70.0f, 9.0f, 30.0f }, { -70.0f, 9.0f, 30.0f }, { 41.0f, 55.0f, 11.0f }, + { 41.0f, 55.0f, 11.0f }, { 70.0f, 45.0f, 35.0f }, { 80.0f, 45.0f, 25.0f }, { 0.0f, 0.0f, 0.0f }, + { -70.0f, 9.0f, 30.0f }, { -70.0f, 9.0f, 30.0f }, { -70.0f, 9.0f, 30.0f }, { 41.0f, 55.0f, 11.0f }, + { 41.0f, 55.0f, 11.0f }, { 70.0f, 45.0f, 25.0f }, { 80.0f, 45.0f, 25.0f }, { 0.0f, 0.0f, 0.0f }, + { 90.0f, 9.0f, -30.0f }, { 90.0f, 9.0f, -30.0f }, { 90.0f, 9.0f, -30.0f }, { -41.0f, 55.0f, -11.0f }, + { -41.0f, 55.0f, -11.0f }, { -70.0f, 45.0f, -25.0f }, { -80.0f, 45.0f, -25.0f }, { 0.0f, 0.0f, 0.0f }, +}; + +Vec3f D_80B8AA04[] = { + { 120.0f, 60.0f, -20.0f }, { 120.0f, 60.0f, -20.0f }, { 120.0f, 60.0f, -20.0f }, { -470.0f, 30.0f, -140.0f }, + { -470.0f, 30.0f, -140.0f }, { -410.0f, 80.0f, -130.0f }, { -410.0f, 80.0f, -130.0f }, { 0.0f, 0.0f, 0.0f }, + { 120.0f, 60.0f, -20.0f }, { 120.0f, 60.0f, -20.0f }, { 120.0f, 60.0f, -20.0f }, { -470.0f, 30.0f, -140.0f }, + { -470.0f, 30.0f, -140.0f }, { -410.0f, 80.0f, -130.0f }, { -410.0f, 80.0f, -130.0f }, { 0.0f, 0.0f, 0.0f }, + { -120.0f, 60.0f, 20.0f }, { -120.0f, 60.0f, 20.0f }, { -120.0f, 60.0f, 20.0f }, { 470.0f, 30.0f, 140.0f }, + { 470.0f, 30.0f, 140.0f }, { 410.0f, 80.0f, 130.0f }, { 410.0f, 80.0f, 130.0f }, { 0.0f, 0.0f, 0.0f }, +}; + +Color_RGBA8 D_80B8AB24[] = { + { 255, 255, 90, 255 }, + { 55, 25, 80, 255 }, + { 5, 195, 110, 255 }, +}; + +Color_RGBA8 D_80B8AB30[] = { + { 255, 130, 10, 255 }, + { 185, 130, 210, 255 }, + { 135, 195, 80, 255 }, +}; + +typedef enum EnKaizokuDamageEffect { + /* 0x0 */ KAIZOKU_DMGEFF_NONE, + /* 0x1 */ KAIZOKU_DMGEFF_1, + /* 0x2 */ KAIZOKU_DMGEFF_2, + /* 0x3 */ KAIZOKU_DMGEFF_FREEZE, + /* 0x4 */ KAIZOKU_DMGEFF_4, + /* 0x5 */ KAIZOKU_DMGEFF_5, + /* 0xD */ KAIZOKU_DMGEFF_D = 0xD, + /* 0xE */ KAIZOKU_DMGEFF_E, + /* 0xF */ KAIZOKU_DMGEFF_F +} EnKaizokuDamageEffect; + +static DamageTable sDamageTable = { + /* Deku Nut */ DMG_ENTRY(0, KAIZOKU_DMGEFF_1), + /* Deku Stick */ DMG_ENTRY(1, KAIZOKU_DMGEFF_F), + /* Horse trample */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE), + /* Explosives */ DMG_ENTRY(1, KAIZOKU_DMGEFF_F), + /* Zora boomerang */ DMG_ENTRY(0, KAIZOKU_DMGEFF_1), + /* Normal arrow */ DMG_ENTRY(1, KAIZOKU_DMGEFF_F), + /* UNK_DMG_0x06 */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE), + /* Hookshot */ DMG_ENTRY(0, KAIZOKU_DMGEFF_1), + /* Goron punch */ DMG_ENTRY(1, KAIZOKU_DMGEFF_E), + /* Sword */ DMG_ENTRY(1, KAIZOKU_DMGEFF_E), + /* Goron pound */ DMG_ENTRY(0, KAIZOKU_DMGEFF_D), + /* Fire arrow */ DMG_ENTRY(2, KAIZOKU_DMGEFF_2), + /* Ice arrow */ DMG_ENTRY(2, KAIZOKU_DMGEFF_FREEZE), + /* Light arrow */ DMG_ENTRY(2, KAIZOKU_DMGEFF_4), + /* Goron spikes */ DMG_ENTRY(1, KAIZOKU_DMGEFF_E), + /* Deku spin */ DMG_ENTRY(0, KAIZOKU_DMGEFF_1), + /* Deku bubble */ DMG_ENTRY(1, KAIZOKU_DMGEFF_E), + /* Deku launch */ DMG_ENTRY(2, KAIZOKU_DMGEFF_E), + /* UNK_DMG_0x12 */ DMG_ENTRY(0, KAIZOKU_DMGEFF_1), + /* Zora barrier */ DMG_ENTRY(0, KAIZOKU_DMGEFF_5), + /* Normal shield */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE), + /* Light ray */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE), + /* Thrown object */ DMG_ENTRY(1, KAIZOKU_DMGEFF_E), + /* Zora punch */ DMG_ENTRY(1, KAIZOKU_DMGEFF_E), + /* Spin attack */ DMG_ENTRY(1, KAIZOKU_DMGEFF_D), + /* Sword beam */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE), + /* Normal Roll */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE), + /* UNK_DMG_0x1B */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE), + /* UNK_DMG_0x1C */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE), + /* Unblockable */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE), + /* UNK_DMG_0x1E */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE), + /* Powder Keg */ DMG_ENTRY(1, KAIZOKU_DMGEFF_E), }; ActorInit En_Kaizoku_InitVars = { @@ -63,120 +161,2001 @@ ActorInit En_Kaizoku_InitVars = { (ActorFunc)NULL, }; -// static ColliderCylinderInit sCylinderInit = { -static ColliderCylinderInit D_80B8AB7C = { - { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, }, - { ELEMTYPE_UNK4, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON | BUMP_HOOKABLE, OCELEM_ON, }, +static ColliderCylinderInit sCylinderInit = { + { + COLTYPE_NONE, + AT_NONE, + AC_ON | AC_TYPE_PLAYER, + OC1_ON | OC1_TYPE_ALL, + OC2_TYPE_1, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK4, + { 0x00000000, 0x00, 0x00 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_ON | BUMP_HOOKABLE, + OCELEM_ON, + }, { 20, 50, 0, { 0, 0, 0 } }, }; -// static ColliderQuadInit sQuadInit = { -static ColliderQuadInit D_80B8ABA8 = { - { COLTYPE_NONE, AT_ON | AT_TYPE_PLAYER | AT_TYPE_ENEMY, AC_NONE, OC1_NONE, OC2_NONE, COLSHAPE_QUAD, }, - { ELEMTYPE_UNK4, { 0xF7CFFFFF, 0x00, 0x00 }, { 0x00000000, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NORMAL | TOUCH_UNK7, BUMP_NONE, OCELEM_NONE, }, +static ColliderQuadInit sQuadInit = { + { + COLTYPE_NONE, + AT_ON | AT_TYPE_PLAYER | AT_TYPE_ENEMY, + AC_NONE, + OC1_NONE, + OC2_NONE, + COLSHAPE_QUAD, + }, + { + ELEMTYPE_UNK4, + { 0xF7CFFFFF, 0x00, 0x00 }, + { 0x00000000, 0x00, 0x00 }, + TOUCH_ON | TOUCH_SFX_NORMAL | TOUCH_UNK7, + BUMP_NONE, + OCELEM_NONE, + }, { { { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } } }, }; -#endif +static AnimationHeader* sAnimations[EN_KAIZOKU_ANIM_MAX] = { + &object_kz_Anim_00F8E4, // EN_KAIZOKU_ANIM_0 + &object_kz_Anim_00EF9C, // EN_KAIZOKU_ANIM_1 + &object_kz_Anim_00E1C8, // EN_KAIZOKU_ANIM_2 + &object_kz_Anim_00DBE4, // EN_KAIZOKU_ANIM_3 + &object_kz_Anim_0058B8, // EN_KAIZOKU_ANIM_4 + &object_kz_Anim_004860, // EN_KAIZOKU_ANIM_5 + &object_kz_Anim_002730, // EN_KAIZOKU_ANIM_6 + &object_kz_Anim_001578, // EN_KAIZOKU_ANIM_7 + &object_kz_Anim_001390, // EN_KAIZOKU_ANIM_8 + &object_kz_Anim_0003CC, // EN_KAIZOKU_ANIM_9 + &object_kz_Anim_000F5C, // EN_KAIZOKU_ANIM_10 + &object_kz_Anim_00E8BC, // EN_KAIZOKU_ANIM_11 + &object_kz_Anim_00ED1C, // EN_KAIZOKU_ANIM_12 + &object_kz_Anim_005644, // EN_KAIZOKU_ANIM_13 + &object_kz_Anim_00F288, // EN_KAIZOKU_ANIM_14 + &object_kz_Anim_0043E4, // EN_KAIZOKU_ANIM_15 + &object_kz_Anim_003A3C, // EN_KAIZOKU_ANIM_16 + &object_kz_Anim_002BA0, // EN_KAIZOKU_ANIM_17 + &object_kz_Anim_001E9C, // EN_KAIZOKU_ANIM_18 +}; -extern DamageTable D_80B8AB3C; -extern ColliderCylinderInit D_80B8AB7C; -extern ColliderQuadInit D_80B8ABA8; +static u8 sAnimationModes[EN_KAIZOKU_ANIM_MAX] = { + ANIMMODE_LOOP, // EN_KAIZOKU_ANIM_0 + ANIMMODE_LOOP, // EN_KAIZOKU_ANIM_1 + ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_2 + ANIMMODE_LOOP, // EN_KAIZOKU_ANIM_3 + ANIMMODE_LOOP, // EN_KAIZOKU_ANIM_4 + ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_5 + ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_6 + ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_7 + ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_8 + ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_9 + ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_10 + ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_11 + ANIMMODE_LOOP, // EN_KAIZOKU_ANIM_12 + ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_13 + ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_14 + ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_15 + ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_16 + ANIMMODE_LOOP, // EN_KAIZOKU_ANIM_17 + ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_18 +}; -extern UNK_TYPE D_060058B8; +void EnKaizoku_Init(Actor* thisx, PlayState* play) { + s32 pad; + EnKaizoku* this = THIS; + Player* player = GET_PLAYER(play); + EffectBlureInit1 blureInit; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/EnKaizoku_Init.s") + this->picto.actor.hintId = TATL_HINT_ID_PIRATE; + this->picto.actor.targetMode = 3; + this->picto.actor.colChkInfo.mass = 80; + ActorShape_Init(&this->picto.actor.shape, 0.0f, ActorShadow_DrawFeet, 0.0f); + this->unk_2CA = this->picto.actor.world.rot.z; + this->picto.actor.colChkInfo.health = 8; + this->exitIndex = KAIZOKU_GET_EXIT_INDEX(&this->picto.actor); + this->switchFlag = KAIZOKU_GET_SWITCHFLAG(&this->picto.actor); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/EnKaizoku_Destroy.s") + if (this->unk_2CA >= 2) { + this->unk_2CA = 0; + } else if (this->unk_2CA == 2) { + this->unk_2CA = 0; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B85858.s") + this->unk_2EC = this->picto.actor.world.rot.z; + this->picto.actor.world.rot.z = 0; + this->picto.actor.colChkInfo.damageTable = &sDamageTable; + SkelAnime_InitFlex(play, &this->skelAnime, &gKaizokuSkel, &object_kz_Anim_0058B8, this->jointTable, + this->morphTable, KAIZOKU_LIMB_MAX); + Collider_InitAndSetCylinder(play, &this->bodyCollider, &this->picto.actor, &sCylinderInit); + Collider_InitAndSetQuad(play, &this->swordCollider, &this->picto.actor, &sQuadInit); + blureInit.p1StartColor[0] = blureInit.p1StartColor[1] = blureInit.p1StartColor[2] = blureInit.p1StartColor[3] = + blureInit.p2StartColor[0] = blureInit.p2StartColor[1] = blureInit.p2StartColor[2] = blureInit.p1EndColor[0] = + blureInit.p1EndColor[1] = blureInit.p1EndColor[2] = blureInit.p2EndColor[0] = blureInit.p2EndColor[1] = + blureInit.p2EndColor[2] = 255; + blureInit.p2StartColor[3] = 64; + blureInit.p1EndColor[3] = blureInit.p2EndColor[3] = 0; + blureInit.elemDuration = 8; + blureInit.unkFlag = 0; + blureInit.calcMode = 2; + Effect_Add(play, &this->blureIndex, EFFECT_BLURE1, 0, 0, &blureInit); + Actor_SetScale(&this->picto.actor, 0.0125f); + this->picto.actor.flags |= ACTOR_FLAG_8000000; + this->picto.actor.flags &= ~ACTOR_FLAG_1; + if (this->switchFlag == 127) { + this->switchFlag = -1; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B85900.s") + if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { + Actor_Kill(&this->picto.actor); + return; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B85A00.s") + this->bodyCollider.dim.radius = 20; + this->bodyCollider.dim.height = 65; + this->bodyCollider.dim.yShift = 0; + this->unk_2D6 = this->picto.actor.cutscene; + this->picto.actor.world.pos.y = player->actor.world.pos.y + 160.0f; + this->picto.validationFunc = EnKaizoku_ValidatePictograph; + this->picto.actor.flags |= ACTOR_FLAG_400; + func_80B85F48(this); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B85E18.s") +void EnKaizoku_Destroy(Actor* thisx, PlayState* play) { + EnKaizoku* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B85EA0.s") + Effect_Destroy(play, this->blureIndex); + Collider_DestroyCylinder(play, &this->bodyCollider); + Collider_DestroyQuad(play, &this->swordCollider); + Audio_RestorePrevBgm(); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B85F48.s") +s32 func_80B85858(EnKaizoku* this, PlayState* play) { + Actor* itemAction; + Player* player = GET_PLAYER(play); + s16 prevAction = this->action; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B85FA8.s") + for (itemAction = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first; itemAction != NULL; + itemAction = itemAction->next) { + //! FAKE: + if (1) {} + if (((itemAction->id == ACTOR_ARMS_HOOK) || (itemAction->id == ACTOR_EN_ARROW)) && (player->unk_D57)) { + if (((itemAction->id != ACTOR_ARMS_HOOK) || (this->action != KAIZOKU_ACTION_13)) && + (this->action != KAIZOKU_ACTION_6)) { + func_80B87C7C(this); + } + break; + } + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B86804.s") + if (prevAction != this->action) { + return true; + } else { + return false; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B868B8.s") +void func_80B85900(EnKaizoku* this) { + if (this->action == KAIZOKU_ACTION_1) { + this->headRot.y = Math_SinS(this->lookTimer * 0x1068) * 0x22D8; + } else if (this->action != KAIZOKU_ACTION_13) { + if ((this->action == KAIZOKU_ACTION_9) || (this->action == KAIZOKU_ACTION_11)) { + Math_SmoothStepToS(&this->headRot.y, this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y, 1, + 500, 0); + this->headRot.y = CLAMP(this->headRot.y, -0x256F, 0x256F); + } else { + this->headRot.y = 0; + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B86B58.s") +s32 func_80B85A00(EnKaizoku* this, PlayState* play, s16 arg2) { + Player* player = GET_PLAYER(play); + s16 sp32 = ABS_ALT(this->picto.actor.wallYaw - this->picto.actor.shape.rot.y); + s16 sp30 = ABS_ALT(this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y); + Actor* explosiveActor; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B86B74.s") + if (func_800BE184(play, &this->picto.actor, 100.0f, 0x2710, 0x4000, this->picto.actor.shape.rot.y)) { + if (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) { + if (this->action != KAIZOKU_ACTION_2) { + func_80B874D8(this, play); + } + return true; + } else { + func_80B87900(this); + return true; + } + } else if (func_800BE184(play, &this->picto.actor, 100.0f, 0x5DC0, 0x2AA8, this->picto.actor.shape.rot.y)) { + this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + if ((this->picto.actor.bgCheckFlags & 8) && (ABS_ALT(sp32) < 0x2EE0) && + (this->picto.actor.xzDistToPlayer < 90.0f)) { + if (this->action != KAIZOKU_ACTION_6) { + func_80B87C7C(this); + } + return true; + } else if (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) { + if (this->action != KAIZOKU_ACTION_2) { + func_80B874D8(this, play); + } + } else if (this->picto.actor.xzDistToPlayer < BREG(11) + 180.0f) { + func_80B87900(this); + } else if (this->action != KAIZOKU_ACTION_7) { + func_80B87E28(this); + } + return true; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B872A4.s") + explosiveActor = Actor_FindNearby(play, &this->picto.actor, -1, ACTORCAT_EXPLOSIVES, 80.0f); + if (explosiveActor != NULL) { + this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B872F4.s") + if (((this->picto.actor.bgCheckFlags & 8) && (sp32 < 0x2EE0)) || (explosiveActor->id == ACTOR_EN_BOM_CHU)) { + if ((explosiveActor->id == ACTOR_EN_BOM_CHU) && + (Actor_DistanceBetweenActors(&this->picto.actor, explosiveActor) < 80.0f) && + (BINANG_ADD(this->picto.actor.shape.rot.y - explosiveActor->world.rot.y, 0x8000) < 0x4000)) { + if (this->action != KAIZOKU_ACTION_6) { + func_80B87C7C(this); + } + } else { + func_80B87900(this); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B874D8.s") + return true; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8760C.s") + if (this->action != KAIZOKU_ACTION_7) { + func_80B87E28(this); + } + return true; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B87900.s") + if (arg2) { + s16 sp2A; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8798C.s") + //! FAKE: + label:; + if (sp30 >= 10000) { + func_80B87900(this); + } else { + sp2A = player->actor.shape.rot.y - this->picto.actor.shape.rot.y; + if (this->picto.actor.xzDistToPlayer <= 65.0f && !Actor_OtherIsTargeted(play, &this->picto.actor) && + ABS_ALT(sp2A) < 0x5000) { + if (this->action != KAIZOKU_ACTION_9) { + func_80B87F70(this); + return 1; + } + } else if (this->action != KAIZOKU_ACTION_3) { + func_80B88CD8(this); + } + } + return true; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B87C7C.s") + return false; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B87CF8.s") +void EnKaizoku_ChangeAnim(EnKaizoku* this, EnKaizokuAnimation animIndex) { + this->animIndex = animIndex; + this->frameCount = Animation_GetLastFrame(sAnimations[this->animIndex]); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->frameCount, + sAnimationModes[this->animIndex], 0.0f); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B87D3C.s") +s32 EnKaizoku_ValidatePictograph(PlayState* play, Actor* actor) { + s32 ret = Snap_ValidatePictograph(play, actor, PICTO_VALID_PIRATE_GOOD, &actor->focus.pos, &actor->shape.rot, 10.0f, + 400.0f, -1); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B87E28.s") + ret |= Snap_ValidatePictograph(play, actor, PICTO_VALID_PIRATE_TOO_FAR, &actor->focus.pos, &actor->shape.rot, 10.0f, + 1200.0f, -1); + return ret; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B87E9C.s") +void func_80B85F48(EnKaizoku* this) { + Math_Vec3f_Copy(&this->unk_2F8, &gZeroVec3f); + Math_Vec3f_Copy(&this->unk_304, &gZeroVec3f); + this->unk_2D8 = 1; + this->action = KAIZOKU_ACTION_0; + this->actionFunc = func_80B85FA8; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B87F70.s") +void func_80B85FA8(EnKaizoku* this, PlayState* play) { + Player* player = GET_PLAYER(play); + f32 curFrame = this->skelAnime.curFrame; + s32 sp54; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B87FDC.s") + switch (this->unk_59C) { + case 0: + if (!(this->picto.actor.xzDistToPlayer < 200.0f)) { + break; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B88214.s") + if (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) { + ActorCutscene_SetIntentToPlay(this->unk_2D6); + return; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B88278.s") + ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->picto.actor); + func_800B7298(play, &this->picto.actor, 0x15); + this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene); + this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8833C.s") + sp54 = (this->unk_2CA * 4) + this->unk_2C8; + if (this->unk_2EC != 2) { + player->actor.world.pos.x = this->picto.actor.home.pos.x + 90.0f; + player->actor.world.pos.z = this->picto.actor.home.pos.z + 30.0f; + } else { + player->actor.world.pos.x = this->picto.actor.home.pos.x - 90.0f; + player->actor.world.pos.z = this->picto.actor.home.pos.z - 30.0f; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B88378.s") + player->actor.speedXZ = 0.0f; + this->picto.actor.world.pos.x = this->picto.actor.home.pos.x; + this->picto.actor.world.pos.z = this->picto.actor.home.pos.z; + Message_StartTextbox(play, D_80B8A8D0[sp54], &this->picto.actor); + this->unk_2C8++; + this->picto.actor.flags &= ~ACTOR_FLAG_1; + player->actor.shape.rot.y = player->actor.world.rot.y = + Math_Vec3f_Yaw(&player->actor.world.pos, &this->picto.actor.world.pos); + Math_Vec3f_Copy(&this->subCamEye, &this->unk_5C8); + Math_Vec3f_Copy(&this->subCamAt, &this->unk_5D4); + this->subCamUp.x = -0.11f; + this->picto.actor.draw = EnKaizoku_Draw; + this->unk_598 = 0; + func_801A0238(0, 0xA); + this->unk_59C++; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B88770.s") + case 1: + player->actor.shape.rot.y = player->actor.world.rot.y = + Math_Vec3f_Yaw(&player->actor.world.pos, &this->picto.actor.world.pos); + this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B887AC.s") + if (this->unk_2EC != 2) { + player->actor.world.pos.x = this->picto.actor.home.pos.x + 90.0f; + player->actor.world.pos.z = this->picto.actor.home.pos.z + 30.0f; + } else { + player->actor.world.pos.x = this->picto.actor.home.pos.x - 90.0f; + player->actor.world.pos.z = this->picto.actor.home.pos.z - 30.0f; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B88910.s") + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + func_801477B4(play); + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_11); + this->unk_598 = 0; + this->unk_59C++; + this->picto.actor.gravity = -2.0f; + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B88964.s") + case 2: + if (this->picto.actor.bgCheckFlags & 1) { + if (this->unk_2D8 != 0) { + this->unk_2D8 = 0; + this->picto.actor.world.pos.y = this->picto.actor.floorHeight; + this->picto.actor.velocity.y = 0.0f; + func_800B7298(play, &this->picto.actor, 4); + Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->leftFootPos, 3.0f, 2, 2.0f, 0, 0, 0); + Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->rightFootPos, 3.0f, 2, 2.0f, 0, 0, 0); + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_ONGND); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B88CD8.s") + if (curFrame >= 11.0f) { + this->unk_59C++; + this->unk_598 = 0; + this->subCamUp.x = 0.0f; + } + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B88D6C.s") + case 3: + if (this->frameCount <= curFrame) { + sp54 = this->unk_2CA * 4 + this->unk_2C8; + if (Player_GetMask(play) == PLAYER_MASK_STONE) { + if (D_80B8A8D0[sp54] == 0x11A5) { + sp54 = 8; + } else if (D_80B8A8D0[sp54] == 0x11A9) { + sp54 = 9; + } + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B891B8.s") + Message_StartTextbox(play, D_80B8A8D0[sp54], &this->picto.actor); + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_12); + this->unk_2C8++; + this->unk_598 = 0; + this->unk_59C++; + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B89280.s") + case 4: + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + func_801477B4(play); + this->unk_598 = 0; + this->unk_59C++; + func_801A0238(0x7F, 0); + Audio_PlayBgm_StorePrevBgm(NA_BGM_MINI_BOSS); + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_13); + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B893CC.s") + case 5: + Math_ApproachF(&this->unk_5E0, 2.0f, 0.2f, 1.0f); + if (Animation_OnFrame(&this->skelAnime, 20.0f)) { + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_BOSU_SWORD); + } + if (curFrame >= 30.0f) { + this->unk_598 = 0; + this->unk_59C++; + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B894C0.s") + case 6: + Math_ApproachF(&this->unk_5E0, 5.0f, 0.3f, 1.0f); + if (this->frameCount <= curFrame) { + this->unk_598 = 7; + this->unk_2F8.x = 1.0f; + this->unk_59C++; + this->unk_2F8.y = 1.0f; + this->unk_2F8.z = 1.0f; + this->unk_304.x = 1.0f; + this->unk_304.y = 1.0f; + this->unk_304.z = 1.0f; + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8960C.s") + case 7: + if (this->unk_598 == 0) { + func_800B7298(play, &this->picto.actor, 6); + ActorCutscene_Stop(this->unk_2D6); + this->unk_59C = 0; + this->subCamId = 0; + this->picto.actor.flags &= ~ACTOR_FLAG_100000; + this->picto.actor.flags &= ~ACTOR_FLAG_8000000; + this->picto.actor.flags |= ACTOR_FLAG_1; + func_80B872A4(this); + } + break; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8971C.s") + if (this->unk_59C < 7) { + s32 temp_v0_3 = this->unk_2EC * 8; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B89A08.s") + temp_v0_3 += this->unk_59C; + this->unk_5C8.x = D_80B8A8E4[temp_v0_3].x + this->picto.actor.home.pos.x; + this->unk_5C8.y = D_80B8A8E4[temp_v0_3].y + player->actor.world.pos.y; + this->unk_5C8.z = D_80B8A8E4[temp_v0_3].z + this->picto.actor.home.pos.z; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/EnKaizoku_Update.s") + this->unk_5D4.x = D_80B8AA04[temp_v0_3].x + this->picto.actor.home.pos.x; + this->unk_5D4.y = D_80B8AA04[temp_v0_3].y + player->actor.world.pos.y; + this->unk_5D4.z = D_80B8AA04[temp_v0_3].z + this->picto.actor.home.pos.z; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8A318.s") + if (this->unk_59C >= 5) { + if (curFrame >= 6.0f) { + Math_ApproachF(&this->unk_2F8.x, 1.0f, 0.3f, 0.3f); + this->unk_2F8.z = this->unk_2F8.y = this->unk_2F8.x; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8A468.s") + if (curFrame >= 22.0f) { + Math_ApproachF(&this->unk_304.x, 1.0f, 0.3f, 0.3f); + this->unk_304.z = this->unk_304.y = this->unk_304.x; + } + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8A6B0.s") + if (this->unk_59C >= 5) { + Math_ApproachF(&this->subCamEye.x, this->unk_5C8.x, 0.5f, this->unk_5E0); + Math_ApproachF(&this->subCamEye.y, this->unk_5C8.y, 0.5f, this->unk_5E0); + Math_ApproachF(&this->subCamEye.z, this->unk_5C8.z, 0.5f, this->unk_5E0); + Math_ApproachF(&this->subCamAt.x, this->unk_5D4.x, 0.5f, this->unk_5E0); + Math_ApproachF(&this->subCamAt.y, this->unk_5D4.y, 0.5f, this->unk_5E0); + Math_ApproachF(&this->subCamAt.z, this->unk_5D4.z, 0.5f, this->unk_5E0); + } else { + Math_Vec3f_Copy(&this->subCamEye, &this->unk_5C8); + Math_Vec3f_Copy(&this->subCamAt, &this->unk_5D4); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8A718.s") + if (this->subCamId != 0) { + this->subCamUp.y = 1.0f; + this->subCamUp.z = 0.0f; + Play_SetCameraAtEyeUp(play, this->subCamId, &this->subCamAt, &this->subCamEye, &this->subCamUp); + } +} + +void func_80B86804(EnKaizoku* this, PlayState* play) { + if (this->subCamId == 0) { + if (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) { + ActorCutscene_SetIntentToPlay(this->unk_2D6); + return; + } + ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->picto.actor); + } + + func_800B7298(play, &this->picto.actor, 0x60); + this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene); + this->unk_2B2 = 30; + this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->unk_598 = 0; + this->unk_59C = 0; + this->unk_2D8 = 0; + this->action = KAIZOKU_ACTION_0; + this->actionFunc = func_80B868B8; + this->picto.actor.speedXZ = 0.0f; +} + +void func_80B868B8(EnKaizoku* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 1, 4000, 1); + this->subCamEye.x = Math_SinS(this->picto.actor.yawTowardsPlayer) * 155.0f + this->picto.actor.world.pos.x; + this->subCamEye.y = this->picto.actor.world.pos.y + 10.0f; + this->subCamEye.z = Math_CosS(this->picto.actor.yawTowardsPlayer) * 115.0f + this->picto.actor.world.pos.z; + + this->subCamAt.x = Math_SinS(this->picto.actor.yawTowardsPlayer) + this->picto.actor.world.pos.x; + this->subCamAt.y = this->picto.actor.world.pos.y + 30.0f; + this->subCamAt.z = Math_CosS(this->picto.actor.yawTowardsPlayer) * 11.0f + this->picto.actor.world.pos.z; + + switch (this->unk_59C) { + case 0: + if (this->frameCount <= curFrame) { + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_14); + this->unk_2C8 = 3; + this->unk_598 = 0; + this->unk_59C++; + } + break; + + case 1: + if (this->frameCount <= curFrame) { + s32 textId; + + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_15); + textId = this->unk_2CA * 4 + this->unk_2C8; + Message_StartTextbox(play, D_80B8A8D0[textId], &this->picto.actor); + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_LAST2_SHOUT); + this->unk_598 = 0; + this->unk_59C++; + } + break; + + case 2: + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + func_801477B4(play); + func_800B7298(play, &this->picto.actor, 6); + ActorCutscene_Stop(this->unk_2D6); + this->subCamId = 0; + play->nextEntrance = play->setupExitList[this->exitIndex]; + gSaveContext.nextCutsceneIndex = 0; + Scene_SetExitFade(play); + play->transitionTrigger = TRANS_TRIGGER_START; + this->unk_59C++; + this->action = KAIZOKU_ACTION_16; + } + + break; + } + + if (this->subCamId != 0) { + this->subCamUp.x = 0.0f; + this->subCamUp.y = 1.0f; + this->subCamUp.z = 0.0f; + Play_SetCameraAtEyeUp(play, this->subCamId, &this->subCamAt, &this->subCamEye, &this->subCamUp); + } +} + +void func_80B86B58(EnKaizoku* this) { + this->unk_2D8 = 0; + this->action = KAIZOKU_ACTION_0; + this->actionFunc = func_80B86B74; +} + +void func_80B86B74(EnKaizoku* this, PlayState* play) { + Player* player = GET_PLAYER(play); + s32 textId; + f32 curFrame = this->skelAnime.curFrame; + + if (this->unk_59C < 2) { + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 1, 0xFA0, 1); + player->actor.world.pos.x = this->picto.actor.home.pos.x + 90.0f; + player->actor.world.pos.z = this->picto.actor.home.pos.z + 30.0f; + this->picto.actor.world.pos.x = this->picto.actor.home.pos.x; + this->picto.actor.world.pos.z = this->picto.actor.home.pos.z; + this->unk_5C8.x = player->actor.world.pos.x + 39.0f; + this->unk_5C8.y = player->actor.world.pos.y + 4.0f; + this->unk_5C8.z = player->actor.world.pos.z - 41.0f; + this->unk_5D4.x = player->actor.world.pos.x - 150.0f; + this->unk_5D4.y = player->actor.world.pos.y + 60.0f; + this->unk_5D4.z = player->actor.world.pos.z + 50.0f; + } + + player->actor.shape.rot.y = player->actor.world.rot.y = + Math_Vec3f_Yaw(&player->actor.world.pos, &this->picto.actor.world.pos); + switch (this->unk_59C) { + case 0: + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_17); + this->unk_2C8 = 2; + textId = this->unk_2CA * 4 + this->unk_2C8; + Message_StartTextbox(play, D_80B8A8D0[textId], &this->picto.actor); + this->unk_2D9 = 0; + this->unk_598 = 0; + this->unk_59C++; + break; + + case 1: + if (this->frameCount <= curFrame) { + if (this->unk_2D9 == 0) { + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_DAMM_BREATH); + this->unk_2D9 = 1; + } else { + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_BREATH); + } + } + + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + func_801477B4(play); + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_18); + func_800B7298(play, &this->picto.actor, 0x85); + this->unk_5A0 = 0; + this->unk_598 = 0; + this->unk_59C++; + } + break; + + case 2: + this->unk_5C8.x = player->actor.world.pos.x + 77.0f; + this->unk_5C8.y = player->actor.world.pos.y + 84.0f; + this->unk_5C8.z = player->actor.world.pos.z - 71.0f; + + this->unk_5D4.x = player->actor.world.pos.x - 110.0f; + this->unk_5D4.y = player->actor.world.pos.y; + this->unk_5D4.z = player->actor.world.pos.z + 30.0f; + this->unk_5A0++; + if (curFrame >= 1.0f) { + Math_ApproachZeroF(&this->unk_2F8.x, 0.3f, 0.3f); + Math_ApproachZeroF(&this->unk_304.x, 0.3f, 0.3f); + this->unk_2F8.z = this->unk_2F8.y = this->unk_2F8.x; + this->unk_304.z = this->unk_304.y = this->unk_304.x; + } + if (this->unk_5A0 == 0x12) { + Actor* temp_v0_2; + + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_SHOUT); + temp_v0_2 = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ARROW, this->picto.actor.world.pos.x, + this->picto.actor.world.pos.y + 10.0f, this->picto.actor.world.pos.z, + this->picto.actor.shape.rot.x, this->picto.actor.shape.rot.y, + this->picto.actor.shape.rot.z, -8); + if (temp_v0_2 != NULL) { + temp_v0_2->gravity = -10.0f; + play->envCtx.fillScreen = true; + } + } + + if (this->unk_5A0 >= 0x12) { + Math_ApproachF(&this->unk_5EC, 60.0f, 1.0f, 20.0f); + this->unk_5E8 = this->unk_5EC / 60.0f; + play->envCtx.screenFillColor[3] = this->unk_5E8 * 255.0f; + play->envCtx.screenFillColor[0] = play->envCtx.screenFillColor[1] = play->envCtx.screenFillColor[2] = + 255; + } + + if ((this->frameCount <= curFrame) && (this->unk_5A0 >= 0x28)) { + this->picto.actor.draw = NULL; + this->unk_598 = 10; + Math_Vec3f_Copy(&this->unk_2F8, &gZeroVec3f); + Math_Vec3f_Copy(&this->unk_304, &gZeroVec3f); + this->unk_59C++; + } + break; + + case 3: + if (this->unk_598 == 0) { + Math_ApproachZeroF(&this->unk_5EC, 0.5f, 10.0f); + this->unk_5E8 = this->unk_5EC / 60.0f; + play->envCtx.screenFillColor[3] = this->unk_5E8 * 255.0f; + if (play->envCtx.screenFillColor[3] < 10) { + play->envCtx.screenFillColor[0] = 0; + play->envCtx.screenFillColor[1] = 0; + play->envCtx.screenFillColor[2] = 0; + play->envCtx.screenFillColor[3] = 0; + play->envCtx.fillScreen = false; + this->unk_59C = 0; + this->subCamId = 0; + func_800B7298(play, &this->picto.actor, 6); + ActorCutscene_Stop(this->unk_2D6); + if (this->switchFlag >= 0) { + Flags_SetSwitch(play, this->switchFlag); + } + Actor_Kill(&this->picto.actor); + } + } + break; + } + Math_ApproachF(&this->subCamEye.x, this->unk_5C8.x, 0.5f, this->unk_5E0); + Math_ApproachF(&this->subCamEye.y, this->unk_5C8.y, 0.5f, this->unk_5E0); + Math_ApproachF(&this->subCamEye.z, this->unk_5C8.z, 0.5f, this->unk_5E0); + Math_ApproachF(&this->subCamAt.x, this->unk_5D4.x, 0.5f, this->unk_5E0); + Math_ApproachF(&this->subCamAt.y, this->unk_5D4.y, 0.5f, this->unk_5E0); + Math_ApproachF(&this->subCamAt.z, this->unk_5D4.z, 0.5f, this->unk_5E0); + Math_ApproachF(&this->unk_5E0, 10.0f, 0.5f, 100.0f); + + if (this->subCamId != 0) { + this->subCamUp.x = 0.0f; + this->subCamUp.z = 0.0f; + this->subCamUp.y = 1.0f; + Play_SetCameraAtEyeUp(play, this->subCamId, &this->subCamAt, &this->subCamEye, &this->subCamUp); + } +} + +void func_80B872A4(EnKaizoku* this) { + this->picto.actor.speedXZ = 0.0f; + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_0); + this->action = KAIZOKU_ACTION_1; + this->actionFunc = func_80B872F4; + this->picto.actor.shape.shadowScale = 90.0f; +} + +void func_80B872F4(EnKaizoku* this, PlayState* play) { + Player* player = GET_PLAYER(play); + + if ((this->lookTimer == 0) && !func_80B85858(this, play) && !func_80B85A00(this, play, false)) { + s16 yawDiff = this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y; + + if ((this->picto.actor.xzDistToPlayer < 100.0f) && (player->meleeWeaponState != 0) && (yawDiff >= 0x1F40)) { + this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + func_80B88CD8(this); + } else if (Actor_IsFacingPlayer(&this->picto.actor, 0xBB8)) { + if ((this->picto.actor.xzDistToPlayer < 400.0f && this->picto.actor.xzDistToPlayer > 150.0f) && + (Rand_ZeroOne() < 0.7f)) { + if ((Rand_ZeroOne() > 0.5f) || (ABS_ALT(yawDiff) < 0x3000)) { + func_80B88214(this); + } else { + func_80B88910(this); + } + } else if (Rand_ZeroOne() > 0.1f) { + func_80B8833C(this); + } else { + func_80B88CD8(this); + } + } else { + func_80B88770(this); + } + } +} + +void func_80B874D8(EnKaizoku* this, PlayState* play) { + Player* player = GET_PLAYER(play); + + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_3); + if (Math_SinS(player->actor.shape.rot.y - this->picto.actor.shape.rot.y) > 0.0f) { + this->picto.actor.speedXZ = -10.0f; + } else if (Math_SinS(player->actor.shape.rot.y - this->picto.actor.shape.rot.y) < 0.0f) { + this->picto.actor.speedXZ = 10.0f; + } else if (Rand_ZeroOne() > 0.5f) { + this->picto.actor.speedXZ = 10.0f; + } else { + this->picto.actor.speedXZ = -10.0f; + } + + this->skelAnime.playSpeed = 1.0f; + this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y; + this->unk_2B2 = 6; + this->action = KAIZOKU_ACTION_2; + this->unk_2E0 = 0.0f; + this->actionFunc = func_80B8760C; +} + +void func_80B8760C(EnKaizoku* this, PlayState* play) { + s16 var_v0; + s32 temp_ft0; + s32 temp_ft1; + + this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer + 0x3A98; + if ((this->picto.actor.bgCheckFlags & 8) || + !Actor_TestFloorInDirection(&this->picto.actor, play, this->picto.actor.speedXZ, + this->picto.actor.shape.rot.y + 0x4000)) { + if (this->picto.actor.bgCheckFlags & 8) { + if (this->picto.actor.speedXZ >= 0.0f) { + var_v0 = this->picto.actor.shape.rot.y + 0x4000; + } else { + var_v0 = this->picto.actor.shape.rot.y - 0x4000; + } + var_v0 = this->picto.actor.wallYaw - var_v0; + } else { + this->picto.actor.speedXZ *= -0.8f; + var_v0 = 0; + } + + if (ABS_ALT(var_v0) > 0x4000) { + func_80B87C7C(this); + return; + } + } + + if (this->picto.actor.xzDistToPlayer <= 65.0f) { + Math_ApproachF(&this->unk_2E0, -4.0f, 1.0f, 1.5f); + } else if (this->picto.actor.xzDistToPlayer > 40.0f) { + Math_ApproachF(&this->unk_2E0, 4.0f, 1.0f, 1.5f); + } else { + Math_ApproachZeroF(&this->unk_2E0, 1.0f, 6.65f); + } + + if (this->unk_2E0 != 0.0f) { + this->picto.actor.world.pos.x += Math_SinS(this->picto.actor.yawTowardsPlayer) * this->unk_2E0; + this->picto.actor.world.pos.z += Math_CosS(this->picto.actor.yawTowardsPlayer) * this->unk_2E0; + } + + this->skelAnime.playSpeed = 1.0f; + temp_ft0 = this->skelAnime.curFrame - this->skelAnime.playSpeed; + temp_ft1 = this->skelAnime.curFrame + this->skelAnime.playSpeed; + if (this->skelAnime.curFrame != 0.0f && ((temp_ft0 < 0 && temp_ft1 > 0) || (temp_ft0 < 5 && temp_ft1 >= 6))) { + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_GERUDOFT_WALK); + } + + if (!(play->gameplayFrames & 0x5F)) { + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_BREATH); + } + + if (this->unk_2B2 == 0) { + this->picto.actor.shape.rot.y = this->picto.actor.yawTowardsPlayer; + if (!func_80B85858(this, play)) { + if (this->picto.actor.xzDistToPlayer <= 70.0f) { + func_80B87F70(this); + } else { + func_80B87E28(this); + } + } + } else { + if (this->picto.actor.speedXZ >= 0.0f) { + this->picto.actor.shape.rot.y += 0x4000; + } else { + this->picto.actor.shape.rot.y -= 0x4000; + } + } +} + +void func_80B87900(EnKaizoku* this) { + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_7); + + if (this->swordState != 0) { + this->swordState = -1; + } + this->unk_2D8 = 0; + this->picto.actor.speedXZ = 0.0f; + this->unk_2B2 = Rand_S16Offset(10, 10); + this->bodyCollider.base.acFlags |= AC_HARD; + this->lookTimer = 12; + this->action = KAIZOKU_ACTION_12; + this->actionFunc = func_80B8798C; +} + +void func_80B8798C(EnKaizoku* this, PlayState* play) { + Player* player = GET_PLAYER(play); + s16 temp_v0; + + this->unk_2D8 = 1; + if (this->unk_2B2 == 0) { + this->skelAnime.playSpeed = 1.0f; + } + if (this->lookTimer == 0) { + this->unk_2D8 = 0; + temp_v0 = this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y; + if (ABS_ALT(temp_v0) <= 0x4000 && this->picto.actor.xzDistToPlayer < 40.0f && + fabsf(this->picto.actor.playerHeightRel) < 50.0f) { + if (func_800BE184(play, &this->picto.actor, 100.0f, 10000, 0x4000, this->picto.actor.shape.rot.y)) { + if (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) { + this->bodyCollider.base.acFlags &= ~AC_HARD; + func_80B874D8(this, play); + } else if (!(play->gameplayFrames & 1)) { + func_80B87900(this); + } else { + this->bodyCollider.base.acFlags &= ~AC_HARD; + func_80B87E28(this); + } + } else { + temp_v0 = player->actor.shape.rot.y - this->picto.actor.shape.rot.y; + if (ABS_ALT(temp_v0) < 0x4000) { + this->bodyCollider.base.acFlags &= ~AC_HARD; + func_80B87F70(this); + } else { + this->bodyCollider.base.acFlags &= ~AC_HARD; + func_80B88CD8(this); + } + } + } else { + this->bodyCollider.base.acFlags &= ~AC_HARD; + func_80B88CD8(this); + } + } else if (this->unk_2B2 == 0 && + func_800BE184(play, &this->picto.actor, 100.0f, 10000, 0x4000, this->picto.actor.shape.rot.y)) { + if (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) { + this->bodyCollider.base.acFlags &= ~AC_HARD; + func_80B874D8(this, play); + } else if (!func_80B85858(this, play)) { + if (!(play->gameplayFrames & 1)) { + if (this->picto.actor.xzDistToPlayer < 100.0f && Rand_ZeroOne() > 0.7f) { + this->bodyCollider.base.acFlags &= ~AC_HARD; + func_80B87C7C(this); + } else { + this->bodyCollider.base.acFlags &= ~AC_HARD; + func_80B87E28(this); + } + } else { + func_80B87900(this); + } + } + } +} + +void func_80B87C7C(EnKaizoku* this) { + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_8); + this->picto.actor.speedXZ = 6.5f; + this->picto.actor.velocity.y = 15.0f; + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_TEKU_JUMP); + this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y; + this->bodyCollider.info.elemType = ELEMTYPE_UNK4; + this->bodyCollider.base.colType = COLTYPE_NONE; + this->swordCollider.info.elemType = ELEMTYPE_UNK4; + this->action = KAIZOKU_ACTION_6; + this->actionFunc = func_80B87D3C; +} + +Color_RGBA8 D_80B8AC58 = { 200, 160, 120, 255 }; +Color_RGBA8 D_80B8AC5C = { 130, 90, 50, 255 }; + +Vec3f D_80B8AC60 = { 0.0f, -1.5f, 0.0f }; +Vec3f D_80B8AC6C = { 0.0f, -0.2f, 0.0f }; + +void func_80B87CF8(PlayState* play, Vec3f* pos) { + EffectSsKirakira_SpawnSmall(play, pos, &D_80B8AC60, &D_80B8AC6C, &D_80B8AC58, &D_80B8AC5C); +} + +void func_80B87D3C(EnKaizoku* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 1, 0xFA0, 1); + if (this->picto.actor.velocity.y >= 5.0f) { + func_80B87CF8(play, &this->leftFootPos); + func_80B87CF8(play, &this->rightFootPos); + } + + this->unk_2D8 = 0; + if ((this->frameCount <= curFrame) && (this->picto.actor.bgCheckFlags & 3)) { + this->bodyCollider.info.elemType = ELEMTYPE_UNK1; + this->bodyCollider.base.colType = COLTYPE_HIT3; + this->swordCollider.info.elemType = ELEMTYPE_UNK2; + this->picto.actor.shape.rot.x = 0; + this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y = this->picto.actor.yawTowardsPlayer; + this->picto.actor.speedXZ = 0.0f; + this->picto.actor.velocity.y = 0.0f; + this->picto.actor.world.pos.y = this->picto.actor.floorHeight; + func_80B87F70(this); + } +} + +void func_80B87E28(EnKaizoku* this) { + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_8); + this->picto.actor.speedXZ = -8.0f; + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_TEKU_JUMP); + this->bodyCollider.info.elemType = ELEMTYPE_UNK4; + this->bodyCollider.base.colType = COLTYPE_NONE; + this->swordCollider.info.elemType = ELEMTYPE_UNK4; + this->action = KAIZOKU_ACTION_7; + this->actionFunc = func_80B87E9C; + this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; +} + +void func_80B87E9C(EnKaizoku* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + + this->unk_2D8 = 0; + if (this->frameCount <= curFrame) { + if ((this->picto.actor.xzDistToPlayer < 170.0f) && (this->picto.actor.xzDistToPlayer > 140.0f) && + (Rand_ZeroOne() < 0.2f)) { + func_80B88910(this); + } else { + func_80B87900(this); + } + } + if (!(play->state.frames & 0x5F)) { + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_BREATH); + } +} + +void func_80B87F70(EnKaizoku* this) { + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_9); + this->unk_2D0 = 0; + this->swordCollider.base.atFlags &= ~AT_BOUNCED; + this->picto.actor.speedXZ = 0.0f; + AudioSfx_StopByPosAndId(&this->picto.actor.projectedPos, NA_SE_EN_PIRATE_BREATH); + this->action = KAIZOKU_ACTION_9; + this->actionFunc = func_80B87FDC; +} + +void func_80B87FDC(EnKaizoku* this, PlayState* play2) { + PlayState* play = play2; + f32 curFrame; + s16 sp2E; + s16 sp2C; + Player* player = GET_PLAYER(play2); + + curFrame = this->skelAnime.curFrame; + sp2E = ABS_ALT(player->actor.shape.rot.y - this->picto.actor.shape.rot.y); + sp2C = ABS_ALT(this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y); + this->picto.actor.speedXZ = 0.0f; + + if (Animation_OnFrame(&this->skelAnime, 1.0f)) { + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_ATTACK); + this->swordState = 1; + } else if (Animation_OnFrame(&this->skelAnime, 6.0f)) { + this->swordState = -1; + } + + if (this->swordCollider.base.atFlags & AT_BOUNCED) { + this->swordState = -1; + this->swordCollider.base.atFlags &= ~(AT_BOUNCED | AT_HIT); + func_80B87E28(this); + return; + } + + this->unk_2D8 = 0; + if (this->frameCount <= curFrame) { + if (!Actor_IsFacingPlayer(&this->picto.actor, 0x1554)) { + func_80B872A4(this); + + if (sp2C > 0x4000) { + this->lookTimer = 20; + } + } else { + if (Rand_ZeroOne() > 0.7f || this->picto.actor.xzDistToPlayer >= 120.0f) { + func_80B872A4(this); + return; + } + + this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + + if (BREG(12) * 0.1f + 0.01f * 40.0f < Rand_ZeroOne()) { + func_80B87900(this); + } else if (sp2E <= 0x2710) { + if (sp2C > 0x4000) { + this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + func_80B88CD8(this); + } else { + func_80B85A00(this, play, true); + } + } else { + func_80B88CD8(this); + } + } + } +} + +void func_80B88214(EnKaizoku* this) { + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_8); + this->unk_2B2 = 0; + this->picto.actor.speedXZ = 10.0f; + this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y = this->picto.actor.yawTowardsPlayer; + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_TEKU_JUMP); + this->action = KAIZOKU_ACTION_5; + this->actionFunc = func_80B88278; +} + +void func_80B88278(EnKaizoku* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + + this->unk_2D8 = 0; + if (this->frameCount <= curFrame) { + this->picto.actor.speedXZ = 0.0f; + if (!Actor_IsFacingPlayer(&this->picto.actor, 0x1554)) { + func_80B872A4(this); + this->unk_2B2 = Rand_ZeroOne() * 5.0f + 5.0f; + } else { + func_80B87F70(this); + } + } + if (!(play->gameplayFrames & 0x5F)) { + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_BREATH); + } +} + +void func_80B8833C(EnKaizoku* this) { + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_4); + this->action = KAIZOKU_ACTION_4; + this->actionFunc = func_80B88378; +} + +void func_80B88378(EnKaizoku* this, PlayState* play) { + Player* player = GET_PLAYER(play); + s32 sp30; + s32 sp2C; + s16 sp2A; + + if (!func_80B85858(this, play)) { + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 1, 0x2EE, 0); + this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y; + if (this->picto.actor.xzDistToPlayer <= 40.0f) { + Math_ApproachF(&this->picto.actor.speedXZ, -8.0f, 1.0f, 1.5f); + } else if (this->picto.actor.xzDistToPlayer > 55.0f) { + Math_ApproachF(&this->picto.actor.speedXZ, 8.0f, 1.0f, 1.5f); + } else { + Math_ApproachZeroF(&this->picto.actor.speedXZ, 2.0f, 6.65f); + } + + this->skelAnime.playSpeed = 1.0f; + sp2A = ABS_ALT(player->actor.shape.rot.y - this->picto.actor.shape.rot.y); + if (this->picto.actor.xzDistToPlayer < 150.0f && player->meleeWeaponState != 0 && sp2A >= 0x2000) { + this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + if (Rand_ZeroOne() > 0.7f) { + func_80B88CD8(this); + return; + } + } + + sp30 = this->skelAnime.curFrame - this->skelAnime.playSpeed; + sp2C = this->skelAnime.curFrame + this->skelAnime.playSpeed; + if (!Actor_IsFacingPlayer(&this->picto.actor, 0x11C7)) { + if (Rand_ZeroOne() > 0.5f) { + func_80B88CD8(this); + } else { + func_80B872A4(this); + } + } else if (this->picto.actor.xzDistToPlayer < 90.0f) { + if ((Rand_ZeroOne() > 0.03f) || ((this->picto.actor.xzDistToPlayer <= 65.0f) && (sp2A < 0x4000))) { + func_80B87F70(this); + } else if (Actor_OtherIsTargeted(play, &this->picto.actor) && (Rand_ZeroOne() > 0.5f)) { + func_80B87E28(this); + } else { + func_80B88CD8(this); + } + } + + if (!func_80B85A00(this, play, false)) { + if (this->picto.actor.xzDistToPlayer < 210.0f && this->picto.actor.xzDistToPlayer > 150.0f && + Actor_IsFacingPlayer(&this->picto.actor, 0x1388)) { + if (Actor_IsTargeted(play, &this->picto.actor)) { + if (Rand_ZeroOne() > 0.5f) { + func_80B88214(this); + } else { + func_80B88910(this); + } + } else { + func_80B88CD8(this); + return; + } + } + + if (!(play->gameplayFrames & 0x5F)) { + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_BREATH); + } + + if ((this->skelAnime.curFrame != 0.0f) && ((sp30 < 0 && sp2C > 0) || (sp30 < 4 && sp2C >= 5))) { + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_GERUDOFT_WALK); + } + } + } +} + +void func_80B88770(EnKaizoku* this) { + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_3); + this->action = KAIZOKU_ACTION_10; + this->actionFunc = func_80B887AC; +} + +void func_80B887AC(EnKaizoku* this, PlayState* play) { + s16 temp_v0; + s16 var_a2; + + if (!func_80B85858(this, play) && !func_80B85A00(this, play, false)) { + temp_v0 = this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y; + if (temp_v0 > 0) { + var_a2 = (s16)(temp_v0 * 0.25f) + 0x7D0; + } else { + var_a2 = (s16)(temp_v0 * 0.25f) - 0x7D0; + } + this->picto.actor.shape.rot.y += var_a2; + this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y; + this->skelAnime.playSpeed = 1.0f; + + if (Actor_IsFacingPlayer(&this->picto.actor, 0x1388)) { + if (Rand_ZeroOne() > 0.8f) { + func_80B88CD8(this); + } else { + func_80B8833C(this); + } + } + if (!(play->gameplayFrames & 0x5F)) { + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_BREATH); + } + } +} + +void func_80B88910(EnKaizoku* this) { + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_10); + this->swordCollider.base.atFlags &= ~(AT_BOUNCED | AT_HIT); + this->unk_2D0 = 0; + this->action = KAIZOKU_ACTION_11; + this->actionFunc = func_80B88964; + this->picto.actor.speedXZ = 0.0f; +} + +void func_80B88964(EnKaizoku* this, PlayState* play) { + Player* player = GET_PLAYER(play); + f32 curFrame = this->skelAnime.curFrame; + s16 v1; + s16 a0; + s32 pad; + + if (this->unk_2D0 < 2) { + if (this->swordCollider.base.atFlags & AT_BOUNCED) { + this->swordCollider.base.atFlags &= ~(AT_BOUNCED | AT_HIT); + this->unk_2D0 = 1; + this->skelAnime.playSpeed = 1.0f; + } + } + + if (this->skelAnime.curFrame <= 8.0f) { + this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + } else { + if (Animation_OnFrame(&this->skelAnime, 13.0f)) { + Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->leftFootPos, 3.0f, 2, 2.0f, 0, 0, 0); + Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->rightFootPos, 3.0f, 2, 2.0f, 0, 0, 0); + this->swordState = 1; + this->picto.actor.speedXZ = 10.0f; + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_ATTACK); + } else if (Animation_OnFrame(&this->skelAnime, 21.0f)) { + this->picto.actor.speedXZ = 0.0f; + } else if (Animation_OnFrame(&this->skelAnime, 24.0f)) { + this->swordState = -1; + } + } + + this->unk_2D8 = 0; + if (this->frameCount <= curFrame && this->unk_2D0 < 2) { + if (!Actor_IsFacingPlayer(&this->picto.actor, 0x1554)) { + func_80B872A4(this); + this->unk_2B2 = Rand_ZeroOne() * 5.0f + 5.0f; + this->lookTimer = 46; + return; + } + + if (this->unk_2D0 != 0) { + func_80B87E28(this); + return; + } + + if ((Rand_ZeroOne() > 0.7f) || (this->picto.actor.xzDistToPlayer >= 120.0f)) { + func_80B872A4(this); + this->unk_2B2 = Rand_ZeroOne() * 5.0f + 5.0f; + return; + } + + this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + if (BREG(12) * 0.1f + 0.01f * 40.0f < Rand_ZeroOne()) { + func_80B87900(this); + return; + } + + v1 = ABS_ALT(player->actor.shape.rot.y - this->picto.actor.shape.rot.y); + if (v1 <= 0x2710) { + + a0 = ABS_ALT(this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y); + if (a0 > 0x4000) { + this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; + func_80B88CD8(this); + } else { + func_80B85A00(this, play, true); + } + } else { + func_80B88CD8(this); + } + } +} + +void func_80B88CD8(EnKaizoku* this) { + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_3); + this->picto.actor.speedXZ = randPlusMinusPoint5Scaled(12.0f); + this->skelAnime.playSpeed = 1.0f; + this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y; + this->unk_2B2 = Rand_ZeroOne() * 30.0f + 30.0f; + this->action = KAIZOKU_ACTION_3; + this->actionFunc = func_80B88D6C; + this->unk_2E0 = 0.0f; +} + +void func_80B88D6C(EnKaizoku* this, PlayState* play) { + Player* player = GET_PLAYER(play); + s16 sp2A; + s32 temp_ft4; + s32 temp_ft5; + s16 yaw; + + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 1, 0xFA0, 1); + if (!func_80B85858(this, play) && !func_80B85A00(this, play, false)) { + this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y + 0x4000; + sp2A = player->actor.shape.rot.y + 0x8000; + if (Math_SinS(sp2A - this->picto.actor.shape.rot.y) >= 0.0f) { + this->picto.actor.speedXZ -= 0.25f; + if (this->picto.actor.speedXZ < -8.0f) { + this->picto.actor.speedXZ = -8.0f; + } + } else if (Math_SinS((sp2A - this->picto.actor.shape.rot.y)) < 0.0f) { + this->picto.actor.speedXZ += 0.25f; + if (this->picto.actor.speedXZ > 8.0f) { + this->picto.actor.speedXZ = 8.0f; + } + } + + if ((this->picto.actor.bgCheckFlags & 8) || + !Actor_TestFloorInDirection(&this->picto.actor, play, this->picto.actor.speedXZ, + this->picto.actor.shape.rot.y + 0x4000)) { + + if (this->picto.actor.bgCheckFlags & 8) { + if (this->picto.actor.speedXZ >= 0.0f) { + yaw = this->picto.actor.shape.rot.y + 0x4000; + } else { + yaw = this->picto.actor.shape.rot.y - 0x4000; + } + yaw = this->picto.actor.wallYaw - yaw; + } else { + this->picto.actor.speedXZ *= -0.8f; + yaw = 0; + } + + if (ABS_ALT(yaw) > 0x4000) { + this->picto.actor.speedXZ *= -0.8f; + if (this->picto.actor.speedXZ < 0.0f) { + this->picto.actor.speedXZ -= 0.5f; + } else { + this->picto.actor.speedXZ += 0.5f; + } + } + } + + if (this->picto.actor.xzDistToPlayer <= 65.0f) { + Math_ApproachF(&this->unk_2E0, -4.0f, 1.0f, 1.5f); + } else if (this->picto.actor.xzDistToPlayer > 40.0f) { + Math_ApproachF(&this->unk_2E0, 4.0f, 1.0f, 1.5f); + } else { + Math_ApproachZeroF(&this->unk_2E0, 1.0f, 6.65f); + } + + if (this->unk_2E0 != 0.0f) { + this->picto.actor.world.pos.x += Math_SinS(this->picto.actor.shape.rot.y) * this->unk_2E0; + this->picto.actor.world.pos.z += Math_CosS(this->picto.actor.shape.rot.y) * this->unk_2E0; + } + + temp_ft4 = this->skelAnime.curFrame - this->skelAnime.playSpeed; + temp_ft5 = this->skelAnime.curFrame + this->skelAnime.playSpeed; + if (this->skelAnime.curFrame != 0.0f) { + if (((temp_ft4 < 0 && temp_ft5 > 0) || (temp_ft4 < 5 && temp_ft5 > 5))) { + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_GERUDOFT_WALK); + } + } + + if (!(play->gameplayFrames & 0x5F)) { + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_BREATH); + } + + if (this->picto.actor.xzDistToPlayer <= 65.0f) { + func_80B87F70(this); + } else if (this->unk_2B2 == 0) { + if (Actor_OtherIsTargeted(play, &this->picto.actor) && (Rand_ZeroOne() > 0.5f)) { + func_80B87E28(this); + } else { + func_80B872A4(this); + } + } + } +} + +// EnKaizoku_SetupStunned +void func_80B891B8(EnKaizoku* this) { + if (this->picto.actor.bgCheckFlags & 1) { + this->picto.actor.speedXZ = 0.0f; + } + + if (this->action == KAIZOKU_ACTION_11) { + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_5); + } + + if (((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || + (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) && + (this->unk_2B8 == 0)) { + this->unk_2B8 = 0; + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; + } + + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_COMMON_FREEZE); + this->unk_2D8 = 1; + + if ((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_SFX) && + (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) { + this->unk_2B6 = 40; + } + + this->action = KAIZOKU_ACTION_13; + this->actionFunc = func_80B89280; +} + +// EnKaizoku_Stunned +void func_80B89280(EnKaizoku* this, PlayState* play) { + if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) { + if (this->unk_2B8 != 0 && this->unk_2B8 < 60) { + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; + } + } + + if (this->picto.actor.bgCheckFlags & 2) { + this->picto.actor.speedXZ = 0.0f; + } + + if (this->picto.actor.bgCheckFlags & 1) { + if (this->picto.actor.speedXZ < 0.0f) { + this->picto.actor.speedXZ += 0.05f; + } + } + + if ((this->unk_2B6 == 0) && (this->unk_2B8 == 0) && !CHECK_FLAG_ALL(this->picto.actor.flags, ACTOR_FLAG_2000) && + (this->picto.actor.bgCheckFlags & 1)) { + this->unk_2D8 = 0; + func_80B85A00(this, play, true); + + if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX || + this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { + Actor_SpawnIceEffects(play, &this->picto.actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, + 0.7f, 0.4f); + this->unk_2B8 = 0; + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; + this->picto.actor.flags |= ACTOR_FLAG_400; + } + } +} + +void func_80B893CC(EnKaizoku* this, PlayState* play) { + Vec3f sp34; + + Matrix_RotateYS(this->picto.actor.yawTowardsPlayer, MTXMODE_NEW); + Matrix_MultVecZ(-10.0f, &sp34); + Math_Vec3f_Copy(&this->unk_3C4, &sp34); + this->lookTimer = 0; + this->unk_2D8 = 0; + this->picto.actor.speedXZ = 0.0f; + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_5); + + if (((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || + (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) && + (this->unk_2B8 != 0)) { + Actor_SpawnIceEffects(play, &this->picto.actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, 0.7f, + 0.4f); + this->unk_2B8 = 0; + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; + this->picto.actor.flags |= ACTOR_FLAG_400; + } + + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_DAMAGE); + this->action = KAIZOKU_ACTION_14; + this->actionFunc = func_80B894C0; +} + +void func_80B894C0(EnKaizoku* this, PlayState* play) { + s16 temp_v0; + + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 1, 4500, 0); + if (!func_80B85858(this, play) && !func_80B85A00(this, play, false) && (this->unk_3C4.x < 1.0f) && + (this->unk_3C4.z < 1.0f)) { + temp_v0 = this->picto.actor.wallYaw - this->picto.actor.shape.rot.y; + if (this->picto.actor.bgCheckFlags & 8) { + if (ABS_ALT(temp_v0) < 0x3000 && (this->picto.actor.xzDistToPlayer < 90.0f)) { + func_80B87C7C(this); + return; + } + } + + if (this->picto.actor.xzDistToPlayer <= 65.0f && ((play->gameplayFrames % 8) != 0)) { + this->swordCollider.info.elemType = ELEMTYPE_UNK2; + func_80B87F70(this); + } else { + func_80B87E28(this); + } + } +} + +void func_80B8960C(EnKaizoku* this, PlayState* play) { + Vec3f sp24; + + this->picto.actor.flags |= ACTOR_FLAG_100000; + Matrix_RotateYS(this->picto.actor.yawTowardsPlayer, MTXMODE_NEW); + Matrix_MultVecZ(-10.0f, &sp24); + Math_Vec3f_Copy(&this->unk_3C4, &sp24); + EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_16); + + if (((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || + (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) && + (this->unk_2B8 == 0)) { + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; + } + this->picto.actor.speedXZ = 0.0f; + this->unk_2D8 = 1; + func_800B7298(play, &this->picto.actor, 0x7B); + Enemy_StartFinishingBlow(play, &this->picto.actor); + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_DEAD); + this->picto.actor.flags |= ACTOR_FLAG_8000000; + this->picto.actor.flags &= ~ACTOR_FLAG_1; + this->picto.actor.flags &= ~ACTOR_FLAG_400; + this->unk_598 = 0; + this->unk_59C = 0; + this->action = KAIZOKU_ACTION_15; + this->actionFunc = func_80B8971C; +} + +void func_80B8971C(EnKaizoku* this, PlayState* play) { + f32 curFrame = this->skelAnime.curFrame; + Player* player; + + if (this->picto.actor.bgCheckFlags & 2) { + this->picto.actor.speedXZ = 0.0f; + } + + if (this->picto.actor.bgCheckFlags & 1) { + Math_SmoothStepToF(&this->picto.actor.speedXZ, 0.0f, 1.0f, 0.5f, 0.0f); + } + + if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || + (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) { + if (this->unk_2B8 == 0) { + return; + } + Actor_SpawnIceEffects(play, &this->picto.actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, 0.7f, + 0.4f); + this->unk_2B8 = 0; + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; + } + + if (curFrame >= 25.0f) { + player = GET_PLAYER(play); + if (this->subCamId == 0) { + if (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) { + ActorCutscene_SetIntentToPlay(this->unk_2D6); + return; + } + ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->picto.actor); + this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene); + } + + Math_Vec3f_Copy(&this->unk_3C4, &gZeroVec3f); + player->actor.world.pos.x = this->picto.actor.home.pos.x + 90.0f; + player->actor.world.pos.z = this->picto.actor.home.pos.z + 30.0f; + this->picto.actor.world.pos.x = this->picto.actor.home.pos.x; + this->picto.actor.world.pos.z = this->picto.actor.home.pos.z; + + this->subCamEye.x = this->unk_5C8.x = player->actor.world.pos.x + 39.0f; + this->subCamEye.y = this->unk_5C8.y = player->actor.world.pos.y + 4.0f; + this->subCamEye.z = this->unk_5C8.z = player->actor.world.pos.z - 41.0f; + + this->subCamAt.x = this->unk_5D4.x = player->actor.world.pos.x - 150.0f; + this->subCamAt.y = this->unk_5D4.y = player->actor.world.pos.y + 60.0f; + this->subCamAt.z = this->unk_5D4.z = player->actor.world.pos.z + 50.0f; + + player->actor.shape.rot.y = player->actor.world.rot.y = + Math_Vec3f_Yaw(&player->actor.world.pos, &this->picto.actor.world.pos); + + if (this->subCamId != 0) { + this->subCamUp.x = 0.0f; + this->subCamUp.y = 1.0f; + this->subCamUp.z = 0.0f; + Play_SetCameraAtEyeUp(play, this->subCamId, &this->subCamAt, &this->subCamEye, &this->subCamUp); + } + } + + Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 1, 0xFA0, 1); + SkelAnime_Update(&this->skelAnime); + if (this->frameCount <= curFrame) { + this->unk_2D8 = 0; + func_80B86B58(this); + } else if (Animation_OnFrame(&this->skelAnime, 10.0f)) { + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_GERUDOFT_DOWN); + } +} + +void func_80B89A08(EnKaizoku* this, PlayState* play) { + s32 sp64 = 0; + Vec3f sp58; + s32 i; + + if (gSaveContext.save.playerData.health <= 0x10) { + this->swordCollider.info.toucher.damage = 0; + } else { + this->swordCollider.info.toucher.damage = 4; + } + + if (!(this->swordCollider.base.atFlags & AT_BOUNCED) && (this->swordCollider.base.atFlags & AT_HIT)) { + if ((gSaveContext.save.playerData.health <= 0x10) && (this->action != KAIZOKU_ACTION_16)) { + this->unk_2D0 = 2; + this->subCamId = 0; + this->picto.actor.flags |= ACTOR_FLAG_100000; + + if (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) { + ActorCutscene_SetIntentToPlay(this->unk_2D6); + this->actionFunc = func_80B86804; + } else { + ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->picto.actor); + this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene); + this->actionFunc = func_80B86804; + } + return; + } else if ((this->action == KAIZOKU_ACTION_11) && (this->swordCollider.base.at == &GET_PLAYER(play)->actor)) { + func_800B8D98(play, &this->picto.actor, 3.0f, this->picto.actor.yawTowardsPlayer, 1.0f); + Health_ChangeBy(play, -0xC); + if ((gSaveContext.save.playerData.health <= 0x10) && (this->action != KAIZOKU_ACTION_16)) { + Health_ChangeBy(play, 0x10); + this->unk_2D0 = 2; + this->subCamId = 0; + this->picto.actor.flags |= ACTOR_FLAG_100000; + + if (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) { + ActorCutscene_SetIntentToPlay(this->unk_2D6); + this->actionFunc = func_80B86804; + } else { + ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->picto.actor); + this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene); + this->actionFunc = func_80B86804; + } + return; + } + } + + if (this->swordCollider.base.at->id == ACTOR_OBJ_TARU) { + this->swordCollider.base.at->home.rot.z = 1; + } + } + + if ((this->picto.actor.bgCheckFlags & 8) && (this->picto.actor.wallBgId != BG_ACTOR_MAX) && + ((this->action == KAIZOKU_ACTION_2) || (this->action == KAIZOKU_ACTION_3) || + (this->action == KAIZOKU_ACTION_4) || (this->action == KAIZOKU_ACTION_1))) { + func_80B87F70(this); + } + + if ((this->bodyCollider.base.acFlags & AC_HIT) && (this->action > KAIZOKU_ACTION_0) && (this->unk_2D0 < 2) && + (this->action != KAIZOKU_ACTION_6) && (this->action != KAIZOKU_ACTION_12) && + (this->action != KAIZOKU_ACTION_14) && (this->action != KAIZOKU_ACTION_15)) { + Actor_SetDropFlag(&this->picto.actor, &this->bodyCollider.info); + AudioSfx_StopByPosAndId(&this->picto.actor.projectedPos, NA_SE_EN_PIRATE_BREATH); + + switch (this->picto.actor.colChkInfo.damageEffect) { + case KAIZOKU_DMGEFF_5: + if (((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_SFX) && + (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) || + (this->unk_2B8 == 0)) { + this->unk_2B8 = 40; + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM; + } + /* fallthrough */ + case KAIZOKU_DMGEFF_1: + if (((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_SFX) && + (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) || + this->unk_2B8 == 0) { + Actor_SetColorFilter(&this->picto.actor, 0, 120, 0, 40); + this->bodyCollider.info.elemType = ELEMTYPE_UNK1; + this->bodyCollider.base.colType = COLTYPE_HIT3; + this->swordCollider.info.elemType = ELEMTYPE_UNK2; + func_80B891B8(this); + } + break; + + case KAIZOKU_DMGEFF_F: + if ((this->action != KAIZOKU_ACTION_5) && (this->action != KAIZOKU_ACTION_7) && + (this->action < KAIZOKU_ACTION_14)) { + sp64 = 1; + } + break; + + case KAIZOKU_DMGEFF_E: + sp64 = 1; + break; + + case KAIZOKU_DMGEFF_D: + if (this->action == KAIZOKU_ACTION_13) { + sp64 = 1; + } else if (this->action != KAIZOKU_ACTION_6) { + func_80B87C7C(this); + } + break; + + case KAIZOKU_DMGEFF_2: + if ((this->action != KAIZOKU_ACTION_5) && (this->action != KAIZOKU_ACTION_7) && + (this->action < KAIZOKU_ACTION_14)) { + this->unk_2B8 = 40; + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; + sp64 = 1; + } + break; + + case KAIZOKU_DMGEFF_FREEZE: + if (((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_SFX) && + (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) || + (this->unk_2B8 == 0)) { + Actor_ApplyDamage(&this->picto.actor); + this->bodyCollider.info.elemType = ELEMTYPE_UNK1; + this->bodyCollider.base.colType = COLTYPE_HIT3; + this->swordCollider.info.elemType = ELEMTYPE_UNK4; + this->unk_2B8 = 80; + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_SFX; + this->drawDmgEffScale = 0.0f; + this->drawDmgEffFrozenSteamScale = 1.5f; + this->picto.actor.flags &= ~ACTOR_FLAG_400; + if (this->picto.actor.colChkInfo.health <= 0) { + func_80B8960C(this, play); + } else { + func_80B891B8(this); + } + } + break; + + case KAIZOKU_DMGEFF_4: + if (((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_SFX) && + (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) || + (this->unk_2B8 == 0)) { + this->unk_2B8 = 20; + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->picto.actor.focus.pos.x, + this->picto.actor.focus.pos.y, this->picto.actor.focus.pos.z, 0, 0, 0, + CLEAR_TAG_LARGE_LIGHT_RAYS); + sp64 = 1; + } + break; + } + + if (sp64) { + Actor_SetColorFilter(&this->picto.actor, 0x4000, 255, 0, 8); + Actor_ApplyDamage(&this->picto.actor); + if (this->picto.actor.colChkInfo.health <= 0) { + func_80B8960C(this, play); + return; + } + + this->bodyCollider.info.elemType = ELEMTYPE_UNK1; + this->bodyCollider.base.colType = COLTYPE_HIT3; + this->swordCollider.info.elemType = ELEMTYPE_UNK4; + Math_Vec3f_Copy(&sp58, &this->picto.actor.focus.pos); + for (i = 0; i < 3; i++) { + sp58.y += Rand_ZeroFloat(20.0f); + CollisionCheck_BlueBlood(play, NULL, &sp58); + } + + func_80B893CC(this, play); + } + } else if (this->bodyCollider.base.acFlags & AC_HIT) { + if ((this->action != KAIZOKU_ACTION_6) && (this->action != KAIZOKU_ACTION_14) && + (this->action != KAIZOKU_ACTION_15)) { + Vec3f pos; + Player* player = GET_PLAYER(play); + + pos.x = this->bodyCollider.info.bumper.hitPos.x; + pos.y = this->bodyCollider.info.bumper.hitPos.y; + pos.z = this->bodyCollider.info.bumper.hitPos.z; + + if (player->transformation != PLAYER_FORM_HUMAN) { + player->unk_B84 = this->picto.actor.yawTowardsPlayer; + player->unk_B80 = 15.0f; + } + + this->bodyCollider.base.acFlags &= ~AC_HIT; + Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_IT_SHIELD_BOUND); + EffectSsHitmark_SpawnFixedScale(play, 3, &pos); + CollisionCheck_SpawnShieldParticlesMetal(play, &pos); + } + } +} + +static Vec3f sFootOffset = { 300.0f, 0.0f, 0.0f }; + +static Vec3f sSwordTipOffset = { 0.0f, -3000.0f, 0.0f }; +static Vec3f sSwordHiltOffset = { 400.0f, 0.0f, 0.0f }; + +static Vec3f sSwordQuadOffset1 = { 1600.0f, -4000.0f, 0.0f }; +static Vec3f sSwordQuadOffset0 = { -3000.0f, -2000.0f, 1300.0f }; +static Vec3f sSwordQuadOffset3 = { -3000.0f, -2000.0f, -1300.0f }; +static Vec3f sSwordQuadOffset2 = { 1000.0f, 1000.0f, 0.0f }; + +static TexturePtr sEyeTextures[] = { + gKaizokuEyeOpenTex, + gKaizokuEyeHalfTex, + gKaizokuEyeClosedTex, + gKaizokuEyeHalfTex, +}; + +void EnKaizoku_Update(Actor* thisx, PlayState* play2) { + EnKaizoku* this = THIS; + PlayState* play = play2; + Vec3f sp34; + s32 pad; + + if (this->unk_2D8 == 0) { + SkelAnime_Update(&this->skelAnime); + } + + if (this->action != KAIZOKU_ACTION_0) { + func_80B85900(this); + } + + if (this->blinkTimer != 0) { + this->blinkTimer--; + } + if (this->unk_2B2 != 0) { + this->unk_2B2--; + } + if (this->lookTimer != 0) { + this->lookTimer--; + } + if (this->unk_2B6 != 0) { + this->unk_2B6--; + } + if (this->unk_598 != 0) { + this->unk_598--; + } + if (this->unk_2B8 != 0) { + this->unk_2B8--; + } + + this->actionFunc(this, play); + Actor_MoveWithGravity(&this->picto.actor); + if (this->action != KAIZOKU_ACTION_0) { + func_80B89A08(this, play); + } + if (this->action != KAIZOKU_ACTION_0) { + Actor_SetFocus(&this->picto.actor, 60.0f); + } + + Actor_SetScale(&this->picto.actor, 0.0125f); + if (this->blinkTimer == 0) { + this->eyeIndex++; + if (this->eyeIndex >= ARRAY_COUNT(sEyeTextures)) { + this->eyeIndex = 0; + this->blinkTimer = Rand_S16Offset(20, 60); + } + } + + if (this->picto.actor.bgCheckFlags & 1) { + Matrix_RotateYS(this->picto.actor.shape.rot.y + this->unk_2F4, 0); + Matrix_MultVecZ(this->unk_2F0, &sp34); + this->picto.actor.world.pos.x += this->unk_3C4.x + sp34.x; + this->picto.actor.world.pos.z += this->unk_3C4.z + sp34.z; + Math_ApproachZeroF(&this->unk_3C4.x, 1.0f, 2.0f); + Math_ApproachZeroF(&this->unk_3C4.z, 1.0f, 2.0f); + Math_ApproachZeroF(&this->unk_2F0, 1.0f, 5.0f); + } + + Actor_UpdateBgCheckInfo(play, &this->picto.actor, 35.0f, 40.0f, 35.0f, 0x1F); + Collider_UpdateCylinder(&this->picto.actor, &this->bodyCollider); + CollisionCheck_SetOC(play, &play->colChkCtx, &this->bodyCollider.base); + if ((this->unk_2D0 < 2) && (this->action != KAIZOKU_ACTION_0)) { + CollisionCheck_SetAC(play, &play->colChkCtx, &this->bodyCollider.base); + } + if (this->swordState > 0) { + CollisionCheck_SetAT(play, &play->colChkCtx, &this->swordCollider.base); + } +} + +s32 EnKaizoku_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { + EnKaizoku* this = THIS; + + OPEN_DISPS(play->state.gfxCtx); + + if (limbIndex == KAIZOKU_LIMB_05) { + *dList = NULL; + } + + if (limbIndex == KAIZOKU_LIMB_03) { + rot->z += this->headRot.x; + rot->x += this->headRot.y; + rot->y += this->headRot.z; + } else if (limbIndex == KAIZOKU_LIMB_06) { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetEnvColor(POLY_OPA_DISP++, D_80B8AB24[this->unk_2EC].r, D_80B8AB24[this->unk_2EC].g, + D_80B8AB24[this->unk_2EC].b, 255); + } else { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetEnvColor(POLY_OPA_DISP++, D_80B8AB30[this->unk_2EC].r, D_80B8AB30[this->unk_2EC].g, + D_80B8AB30[this->unk_2EC].b, 255); + } + + CLOSE_DISPS(play->state.gfxCtx); + + return false; +} + +void EnKaizoku_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { + Vec3f swordTip; + Vec3f swordHilt; + EnKaizoku* this = THIS; + + if (limbIndex == KAIZOKU_LIMB_R_SWORD) { + Matrix_MultVec3f(&sSwordQuadOffset1, &this->swordCollider.dim.quad[1]); + Matrix_MultVec3f(&sSwordQuadOffset0, &this->swordCollider.dim.quad[0]); + Matrix_MultVec3f(&sSwordQuadOffset3, &this->swordCollider.dim.quad[3]); + Matrix_MultVec3f(&sSwordQuadOffset2, &this->swordCollider.dim.quad[2]); + Collider_SetQuadVertices(&this->swordCollider, &this->swordCollider.dim.quad[0], + &this->swordCollider.dim.quad[1], &this->swordCollider.dim.quad[2], + &this->swordCollider.dim.quad[3]); + Matrix_MultVec3f(&sSwordTipOffset, &swordTip); + Matrix_MultVec3f(&sSwordHiltOffset, &swordHilt); + + if ((this->swordState == 1) && ((this->action == KAIZOKU_ACTION_9) || (this->action == KAIZOKU_ACTION_11))) { + EffectBlure_AddVertex(Effect_GetByIndex(this->blureIndex), &swordTip, &swordHilt); + } else if (this->swordState != 0) { + EffectBlure_AddSpace(Effect_GetByIndex(this->blureIndex)); + this->swordState = 0; + } + } else { + Actor_SetFeetPos(&this->picto.actor, limbIndex, KAIZOKU_LIMB_L_FOOT, &sFootOffset, KAIZOKU_LIMB_R_FOOT, + &sFootOffset); + } + + if (limbIndex == KAIZOKU_LIMB_L_FOOT) { + Matrix_MultVec3f(&sFootOffset, &this->leftFootPos); + } else if (limbIndex == KAIZOKU_LIMB_R_FOOT) { + Matrix_MultVec3f(&sFootOffset, &this->rightFootPos); + } + + if (limbIndex == KAIZOKU_LIMB_02 || limbIndex == KAIZOKU_LIMB_06 || limbIndex == KAIZOKU_LIMB_07 || + limbIndex == KAIZOKU_LIMB_08 || limbIndex == KAIZOKU_LIMB_0A || limbIndex == KAIZOKU_LIMB_0C || + limbIndex == KAIZOKU_LIMB_0D || limbIndex == KAIZOKU_LIMB_0F || limbIndex == KAIZOKU_LIMB_11 || + limbIndex == KAIZOKU_LIMB_12 || limbIndex == KAIZOKU_LIMB_L_FOOT || limbIndex == KAIZOKU_LIMB_14 || + limbIndex == KAIZOKU_LIMB_15 || limbIndex == KAIZOKU_LIMB_R_FOOT || limbIndex == KAIZOKU_LIMB_17) { + Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsPosIndex]); + + this->bodyPartsPosIndex++; + if (this->bodyPartsPosIndex >= ARRAY_COUNT(this->bodyPartsPos)) { + this->bodyPartsPosIndex = 0; + } + } +} + +void EnKaizoku_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { + EnKaizoku* this = THIS; + + if (limbIndex == KAIZOKU_LIMB_R_SWORD) { + Matrix_Scale(this->unk_2F8.x, this->unk_2F8.y, this->unk_2F8.z, MTXMODE_APPLY); + } + if (limbIndex == KAIZOKU_LIMB_10) { + Matrix_Scale(this->unk_304.x, this->unk_304.y, this->unk_304.z, MTXMODE_APPLY); + } +} + +void EnKaizoku_Draw(Actor* thisx, PlayState* play) { + f32 pad[4]; + f32 drawDmgEffAlpha; + EnKaizoku* this = THIS; + + func_8012C2DC(play->state.gfxCtx); + func_8012C28C(play->state.gfxCtx); + + OPEN_DISPS(play->state.gfxCtx); + + gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeIndex])); + SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, + this->skelAnime.dListCount, EnKaizoku_OverrideLimbDraw, EnKaizoku_PostLimbDraw, + EnKaizoku_TransformLimbDraw, &this->picto.actor); + + if (this->unk_2B8 != 0) { + drawDmgEffAlpha = this->unk_2B8 * 0.05f; + + if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || + (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) { + this->drawDmgEffScale += 0.3f; + if (this->drawDmgEffScale > 0.5f) { + this->drawDmgEffScale = 0.5f; + } + Math_ApproachF(&this->drawDmgEffFrozenSteamScale, this->drawDmgEffScale, 0.1f, 0.04f); + } else { + this->drawDmgEffScale = 0.8f; + this->drawDmgEffFrozenSteamScale = 0.8f; + } + + Actor_DrawDamageEffects(play, &this->picto.actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), + this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, drawDmgEffAlpha, + this->drawDmgEffType); + } + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h index cc282f19f..ad161088e 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h @@ -2,19 +2,98 @@ #define Z_EN_KAIZOKU_H #include "global.h" +#include "z64snap.h" +#include "objects/object_kz/object_kz.h" + +#define KAIZOKU_GET_EXIT_INDEX(thisx) ((thisx)->params & 0x3F) +#define KAIZOKU_GET_SWITCHFLAG(thisx) (((thisx)->params >> 6) & 0x7F) struct EnKaizoku; typedef void (*EnKaizokuActionFunc)(struct EnKaizoku*, PlayState*); +typedef enum EnKaizokuAnimation { + /* 0 */ EN_KAIZOKU_ANIM_0, + /* 1 */ EN_KAIZOKU_ANIM_1, + /* 2 */ EN_KAIZOKU_ANIM_2, + /* 3 */ EN_KAIZOKU_ANIM_3, + /* 4 */ EN_KAIZOKU_ANIM_4, + /* 5 */ EN_KAIZOKU_ANIM_5, + /* 6 */ EN_KAIZOKU_ANIM_6, + /* 7 */ EN_KAIZOKU_ANIM_7, + /* 8 */ EN_KAIZOKU_ANIM_8, + /* 9 */ EN_KAIZOKU_ANIM_9, + /* 10 */ EN_KAIZOKU_ANIM_10, + /* 11 */ EN_KAIZOKU_ANIM_11, + /* 12 */ EN_KAIZOKU_ANIM_12, + /* 13 */ EN_KAIZOKU_ANIM_13, + /* 14 */ EN_KAIZOKU_ANIM_14, + /* 15 */ EN_KAIZOKU_ANIM_15, + /* 16 */ EN_KAIZOKU_ANIM_16, + /* 17 */ EN_KAIZOKU_ANIM_17, + /* 18 */ EN_KAIZOKU_ANIM_18, + /* 19 */ EN_KAIZOKU_ANIM_MAX +} EnKaizokuAnimation; + typedef struct EnKaizoku { - /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x168]; + /* 0x000 */ PictoActor picto; + /* 0x148 */ SkelAnime skelAnime; + /* 0x18C */ Vec3s jointTable[KAIZOKU_LIMB_MAX]; + /* 0x21C */ Vec3s morphTable[KAIZOKU_LIMB_MAX]; /* 0x2AC */ EnKaizokuActionFunc actionFunc; - /* 0x2B0 */ char unk_2B0[0x40]; + /* 0x2B0 */ s16 action; + /* 0x2B2 */ s16 unk_2B2; + /* 0x2B4 */ s16 lookTimer; + /* 0x2B6 */ s16 unk_2B6; + /* 0x2B8 */ s16 unk_2B8; + /* 0x2BA */ s16 drawDmgEffType; + /* 0x2BC */ s16 switchFlag; + /* 0x2BE */ s16 unk_2BE; + /* 0x2C0 */ f32 drawDmgEffScale; + /* 0x2C4 */ f32 drawDmgEffFrozenSteamScale; + /* 0x2C8 */ s16 unk_2C8; + /* 0x2CA */ s16 unk_2CA; + /* 0x2CC */ s16 eyeIndex; + /* 0x2CE */ s16 blinkTimer; + /* 0x2D0 */ s16 unk_2D0; + /* 0x2D2 */ s16 swordState; + /* 0x2D4 */ s16 exitIndex; + /* 0x2D6 */ s16 unk_2D6; + /* 0x2D8 */ u8 unk_2D8; + /* 0x2D9 */ u8 unk_2D9; + /* 0x2DC */ f32 frameCount; + /* 0x2E0 */ f32 unk_2E0; + /* 0x2E4 */ EnKaizokuAnimation animIndex; + /* 0x2E8 */ s32 bodyPartsPosIndex; + /* 0x2EC */ s32 unk_2EC; /* 0x2F0 */ f32 unk_2F0; /* 0x2F4 */ s16 unk_2F4; - /* 0x2F6 */ char unk_2F6[0x2FA]; + /* 0x2F8 */ Vec3f unk_2F8; + /* 0x304 */ Vec3f unk_304; + /* 0x310 */ Vec3f bodyPartsPos[15]; + /* 0x3C4 */ Vec3f unk_3C4; + /* 0x3D0 */ s32 blureIndex; + /* 0x3D4 */ ColliderCylinder bodyCollider; + /* 0x420 */ ColliderQuad swordCollider; + /* 0x4A0 */ ColliderTris blockCollider; // Unused. Inferred from OoT + /* 0x4C0 */ ColliderTrisElement blockElements[2]; // Unused. Inferred from OoT + /* 0x578 */ Vec3s headRot; + /* 0x580 */ Vec3f rightFootPos; + /* 0x58C */ Vec3f leftFootPos; + /* 0x598 */ s32 unk_598; + /* 0x59C */ s16 unk_59C; + /* 0x59E */ s16 subCamId; + /* 0x5A0 */ s16 unk_5A0; + /* 0x5A2 */ s16 unk_5A2; + /* 0x5A4 */ Vec3f subCamEye; + /* 0x5B0 */ Vec3f subCamAt; + /* 0x5BC */ Vec3f subCamUp; + /* 0x5C8 */ Vec3f unk_5C8; + /* 0x5D4 */ Vec3f unk_5D4; + /* 0x5E0 */ f32 unk_5E0; + /* 0x5E4 */ f32 unk_5E4; + /* 0x5E8 */ f32 unk_5E8; + /* 0x5EC */ f32 unk_5EC; } EnKaizoku; // size = 0x5F0 #endif // Z_EN_KAIZOKU_H diff --git a/src/overlays/actors/ovl_En_Kakasi/overlay.cfg b/src/overlays/actors/ovl_En_Kakasi/overlay.cfg deleted file mode 100644 index f933ca862..000000000 --- a/src/overlays/actors/ovl_En_Kakasi/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Kakasi -z_en_kakasi.c diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c index 4203feb6b..3ef617aec 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -177,14 +177,14 @@ void EnKakasi_Init(Actor* thisx, PlayState* play) { } if (this->aboveGroundStatus != 0) { - if (gSaveContext.save.weekEventReg[79] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_08)) { this->aboveGroundStatus = ENKAKASI_ABOVE_GROUND_TYPE; this->songSummonDist = 80.0f; EnKakasi_SetupIdleUnderground(this); } else { Actor_SetFocus(&this->picto.actor, 60.0f); this->picto.validationFunc = EnKakasi_ValidatePictograph; - if (gSaveContext.save.weekEventReg[83] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_83_01)) { EnKakasi_InitTimeSkipDialogue(this); } else { EnKakasi_SetupIdleStanding(this); @@ -301,12 +301,12 @@ void EnKakasi_TimeSkipDialogue(EnKakasi* this, PlayState* play) { if (gSaveContext.respawnFlag != -4 && gSaveContext.respawnFlag != -8) { if (gSaveContext.save.time != CLOCK_TIME(6, 0) && gSaveContext.save.time != CLOCK_TIME(18, 0) && - !(gSaveContext.eventInf[1] & 0x80)) { + !CHECK_EVENTINF(EVENTINF_17)) { if (this->picto.actor.textId == 0) { // dialogue after skipped time 'did you feel that? went by in an instant' this->picto.actor.textId = 0x1653; - gSaveContext.save.weekEventReg[83] &= (u8)~1; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_01); this->talkState = TEXT_STATE_5; player->stateFlags1 |= PLAYER_STATE1_20; this->picto.actor.flags |= ACTOR_FLAG_10000; @@ -318,7 +318,7 @@ void EnKakasi_TimeSkipDialogue(EnKakasi* this, PlayState* play) { this->picto.actor.flags &= ~ACTOR_FLAG_10000; this->actionFunc = EnKakasi_RegularDialogue; } else { - func_800B8500(&this->picto.actor, play, 9999.9f, 9999.9f, PLAYER_AP_MINUS1); + func_800B8500(&this->picto.actor, play, 9999.9f, 9999.9f, PLAYER_IA_MINUS1); } } } @@ -346,7 +346,7 @@ void EnKakasi_IdleStanding(EnKakasi* this, PlayState* play) { EnKakasi_SetupDialogue(this); return; } - if (play->actorCtx.flags & ACTORCTX_FLAG_2) { + if (play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON) { Actor_GetScreenPos(play, &this->picto.actor, &x, &y); if (this->picto.actor.projectedPos.z > -20.0f && x > 0 && x < SCREEN_WIDTH && y > 0 && y < SCREEN_HEIGHT && this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) { @@ -409,7 +409,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { } if (this->unkState1A8 == 2 && this->unkState196 == 2) { - func_800B7298(play, &this->picto.actor, 0x49); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_73); this->unkState1A8 = 0; } @@ -418,7 +418,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { if (this->talkState == TEXT_STATE_5) { // bad song input if (this->unkState196 == 2 && this->picto.actor.textId == 0x1647) { - func_800B7298(play, &this->picto.actor, 6); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_6); } // after timeskip @@ -445,7 +445,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { } else if (this->picto.actor.textId == 0x165D || this->picto.actor.textId == 0x165F || this->picto.actor.textId == 0x1660 || this->picto.actor.textId == 0x1652) { - func_800B7298(play, &this->picto.actor, 4); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_4); if (ActorCutscene_GetCurrentIndex() == 0x7C) { ActorCutscene_Stop(0x7C); ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]); @@ -675,7 +675,7 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) { if (this->unk190 == 0) { func_801477B4(play); - func_800B7298(play, &this->picto.actor, 0x56); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_86); this->picto.actor.textId = 0x1648; Message_StartTextbox(play, (this->picto.actor.textId), &this->picto.actor); this->unkState1A8 = 0; @@ -711,7 +711,7 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) { Math_Vec3f_Copy(&this->unk22C, &this->picto.actor.home.pos); ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->picto.actor); this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene); - func_800B7298(play, &this->picto.actor, 0x56); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_86); this->unkState1A8 = 1; } @@ -744,7 +744,7 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) { } if (this->picto.actor.textId == 0x1648) { - func_800B7298(play, &this->picto.actor, 7); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_7); this->picto.actor.textId = 0x1649; if (this->animIndex != ENKAKASI_ANIM_ARMS_CROSSED_ROCKING) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_ARMS_CROSSED_ROCKING); @@ -813,7 +813,7 @@ void EnKakasi_SetupDanceNightAway(EnKakasi* this) { this->subCamFovNext = 60.0f; EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_TWIRL); Math_Vec3f_Copy(&this->unk22C, &this->picto.actor.home.pos); - func_8016566C(0xB4); + Play_EnableMotionBlur(180); this->actionFunc = EnKakasi_DancingNightAway; } @@ -916,8 +916,8 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) { this->unk190++; this->unk204 = 0xA; if (this->unk190 == 0xE) { - func_800B7298(play, &this->picto.actor, 0x49); - func_80165690(); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_73); + Play_DisableMotionBlur(); this->unk204 = 0x14; } } @@ -930,19 +930,21 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) { player = GET_PLAYER(play); Play_SetRespawnData(&play->state, RESPAWN_MODE_DOWN, Entrance_CreateFromSpawn(0), player->unk_3CE, - 0xBFF, &player->unk_3C0, player->unk_3CC); + PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &player->unk_3C0, player->unk_3CC); func_80169EFC(&play->state); + //! FAKE if (0) {} + if (gSaveContext.save.time > CLOCK_TIME(18, 0) || gSaveContext.save.time < CLOCK_TIME(6, 0)) { gSaveContext.save.time = CLOCK_TIME(6, 0); gSaveContext.respawnFlag = -4; - gSaveContext.eventInf[2] |= 0x80; + SET_EVENTINF(EVENTINF_27); } else { gSaveContext.save.time = CLOCK_TIME(18, 0); gSaveContext.respawnFlag = -8; } - gSaveContext.save.weekEventReg[83] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_83_01); this->unk190 = 0; this->actionFunc = EnKakasi_DoNothing; } @@ -1011,8 +1013,8 @@ void EnKakasi_DiggingAway(EnKakasi* this, PlayState* play) { Math_ApproachF(&this->picto.actor.shape.yOffset, -6000.0f, 0.5f, 200.0f); if (fabsf(this->picto.actor.shape.yOffset + 6000.0f) < 10.0f) { - gSaveContext.save.weekEventReg[79] |= 8; - func_800B7298(play, &this->picto.actor, 6); + SET_WEEKEVENTREG(WEEKEVENTREG_79_08); + func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_6); ActorCutscene_Stop(this->actorCutscenes[0]); this->aboveGroundStatus = ENKAKASI_ABOVE_GROUND_TYPE; this->songSummonDist = 80.0f; @@ -1029,7 +1031,7 @@ void EnKakasi_SetupIdleUnderground(EnKakasi* this) { } void EnKakasi_IdleUnderground(EnKakasi* this, PlayState* play) { - if ((gSaveContext.save.weekEventReg[79] & 8) && this->picto.actor.xzDistToPlayer < this->songSummonDist && + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_08) && this->picto.actor.xzDistToPlayer < this->songSummonDist && (BREG(1) != 0 || play->msgCtx.ocarinaMode == 0xD)) { this->picto.actor.flags &= ~ACTOR_FLAG_8000000; play->msgCtx.ocarinaMode = 4; diff --git a/src/overlays/actors/ovl_En_Kame/overlay.cfg b/src/overlays/actors/ovl_En_Kame/overlay.cfg deleted file mode 100644 index 8f2bff1c1..000000000 --- a/src/overlays/actors/ovl_En_Kame/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Kame -z_en_kame.c diff --git a/src/overlays/actors/ovl_En_Kanban/overlay.cfg b/src/overlays/actors/ovl_En_Kanban/overlay.cfg deleted file mode 100644 index 1ae4caed5..000000000 --- a/src/overlays/actors/ovl_En_Kanban/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Kanban -z_en_kanban.c diff --git a/src/overlays/actors/ovl_En_Karebaba/overlay.cfg b/src/overlays/actors/ovl_En_Karebaba/overlay.cfg deleted file mode 100644 index 004503847..000000000 --- a/src/overlays/actors/ovl_En_Karebaba/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Karebaba -z_en_karebaba.c diff --git a/src/overlays/actors/ovl_En_Kbt/overlay.cfg b/src/overlays/actors/ovl_En_Kbt/overlay.cfg deleted file mode 100644 index d9195b4b0..000000000 --- a/src/overlays/actors/ovl_En_Kbt/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Kbt -z_en_kbt.c diff --git a/src/overlays/actors/ovl_En_Kendo_Js/overlay.cfg b/src/overlays/actors/ovl_En_Kendo_Js/overlay.cfg deleted file mode 100644 index dd63f4c4a..000000000 --- a/src/overlays/actors/ovl_En_Kendo_Js/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Kendo_Js -z_en_kendo_js.c diff --git a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c index 8a3176bad..c02b00b5a 100644 --- a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c +++ b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c @@ -148,7 +148,7 @@ void EnKendoJs_Destroy(Actor* thisx, PlayState* play) { EnKendoJs* this = THIS; Collider_DestroyCylinder(play, &this->collider); - gSaveContext.save.weekEventReg[82] &= (u8)~8; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_82_08); } void func_80B26538(EnKendoJs* this) { @@ -297,14 +297,14 @@ void func_80B269A4(EnKendoJs* this, PlayState* play) { case 0x273B: func_801477B4(play); - func_80112AFC(play); + Interface_InitMinigame(play); player->stateFlags1 |= PLAYER_STATE1_20; func_80B273D0(this); break; case 0x272D: func_801477B4(play); - gSaveContext.minigameState = 3; + gSaveContext.minigameStatus = MINIGAME_STATUS_END; func_80B276C4(this); func_80B276D8(this, play); break; @@ -334,7 +334,7 @@ void func_80B26AFC(EnKendoJs* this, PlayState* play) { } if ((this->unk_288 == 0x272E) || (this->unk_288 == 0x272F) || (this->unk_288 == 0x2730)) { - gSaveContext.minigameState = 3; + gSaveContext.minigameStatus = MINIGAME_STATUS_END; } player->stateFlags1 &= ~PLAYER_STATE1_20; @@ -504,7 +504,7 @@ void func_80B27030(EnKendoJs* this, PlayState* play) { } void func_80B2714C(EnKendoJs* this) { - gSaveContext.save.weekEventReg[82] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_82_08); this->unk_28C = 1; this->unk_290 = 0; this->unk_284 = 0; @@ -565,14 +565,14 @@ void func_80B27188(EnKendoJs* this, PlayState* play) { } if (this->unk_284 == 7) { - gSaveContext.save.weekEventReg[82] &= (u8)~8; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_82_08); func_80B26AE8(this); } } } void func_80B273D0(EnKendoJs* this) { - gSaveContext.save.weekEventReg[82] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_82_08); this->unk_290 = 120; this->unk_284 = 0; this->unk_286 = 1; @@ -605,7 +605,7 @@ void func_80B274BC(EnKendoJs* this, PlayState* play) { this->unk_288 = 0x272E; } player->stateFlags1 |= PLAYER_STATE1_20; - gSaveContext.save.weekEventReg[82] &= (u8)~8; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_82_08); func_80B26AE8(this); return; } @@ -625,14 +625,14 @@ void func_80B274BC(EnKendoJs* this, PlayState* play) { if (this->unk_28E == 1) { if ((player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) || (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_FINISH)) { - play->interfaceCtx.unk_25C = 3; + play->interfaceCtx.minigamePoints = 3; if (gSaveContext.minigameScore >= 27) { player->stateFlags1 |= PLAYER_STATE1_20; } } else if (player->meleeWeaponAnimation == PLAYER_MWA_STAB_1H) { - play->interfaceCtx.unk_25C = 2; + play->interfaceCtx.minigamePoints = 2; } else { - play->interfaceCtx.unk_25C = 1; + play->interfaceCtx.minigamePoints = 1; } Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR); this->unk_28E = 0; @@ -648,7 +648,7 @@ void func_80B276D8(EnKendoJs* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; func_80B27760(this); - } else if (!(gSaveContext.save.weekEventReg[63] & 0x20)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_63_20)) { Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 800.0f, 100.0f); } else { Actor_PickUp(&this->actor, play, GI_RUPEE_RED, 800.0f, 100.0f); @@ -663,8 +663,8 @@ void func_80B27774(EnKendoJs* this, PlayState* play) { Player* player = GET_PLAYER(play); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if (!(gSaveContext.save.weekEventReg[63] & 0x20)) { - gSaveContext.save.weekEventReg[63] |= 0x20; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_63_20)) { + SET_WEEKEVENTREG(WEEKEVENTREG_63_20); Message_StartTextbox(play, 0x272F, &this->actor); this->unk_288 = 0x272F; } else { diff --git a/src/overlays/actors/ovl_En_Kgy/overlay.cfg b/src/overlays/actors/ovl_En_Kgy/overlay.cfg deleted file mode 100644 index 9a9ddfd5c..000000000 --- a/src/overlays/actors/ovl_En_Kgy/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Kgy -z_en_kgy.c diff --git a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c index 62b529b3d..f188e1df0 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -58,10 +58,10 @@ void EnKgy_Init(Actor* thisx, PlayState* play) { this->zubora = EnKgy_FindZubora(play); this->iceBlock = EnKgy_FindIceBlock(play); Flags_UnsetSwitch(play, ENKGY_GET_FE00(&this->actor) + 1); - if (Flags_GetSwitch(play, ENKGY_GET_FE00(&this->actor)) || (gSaveContext.save.weekEventReg[33] & 0x80)) { + if (Flags_GetSwitch(play, ENKGY_GET_FE00(&this->actor)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { Flags_SetSwitch(play, ENKGY_GET_FE00(&this->actor) + 1); play->envCtx.lightSettingOverride = 1; - gSaveContext.save.weekEventReg[21] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_21_01); if (!func_80B40D64(play)) { EnKgy_ChangeAnim(this, 4, ANIMMODE_LOOP, 0); this->actionFunc = func_80B425A0; @@ -78,7 +78,7 @@ void EnKgy_Init(Actor* thisx, PlayState* play) { this->actor.textId = 0xC50; } } else { - if (gSaveContext.save.weekEventReg[20] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_80)) { EnKgy_ChangeAnim(this, 4, ANIMMODE_LOOP, 0); } else { EnKgy_ChangeAnim(this, 0, ANIMMODE_LOOP, 0); @@ -496,7 +496,7 @@ void func_80B419B0(EnKgy* this, PlayState* play) { Player* player = GET_PLAYER(play); func_80B4163C(this, play); - if (Actor_ProcessTalkRequest(&this->actor, &play->state) || (&this->actor == player->targetActor)) { + if (Actor_ProcessTalkRequest(&this->actor, &play->state) || (&this->actor == player->talkActor)) { func_80B411DC(this, play, 4); func_80B40E18(this, this->actor.textId); if (this->actor.textId == 0xC37) { @@ -518,19 +518,19 @@ void func_80B41A48(EnKgy* this, PlayState* play) { } void func_80B41ACC(EnKgy* this, PlayState* play) { - s32 itemActionParam; + PlayerItemAction itemAction; Player* player = GET_PLAYER(play); SkelAnime_Update(&this->skelAnime); if (Message_GetState(&play->msgCtx) == TEXT_STATE_16) { - itemActionParam = func_80123810(play); - if (itemActionParam != PLAYER_AP_NONE) { + itemAction = func_80123810(play); + if (itemAction != PLAYER_IA_NONE) { this->actionFunc = func_80B41E18; } - if (itemActionParam > PLAYER_AP_NONE) { + if (itemAction > PLAYER_IA_NONE) { func_801477B4(play); - if (itemActionParam == PLAYER_AP_BOTTLE_GOLD_DUST) { + if (itemAction == PLAYER_IA_BOTTLE_GOLD_DUST) { if (this->unk_29C & 0x10) { this->actor.textId = 0xC55; player->actor.textId = 0xC55; @@ -547,7 +547,7 @@ void func_80B41ACC(EnKgy* this, PlayState* play) { player->actor.textId = 0xC47; } this->unk_29C |= 8; - } else if (itemActionParam < PLAYER_AP_NONE) { + } else if (itemAction <= PLAYER_IA_MINUS1) { if (this->unk_29C & 0x10) { this->actor.textId = 0xC57; } else { @@ -564,7 +564,7 @@ void func_80B41ACC(EnKgy* this, PlayState* play) { void func_80B41C30(EnKgy* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (&this->actor != player->targetActor) { + if (&this->actor != player->talkActor) { this->actionFunc = func_80B42508; } } @@ -586,7 +586,7 @@ void func_80B41CBC(EnKgy* this, PlayState* play) { this->actionFunc = func_80B41E18; func_80B411DC(this, play, 4); } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -595,7 +595,7 @@ void func_80B41D64(EnKgy* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actionFunc = func_80B41CBC; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { Actor_PickUp(&this->actor, play, this->unk_2EA, 2000.0f, 1000.0f); } @@ -743,8 +743,8 @@ void func_80B41E18(EnKgy* this, PlayState* play) { case 0xC46: case 0xC55: - func_80123D50(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_AP_BOTTLE); - player->exchangeItemId = PLAYER_AP_NONE; + Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE); + player->exchangeItemId = PLAYER_IA_NONE; this->unk_29C &= ~0x8; play->msgCtx.msgLength = 0; func_80B41368(this, play, 4); @@ -759,7 +759,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) { case 0xC47: func_80B40BC0(this, 1); if (this->unk_29C & 8) { - player->exchangeItemId = PLAYER_AP_NONE; + player->exchangeItemId = PLAYER_IA_NONE; this->unk_29C &= ~8; } func_80B40EBC(this, play, textId); @@ -831,7 +831,7 @@ void func_80B42508(EnKgy* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); this->actor.focus.pos = this->unk_2A8; - if (Actor_ProcessTalkRequest(&this->actor, &play->state) || (&this->actor == player->targetActor)) { + if (Actor_ProcessTalkRequest(&this->actor, &play->state) || (&this->actor == player->talkActor)) { this->actionFunc = func_80B41E18; func_80B411DC(this, play, 4); func_80B40E18(this, this->actor.textId); @@ -870,7 +870,7 @@ void func_80B42714(EnKgy* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); this->actor.focus.pos = this->unk_2A8; - if (Actor_ProcessTalkRequest(&this->actor, &play->state) || (&this->actor == player->targetActor)) { + if (Actor_ProcessTalkRequest(&this->actor, &play->state) || (&this->actor == player->talkActor)) { func_80B411DC(this, play, 4); func_80B40E18(this, this->actor.textId); if (this->actor.textId == 0xC37) { @@ -948,7 +948,7 @@ void func_80B4296C(EnKgy* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10000; } else { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_NONE); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_NONE); } } @@ -1054,7 +1054,7 @@ void func_80B42D28(EnKgy* this, PlayState* play) { func_80B40BC0(this, 1); } else { EnKgy_ChangeAnim(this, 5, ANIMMODE_ONCE, -5.0f); - gSaveContext.save.weekEventReg[20] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_20_80); } func_80B411DC(this, play, 0); func_80B40E18(this, this->actor.textId); @@ -1062,7 +1062,7 @@ void func_80B42D28(EnKgy* this, PlayState* play) { if (Flags_GetSwitch(play, ENKGY_GET_FE00(&this->actor))) { this->actor.textId = 0xC30; this->actionFunc = func_80B4296C; - gSaveContext.save.weekEventReg[21] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_21_01); } else if (this->actor.xzDistToPlayer < 200.0f) { if (this->unk_2D2 == 4) { this->actor.textId = 0xC2D; diff --git a/src/overlays/actors/ovl_En_Kitan/overlay.cfg b/src/overlays/actors/ovl_En_Kitan/overlay.cfg deleted file mode 100644 index cd24348d5..000000000 --- a/src/overlays/actors/ovl_En_Kitan/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Kitan -z_en_kitan.c diff --git a/src/overlays/actors/ovl_En_Knight/overlay.cfg b/src/overlays/actors/ovl_En_Knight/overlay.cfg deleted file mode 100644 index 150eab3c7..000000000 --- a/src/overlays/actors/ovl_En_Knight/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Knight -z_en_knight.c diff --git a/src/overlays/actors/ovl_En_Kujiya/overlay.cfg b/src/overlays/actors/ovl_En_Kujiya/overlay.cfg deleted file mode 100644 index a47b9648b..000000000 --- a/src/overlays/actors/ovl_En_Kujiya/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Kujiya -z_en_kujiya.c diff --git a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c index e15d20fc8..511a5dc46 100644 --- a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c +++ b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c @@ -235,19 +235,19 @@ void EnKujiya_FinishGivePrize(EnKujiya* this, PlayState* play) { s32 EnKujiya_CheckBoughtTicket(void) { switch (CURRENT_DAY) { case 1: - if (gSaveContext.save.weekEventReg[33] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_10)) { return true; } break; case 2: - if (gSaveContext.save.weekEventReg[33] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_20)) { return true; } break; case 3: - if (gSaveContext.save.weekEventReg[33] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_40)) { return true; } break; @@ -258,15 +258,15 @@ s32 EnKujiya_CheckBoughtTicket(void) { void EnKujiya_SetBoughtTicket(void) { switch (CURRENT_DAY) { case 1: - gSaveContext.save.weekEventReg[33] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_33_10); break; case 2: - gSaveContext.save.weekEventReg[33] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_33_20); break; case 3: - gSaveContext.save.weekEventReg[33] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_33_40); break; } } @@ -277,15 +277,15 @@ void EnKujiya_SetBoughtTicket(void) { void EnKujiya_UnsetBoughtTicket(void) { switch (CURRENT_DAY) { case 1: - gSaveContext.save.weekEventReg[33] &= (u8)~0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_33_10); break; case 2: - gSaveContext.save.weekEventReg[33] &= (u8)~0x20; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_33_20); break; case 3: - gSaveContext.save.weekEventReg[33] &= (u8)~0x40; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_33_40); break; } } diff --git a/src/overlays/actors/ovl_En_Kusa/overlay.cfg b/src/overlays/actors/ovl_En_Kusa/overlay.cfg deleted file mode 100644 index 9cded0ca3..000000000 --- a/src/overlays/actors/ovl_En_Kusa/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Kusa -z_en_kusa.c diff --git a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c index 5b0e813ab..39d55f7f8 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -4,6 +4,7 @@ * Description: Grass / Bush */ +#include "prevent_bss_reordering.h" #include "z_en_kusa.h" #include "objects/object_kusa/object_kusa.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -699,7 +700,7 @@ void EnKusa_DrawBush(Actor* thisx, PlayState* play2) { EnKusa_ApplySway(&D_80936AD8[this->kusaMtxIdx]); } - Gfx_DrawDListOpa(play, gKusaBushType1); + Gfx_DrawDListOpa(play, gKusaBushType1DL); } else if (this->actor.projectedPos.z < 1300.0f) { s32 alpha; @@ -711,7 +712,7 @@ void EnKusa_DrawBush(Actor* thisx, PlayState* play2) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, alpha); - gSPDisplayList(POLY_XLU_DISP++, gKusaBushType2); + gSPDisplayList(POLY_XLU_DISP++, gKusaBushType2DL); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Kusa2/overlay.cfg b/src/overlays/actors/ovl_En_Kusa2/overlay.cfg deleted file mode 100644 index 0e08a700b..000000000 --- a/src/overlays/actors/ovl_En_Kusa2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Kusa2 -z_en_kusa2.c diff --git a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c index 4b8c36c2c..0f95122d4 100644 --- a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c +++ b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c @@ -4,6 +4,7 @@ * Description: Keaton grass */ +#include "prevent_bss_reordering.h" #include "z_en_kusa2.h" #include "objects/gameplay_field_keep/gameplay_field_keep.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -1343,7 +1344,7 @@ void func_80A5E80C(PlayState* play, s32 arg1) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, arg1); - gSPDisplayList(POLY_XLU_DISP++, gKusaBushType2); + gSPDisplayList(POLY_XLU_DISP++, gKusaBushType2DL); CLOSE_DISPS(play->state.gfxCtx); } @@ -1356,7 +1357,7 @@ void EnKusa2_Draw(Actor* thisx, PlayState* play) { (this->actor.projectedPos.z < 400.0f)) { func_80A5B954(&D_80A60908[this->unk_1CE], 0.0015f); } - Gfx_DrawDListOpa(play, gKusaBushType1); + Gfx_DrawDListOpa(play, gKusaBushType1DL); } else if (this->actor.projectedPos.z < 1300.0f) { func_80A5E80C(play, (1300.0f - this->actor.projectedPos.z) * 2.55f); } @@ -1370,14 +1371,14 @@ void func_80A5E9B4(Actor* thisx, PlayState* play) { sp18.z = thisx->shape.rot.z + D_80A5EAFC.z; Matrix_SetTranslateRotateYXZ(thisx->world.pos.x, thisx->world.pos.y, thisx->world.pos.z, &sp18); Matrix_Scale(thisx->scale.x, thisx->scale.y, thisx->scale.z, MTXMODE_APPLY); - Gfx_DrawDListOpa(play, gKusaBushType1); + Gfx_DrawDListOpa(play, gKusaBushType1DL); } void func_80A5EA48(Actor* thisx, PlayState* play) { EnKusa2* this = THIS; if (this->unk_1CF == 0xFF) { - Gfx_DrawDListOpa(play, gKusaBushType1); + Gfx_DrawDListOpa(play, gKusaBushType1DL); } else { func_80A5E80C(play, this->unk_1CF); } diff --git a/src/overlays/actors/ovl_En_Lift_Nuts/overlay.cfg b/src/overlays/actors/ovl_En_Lift_Nuts/overlay.cfg deleted file mode 100644 index df2faa5f0..000000000 --- a/src/overlays/actors/ovl_En_Lift_Nuts/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Lift_Nuts -z_en_lift_nuts.c diff --git a/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c index 6eac82838..aafc12b51 100644 --- a/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c +++ b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c @@ -181,15 +181,15 @@ s32 func_80AE9B4C(s32 arg0, s32 arg1) { s32 func_80AE9B8C() { s32 ret = 0; - if (gSaveContext.save.weekEventReg[14] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10)) { ret = 1; } - if (gSaveContext.save.weekEventReg[14] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_20)) { ret++; } - if (gSaveContext.save.weekEventReg[14] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_40)) { ret++; } @@ -329,7 +329,7 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { if (gSaveContext.save.time > CLOCK_TIME(23, 30) || gSaveContext.save.time <= CLOCK_TIME(6, 0)) { Message_StartTextbox(play, 0x27F7, &this->actor); this->textId = 0x27F7; - } else if (gSaveContext.save.weekEventReg[14] & 0x10) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10)) { Message_StartTextbox(play, 0x27D9, &this->actor); this->textId = 0x27D9; } else { @@ -343,13 +343,13 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { Message_StartTextbox(play, 0x27F7, &this->actor); this->textId = 0x27F7; } else { - if (gSaveContext.save.weekEventReg[14] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_20)) { Message_StartTextbox(play, 0x27DB, &this->actor); this->textId = 0x27DB; break; } - if (gSaveContext.save.weekEventReg[14] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10)) { Message_StartTextbox(play, 0x27DC, &this->actor); this->textId = 0x27DC; } else { @@ -363,7 +363,7 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { if (gSaveContext.save.time > CLOCK_TIME(23, 30) || gSaveContext.save.time <= CLOCK_TIME(6, 0)) { Message_StartTextbox(play, 0x27F7, &this->actor); this->textId = 0x27F7; - } else if (gSaveContext.save.weekEventReg[14] & 0x40) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_40)) { Message_StartTextbox(play, 0x27DE, &this->actor); this->textId = 0x27DE; } else if (func_80AE9B8C() == 2) { @@ -382,7 +382,7 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { if (Flags_GetSwitch(play, 0x40)) { Flags_UnsetSwitch(play, 0x40); Inventory_SaveDekuPlaygroundHighScore(4); - if ((gSaveContext.save.weekEventReg[14] & 0x10) && (gSaveContext.save.weekEventReg[14] & 0x20) && + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_14_20) && CURRENT_DAY == 3) { this->unk_354 = 0; Message_StartTextbox(play, 0x27F4, &this->actor); @@ -740,7 +740,7 @@ void func_80AEB148(EnLiftNuts* this, PlayState* play) { if (player->stateFlags3 & PLAYER_STATE3_200) { this->actor.speedXZ = 2.0f; - gSaveContext.eventInf[3] |= 0x10; + SET_EVENTINF(EVENTINF_34); Interface_StartTimer(4, 0); func_80AE9B4C(1, 2); Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_FOUND); @@ -750,7 +750,7 @@ void func_80AEB148(EnLiftNuts* this, PlayState* play) { void func_80AEB1C8(EnLiftNuts* this) { this->actor.speedXZ = 2.0f; - gSaveContext.eventInf[3] |= 0x10; + SET_EVENTINF(EVENTINF_34); Interface_StartTimer(4, 0); func_80AE9B4C(1, 2); this->actionFunc = func_80AEB230; @@ -815,13 +815,13 @@ void func_80AEB428(EnLiftNuts* this, PlayState* play) { this->textId = 0x27EC; } } else if (this->unk_354 == 30) { - gSaveContext.eventInf[3] &= (u8)~0x10; + CLEAR_EVENTINF(EVENTINF_34); gSaveContext.respawn[RESPAWN_MODE_DOWN].entrance = ENTRANCE(DEKU_SCRUB_PLAYGROUND, 1); gSaveContext.nextCutsceneIndex = 0; func_80169EFC(&play->state); gSaveContext.respawnFlag = -2; play->transitionType = TRANS_TYPE_64; - gSaveContext.nextTransitionType = TRANS_TYPE_02; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; } this->unk_354++; } @@ -833,12 +833,12 @@ void func_80AEB584(EnLiftNuts* this) { void func_80AEB598(EnLiftNuts* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; - if ((gSaveContext.save.weekEventReg[14] & 0x10) && (gSaveContext.save.weekEventReg[14] & 0x20) && - (CURRENT_DAY == 3) && !(gSaveContext.save.weekEventReg[14] & 0x80)) { - gSaveContext.save.weekEventReg[14] |= 0x80; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_14_20) && (CURRENT_DAY == 3) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_14_80)) { + SET_WEEKEVENTREG(WEEKEVENTREG_14_80); } func_80AEB684(this); - } else if ((this->textId == 0x27F4) && !(gSaveContext.save.weekEventReg[14] & 0x80)) { + } else if ((this->textId == 0x27F4) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_14_80)) { Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f); } else { Actor_PickUp(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f); @@ -851,8 +851,7 @@ void func_80AEB684(EnLiftNuts* this) { void func_80AEB698(EnLiftNuts* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if ((gSaveContext.save.weekEventReg[14] & 0x10) && (gSaveContext.save.weekEventReg[14] & 0x20) && - CURRENT_DAY == 3) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_14_20) && (CURRENT_DAY == 3)) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 13); Message_StartTextbox(play, 0x27F5, &this->actor); this->textId = 0x27F5; @@ -868,15 +867,15 @@ void func_80AEB698(EnLiftNuts* this, PlayState* play) { func_80AEABF0(this); switch (CURRENT_DAY) { case 1: - gSaveContext.save.weekEventReg[14] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_14_10); break; case 2: - gSaveContext.save.weekEventReg[14] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_14_20); break; case 3: - gSaveContext.save.weekEventReg[14] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_14_40); break; default: diff --git a/src/overlays/actors/ovl_En_Light/overlay.cfg b/src/overlays/actors/ovl_En_Light/overlay.cfg deleted file mode 100644 index 763d0ad6d..000000000 --- a/src/overlays/actors/ovl_En_Light/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Light -z_en_light.c diff --git a/src/overlays/actors/ovl_En_Look_Nuts/overlay.cfg b/src/overlays/actors/ovl_En_Look_Nuts/overlay.cfg deleted file mode 100644 index 8d594952f..000000000 --- a/src/overlays/actors/ovl_En_Look_Nuts/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Look_Nuts -z_en_look_nuts.c diff --git a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c index 2a667d3ad..ac376bb16 100644 --- a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c +++ b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c @@ -300,7 +300,7 @@ void EnLookNuts_SendPlayerToSpawn(EnLookNuts* this, PlayState* play) { gSaveContext.nextCutsceneIndex = 0; Scene_SetExitFade(play); play->transitionTrigger = TRANS_TRIGGER_START; - gSaveContext.save.weekEventReg[17] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_17_04); } } @@ -359,7 +359,7 @@ void EnLookNuts_Update(Actor* thisx, PlayState* play) { Math_Vec3f_Copy(&this->headRotTarget, &gZeroVec3f); this->state = PALACE_GUARD_RUNNING_TO_PLAYER; play_sound(NA_SE_SY_FOUND); - func_800B7298(play, &this->actor, 0x1A); + func_800B7298(play, &this->actor, PLAYER_CSMODE_26); D_80A6862C = 1; this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_10); this->actor.gravity = 0.0f; diff --git a/src/overlays/actors/ovl_En_M_Fire1/overlay.cfg b/src/overlays/actors/ovl_En_M_Fire1/overlay.cfg deleted file mode 100644 index 1d43db731..000000000 --- a/src/overlays/actors/ovl_En_M_Fire1/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_M_Fire1 -z_en_m_fire1.c diff --git a/src/overlays/actors/ovl_En_M_Thunder/overlay.cfg b/src/overlays/actors/ovl_En_M_Thunder/overlay.cfg deleted file mode 100644 index 5de5ce33a..000000000 --- a/src/overlays/actors/ovl_En_M_Thunder/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_M_Thunder -z_en_m_thunder.c diff --git a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c index a244c3ca8..3d97839a0 100644 --- a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c +++ b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c @@ -143,7 +143,7 @@ void EnMThunder_Init(Actor* thisx, PlayState* play) { player->stateFlags2 &= ~PLAYER_STATE2_20000; this->isCharging = false; - if (gSaveContext.save.weekEventReg[23] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) { player->unk_B08[0] = 1.0f; this->collider.info.toucher.damage = sDamages[this->type + ENMTHUNDER_TYPE_MAX]; this->subtype = ENMTHUNDER_SUBTYPE_SPIN_GREAT; diff --git a/src/overlays/actors/ovl_En_Ma4/overlay.cfg b/src/overlays/actors/ovl_En_Ma4/overlay.cfg deleted file mode 100644 index 3a0c5af88..000000000 --- a/src/overlays/actors/ovl_En_Ma4/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ma4 -z_en_ma4.c diff --git a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c index c83698e6f..973e91553 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -200,7 +200,7 @@ void EnMa4_Init(Actor* thisx, PlayState* play) { if (CURRENT_DAY == 1) { this->type = MA4_TYPE_DAY1; - } else if (gSaveContext.save.weekEventReg[22] & 1) { // Aliens defeated + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { this->type = MA4_TYPE_ALIENS_DEFEATED; } else { this->type = MA4_TYPE_ALIENS_WON; @@ -238,7 +238,7 @@ void EnMa4_Destroy(Actor* thisx, PlayState* play) { EnMa4* this = THIS; Collider_DestroyCylinder(play, &this->collider); - gSaveContext.save.weekEventReg[8] &= (u8)~1; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_08_01); } // Running in circles in the ranch @@ -372,7 +372,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { case 0x3341: if (play->msgCtx.choiceIndex == 0) { func_8019F208(); - gSaveContext.save.weekEventReg[21] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_21_20); Message_StartTextbox(play, 0x3343, &this->actor); this->textId = 0x3343; } else { @@ -388,7 +388,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { case 0x3346: if (play->msgCtx.choiceIndex == 0) { func_8019F208(); - gSaveContext.save.weekEventReg[21] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_21_20); Message_StartTextbox(play, 0x3343, &this->actor); this->textId = 0x3343; } else { @@ -603,7 +603,7 @@ void EnMa4_ChooseNextDialogue(EnMa4* this, PlayState* play) { break; case 0x3358: - if ((gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) || !(CHECK_QUEST_ITEM(QUEST_SONG_EPONA))) { + if ((gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) || !CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) { Message_StartTextbox(play, 0x335C, &this->actor); this->textId = 0x335C; func_80151BB4(play, 5); @@ -666,7 +666,7 @@ void EnMa4_BeginHorsebackGame(EnMa4* this, PlayState* play) { gSaveContext.nextCutsceneIndex = 0xFFF0; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_80; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; } void EnMa4_HorsebackGameCheckPlayerInteractions(EnMa4* this, PlayState* play) { @@ -688,10 +688,10 @@ void EnMa4_HorsebackGameTalking(EnMa4* this, PlayState* play) { void EnMa4_InitHorsebackGame(EnMa4* this, PlayState* play) { Player* player = GET_PLAYER(play); - play->interfaceCtx.unk_280 = 1; + play->interfaceCtx.minigameState = MINIGAME_STATE_COUNTDOWN_SETUP_3; Interface_StartTimer(TIMER_ID_MINIGAME_2, 0); - gSaveContext.save.weekEventReg[8] |= 1; - func_80112AFC(play); + SET_WEEKEVENTREG(WEEKEVENTREG_08_01); + Interface_InitMinigame(play); player->stateFlags1 |= PLAYER_STATE1_20; this->actionFunc = EnMa4_SetupHorsebackGameWait; } @@ -699,7 +699,7 @@ void EnMa4_InitHorsebackGame(EnMa4* this, PlayState* play) { void EnMa4_SetupHorsebackGameWait(EnMa4* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (play->interfaceCtx.unk_280 == 8) { + if (play->interfaceCtx.minigameState == MINIGAME_STATE_COUNTDOWN_GO) { this->actionFunc = EnMa4_HorsebackGameWait; player->stateFlags1 &= ~PLAYER_STATE1_20; } @@ -714,7 +714,7 @@ void EnMa4_HorsebackGameWait(EnMa4* this, PlayState* play) { if (this->poppedBalloonCounter != D_80AC0258) { D_80AC0258 = this->poppedBalloonCounter; - play->interfaceCtx.unk_25C = 1; + play->interfaceCtx.minigamePoints = 1; } if ((gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] >= SECONDS_TO_TIMER(120)) || @@ -726,7 +726,7 @@ void EnMa4_HorsebackGameWait(EnMa4* this, PlayState* play) { } void EnMa4_SetupHorsebackGameEnd(EnMa4* this, PlayState* play) { - gSaveContext.save.weekEventReg[8] &= (u8)~1; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_08_01); this->actionFunc = EnMa4_HorsebackGameEnd; Audio_QueueSeqCmd(NA_BGM_STOP); Audio_QueueSeqCmd(NA_BGM_HORSE_GOAL | 0x8000); @@ -760,10 +760,10 @@ void EnMa4_HorsebackGameEnd(EnMa4* this, PlayState* play) { if (this->poppedBalloonCounter == 10) { play->transitionType = TRANS_TYPE_80; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; } else { play->transitionType = TRANS_TYPE_64; - gSaveContext.nextTransitionType = TRANS_TYPE_02; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; } this->poppedBalloonCounter = 0; @@ -828,7 +828,7 @@ void EnMa4_EponasSongCs(EnMa4* this, PlayState* play) { Player* player = GET_PLAYER(play); player->stateFlags1 |= PLAYER_STATE1_20; - func_800B85E0(&this->actor, play, 200.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); D_80AC0260 = 99; this->hasBow = true; EnMa4_SetupEndEponasSongCs(this); @@ -850,7 +850,7 @@ void EnMa4_EndEponasSongCs(EnMa4* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10000; EnMa4_SetupDialogueHandler(this); } else { - func_800B85E0(&this->actor, play, 200.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); } } @@ -863,7 +863,7 @@ void EnMa4_BeginDescribeThemCs(EnMa4* this, PlayState* play) { gSaveContext.nextCutsceneIndex = 0xFFF5; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_64; - gSaveContext.nextTransitionType = TRANS_TYPE_02; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; } void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { @@ -873,7 +873,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { switch (this->type) { case MA4_TYPE_DAY1: if (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) { - if ((gSaveContext.save.weekEventReg[21] & 0x80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_80)) { EnMa4_SetFaceExpression(this, 3, 3); Message_StartTextbox(play, 0x3337, &this->actor); this->textId = 0x3337; @@ -881,11 +881,11 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { } else { Message_StartTextbox(play, 0x3335, &this->actor); this->textId = 0x3335; - gSaveContext.save.weekEventReg[21] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_21_80); } } else if (this->state == MA4_STATE_DEFAULT) { - if ((gSaveContext.save.weekEventReg[21] & 0x40)) { - if (!(gSaveContext.save.weekEventReg[21] & 0x20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_40)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_21_20)) { Message_StartTextbox(play, 0x3346, &this->actor); this->textId = 0x3346; } else { @@ -895,7 +895,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { } else { Message_StartTextbox(play, 0x3338, &this->actor); this->textId = 0x3338; - gSaveContext.save.weekEventReg[21] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_21_40); } } else if (this->state == MA4_STATE_AFTERHORSEBACKGAME) { if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] >= SECONDS_TO_TIMER(120)) { @@ -929,7 +929,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { case MA4_TYPE_ALIENS_DEFEATED: if (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) { - if ((gSaveContext.save.weekEventReg[21] & 0x80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_80)) { EnMa4_SetFaceExpression(this, 3, 3); Message_StartTextbox(play, 0x3337, &this->actor); this->textId = 0x3337; @@ -937,7 +937,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { } else { Message_StartTextbox(play, 0x3335, &this->actor); this->textId = 0x3335; - gSaveContext.save.weekEventReg[21] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_21_80); } } else if (this->state == MA4_STATE_DEFAULT) { Message_StartTextbox(play, 0x3354, &this->actor); diff --git a/src/overlays/actors/ovl_En_Ma_Yto/overlay.cfg b/src/overlays/actors/ovl_En_Ma_Yto/overlay.cfg deleted file mode 100644 index a1085bf0e..000000000 --- a/src/overlays/actors/ovl_En_Ma_Yto/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ma_Yto -z_en_ma_yto.c diff --git a/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c b/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c index bd9c39e7d..fb10d9311 100644 --- a/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c +++ b/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c @@ -153,7 +153,7 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) { this->unk320 = 0; this->eyeTexIndex = 0; - if (CURRENT_DAY == 1 || (gSaveContext.save.weekEventReg[22] & 1)) { + if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { EnMaYto_SetFaceExpression(this, 0, 1); } else { EnMaYto_SetFaceExpression(this, 5, 2); @@ -186,19 +186,19 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) { s32 EnMaYto_CheckValidSpawn(EnMaYto* this, PlayState* play) { switch (this->type) { case MA_YTO_TYPE_DEFAULT: - if (CURRENT_DAY == 3 && !(gSaveContext.save.weekEventReg[22] & 1)) { + if (CURRENT_DAY == 3 && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { return false; } break; case MA_YTO_TYPE_DINNER: - if (CURRENT_DAY != 1 && (gSaveContext.save.weekEventReg[22] & 1)) { + if (CURRENT_DAY != 1 && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { return false; } break; case MA_YTO_TYPE_BARN: - if (gSaveContext.save.weekEventReg[22] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { if (((this->actor.params & 0x0F00) >> 8) != 0) { return false; } @@ -211,9 +211,8 @@ s32 EnMaYto_CheckValidSpawn(EnMaYto* this, PlayState* play) { break; case MA_YTO_TYPE_AFTERMILKRUN: - // if (!(ProtectedCremia) && !(gSaveContext.save.weekEventReg[52] & 2)) || (PlayedMilkMinigame)) - if ((!(gSaveContext.save.weekEventReg[52] & 1) && !(gSaveContext.save.weekEventReg[52] & 2)) || - (gSaveContext.save.weekEventReg[14] & 1)) { + if ((!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_14_01)) { return false; } break; @@ -240,8 +239,7 @@ void EnMaYto_InitAnimation(EnMaYto* this, PlayState* play) { break; case MA_YTO_TYPE_BARN: - // if (AliensDefeated) - if (gSaveContext.save.weekEventReg[22] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { EnMaYto_ChangeAnim(this, 12); } else { EnMaYto_ChangeAnim(this, 8); @@ -279,7 +277,7 @@ void EnMaYto_ChooseAction(EnMaYto* this, PlayState* play) { case MA_YTO_TYPE_AFTERMILKRUN: this->unk310 = 0; - if (INV_CONTENT(ITEM_MASK_ROMANI) == ITEM_MASK_ROMANI && (gSaveContext.save.weekEventReg[52] & 1) && + if ((INV_CONTENT(ITEM_MASK_ROMANI) == ITEM_MASK_ROMANI) && CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) && (Rand_Next() & 0x80)) { EnMaYto_SetupBeginWarmFuzzyFeelingCs(this); } else { @@ -334,7 +332,7 @@ s32 EnMaYto_TryFindRomani(EnMaYto* this, PlayState* play) { return 0; case MA_YTO_TYPE_DINNER: - if (!(gSaveContext.save.weekEventReg[22] & 1) && CURRENT_DAY == 2) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) && (CURRENT_DAY == 2)) { return 0; } if (EnMaYto_SearchRomani(this, play)) { @@ -343,8 +341,7 @@ s32 EnMaYto_TryFindRomani(EnMaYto* this, PlayState* play) { return 1; case MA_YTO_TYPE_BARN: - // if (AliensDefeated) - if (gSaveContext.save.weekEventReg[22] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { if (EnMaYto_SearchRomani(this, play)) { return 2; } @@ -498,7 +495,7 @@ void EnMaYto_DefaultChooseNextDialogue(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupDinnerWait(EnMaYto* this) { - if (CURRENT_DAY == 1 || (gSaveContext.save.weekEventReg[22] & 1)) { + if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { func_80B90E50(this, 0); this->unk31E = 0; } else { @@ -539,7 +536,7 @@ void EnMaYto_DinnerWait(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupDinnerDialogueHandler(EnMaYto* this) { - if (CURRENT_DAY == 1 || (gSaveContext.save.weekEventReg[22] & 1)) { + if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { func_80B90E50(this, 1); } else { func_80B90E50(this, 2); @@ -690,7 +687,7 @@ void EnMaYto_DinnerChooseNextDialogue(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupBarnWait(EnMaYto* this) { - if (CURRENT_DAY == 1 || (gSaveContext.save.weekEventReg[22] & 1)) { + if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { EnMaYto_ChangeAnim(this, 13); func_80B90E50(this, 0); this->unk31E = 0; @@ -718,7 +715,7 @@ void EnMaYto_BarnWait(EnMaYto* this, PlayState* play) { Actor_ChangeFocus(&this->actor, play, &this->actor); EnMaYto_BarnStartDialogue(this, play); EnMaYto_SetupBarnDialogueHandler(this); - } else if (!(gSaveContext.save.weekEventReg[22] & 1) || ABS_ALT(direction) < 0x2000) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) || ABS_ALT(direction) < 0x2000) { func_800B8614(&this->actor, play, 100.0f); child = this->actor.child; @@ -730,7 +727,7 @@ void EnMaYto_BarnWait(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupBarnDialogueHandler(EnMaYto* this) { - if (CURRENT_DAY == 1 || (gSaveContext.save.weekEventReg[22] & 1)) { + if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { func_80B90E50(this, 1); } else { func_80B90E50(this, 2); @@ -878,7 +875,7 @@ void EnMaYto_BarnChooseNextDialogue(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupAfterMilkRunInit(EnMaYto* this) { - if (gSaveContext.save.weekEventReg[52] & 1) { // if (ProtectedCremia) + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { EnMaYto_SetFaceExpression(this, 3, 1); } else { Audio_PlayFanfare(NA_BGM_FAILURE_1); @@ -893,16 +890,15 @@ void EnMaYto_AfterMilkRunInit(EnMaYto* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actor.flags &= ~ACTOR_FLAG_10000; - if (gSaveContext.save.weekEventReg[52] & 1) { // if (ProtectedCremia) + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { Message_StartTextbox(play, 0x33C1, &this->actor); this->textId = 0x33C1; } else { - // Fails milk minigame + // Failed milk minigame EnMaYto_SetFaceExpression(this, 5, 2); Message_StartTextbox(play, 0x33C0, &this->actor); this->textId = 0x33C0; - // Attempted Cremia Cart Ride - gSaveContext.save.weekEventReg[14] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_14_01); this->unk310 = 4; EnMaYto_SetupPostMilkRunWaitDialogueEnd(this); func_80151BB4(play, 6); @@ -983,8 +979,7 @@ void EnMaYto_PostMilkRunExplainReward(EnMaYto* this, PlayState* play) { EnMaYto_SetFaceExpression(this, 0, 1); Message_StartTextbox(play, 0x33C3, &this->actor); this->textId = 0x33C3; - // Attempted Cremia Cart Ride - gSaveContext.save.weekEventReg[14] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_14_01); this->unk310 = 3; func_80151BB4(play, 0x20); func_80151BB4(play, 0x1F); @@ -995,14 +990,13 @@ void EnMaYto_PostMilkRunExplainReward(EnMaYto* this, PlayState* play) { EnMaYto_SetFaceExpression(this, 0, 1); Message_StartTextbox(play, 0x33D0, &this->actor); this->textId = 0x33D0; - // Attempted Cremia Cart Ride - gSaveContext.save.weekEventReg[14] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_14_01); this->unk310 = 3; func_80151BB4(play, 6); EnMaYto_SetupPostMilkRunWaitDialogueEnd(this); } } else { - func_800B85E0(&this->actor, play, 200.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); } } @@ -1046,8 +1040,7 @@ void EnMaYto_WarmFuzzyFeelingCs(EnMaYto* this, PlayState* play) { break; case 2: - // Attempted Cremia Cart Ride - gSaveContext.save.weekEventReg[14] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_14_01); EnMaYto_ChangeAnim(this, 18); break; @@ -1075,7 +1068,7 @@ void EnMaYto_SetupPostMilkRunWaitDialogueEnd(EnMaYto* this) { void EnMaYto_PostMilkRunWaitDialogueEnd(EnMaYto* this, PlayState* play) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE || Message_GetState(&play->msgCtx) == TEXT_STATE_5) { if (Message_ShouldAdvance(play) && Message_GetState(&play->msgCtx) == TEXT_STATE_5) { - func_800B7298(play, &this->actor, 7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_7); func_801477B4(play); } } @@ -1098,7 +1091,7 @@ void EnMaYto_PostMilkRunEnd(EnMaYto* this, PlayState* play) { gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_80; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; } void EnMaYto_DefaultStartDialogue(EnMaYto* this, PlayState* play) { @@ -1228,8 +1221,7 @@ void EnMaYto_DinnerStartDialogue(EnMaYto* this, PlayState* play) { } void EnMaYto_BarnStartDialogue(EnMaYto* this, PlayState* play) { - // if (AliensDefeated) - if (gSaveContext.save.weekEventReg[22] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { if (CURRENT_DAY == 2) { if (this->unk310 == 1) { Message_StartTextbox(play, 0x33AE, &this->actor); @@ -1352,7 +1344,7 @@ void EnMaYto_SetFaceExpression(EnMaYto* this, s16 overrideEyeTexIndex, s16 mouth } void EnMaYto_InitFaceExpression(EnMaYto* this) { - if (CURRENT_DAY == 1 || (gSaveContext.save.weekEventReg[22] & 1)) { + if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { EnMaYto_SetFaceExpression(this, 0, 1); EnMaYto_SetRomaniFaceExpression(this, 0, 0); } else { @@ -1364,19 +1356,19 @@ void EnMaYto_InitFaceExpression(EnMaYto* this) { s32 EnMaYto_HasSpokenToPlayerToday(void) { switch (CURRENT_DAY) { case 1: - if (gSaveContext.save.weekEventReg[13] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_04)) { return true; } break; case 2: - if (gSaveContext.save.weekEventReg[13] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_08)) { return true; } break; case 3: - if (gSaveContext.save.weekEventReg[13] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_10)) { return true; } break; @@ -1385,20 +1377,20 @@ s32 EnMaYto_HasSpokenToPlayerToday(void) { } s32 EnMaYto_HasSpokenToPlayer(void) { - // Please note each case doesn't have their respective `break`s. + // Please note no case here has a `break`. switch (CURRENT_DAY) { case 3: - if (gSaveContext.save.weekEventReg[13] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_10)) { return true; } case 2: - if (gSaveContext.save.weekEventReg[13] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_08)) { return true; } case 1: - if (gSaveContext.save.weekEventReg[13] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_04)) { return true; } } @@ -1408,15 +1400,15 @@ s32 EnMaYto_HasSpokenToPlayer(void) { void EnMaYto_SetTalkedFlag(void) { switch (CURRENT_DAY) { case 1: - gSaveContext.save.weekEventReg[13] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_13_04); break; case 2: - gSaveContext.save.weekEventReg[13] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_13_08); break; case 3: - gSaveContext.save.weekEventReg[13] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_13_10); break; } } @@ -1466,7 +1458,7 @@ void EnMaYto_Draw(Actor* thisx, PlayState* play) { s32 pad; OPEN_DISPS(play->state.gfxCtx); - if (this->type == MA_YTO_TYPE_BARN && (gSaveContext.save.weekEventReg[22] & 1)) { // Aliens defeated + if (this->type == MA_YTO_TYPE_BARN && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gCremiaWoodenBoxDL); } diff --git a/src/overlays/actors/ovl_En_Ma_Yts/overlay.cfg b/src/overlays/actors/ovl_En_Ma_Yts/overlay.cfg deleted file mode 100644 index c185a0e53..000000000 --- a/src/overlays/actors/ovl_En_Ma_Yts/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ma_Yts -z_en_ma_yts.c diff --git a/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c b/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c index ae7232406..64a6d138c 100644 --- a/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c +++ b/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c @@ -144,7 +144,7 @@ void EnMaYts_InitAnimation(EnMaYts* this, PlayState* play) { case MA_YTS_TYPE_SITTING: this->actor.targetMode = 6; // Day 1 or "Winning" the alien invasion - if (CURRENT_DAY == 1 || (gSaveContext.save.weekEventReg[22] & 1)) { + if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { EnMaYts_ChangeAnim(this, 14); } else { EnMaYts_ChangeAnim(this, 18); @@ -177,14 +177,14 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) { case 2: // Failing the alien invasion - if (!(gSaveContext.save.weekEventReg[22] & 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { return false; } break; case 3: // "Winning" the alien invasion - if (gSaveContext.save.weekEventReg[22] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { return false; } break; @@ -193,7 +193,7 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) { case MA_YTS_TYPE_BARN: // Failing the alien invasion - if (!(gSaveContext.save.weekEventReg[22] & 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { return false; } else if (gSaveContext.save.time >= CLOCK_TIME(20, 0) && CURRENT_DAY == 3) { return false; @@ -202,7 +202,7 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) { case MA_YTS_TYPE_SLEEPING: // "Winning" the alien invasion - if (gSaveContext.save.weekEventReg[22] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { return false; } break; @@ -248,7 +248,7 @@ void EnMaYts_Init(Actor* thisx, PlayState* play) { this->hasBow = false; } - if (CURRENT_DAY == 1 || (gSaveContext.save.weekEventReg[22] & 1)) { + if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { this->overrideEyeTexIndex = 0; this->eyeTexIndex = 0; this->mouthTexIndex = 0; @@ -266,7 +266,7 @@ void EnMaYts_Init(Actor* thisx, PlayState* play) { this->mouthTexIndex = 0; this->unk_32C = 2; EnMaYts_SetupEndCreditsHandler(this); - } else if (CURRENT_DAY == 2 && gSaveContext.save.isNight == 1 && (gSaveContext.save.weekEventReg[22] & 1)) { + } else if (CURRENT_DAY == 2 && gSaveContext.save.isNight == 1 && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { EnMaYts_SetupStartDialogue(this); } else { EnMaYts_SetupDoNothing(this); @@ -296,9 +296,9 @@ void EnMaYts_StartDialogue(EnMaYts* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { if (!(gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { - if (!(gSaveContext.save.weekEventReg[65] & 0x80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_80)) { // Saying to non-human Link: "Cremia went to town." - gSaveContext.save.weekEventReg[65] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_65_80); EnMaYts_SetFaceExpression(this, 0, 0); Message_StartTextbox(play, 0x335F, &this->actor); this->textId = 0x335F; @@ -310,8 +310,8 @@ void EnMaYts_StartDialogue(EnMaYts* this, PlayState* play) { func_80151BB4(play, 5); } } else if (Player_GetMask(play) != PLAYER_MASK_NONE) { - if (!(gSaveContext.save.weekEventReg[65] & 0x40)) { - gSaveContext.save.weekEventReg[65] |= 0x40; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_40)) { + SET_WEEKEVENTREG(WEEKEVENTREG_65_40); EnMaYts_SetFaceExpression(this, 0, 0); Message_StartTextbox(play, 0x3363, &this->actor); this->textId = 0x3363; @@ -321,14 +321,14 @@ void EnMaYts_StartDialogue(EnMaYts* this, PlayState* play) { this->textId = 0x3366; func_80151BB4(play, 5); } - } else if (!(gSaveContext.save.weekEventReg[21] & 0x20)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_21_20)) { EnMaYts_SetFaceExpression(this, 0, 0); Message_StartTextbox(play, 0x3367, &this->actor); this->textId = 0x3367; } else { - if (!(gSaveContext.save.weekEventReg[65] & 0x20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_20)) { // Saying to Grasshopper: "Cremia went to town." - gSaveContext.save.weekEventReg[65] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_65_20); EnMaYts_SetFaceExpression(this, 4, 2); Message_StartTextbox(play, 0x3369, &this->actor); this->textId = 0x3369; diff --git a/src/overlays/actors/ovl_En_Mag/overlay.cfg b/src/overlays/actors/ovl_En_Mag/overlay.cfg deleted file mode 100644 index 14fce0372..000000000 --- a/src/overlays/actors/ovl_En_Mag/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Mag -z_en_mag.c diff --git a/src/overlays/actors/ovl_En_Mag/z_en_mag.c b/src/overlays/actors/ovl_En_Mag/z_en_mag.c index 3a72258cc..4a8ce8731 100644 --- a/src/overlays/actors/ovl_En_Mag/z_en_mag.c +++ b/src/overlays/actors/ovl_En_Mag/z_en_mag.c @@ -390,7 +390,7 @@ void EnMag_Update(Actor* thisx, PlayState* play) { play_sound(NA_SE_SY_PIECE_OF_HEART); gSaveContext.gameMode = 2; // Go to FileChoose play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_02; + play->transitionType = TRANS_TYPE_FADE_BLACK; play->nextEntrance = ENTRANCE(CUTSCENE, 0); gSaveContext.save.cutscene = 0; gSaveContext.sceneLayer = 0; diff --git a/src/overlays/actors/ovl_En_Maruta/overlay.cfg b/src/overlays/actors/ovl_En_Maruta/overlay.cfg deleted file mode 100644 index 6816a8c92..000000000 --- a/src/overlays/actors/ovl_En_Maruta/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Maruta -z_en_maruta.c diff --git a/src/overlays/actors/ovl_En_Minideath/overlay.cfg b/src/overlays/actors/ovl_En_Minideath/overlay.cfg deleted file mode 100644 index deffea103..000000000 --- a/src/overlays/actors/ovl_En_Minideath/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Minideath -z_en_minideath.c diff --git a/src/overlays/actors/ovl_En_Minifrog/overlay.cfg b/src/overlays/actors/ovl_En_Minifrog/overlay.cfg deleted file mode 100644 index db7e2a842..000000000 --- a/src/overlays/actors/ovl_En_Minifrog/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Minifrog -z_en_minifrog.c diff --git a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c index 07c147690..f459a6a41 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c @@ -66,14 +66,8 @@ static TexturePtr D_808A4D74[] = { object_fr_Tex_005BA0, }; -// gSaveContext.save.weekEventReg[KEY] = VALUE -// KEY | VALUE static u16 isFrogReturnedFlags[] = { - (0 << 8) | 0x00, // NULL - (32 << 8) | 0x40, // Woodfall Temple Frog Returned - (32 << 8) | 0x80, // Great Bay Temple Frog Returned - (33 << 8) | 0x01, // Southern Swamp Frog Returned - (33 << 8) | 0x02, // Laundry Pool Frog Returned + 0, WEEKEVENTREG_32_40, WEEKEVENTREG_32_80, WEEKEVENTREG_33_01, WEEKEVENTREG_33_02, }; static s32 isInitialized = false; @@ -94,7 +88,7 @@ void EnMinifrog_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); if (!isInitialized) { - for (i = 0; i < 2; i++) { + for (i = 0; i < ARRAY_COUNT(D_808A4D74); i++) { D_808A4D74[i] = Lib_SegmentedToVirtual(D_808A4D74[i]); } isInitialized = true; @@ -112,10 +106,9 @@ void EnMinifrog_Init(Actor* thisx, PlayState* play) { this->timer = 0; if (1) {} + if (!EN_MINIFROG_IS_RETURNED(&this->actor)) { - if ((this->frogIndex == MINIFROG_YELLOW) || - ((gSaveContext.save.weekEventReg[isFrogReturnedFlags[this->frogIndex] >> 8] & - (u8)isFrogReturnedFlags[this->frogIndex]))) { + if ((this->frogIndex == MINIFROG_YELLOW) || CHECK_WEEKEVENTREG(isFrogReturnedFlags[this->frogIndex])) { Actor_Kill(&this->actor); return; } @@ -129,8 +122,7 @@ void EnMinifrog_Init(Actor* thisx, PlayState* play) { this->actor.textId = 0; this->actionFunc = EnMinifrog_SetupYellowFrogDialog; - // Not spoken to MINIFROG_YELLOW - if (!(gSaveContext.save.weekEventReg[34] & 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_34_01)) { this->actor.flags |= ACTOR_FLAG_10000; } @@ -141,8 +133,7 @@ void EnMinifrog_Init(Actor* thisx, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_1; // Frog has been returned - if ((gSaveContext.save.weekEventReg[isFrogReturnedFlags[this->frogIndex] >> 8] & - (u8)isFrogReturnedFlags[this->frogIndex])) { + if (CHECK_WEEKEVENTREG(isFrogReturnedFlags[this->frogIndex])) { this->actionFunc = EnMinifrog_SetupNextFrogInit; } else { this->actor.draw = NULL; @@ -271,16 +262,14 @@ void EnMinifrog_ReturnFrogCutscene(EnMinifrog* this, PlayState* play) { func_80151938(play, play->msgCtx.currentTextId + 1); break; - case 0xD82: // "What has brought you all this way?" - if (gSaveContext.save.weekEventReg[33] & 0x80) { // Mountain village is unfrozen + case 0xD82: // "What has brought you all this way?" + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { func_80151938(play, 0xD83); // "Could it be... Has spring finally come to the mountains?" } else { func_80151938(play, 0xD86); // "Could it be... You came all this way looking for me?" } - gSaveContext.save.weekEventReg[isFrogReturnedFlags[this->frogIndex] >> 8] = - ((void)0, gSaveContext.save.weekEventReg[isFrogReturnedFlags[this->frogIndex] >> 8]) | - (u8)isFrogReturnedFlags[this->frogIndex]; + SET_WEEKEVENTREG(isFrogReturnedFlags[this->frogIndex]); break; case 0xD85: // "I understand. I shall head for the mountains immediately." @@ -476,7 +465,7 @@ void EnMinifrog_EndChoir(EnMinifrog* this, PlayState* play) { Message_StartTextbox(play, 0xD7E, &this->actor); // "Let us do it again sometime." this->actionFunc = EnMinifrog_YellowFrogDialog; } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -487,7 +476,7 @@ void EnMinifrog_GetFrogHP(EnMinifrog* this, PlayState* play) { this->actor.parent = NULL; this->actionFunc = EnMinifrog_EndChoir; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_NONE); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_NONE); } else { Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 10000.0f, 50.0f); } @@ -521,7 +510,7 @@ void EnMinifrog_YellowFrogDialog(EnMinifrog* this, PlayState* play) { // you've lost a little weight..." func_80151938(play, play->msgCtx.currentTextId + 1); this->actor.flags &= ~ACTOR_FLAG_10000; - gSaveContext.save.weekEventReg[34] |= 1; // Spoken to MINIFROG_YELLOW + SET_WEEKEVENTREG(WEEKEVENTREG_34_01); break; case 0xD78: // "Unfortunately, it seems not all of our members have gathered." case 0xD79: // "Perhaps it is because winter was too long? They must not have realized that spring @@ -535,11 +524,11 @@ void EnMinifrog_YellowFrogDialog(EnMinifrog* this, PlayState* play) { play->msgCtx.msgLength = 0; break; case 0xD7C: // "The conducting was spectacular. And all of our members rose to the occasion!" - if (gSaveContext.save.weekEventReg[35] & 0x80) { // Obtained Heart Piece + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_35_80)) { // Obtained Heart Piece func_80151938(play, 0xD7E); } else { func_80151938(play, 0xD7D); // Get Heart Piece - gSaveContext.save.weekEventReg[35] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_35_80); } break; case 0xD7D: // "This is how deeply we were moved by your spectacular conducting..." @@ -568,7 +557,7 @@ void EnMinifrog_SetupYellowFrogDialog(EnMinifrog* this, PlayState* play) { EnMinifrog_JumpTimer(this); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = EnMinifrog_YellowFrogDialog; - if (!(gSaveContext.save.weekEventReg[34] & 1)) { // Not spoken with MINIFROG_YELLOW + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_34_01)) { Message_StartTextbox(play, 0xD76, &this->actor); // "I have been waiting for you, Don Gero. Forgive me if I'm mistaken, // but it looks like you've lost a little weight..." diff --git a/src/overlays/actors/ovl_En_Minislime/overlay.cfg b/src/overlays/actors/ovl_En_Minislime/overlay.cfg deleted file mode 100644 index 795b335cb..000000000 --- a/src/overlays/actors/ovl_En_Minislime/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Minislime -z_en_minislime.c diff --git a/src/overlays/actors/ovl_En_Mk/overlay.cfg b/src/overlays/actors/ovl_En_Mk/overlay.cfg deleted file mode 100644 index 7463d059a..000000000 --- a/src/overlays/actors/ovl_En_Mk/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Mk -z_en_mk.c diff --git a/src/overlays/actors/ovl_En_Mk/z_en_mk.c b/src/overlays/actors/ovl_En_Mk/z_en_mk.c index c267fb110..894d73a6f 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -147,7 +147,7 @@ void func_80959624(EnMk* this, PlayState* play) { if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { if (this->unk_27A & 4) { textId = 0xFB9; - } else if (gSaveContext.save.weekEventReg[55] & 0x80) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { textId = 0xFBC; } else { textId = 0xFBB; @@ -202,17 +202,17 @@ void func_80959844(EnMk* this, PlayState* play) { if ((this->unk_27A & 2) && (func_80959524(play) >= 7)) { textId = 0xFB3; - } else if (gSaveContext.save.weekEventReg[20] & 0x40) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_40)) { textId = 0xFB9; - } else if (gSaveContext.save.weekEventReg[19] & 0x40) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_40)) { textId = 0xFB5; } else if (func_80959524(play) >= 7) { textId = 0xFB3; } else { switch (gSaveContext.save.playerForm) { case PLAYER_FORM_DEKU: - if (gSaveContext.save.weekEventReg[19] & 0x10) { - if (gSaveContext.save.weekEventReg[55] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_10)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { textId = 0xFAF; } else { textId = 0xFAE; @@ -223,8 +223,8 @@ void func_80959844(EnMk* this, PlayState* play) { break; case PLAYER_FORM_GORON: - if (gSaveContext.save.weekEventReg[19] & 8) { - if (gSaveContext.save.weekEventReg[55] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_08)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { textId = 0xFAB; } else { textId = 0xFAA; @@ -238,8 +238,8 @@ void func_80959844(EnMk* this, PlayState* play) { case PLAYER_FORM_HUMAN: if (func_80959524(play) > 0) { textId = 0xFA7; - } else if (gSaveContext.save.weekEventReg[19] & 4) { - if (gSaveContext.save.weekEventReg[55] & 0x80) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_04)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { textId = 0xFBF; } else { textId = 0xFA6; @@ -252,7 +252,7 @@ void func_80959844(EnMk* this, PlayState* play) { default: if (func_80959524(play) > 0) { textId = 0xFB0; - } else if (gSaveContext.save.weekEventReg[19] & 0x20) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_20)) { textId = 0xFB2; } else { textId = 0xFB1; @@ -283,12 +283,12 @@ void func_80959A24(EnMk* this, PlayState* play) { break; case 0xFA2: - if (gSaveContext.save.weekEventReg[55] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { func_801477B4(play); this->actionFunc = func_80959E18; - break; + } else { + func_80151938(play, play->msgCtx.currentTextId + 1); } - func_80151938(play, play->msgCtx.currentTextId + 1); break; case 0xFA5: @@ -308,30 +308,30 @@ void func_80959A24(EnMk* this, PlayState* play) { break; case 0xFA0: - gSaveContext.save.weekEventReg[19] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_19_04); func_80151938(play, 0xFA1); break; case 0xFA8: - gSaveContext.save.weekEventReg[19] |= 8; - if (gSaveContext.save.weekEventReg[55] & 0x80) { + SET_WEEKEVENTREG(WEEKEVENTREG_19_08); + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { func_80151938(play, 0xFBD); - break; + } else { + func_80151938(play, 0xFA9); } - func_80151938(play, 0xFA9); break; case 0xFAC: - gSaveContext.save.weekEventReg[19] |= 0x10; - if (gSaveContext.save.weekEventReg[55] & 0x80) { + SET_WEEKEVENTREG(WEEKEVENTREG_19_10); + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { func_80151938(play, 0xFBE); - break; + } else { + func_80151938(play, 0xFAD); } - func_80151938(play, 0xFAD); break; case 0xFB1: - gSaveContext.save.weekEventReg[19] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_19_20); func_801477B4(play); this->actionFunc = func_80959E18; break; @@ -365,7 +365,7 @@ void func_80959C94(EnMk* this, PlayState* play) { Message_StartTextbox(play, 0xFB3, &this->actor); } else { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 350.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 350.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -373,7 +373,7 @@ void func_80959D28(EnMk* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); if ((play->csCtx.state == 0) && (this->actor.cutscene == -1)) { - if (gSaveContext.save.weekEventReg[20] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_40)) { this->unk_27A &= ~1; this->actionFunc = func_80959774; this->actor.home.rot.y += 0x4E20; @@ -401,7 +401,7 @@ void func_80959E18(EnMk* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); - if (gSaveContext.save.weekEventReg[20] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_40)) { this->unk_27A &= ~1; this->actionFunc = func_80959774; this->actor.home.rot.y += 0x4E20; @@ -413,7 +413,7 @@ void func_80959E18(EnMk* this, PlayState* play) { this->actionFunc = func_80959D28; if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { this->actor.cutscene = this->unk_276[0]; - gSaveContext.save.weekEventReg[20] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_20_40); Item_Give(play, ITEM_SONG_NOVA); } else { this->actor.cutscene = this->unk_276[1]; @@ -428,7 +428,7 @@ void func_80959E18(EnMk* this, PlayState* play) { } else if ((this->actor.xzDistToPlayer < 120.0f) && (ABS_ALT(sp22) <= 0x4300)) { this->unk_27A |= 1; func_800B8614(&this->actor, play, 200.0f); - if (!(gSaveContext.save.weekEventReg[20] & 0x40) && (gSaveContext.save.weekEventReg[19] & 0x40)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_20_40) && CHECK_WEEKEVENTREG(WEEKEVENTREG_19_40)) { func_800B874C(&this->actor, play, 200.0f, 100.0f); } } else { diff --git a/src/overlays/actors/ovl_En_Mkk/overlay.cfg b/src/overlays/actors/ovl_En_Mkk/overlay.cfg deleted file mode 100644 index 490c7cd58..000000000 --- a/src/overlays/actors/ovl_En_Mkk/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Mkk -z_en_mkk.c diff --git a/src/overlays/actors/ovl_En_Mm/overlay.cfg b/src/overlays/actors/ovl_En_Mm/overlay.cfg deleted file mode 100644 index db9f54ab3..000000000 --- a/src/overlays/actors/ovl_En_Mm/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Mm -z_en_mm.c diff --git a/src/overlays/actors/ovl_En_Mm/z_en_mm.c b/src/overlays/actors/ovl_En_Mm/z_en_mm.c index 0cd8f1276..d9b0bf507 100644 --- a/src/overlays/actors/ovl_En_Mm/z_en_mm.c +++ b/src/overlays/actors/ovl_En_Mm/z_en_mm.c @@ -74,8 +74,8 @@ void EnMm_Init(Actor* thisx, PlayState* play) { EnMm* this = THIS; EnMmActionFunc action; - if ((this->actor.params >= 0) && ((!(gSaveContext.save.weekEventReg[37] & 0x10)) || - (gSaveContext.save.weekEventReg[37] & 8) || (gSaveContext.unk_1014 != 0))) { + if ((this->actor.params >= 0) && (!CHECK_WEEKEVENTREG(WEEKEVENTREG_37_10) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_37_08) || (gSaveContext.unk_1014 != 0))) { Actor_Kill(&this->actor); return; } @@ -114,8 +114,8 @@ void func_80965D3C(EnMm* this, PlayState* play) { void func_80965DB4(EnMm* this, PlayState* play) { s16 direction; - Vec3f sp50; - s16 unused; + Vec3f slopeNormal; + s16 downwardSlopeYaw; f32 temp_f14; f32 temp_f12; f32 temp_f2; @@ -143,15 +143,15 @@ void func_80965DB4(EnMm* this, PlayState* play) { } else { temp_f14 = Math_SinS(this->actor.world.rot.y) * this->actor.speedXZ; temp_f12 = Math_CosS(this->actor.world.rot.y) * this->actor.speedXZ; - func_800B75A0(this->actor.floorPoly, &sp50, &unused); - temp_f14 += 3.0f * sp50.x; - temp_f12 += 3.0f * sp50.z; + Actor_GetSlopeDirection(this->actor.floorPoly, &slopeNormal, &downwardSlopeYaw); + temp_f14 += 3.0f * slopeNormal.x; + temp_f12 += 3.0f * slopeNormal.z; temp_f2 = sqrtf(SQ(temp_f14) + SQ(temp_f12)); if ((temp_f2 < this->actor.speedXZ) || (SurfaceType_GetSlope(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == 1)) { this->actor.speedXZ = CLAMP_MAX(temp_f2, 16.0f); - this->actor.world.rot.y = Math_FAtan2F(temp_f12, temp_f14); + this->actor.world.rot.y = Math_Atan2S_XY(temp_f12, temp_f14); } if (!Math_StepToF(&this->actor.speedXZ, 0.0f, 1.0f)) { diff --git a/src/overlays/actors/ovl_En_Mm2/overlay.cfg b/src/overlays/actors/ovl_En_Mm2/overlay.cfg deleted file mode 100644 index ee3394df9..000000000 --- a/src/overlays/actors/ovl_En_Mm2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Mm2 -z_en_mm2.c diff --git a/src/overlays/actors/ovl_En_Mm3/overlay.cfg b/src/overlays/actors/ovl_En_Mm3/overlay.cfg deleted file mode 100644 index d1162759f..000000000 --- a/src/overlays/actors/ovl_En_Mm3/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Mm3 -z_en_mm3.c diff --git a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c index a611a309e..3e58691cc 100644 --- a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c +++ b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c @@ -106,7 +106,7 @@ void EnMm3_Init(Actor* thisx, PlayState* play) { void EnMm3_Destroy(Actor* thisx, PlayState* play) { EnMm3* this = THIS; - gSaveContext.save.weekEventReg[63] &= (u8)~1; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01); Collider_DestroyCylinder(play, &this->collider); } @@ -279,7 +279,7 @@ void func_80A6F5E4(EnMm3* this, PlayState* play) { case 0x2795: case 0x2796: case 0x2797: - if (gSaveContext.save.weekEventReg[63] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_02)) { Message_StartTextbox(play, 0x279B, &this->actor); this->unk_2B4 = 0x279B; func_80151BB4(play, 0xB); @@ -351,8 +351,8 @@ void func_80A6F9DC(EnMm3* this, PlayState* play) { play_sound(NA_SE_SY_START_SHOT); func_80A6FBA0(this); } else { - gSaveContext.save.weekEventReg[63] &= (u8)~1; - gSaveContext.save.weekEventReg[63] &= (u8)~2; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02); func_80A6F270(this); } } @@ -374,8 +374,8 @@ void func_80A6FBA0(EnMm3* this) { AudioSfx_MuteBanks((1 << BANK_PLAYER) | (1 << BANK_ITEM) | (1 << BANK_ENV) | (1 << BANK_ENEMY) | (1 << BANK_OCARINA) | (1 << BANK_VOICE)); func_801A0238(0, 5); - gSaveContext.save.weekEventReg[63] |= 1; - gSaveContext.save.weekEventReg[63] &= (u8)~2; + SET_WEEKEVENTREG(WEEKEVENTREG_63_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02); this->actionFunc = func_80A6FBFC; } @@ -425,12 +425,12 @@ void func_80A6FE1C(EnMm3* this) { void func_80A6FE30(EnMm3* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { - if (!(gSaveContext.save.weekEventReg[77] & 1)) { - gSaveContext.save.weekEventReg[77] |= 1; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_01)) { + SET_WEEKEVENTREG(WEEKEVENTREG_77_01); } this->actor.parent = NULL; func_80A6FED8(this); - } else if (gSaveContext.save.weekEventReg[77] & 1) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_01)) { Actor_PickUp(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f); } else { Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f); diff --git a/src/overlays/actors/ovl_En_Mnk/overlay.cfg b/src/overlays/actors/ovl_En_Mnk/overlay.cfg deleted file mode 100644 index 456c850ac..000000000 --- a/src/overlays/actors/ovl_En_Mnk/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Mnk -z_en_mnk.c diff --git a/src/overlays/actors/ovl_En_Ms/overlay.cfg b/src/overlays/actors/ovl_En_Ms/overlay.cfg deleted file mode 100644 index f8f57266e..000000000 --- a/src/overlays/actors/ovl_En_Ms/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ms -z_en_ms.c diff --git a/src/overlays/actors/ovl_En_Ms/z_en_ms.c b/src/overlays/actors/ovl_En_Ms/z_en_ms.c index c3b7ac727..6aac1355d 100644 --- a/src/overlays/actors/ovl_En_Ms/z_en_ms.c +++ b/src/overlays/actors/ovl_En_Ms/z_en_ms.c @@ -149,7 +149,7 @@ void EnMs_Talk(EnMs* this, PlayState* play) { void EnMs_Sell(EnMs* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.textId = 0; - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_AP_NONE); + func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_NONE); this->actionFunc = EnMs_TalkAfterPurchase; } else { Actor_PickUp(&this->actor, play, GI_MAGIC_BEANS, this->actor.xzDistToPlayer, this->actor.playerHeightRel); @@ -161,7 +161,7 @@ void EnMs_TalkAfterPurchase(EnMs* this, PlayState* play) { func_80151938(play, 0x936); // "You can plant 'em whenever you want [...]" this->actionFunc = EnMs_Talk; } else { - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_MINUS1); } } diff --git a/src/overlays/actors/ovl_En_Mt_tag/overlay.cfg b/src/overlays/actors/ovl_En_Mt_tag/overlay.cfg deleted file mode 100644 index dcf4dadff..000000000 --- a/src/overlays/actors/ovl_En_Mt_tag/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Mt_tag -z_en_mt_tag.c diff --git a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c index e4178997f..7b2dc9db6 100644 --- a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c +++ b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c @@ -77,7 +77,7 @@ s32 EnMttag_IsInFinishLine(Vec3f* pos) { * and, if so, what kind of cheating the player is performing. */ s32 EnMttag_CheckPlayerCheatStatus(Vec3f* pos) { - if (!(gSaveContext.eventInf[1] & 1)) { + if (!CHECK_EVENTINF(EVENTINF_10)) { if (Math3D_XZBoundCheck(-466.0f, -386.0f, -687.0f, 193.0f, pos->x, pos->z)) { // The race hasn't started yet, but the player is beyond the starting line. return GORON_RACE_CHEAT_FALSE_START; @@ -234,7 +234,7 @@ s32 EnMttag_UpdateCheckpoints(EnMttag* this, PlayState* play) { s32 EnMttag_ExitRace(PlayState* play, s32 transitionType, s32 nextTransitionType) { CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_SWORD_KOKIRI; play->nextEntrance = ENTRANCE(GORON_RACETRACK, 2); - if (gSaveContext.save.weekEventReg[33] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { // Spring gSaveContext.nextCutsceneIndex = 0xFFF0; } else { @@ -255,7 +255,7 @@ s32 EnMttag_ExitRace(PlayState* play, s32 transitionType, s32 nextTransitionType void EnMttag_ShowFalseStartMessage(EnMttag* this, PlayState* play) { gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_OFF; Message_StartTextbox(play, 0xE95, NULL); // An entrant made a false start - func_800B7298(play, &this->actor, 7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_7); Audio_QueueSeqCmd(0x101400FF); this->actionFunc = EnMttag_PotentiallyRestartRace; } @@ -266,7 +266,7 @@ void EnMttag_ShowFalseStartMessage(EnMttag* this, PlayState* play) { */ void EnMttag_ShowCantWinMessage(EnMttag* this, PlayState* play) { Message_StartTextbox(play, 0xE97, NULL); // You can't win now... - func_800B7298(play, &this->actor, 7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_7); this->actionFunc = EnMttag_HandleCantWinChoice; } @@ -288,7 +288,7 @@ void EnMttag_ShowIntroCutscene(EnMttag* this, PlayState* play) { */ void EnMttag_WaitForIntroCutsceneToEnd(EnMttag* this, PlayState* play) { if (ActorCutscene_GetCurrentIndex() != this->actor.cutscene) { - gSaveContext.save.weekEventReg[12] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_12_02); this->actionFunc = EnMttag_RaceStart; } } @@ -311,17 +311,17 @@ void EnMttag_RaceStart(EnMttag* this, PlayState* play) { } EnMttag_ShowFalseStartMessage(this, play); - gSaveContext.eventInf[1] |= 8; + SET_EVENTINF(EVENTINF_13); } else { if (DECR(this->timer) == 60) { Interface_StartTimer(TIMER_ID_MINIGAME_2, 0); - play->interfaceCtx.unk_280 = 1; + play->interfaceCtx.minigameState = MINIGAME_STATE_COUNTDOWN_SETUP_3; Audio_QueueSeqCmd(NA_BGM_GORON_RACE | 0x8000); play->envCtx.unk_E4 = 0xFE; player->stateFlags1 &= ~PLAYER_STATE1_20; - } else if ((this->timer < 60) && (play->interfaceCtx.unk_280 == 8)) { + } else if ((this->timer < 60) && (play->interfaceCtx.minigameState == MINIGAME_STATE_COUNTDOWN_GO)) { this->timer = 0; - gSaveContext.eventInf[1] |= 1; + SET_EVENTINF(EVENTINF_10); this->actionFunc = EnMttag_Race; } } @@ -363,14 +363,14 @@ void EnMttag_Race(EnMttag* this, PlayState* play) { play_sound(NA_SE_SY_START_SHOT); Audio_QueueSeqCmd(NA_BGM_GORON_GOAL | 0x8000); this->timer = 55; - gSaveContext.eventInf[1] |= 2; + SET_EVENTINF(EVENTINF_11); this->actionFunc = EnMttag_RaceFinish; } else if (EnMttag_IsAnyRaceGoronOverFinishLine(this)) { gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6; play_sound(NA_SE_SY_START_SHOT); Audio_QueueSeqCmd(NA_BGM_GORON_GOAL | 0x8000); this->timer = 55; - gSaveContext.eventInf[1] |= 4; + SET_EVENTINF(EVENTINF_12); this->actionFunc = EnMttag_RaceFinish; } else { playerCheatStatus = EnMttag_CheckPlayerCheatStatus(playerPos); @@ -382,10 +382,10 @@ void EnMttag_Race(EnMttag* this, PlayState* play) { } EnMttag_ShowFalseStartMessage(this, play); - gSaveContext.eventInf[1] |= 8; + SET_EVENTINF(EVENTINF_13); } else if ((EnMttag_UpdateCheckpoints(this, play)) && (this->timer == 0)) { EnMttag_ShowCantWinMessage(this, play); - gSaveContext.eventInf[1] |= 8; + SET_EVENTINF(EVENTINF_13); } } } @@ -396,12 +396,12 @@ void EnMttag_Race(EnMttag* this, PlayState* play) { */ void EnMttag_RaceFinish(EnMttag* this, PlayState* play) { if (DECR(this->timer) == 0) { - if ((gSaveContext.eventInf[1] & 2)) { + if (CHECK_EVENTINF(EVENTINF_11)) { // Player won - EnMttag_ExitRace(play, TRANS_TYPE_03, TRANS_TYPE_03); + EnMttag_ExitRace(play, TRANS_TYPE_FADE_WHITE, TRANS_TYPE_FADE_WHITE); } else { // A non-player Goron won - EnMttag_ExitRace(play, TRANS_TYPE_02, TRANS_TYPE_02); + EnMttag_ExitRace(play, TRANS_TYPE_FADE_BLACK, TRANS_TYPE_FADE_BLACK); } Actor_Kill(&this->actor); @@ -420,7 +420,7 @@ void EnMttag_PotentiallyRestartRace(EnMttag* this, PlayState* play) { if (this->shouldRestartRace) { play->nextEntrance = ENTRANCE(GORON_RACETRACK, 1); - if (gSaveContext.save.weekEventReg[33] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { // Spring gSaveContext.nextCutsceneIndex = 0xFFF0; } else { @@ -429,19 +429,19 @@ void EnMttag_PotentiallyRestartRace(EnMttag* this, PlayState* play) { } play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_02; - gSaveContext.nextTransitionType = TRANS_TYPE_02; + play->transitionType = TRANS_TYPE_FADE_BLACK; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; func_801477B4(play); - func_800B7298(play, &this->actor, 7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_7); Magic_Add(play, MAGIC_FILL_TO_CAPACITY); - gSaveContext.eventInf[1] &= (u8)~1; - gSaveContext.eventInf[1] &= (u8)~2; - gSaveContext.eventInf[1] &= (u8)~4; - gSaveContext.eventInf[1] &= (u8)~8; + CLEAR_EVENTINF(EVENTINF_10); + CLEAR_EVENTINF(EVENTINF_11); + CLEAR_EVENTINF(EVENTINF_12); + CLEAR_EVENTINF(EVENTINF_13); gSaveContext.eventInf[2] = ((gSaveContext.eventInf[2] & 0xF) + 1) | (gSaveContext.eventInf[2] & 0xF0); } else { - EnMttag_ExitRace(play, TRANS_TYPE_02, TRANS_TYPE_02); + EnMttag_ExitRace(play, TRANS_TYPE_FADE_BLACK, TRANS_TYPE_FADE_BLACK); } Actor_Kill(&this->actor); } @@ -457,9 +457,9 @@ void EnMttag_HandleCantWinChoice(EnMttag* this, PlayState* play) { // Exit the race func_8019F230(); gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_OFF; - EnMttag_ExitRace(play, TRANS_TYPE_02, TRANS_TYPE_02); - gSaveContext.eventInf[1] &= (u8)~8; - gSaveContext.eventInf[1] |= 4; + EnMttag_ExitRace(play, TRANS_TYPE_FADE_BLACK, TRANS_TYPE_FADE_BLACK); + CLEAR_EVENTINF(EVENTINF_13); + SET_EVENTINF(EVENTINF_12); Actor_Kill(&this->actor); return; } @@ -467,8 +467,8 @@ void EnMttag_HandleCantWinChoice(EnMttag* this, PlayState* play) { // Keep racing func_8019F208(); func_801477B4(play); - func_800B7298(play, &this->actor, 6); - gSaveContext.eventInf[1] &= (u8)~8; + func_800B7298(play, &this->actor, PLAYER_CSMODE_6); + CLEAR_EVENTINF(EVENTINF_13); this->timer = 100; this->actionFunc = EnMttag_Race; } @@ -484,12 +484,12 @@ void EnMttag_Init(Actor* thisx, PlayState* play) { this->raceInitialized = false; this->timer = 100; - gSaveContext.eventInf[1] &= (u8)~1; - gSaveContext.eventInf[1] &= (u8)~2; - gSaveContext.eventInf[1] &= (u8)~4; - gSaveContext.eventInf[1] &= (u8)~8; + CLEAR_EVENTINF(EVENTINF_10); + CLEAR_EVENTINF(EVENTINF_11); + CLEAR_EVENTINF(EVENTINF_12); + CLEAR_EVENTINF(EVENTINF_13); - if (!(gSaveContext.save.weekEventReg[12] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_02)) { this->actionFunc = EnMttag_ShowIntroCutscene; } else { s32 requiredScopeTemp; diff --git a/src/overlays/actors/ovl_En_Mushi2/overlay.cfg b/src/overlays/actors/ovl_En_Mushi2/overlay.cfg deleted file mode 100644 index d8a7c2e85..000000000 --- a/src/overlays/actors/ovl_En_Mushi2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Mushi2 -z_en_mushi2.c diff --git a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c index d8e9d68f8..c10244e55 100644 --- a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c +++ b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c @@ -658,7 +658,7 @@ void func_80A69D3C(EnMushi2* this) { sp38 = Math3D_XZLengthSquared(sp40, sp3C); if (fabsf(sp38) > 0.010000001f) { - s16 temp_v0 = Math_FAtan2F(sp3C, sp40); + s16 temp_v0 = Math_Atan2S_XY(sp3C, sp40); temp_v0 = CLAMP(temp_v0, -3000, 3000); func_80A68F9C(this, temp_v0); } diff --git a/src/overlays/actors/ovl_En_Muto/overlay.cfg b/src/overlays/actors/ovl_En_Muto/overlay.cfg deleted file mode 100644 index 3fd3e42b5..000000000 --- a/src/overlays/actors/ovl_En_Muto/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Muto -z_en_muto.c diff --git a/src/overlays/actors/ovl_En_Muto/z_en_muto.c b/src/overlays/actors/ovl_En_Muto/z_en_muto.c index 03b30a286..f9d17ca96 100644 --- a/src/overlays/actors/ovl_En_Muto/z_en_muto.c +++ b/src/overlays/actors/ovl_En_Muto/z_en_muto.c @@ -70,7 +70,7 @@ void EnMuto_Init(Actor* thisx, PlayState* play) { if (!this->isInMayorsRoom) { this->shouldSetHeadRotation = true; this->textIdIndex = 2; - if (gSaveContext.save.weekEventReg[60] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_60_80)) { this->textIdIndex = 3; } @@ -82,7 +82,7 @@ void EnMuto_Init(Actor* thisx, PlayState* play) { this->collider.dim.height = 60; this->collider.dim.yShift = 0; - if (gSaveContext.save.weekEventReg[63] & 0x80 || (gSaveContext.save.day == 3 && gSaveContext.save.isNight)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_80) || ((gSaveContext.save.day == 3) && gSaveContext.save.isNight)) { Actor_Kill(&this->actor); } } @@ -136,7 +136,7 @@ void EnMuto_Idle(EnMuto* this, PlayState* play) { if (!this->isInMayorsRoom) { player = GET_PLAYER(play); if (player->transformation == PLAYER_FORM_DEKU) { - if (!(gSaveContext.save.weekEventReg[88] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_88_08)) { this->actor.textId = 0x62C; } else { this->actor.textId = 0x62B; @@ -164,7 +164,7 @@ void EnMuto_Idle(EnMuto* this, PlayState* play) { } } else { this->textIdIndex = 0; - if (gSaveContext.save.weekEventReg[60] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_60_08)) { this->textIdIndex = 1; } if (Player_GetMask(play) == PLAYER_MASK_COUPLE) { @@ -202,10 +202,10 @@ void EnMuto_InDialogue(EnMuto* this, PlayState* play) { func_801477B4(play); if (this->actor.textId == 0x62C) { - gSaveContext.save.weekEventReg[88] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_88_08); } if (this->actor.textId == 0x624) { - gSaveContext.save.weekEventReg[60] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_60_80); } this->textIdIndex = 3; diff --git a/src/overlays/actors/ovl_En_Nb/overlay.cfg b/src/overlays/actors/ovl_En_Nb/overlay.cfg deleted file mode 100644 index 27d485b84..000000000 --- a/src/overlays/actors/ovl_En_Nb/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Nb -z_en_nb.c diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.c b/src/overlays/actors/ovl_En_Nb/z_en_nb.c index 3d653a644..b5d558a71 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -66,7 +66,7 @@ static u8 sScheduleScript[] = { /* 0x3E */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_1), /* 0x41 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_2), /* 0x44 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_1), - /* 0x47 */ SCHEDULE_CMD_CHECK_FLAG_S(0x32, 0x20, 0x57 - 0x4B), + /* 0x47 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_50_20, 0x57 - 0x4B), /* 0x4B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(8, 0, 18, 0, 0x54 - 0x51), /* 0x51 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_3), /* 0x54 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_1), @@ -335,7 +335,7 @@ s32 func_80BC01DC(Actor* thisx, PlayState* play) { R_PLAY_FILL_SCREEN_ALPHA = (s16)(s32)(255.0f - (((f32)ABS_ALT(20 - this->storyTimer) / 20.0f) * 255.0f)); if (this->storyTimer == 20) { - if (gSaveContext.eventInf[4] & 4) { + if (CHECK_EVENTINF(EVENTINF_42)) { // play->interfaceCtx.storyType = STORY_TYPE_MASK_FESTIVAL; play->interfaceCtx.storyType = 0; } else { @@ -365,7 +365,7 @@ s32 func_80BC01DC(Actor* thisx, PlayState* play) { this->behaviour++; // fallthrough case ENNB_BEHAVIOUR_5: - if (!(gSaveContext.eventInf[4] & 4)) { + if (!CHECK_EVENTINF(EVENTINF_42)) { gSaveContext.save.time = CLOCK_TIME(8, 0); Sram_IncrementDay(); } else { @@ -376,9 +376,9 @@ s32 func_80BC01DC(Actor* thisx, PlayState* play) { play->nextEntrance = ENTRANCE(STOCK_POT_INN, 2); gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_02; - gSaveContext.nextTransitionType = TRANS_TYPE_06; - gSaveContext.eventInf[4] |= 8; + play->transitionType = TRANS_TYPE_FADE_BLACK; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK_SLOW; + SET_EVENTINF(EVENTINF_43); break; } @@ -386,7 +386,7 @@ s32 func_80BC01DC(Actor* thisx, PlayState* play) { } u8* func_80BC045C(EnNb* this, PlayState* play) { - if (gSaveContext.eventInf[4] & 8) { + if (CHECK_EVENTINF(EVENTINF_43)) { this->msgEventCallback = func_80BC01DC; return D_80BC1464; } else if (this->scheduleResult == EN_NB_SCH_2) { @@ -424,7 +424,7 @@ void func_80BC05A8(EnNb* this, PlayState* play) { TextState talkState = Message_GetState(&play->msgCtx); u16 textId = play->msgCtx.currentTextId; - if ((&this->actor == player->targetActor) && ((textId < 0xFF) || (textId > 0x200)) && (talkState == TEXT_STATE_3) && + if ((&this->actor == player->talkActor) && ((textId < 0xFF) || (textId > 0x200)) && (talkState == TEXT_STATE_3) && (this->prevTalkState == TEXT_STATE_3)) { if ((play->state.frames % 3) == 0) { if (this->unk_26C == 120.0f) { @@ -586,7 +586,7 @@ s32 func_80BC0B98(EnNb* this, PlayState* play, ScheduleOutput* scheduleOutput) { } s32 func_80BC0C0C(EnNb* this, PlayState* play, ScheduleOutput* scheduleOutput) { - if (!(gSaveContext.eventInf[4] & 8)) { + if (!CHECK_EVENTINF(EVENTINF_43)) { SubS_UpdateFlags(&this->stateFlags, EN_NB_FLAG_1 | EN_NB_FLAG_2, EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4); } else { SubS_UpdateFlags(&this->stateFlags, EN_NB_FLAG_4, EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4); @@ -638,9 +638,9 @@ void EnNb_HandleSchedule(EnNb* this, PlayState* play) { void EnNb_FollowSchedule(EnNb* this, PlayState* play) { ScheduleOutput scheduleOutput; - this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed); + this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); - if (gSaveContext.eventInf[4] & 8) { + if (CHECK_EVENTINF(EVENTINF_43)) { scheduleOutput.result = EN_NB_SCH_1; EnNb_ProcessScheduleOutput(this, play, &scheduleOutput); this->actor.shape.shadowDraw = ActorShadow_DrawCircle; @@ -663,9 +663,9 @@ void EnNb_FollowSchedule(EnNb* this, PlayState* play) { void func_80BC0EAC(EnNb* this, PlayState* play) { if (func_8010BF58(&this->actor, play, this->msgEventScript, this->msgEventCallback, &this->msgEventArg4)) { - if (gSaveContext.eventInf[4] & 8) { - gSaveContext.eventInf[4] &= (u8)~4; - gSaveContext.eventInf[4] &= (u8)~8; + if (CHECK_EVENTINF(EVENTINF_43)) { + CLEAR_EVENTINF(EVENTINF_42); + CLEAR_EVENTINF(EVENTINF_43); } SubS_UpdateFlags(&this->stateFlags, EN_NB_FLAG_1 | EN_NB_FLAG_2, EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4); @@ -695,11 +695,11 @@ void EnNb_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); this->stateFlags = EN_NB_FLAG_NONE; - if (gSaveContext.eventInf[4] & 8) { + if (CHECK_EVENTINF(EVENTINF_43)) { SubS_UpdateFlags(&this->stateFlags, EN_NB_FLAG_4, EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4); } else { - gSaveContext.eventInf[4] &= (u8)~4; - gSaveContext.eventInf[4] &= (u8)~8; + CLEAR_EVENTINF(EVENTINF_42); + CLEAR_EVENTINF(EVENTINF_43); } this->actionFunc = EnNb_FollowSchedule; diff --git a/src/overlays/actors/ovl_En_Neo_Reeba/overlay.cfg b/src/overlays/actors/ovl_En_Neo_Reeba/overlay.cfg deleted file mode 100644 index b5d488d53..000000000 --- a/src/overlays/actors/ovl_En_Neo_Reeba/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Neo_Reeba -z_en_neo_reeba.c diff --git a/src/overlays/actors/ovl_En_Nimotsu/overlay.cfg b/src/overlays/actors/ovl_En_Nimotsu/overlay.cfg deleted file mode 100644 index 8558fc330..000000000 --- a/src/overlays/actors/ovl_En_Nimotsu/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Nimotsu -z_en_nimotsu.c diff --git a/src/overlays/actors/ovl_En_Niw/overlay.cfg b/src/overlays/actors/ovl_En_Niw/overlay.cfg deleted file mode 100644 index 26dacb3bb..000000000 --- a/src/overlays/actors/ovl_En_Niw/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Niw -z_en_niw.c diff --git a/src/overlays/actors/ovl_En_Nnh/overlay.cfg b/src/overlays/actors/ovl_En_Nnh/overlay.cfg deleted file mode 100644 index 01d2bec04..000000000 --- a/src/overlays/actors/ovl_En_Nnh/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Nnh -z_en_nnh.c diff --git a/src/overlays/actors/ovl_En_Nutsball/overlay.cfg b/src/overlays/actors/ovl_En_Nutsball/overlay.cfg deleted file mode 100644 index cc188400c..000000000 --- a/src/overlays/actors/ovl_En_Nutsball/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Nutsball -z_en_nutsball.c diff --git a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c index d1d57e741..ad872cd21 100644 --- a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c +++ b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c @@ -104,7 +104,7 @@ void EnNutsball_Update(Actor* thisx, PlayState* play2) { this->actor.velocity.y += this->actor.gravity; spdXZ = sqrtf((this->actor.velocity.x * this->actor.velocity.x) + (this->actor.velocity.z * this->actor.velocity.z)); - this->actor.world.rot.x = Math_FAtan2F(spdXZ, this->actor.velocity.y); + this->actor.world.rot.x = Math_Atan2S_XY(spdXZ, this->actor.velocity.y); } this->actor.home.rot.z += 0x2AA8; if ((this->actor.bgCheckFlags & 8) || (this->actor.bgCheckFlags & 1) || (this->actor.bgCheckFlags & 16) || diff --git a/src/overlays/actors/ovl_En_Nwc/overlay.cfg b/src/overlays/actors/ovl_En_Nwc/overlay.cfg deleted file mode 100644 index d479e7da4..000000000 --- a/src/overlays/actors/ovl_En_Nwc/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Nwc -z_en_nwc.c diff --git a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c index 5fcd69fc8..74ac78b5f 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -68,8 +68,7 @@ void EnNwc_Init(Actor* thisx, PlayState* play) { return; } - if (gSaveContext.save.weekEventReg[25] & 8) { - // if breman mask was already used, replace with adult EnNiw + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_08)) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_NIW, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.world.rot.y, 0, NIW_TYPE_REGULAR); Actor_Kill(&this->actor); diff --git a/src/overlays/actors/ovl_En_Okarina_Effect/overlay.cfg b/src/overlays/actors/ovl_En_Okarina_Effect/overlay.cfg deleted file mode 100644 index 02325ddea..000000000 --- a/src/overlays/actors/ovl_En_Okarina_Effect/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Okarina_Effect -z_en_okarina_effect.c diff --git a/src/overlays/actors/ovl_En_Okarina_Tag/overlay.cfg b/src/overlays/actors/ovl_En_Okarina_Tag/overlay.cfg deleted file mode 100644 index 908da1888..000000000 --- a/src/overlays/actors/ovl_En_Okarina_Tag/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Okarina_Tag -z_en_okarina_tag.c diff --git a/src/overlays/actors/ovl_En_Okuta/overlay.cfg b/src/overlays/actors/ovl_En_Okuta/overlay.cfg deleted file mode 100644 index 8863e7169..000000000 --- a/src/overlays/actors/ovl_En_Okuta/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Okuta -z_en_okuta.c diff --git a/src/overlays/actors/ovl_En_Onpuman/overlay.cfg b/src/overlays/actors/ovl_En_Onpuman/overlay.cfg deleted file mode 100644 index 50f24d4ac..000000000 --- a/src/overlays/actors/ovl_En_Onpuman/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Onpuman -z_en_onpuman.c diff --git a/src/overlays/actors/ovl_En_Osk/overlay.cfg b/src/overlays/actors/ovl_En_Osk/overlay.cfg deleted file mode 100644 index 3d963dc09..000000000 --- a/src/overlays/actors/ovl_En_Osk/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Osk -z_en_osk.c diff --git a/src/overlays/actors/ovl_En_Osn/overlay.cfg b/src/overlays/actors/ovl_En_Osn/overlay.cfg deleted file mode 100644 index 59f9f2343..000000000 --- a/src/overlays/actors/ovl_En_Osn/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Osn -z_en_osn.c diff --git a/src/overlays/actors/ovl_En_Osn/z_en_osn.c b/src/overlays/actors/ovl_En_Osn/z_en_osn.c index a61c0dc22..7df9d843d 100644 --- a/src/overlays/actors/ovl_En_Osn/z_en_osn.c +++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.c @@ -476,16 +476,17 @@ s32 EnOsn_GetInitialText(EnOsn* this, PlayState* play) { if ((gSaveContext.save.day == 3) && (gSaveContext.save.time >= CLOCK_TIME(5, 0)) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) { return 0x2006; + } else { + return 0x1FCD; } - return 0x1FCD; } this->stateFlags |= OSN_STATE_MET_GORON; - if (gSaveContext.save.weekEventReg[76] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_76_20)) { return 0x1FC8; + } else { + SET_WEEKEVENTREG(WEEKEVENTREG_76_20); + return 0x1FCE; } - - gSaveContext.save.weekEventReg[76] |= 0x20; - return 0x1FCE; } if (player->transformation == PLAYER_FORM_ZORA) { @@ -497,11 +498,12 @@ s32 EnOsn_GetInitialText(EnOsn* this, PlayState* play) { } return 0x1FCD; } + this->stateFlags |= OSN_STATE_MET_ZORA; - if (gSaveContext.save.weekEventReg[76] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_76_40)) { return 0x1FC8; } - gSaveContext.save.weekEventReg[76] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_76_40); return 0x1FD0; } diff --git a/src/overlays/actors/ovl_En_Ossan/overlay.cfg b/src/overlays/actors/ovl_En_Ossan/overlay.cfg deleted file mode 100644 index be58d6c1e..000000000 --- a/src/overlays/actors/ovl_En_Ossan/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ossan -z_en_ossan.c diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index a17113ff8..d1f7dbec9 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -339,7 +339,7 @@ s32 EnOssan_TestCancelOption(EnOssan* this, PlayState* play, Input* input) { } void EnOssan_SetupStartShopping(PlayState* play, EnOssan* this, u8 skipHello) { - func_8011552C(play, 0x10); + func_8011552C(play, DO_ACTION_NEXT); if (!skipHello) { EnOssan_SetupAction(this, EnOssan_Hello); } else { @@ -350,7 +350,7 @@ void EnOssan_SetupStartShopping(PlayState* play, EnOssan* this, u8 skipHello) { void EnOssan_StartShopping(PlayState* play, EnOssan* this) { EnOssan_SetupAction(this, EnOssan_FaceShopkeeper); func_80151938(play, 0x640); - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); this->stickRightPrompt.isEnabled = true; this->stickLeftPrompt.isEnabled = true; } @@ -603,7 +603,7 @@ s32 EnOssan_FacingShopkeeperDialogResult(EnOssan* this, PlayState* play) { } EnOssan_SetupAction(this, EnOssan_TalkToShopkeeper); func_80151938(play, sTalkOptionTextIds[this->actor.params]); - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = false; return true; @@ -630,7 +630,7 @@ void EnOssan_FaceShopkeeper(EnOssan* this, PlayState* play) { this->cutsceneState = ENOSSAN_CUTSCENESTATE_WAITING; } else { if (talkState == TEXT_STATE_CHOICE) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); if (!EnOssan_TestEndInteraction(this, play, CONTROLLER1(&play->state)) && (!Message_ShouldAdvance(play) || !EnOssan_FacingShopkeeperDialogResult(this, play))) { if (this->stickAccumX < 0) { @@ -638,7 +638,7 @@ void EnOssan_FaceShopkeeper(EnOssan* this, PlayState* play) { if (cursorIndex != CURSOR_INVALID) { this->cursorIndex = cursorIndex; EnOssan_SetupAction(this, EnOssan_LookToLeftShelf); - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); this->stickLeftPrompt.isEnabled = false; play_sound(NA_SE_SY_CURSOR); } @@ -647,7 +647,7 @@ void EnOssan_FaceShopkeeper(EnOssan* this, PlayState* play) { if (cursorIndex != CURSOR_INVALID) { this->cursorIndex = cursorIndex; EnOssan_SetupAction(this, EnOssan_LookToRightShelf); - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); this->stickRightPrompt.isEnabled = false; play_sound(NA_SE_SY_CURSOR); } @@ -853,7 +853,7 @@ void EnOssan_BrowseLeftShelf(EnOssan* this, PlayState* play) { this->stickRightPrompt.isEnabled = true; EnOssan_UpdateCursorPos(play, this); if (talkState == TEXT_STATE_5) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); if (!EnOssan_HasPlayerSelectedItem(play, this, CONTROLLER1(&play->state))) { if (this->moveHorizontal) { if (this->stickAccumX > 0) { @@ -911,7 +911,7 @@ void EnOssan_BrowseRightShelf(EnOssan* this, PlayState* play) { this->stickLeftPrompt.isEnabled = true; EnOssan_UpdateCursorPos(play, this); if (talkState == TEXT_STATE_5) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); if (!EnOssan_HasPlayerSelectedItem(play, this, CONTROLLER1(&play->state))) { if (this->moveHorizontal != 0) { if (this->stickAccumX < 0) { @@ -1052,7 +1052,7 @@ void EnOssan_SelectItem(EnOssan* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); if (EnOssan_TakeItemOffShelf(this) && (talkState == TEXT_STATE_CHOICE)) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); if (!EnOssan_TestCancelOption(this, play, CONTROLLER1(&play->state)) && Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: @@ -1109,7 +1109,7 @@ void EnOssan_SetupItemPurchased(EnOssan* this, PlayState* play) { this->cutscene = this->lookToShopkeeperCutscene; ActorCutscene_SetIntentToPlay(this->cutscene); } - func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } @@ -1119,7 +1119,7 @@ void EnOssan_ContinueShopping(EnOssan* this, PlayState* play) { EnGirlA* item; if (talkState == TEXT_STATE_CHOICE) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); if (Message_ShouldAdvance(play)) { EnOssan_ResetItemPosition(this); item = this->items[this->cursorIndex]; @@ -1132,7 +1132,7 @@ void EnOssan_ContinueShopping(EnOssan* this, PlayState* play) { player->stateFlags2 |= PLAYER_STATE2_20000000; Message_StartTextbox(play, this->textId, &this->actor); EnOssan_SetupStartShopping(play, this, true); - func_800B85E0(&this->actor, play, 100.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 100.0f, PLAYER_IA_MINUS1); break; case 1: default: @@ -1150,7 +1150,7 @@ void EnOssan_ContinueShopping(EnOssan* this, PlayState* play) { player->stateFlags2 |= PLAYER_STATE2_20000000; Message_StartTextbox(play, this->textId, &this->actor); EnOssan_SetupStartShopping(play, this, true); - func_800B85E0(&this->actor, play, 100.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 100.0f, PLAYER_IA_MINUS1); } } @@ -1174,7 +1174,7 @@ void EnOssan_ItemPurchased(EnOssan* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { func_80151938(play, 0x642); } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } @@ -1386,19 +1386,19 @@ u16 EnOssan_CuriosityShopMan_GetWelcome(EnOssan* this, PlayState* play) { switch (player->transformation) { case PLAYER_FORM_DEKU: this->animIndex = FSN_ANIM_SLAM_COUNTER_START; - if (gSaveContext.save.weekEventReg[18] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_10)) { return sWelcomeDekuTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; } return sWelcomeDekuFirstTimeTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; case PLAYER_FORM_ZORA: this->animIndex = FSN_ANIM_LEAN_FORWARD_START; - if (gSaveContext.save.weekEventReg[18] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_08)) { return sWelcomeZoraTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; } return sWelcomeZoraFirstTimeTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; case PLAYER_FORM_GORON: this->animIndex = FSN_ANIM_HAND_ON_FACE_START; - if (gSaveContext.save.weekEventReg[18] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_04)) { return sWelcomeGoronTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; } return sWelcomeGoronFirstTimeTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; @@ -1417,17 +1417,17 @@ u16 EnOssan_PartTimer_GetWelcome(EnOssan* this, PlayState* play) { } switch (player->transformation) { case PLAYER_FORM_DEKU: - if (gSaveContext.save.weekEventReg[55] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_10)) { return sWelcomeDekuTextIds[ENOSSAN_PART_TIME_WORKER]; } return sWelcomeDekuFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER]; case PLAYER_FORM_ZORA: - if (gSaveContext.save.weekEventReg[55] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_08)) { return sWelcomeZoraTextIds[ENOSSAN_PART_TIME_WORKER]; } return sWelcomeZoraFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER]; case PLAYER_FORM_GORON: - if (gSaveContext.save.weekEventReg[55] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_04)) { return sWelcomeGoronTextIds[ENOSSAN_PART_TIME_WORKER]; } return sWelcomeGoronFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER]; @@ -1438,22 +1438,22 @@ u16 EnOssan_PartTimer_GetWelcome(EnOssan* this, PlayState* play) { void EnOssan_SetHaveMet(EnOssan* this) { switch (this->textId) { case 0x06A9: - gSaveContext.save.weekEventReg[18] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_18_10); break; case 0x06C6: - gSaveContext.save.weekEventReg[55] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_55_10); break; case 0x06A7: - gSaveContext.save.weekEventReg[18] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_18_08); break; case 0x06C4: - gSaveContext.save.weekEventReg[55] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_55_08); break; case 0x06A5: - gSaveContext.save.weekEventReg[18] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_18_04); break; case 0x06C2: - gSaveContext.save.weekEventReg[55] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_55_04); break; } } diff --git a/src/overlays/actors/ovl_En_Ot/overlay.cfg b/src/overlays/actors/ovl_En_Ot/overlay.cfg deleted file mode 100644 index 53a5992e9..000000000 --- a/src/overlays/actors/ovl_En_Ot/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ot -z_en_ot.c diff --git a/src/overlays/actors/ovl_En_Ot/z_en_ot.c b/src/overlays/actors/ovl_En_Ot/z_en_ot.c index 487960916..5fa27e026 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -59,9 +59,9 @@ EnOtUnkStruct* func_80B5DF58(EnOtUnkStruct* arg0, u8 arg1, Vec3f* arg2, Vec3s* a void func_80B5E078(PlayState* play, EnOtUnkStruct* arg1, s32 arg2); void func_80B5E1D8(PlayState* play, EnOtUnkStruct* arg1, s32 arg2); -static EnOt* D_80B5E880; -static EnOt* D_80B5E884; -static EnOt* D_80B5E888; +EnOt* D_80B5E880; +EnOt* D_80B5E884; +EnOt* D_80B5E888; ActorInit En_Ot_InitVars = { ACTOR_EN_OT, @@ -180,7 +180,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) { this->actor.world.pos.y = BgCheck_EntityRaycastFloor3(&play->colCtx, &this->actor.floorPoly, &bgId, &this->actor.world.pos) + 50.0f; - if (gSaveContext.save.weekEventReg[84] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_10)) { Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_NEW); Matrix_MultVecZ(52.519997f, &sp64); Math_Vec3f_Sum(&this->actor.world.pos, &sp64, &sp64); @@ -195,7 +195,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) { this->unk_394.y = this->actor.world.pos.y; this->unk_394.z = (this->actor.world.pos.z + this->unk_360->actor.world.pos.z) * 0.5f; Math_Vec3f_Copy(&this->unk_360->unk_394, &this->unk_394); - if (gSaveContext.save.weekEventReg[32] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_32_01)) { func_80B5C244(this, play); } else { func_80B5C684(this, play); @@ -230,7 +230,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) { switch (this->unk_344) { case 0: Actor_SetScale(&this->actor, 0.0f); - if (!(gSaveContext.save.weekEventReg[13] & 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_13_01)) { Actor_SetScale(&this->actor, 0.0f); func_80B5C910(this, play); } else { @@ -250,8 +250,8 @@ void EnOt_Init(Actor* thisx, PlayState* play) { case 1: Actor_SetScale(&this->actor, 0.012999999f); - if (gSaveContext.save.weekEventReg[84] & 0x10) { - if (gSaveContext.save.weekEventReg[32] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_10)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_32_01)) { func_80B5C244(this, play); } else { func_80B5C684(this, play); @@ -264,7 +264,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) { break; case 3: - if (!(gSaveContext.save.weekEventReg[26] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_26_08)) { this->actor.flags |= ACTOR_FLAG_8000000; this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); Actor_SetScale(&this->actor, 0.0064999997f); @@ -376,11 +376,11 @@ void func_80B5BFB8(EnOt* this, PlayState* play) { } void func_80B5C154(EnOt* this, PlayState* play) { - if (gSaveContext.save.weekEventReg[32] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_32_01)) { this->getItemId = GI_RUPEE_RED; } else { this->getItemId = GI_HEART_PIECE; - gSaveContext.save.weekEventReg[32] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_32_01); } Actor_PickUp(&this->actor, play, this->getItemId, this->actor.xzDistToPlayer, this->actor.playerHeightRel); this->actionFunc = func_80B5C1CC; @@ -482,7 +482,7 @@ void func_80B5C634(EnOt* this, PlayState* play) { } void func_80B5C64C(EnOt* this, PlayState* play) { - if (gSaveContext.save.weekEventReg[26] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_26_08)) { Actor_Kill(&this->actor); } } @@ -505,7 +505,7 @@ void func_80B5C6DC(EnOt* this, PlayState* play) { Matrix_MultVecZ(26.259998f, &sp30); } else { if (this->unk_73C == 0) { - gSaveContext.save.weekEventReg[84] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_84_10); switch (this->unk_388) { case 0: ActorCutscene_Stop(this->cutscenes[2]); @@ -527,7 +527,7 @@ void func_80B5C6DC(EnOt* this, PlayState* play) { Math_SmoothStepToF(&this->actor.world.pos.x, this->unk_348.x, 1.0f, 2.0f, 0.01f); Math_SmoothStepToF(&this->actor.world.pos.z, this->unk_348.z, 1.0f, 2.0f, 0.01f); Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0xE38, 0x38E); - if ((gSaveContext.save.weekEventReg[84] & 0x10) && (this->unk_33C == 1)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_10) && (this->unk_33C == 1)) { this->actor.textId = 0; this->unk_384 = 1; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -556,7 +556,7 @@ void func_80B5C910(EnOt* this, PlayState* play) { void func_80B5C950(EnOt* this, PlayState* play) { if (this->unk_32C & 8) { Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SEAHORSE_OUT_BOTTLE); - gSaveContext.save.weekEventReg[25] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_25_04); func_80B5CAD0(this, play); } } @@ -606,7 +606,7 @@ void func_80B5CB0C(EnOt* this, PlayState* play) { void func_80B5CBA0(EnOt* this, PlayState* play) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_AP_NONE); + func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_NONE); this->actionFunc = func_80B5CBEC; } @@ -617,7 +617,7 @@ void func_80B5CBEC(EnOt* this, PlayState* play) { } else { Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0xE38, 0x38E); this->actor.world.rot.y = this->actor.shape.rot.y; - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_AP_NONE); + func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_NONE); } } @@ -650,7 +650,7 @@ void func_80B5CD40(EnOt* this, PlayState* play) { this->actor.world.rot.y = this->actor.shape.rot.y; if (1) {} if (!temp) { - gSaveContext.save.weekEventReg[23] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_23_10); Message_StartTextbox(play, 0x1069, NULL); } break; @@ -693,7 +693,7 @@ void func_80B5CEC8(EnOt* this, PlayState* play) { Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0xE38, 0x38E); if (this->unk_32C & 0x800) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_AP_NONE); + func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_NONE); } else { this->actor.flags &= ~ACTOR_FLAG_10000; if ((player->actor.bgCheckFlags & 1) && !func_801242B4(player) && (this->actor.xzDistToPlayer < 130.0f)) { @@ -701,7 +701,7 @@ void func_80B5CEC8(EnOt* this, PlayState* play) { } } - if (!(gSaveContext.save.weekEventReg[84] & 0x10) && (ENOT_GET_C000(&this->actor) == 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_84_10) && (ENOT_GET_C000(&this->actor) == 1)) { if ((fabsf(this->actor.xzDistToPlayer) <= 130.0f) && (fabsf(this->actor.playerHeightRel) <= 130.0f)) { player->unk_B2B = 29; } @@ -754,7 +754,7 @@ void func_80B5D160(EnOt* this, PlayState* play) { phi_a1 = 0x1069; } } else if (Flags_GetSwitch(play, ENOT_GET_3F80(&this->actor))) { - if (gSaveContext.save.weekEventReg[23] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_10)) { phi_a1 = 0x106C; } else { phi_a1 = 0x106B; @@ -985,8 +985,8 @@ void func_80B5DB6C(Actor* thisx, PlayState* play) { EnOt* this = THIS; Player* player = GET_PLAYER(play); - if (!(gSaveContext.save.weekEventReg[84] & 0x10) && !(this->unk_32C & 8)) { - if (gSaveContext.save.weekEventReg[25] & 4) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_84_10) && !(this->unk_32C & 8)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_04)) { Vec3f sp50; func_80B5B2E0(play, &this->actor.world.pos, ENOT_GET_7F(&this->actor), &sp50, &this->unk_340); @@ -998,7 +998,7 @@ void func_80B5DB6C(Actor* thisx, PlayState* play) { } else if (D_80B5E888 != NULL) { s32 sp4C = false; - if (gSaveContext.save.weekEventReg[13] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_01)) { if (!SurfaceType_IsHorseBlocked(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId)) { sp4C = true; } @@ -1137,7 +1137,7 @@ void func_80B5E1D8(PlayState* play, EnOtUnkStruct* arg1, s32 arg2) { OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); for (i = 0; i < arg2; i++, arg1++) { diff --git a/src/overlays/actors/ovl_En_Owl/overlay.cfg b/src/overlays/actors/ovl_En_Owl/overlay.cfg deleted file mode 100644 index c3609f992..000000000 --- a/src/overlays/actors/ovl_En_Owl/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Owl -z_en_owl.c diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.c b/src/overlays/actors/ovl_En_Owl/z_en_owl.c index ab083aff1..8d7b92b69 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -183,7 +183,7 @@ void EnOwl_Init(Actor* thisx, PlayState* play) { case ENOWL_GET_TYPE_2: this->actionFunc = func_8095BE0C; - if (gSaveContext.save.weekEventReg[9] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_09_20)) { this->actor.textId = 0xBF0; } else { this->actor.textId = 0xBEA; @@ -229,7 +229,7 @@ s32 func_8095A978(EnOwl* this, PlayState* play, u16 textId, f32 targetDist, f32 this->actor.textId = textId; if (this->actor.xzDistToPlayer < targetDist) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, targetDist, arg4, PLAYER_AP_NONE); + func_800B8500(&this->actor, play, targetDist, arg4, PLAYER_IA_NONE); } return false; @@ -242,7 +242,7 @@ s32 func_8095A9FC(EnOwl* this, PlayState* play, u16 textId) { this->actor.textId = textId; if (this->actor.xzDistToPlayer < 120.0f) { - func_800B8500(&this->actor, play, 350.0f, 1000.0f, PLAYER_AP_NONE); + func_800B8500(&this->actor, play, 350.0f, 1000.0f, PLAYER_IA_NONE); } return false; @@ -411,7 +411,7 @@ void func_8095B0C8(EnOwl* this) { Vec3s* points = Lib_SegmentedToVirtual(this->path->points); points += this->unk_3F8; - this->unk_3EC = Math_FAtan2F(points->z - this->actor.world.pos.z, points->x - this->actor.world.pos.x); + this->unk_3EC = Math_Atan2S_XY(points->z - this->actor.world.pos.z, points->x - this->actor.world.pos.x); this->unk_3F0 = points->y; } @@ -505,7 +505,7 @@ void func_8095B574(EnOwl* this, PlayState* play) { this->unk_406 = 2; } else if (this->actor.xzDistToPlayer < 200.0f) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 200.0f, 400.0f, PLAYER_AP_NONE); + func_800B8500(&this->actor, play, 200.0f, 400.0f, PLAYER_IA_NONE); } else { this->actor.flags &= ~ACTOR_FLAG_10000; } @@ -613,10 +613,10 @@ void func_8095BA84(EnOwl* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: func_8019F208(); - if (gSaveContext.save.weekEventReg[9] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_09_40)) { func_80151938(play, 0xBF4); } else { - gSaveContext.save.weekEventReg[9] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_09_40); func_80151938(play, 0xBED); } break; @@ -649,7 +649,7 @@ void func_8095BA84(EnOwl* this, PlayState* play) { if (Message_ShouldAdvance(play)) { switch (play->msgCtx.currentTextId) { case 0xBEA: - gSaveContext.save.weekEventReg[9] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_09_20); func_80151938(play, 0xBEB); break; @@ -718,11 +718,11 @@ void func_8095BE0C(EnOwl* this, PlayState* play) { this->actionFlags |= 0x40; } else if (this->actor.textId == 0xBF0) { if (this->actor.isTargeted) { - func_800B8500(&this->actor, play, 200.0f, 200.0f, PLAYER_AP_NONE); + func_800B8500(&this->actor, play, 200.0f, 200.0f, PLAYER_IA_NONE); } } else if (this->actor.xzDistToPlayer < 200.0f) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 200.0f, 200.0f, PLAYER_AP_NONE); + func_800B8500(&this->actor, play, 200.0f, 200.0f, PLAYER_IA_NONE); } else { this->actor.flags &= ~ACTOR_FLAG_10000; } diff --git a/src/overlays/actors/ovl_En_Pamera/overlay.cfg b/src/overlays/actors/ovl_En_Pamera/overlay.cfg deleted file mode 100644 index 544499e92..000000000 --- a/src/overlays/actors/ovl_En_Pamera/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Pamera -z_en_pamera.c diff --git a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c index 8c8a6eb57..bcbb78716 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c @@ -153,17 +153,19 @@ void EnPamera_Init(Actor* thisx, PlayState* play) { } else { func_80BD8588(this, play); func_80BD8658(this); + if (1) {} - if (!(gSaveContext.save.weekEventReg[14] & 4) || (gSaveContext.save.weekEventReg[52] & 0x20) || - (gSaveContext.save.weekEventReg[75] & 0x20) || (gSaveContext.save.entrance == ENTRANCE(IKANA_CANYON, 9))) { + + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || (gSaveContext.save.entrance == ENTRANCE(IKANA_CANYON, 9))) { Actor_Kill(&this->actor); } - if (gSaveContext.save.weekEventReg[61] & 4) { - if (!(gSaveContext.save.weekEventReg[59] & 1) || - (gSaveContext.save.entrance != ENTRANCE(IKANA_CANYON, 2))) { + + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_61_04)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_01) || (gSaveContext.save.entrance != ENTRANCE(IKANA_CANYON, 2))) { if ((gSaveContext.save.entrance != ENTRANCE(IKANA_CANYON, 2)) && - (gSaveContext.save.weekEventReg[59] & 1)) { - gSaveContext.save.weekEventReg[59] &= (u8)~1; + CHECK_WEEKEVENTREG(WEEKEVENTREG_59_01)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_59_01); } func_80BD8700(this); } else { @@ -174,7 +176,7 @@ void EnPamera_Init(Actor* thisx, PlayState* play) { func_80BD8CCC(this); } } else { - gSaveContext.save.weekEventReg[59] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_59_01); func_80BD8FF0(this); } } @@ -201,7 +203,7 @@ void func_80BD8588(EnPamera* this, PlayState* play) { if (path == NULL) { Actor_Kill(&this->actor); } - if (gSaveContext.save.weekEventReg[61] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_61_04)) { path = &play->setupPathList[path->unk1]; } this->pathPoints = Lib_SegmentedToVirtual(path->points); @@ -290,7 +292,7 @@ void func_80BD8964(EnPamera* this, PlayState* play) { if (Math_Vec3f_StepTo(&this->actor.world.pos, &vec, 1.0f) < 5.0f) { this->actor.speedXZ = 1.5f; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); - gSaveContext.save.weekEventReg[59] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_59_01); func_80BD8B50(this); } } @@ -305,10 +307,10 @@ void func_80BD8A7C(EnPamera* this, PlayState* play) { 0x3000, 0x100); this->actor.world.rot.y = this->actor.shape.rot.y; if (Math_Vec3f_StepTo(&this->actor.world.pos, &this->actor.home.pos, 1.5f) < 10.0f) { - gSaveContext.save.weekEventReg[59] &= (u8)~1; - if (!(gSaveContext.save.weekEventReg[61] & 4)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_59_01); + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_61_04)) { func_80BD92D0(this, play); - gSaveContext.save.weekEventReg[61] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_61_04); } func_80BD8700(this); } @@ -567,7 +569,7 @@ void func_80BD9840(EnPamera* this, PlayState* play) { this->actor.update = func_80BDA344; this->actor.flags |= ACTOR_FLAG_2000000; this->actor.flags |= ACTOR_FLAG_100000; - if ((gSaveContext.save.weekEventReg[75] & 0x20) || (gSaveContext.save.weekEventReg[52] & 0x20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20)) { func_80BD9E60(this); func_80BD9938(this); } else { @@ -575,7 +577,7 @@ void func_80BD9840(EnPamera* this, PlayState* play) { func_80BD9E60(this); func_80BD9904(this); } - if (gSaveContext.save.weekEventReg[14] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) { func_801A0204(NA_BGM_MUSIC_BOX_HOUSE); } else { func_801A0204(NA_BGM_INSIDE_A_HOUSE); @@ -603,7 +605,7 @@ void func_80BD994C(EnPamera* this, PlayState* play) { this->unk_324 = 0x15A8; } else if ((gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) || - ((gSaveContext.save.weekEventReg[52] & 0x20) && (!(gSaveContext.save.weekEventReg[75] & 0x20)))) { + (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20))) { func_80BD93CC(this, 1, 0); Message_StartTextbox(play, 0x158E, &this->actor); this->unk_324 = 0x158E; @@ -689,7 +691,7 @@ void func_80BD9C70(EnPamera* this, PlayState* play) { play->nextEntrance = ENTRANCE(IKANA_CANYON, 2); play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_70; - gSaveContext.nextTransitionType = TRANS_TYPE_02; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; } s32 func_80BD9CB8(EnPamera* this, PlayState* play) { @@ -729,7 +731,7 @@ s32 func_80BD9CB8(EnPamera* this, PlayState* play) { this->setupFunc(this, play); return 1; } - if ((play->csCtx.state == 0) && (gSaveContext.save.weekEventReg[75] & 0x20)) { + if ((play->csCtx.state == 0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20)) { if ((this->actionFunc != func_80BD994C) && (this->actionFunc != EnPamera_HandleDialogue)) { this->actor.shape.rot.y = this->actor.world.rot.y; func_80BD9904(this); @@ -853,11 +855,11 @@ void func_80BDA344(Actor* thisx, PlayState* play) { func_80BD9384(this, play); if (func_80BD9CB8(this, play)) { // Pamela is outside - if (gSaveContext.save.weekEventReg[59] & 1) { - gSaveContext.save.weekEventReg[59] &= (u8)~1; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_59_01)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_59_01); } - if (!(gSaveContext.save.weekEventReg[61] & 4)) { - gSaveContext.save.weekEventReg[61] |= 4; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_61_04)) { + SET_WEEKEVENTREG(WEEKEVENTREG_61_04); } Actor_TrackNone(&this->headRot, &this->torsoRot); } else { @@ -866,7 +868,7 @@ void func_80BDA344(Actor* thisx, PlayState* play) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } - if (gSaveContext.save.weekEventReg[14] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) { play->roomCtx.unk7A[0]++; } } diff --git a/src/overlays/actors/ovl_En_Pametfrog/overlay.cfg b/src/overlays/actors/ovl_En_Pametfrog/overlay.cfg deleted file mode 100644 index de6a9fa77..000000000 --- a/src/overlays/actors/ovl_En_Pametfrog/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Pametfrog -z_en_pametfrog.c diff --git a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c index b4670662c..82b424657 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -171,13 +171,11 @@ static InitChainEntry sInitChain[] = { ICHAIN_U8(targetMode, 10, ICHAIN_STOP), }; -// gSaveContext.save.weekEventReg[KEY] = VALUE -// KEY | VALUE static s32 isFrogReturnedFlags[] = { - (32 << 8) | 0x40, // Woodfall Temple Frog Returned - (32 << 8) | 0x80, // Great Bay Temple Frog Returned - (33 << 8) | 0x01, // Southern Swamp Frog Returned - (33 << 8) | 0x02, // Laundry Pool Frog Returned + WEEKEVENTREG_32_40, + WEEKEVENTREG_32_80, + WEEKEVENTREG_33_01, + WEEKEVENTREG_33_02, }; void EnPametfrog_Init(Actor* thisx, PlayState* play) { @@ -193,8 +191,7 @@ void EnPametfrog_Init(Actor* thisx, PlayState* play) { this->params = CLAMP(this->actor.params, 1, 4); if (Flags_GetClear(play, play->roomCtx.curRoom.num)) { Actor_Kill(&this->actor); - if (!(gSaveContext.save.weekEventReg[isFrogReturnedFlags[this->actor.params - 1] >> 8] & - (u8)isFrogReturnedFlags[this->actor.params - 1])) { + if (!CHECK_WEEKEVENTREG(isFrogReturnedFlags[this->actor.params - 1])) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_MINIFROG, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, this->params); } @@ -345,7 +342,7 @@ void EnPametfrog_StopCutscene(EnPametfrog* this, PlayState* play) { Play_SetCameraAtEye(play, CAM_ID_MAIN, &subCam->at, &subCam->eye); this->subCamId = SUB_CAM_ID_DONE; ActorCutscene_Stop(this->cutscene); - func_800B724C(play, &this->actor, 6); + func_800B724C(play, &this->actor, PLAYER_CSMODE_6); } } @@ -1008,7 +1005,7 @@ void EnPametfrog_PlayCutscene(EnPametfrog* this, PlayState* play) { if (ActorCutscene_GetCanPlayNext(this->cutscene)) { ActorCutscene_Start(this->cutscene, &this->actor); this->subCamId = ActorCutscene_GetCurrentSubCamId(this->cutscene); - func_800B724C(play, &this->actor, 7); + func_800B724C(play, &this->actor, PLAYER_CSMODE_7); if (this->actor.colChkInfo.health == 0) { if (this->actor.params == GEKKO_PRE_SNAPPER) { EnPametfrog_SetupCallSnapper(this, play); diff --git a/src/overlays/actors/ovl_En_Paper/overlay.cfg b/src/overlays/actors/ovl_En_Paper/overlay.cfg deleted file mode 100644 index f2b122194..000000000 --- a/src/overlays/actors/ovl_En_Paper/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Paper -z_en_paper.c diff --git a/src/overlays/actors/ovl_En_Paper/z_en_paper.c b/src/overlays/actors/ovl_En_Paper/z_en_paper.c index 47d97e1c2..a3f158cbd 100644 --- a/src/overlays/actors/ovl_En_Paper/z_en_paper.c +++ b/src/overlays/actors/ovl_En_Paper/z_en_paper.c @@ -1,7 +1,11 @@ -/* - * File: z_en_paper.c +/** + * @file z_en_paper.c * Overlay: ovl_En_Paper - * Description: Tingle Confetti + * Description: Tingle confetti group + * + * Complex actor for its length, that creates and manages a group of confetti effects. Each is a triangle of a + * particular colour, that rotates around a fixed axis at a randomly-chosen fixed velocity, and is subject to gravity, + * drag and wind forces. */ #include "z_en_paper.h" @@ -16,12 +20,12 @@ void EnPaper_Destroy(Actor* thisx, PlayState* play); void EnPaper_Update(Actor* thisx, PlayState* play); void EnPaper_Draw(Actor* thisx, PlayState* play); -void func_80C1F480(EnPaper* this, PlayState* play); -void func_80C1F4FC(EnPaper* this, PlayState* play); -void func_80C1F46C(EnPaper* this); -void func_80C1F4E8(EnPaper* this); -void func_80C1F55C(EnPaper* this, EnPaperStruct* arg1); -void func_80C1F6E0(EnPaper* this, EnPaperStruct* arg1); +void EnPaper_SetupSpreadConfettiGroup(EnPaper* this); +void EnPaper_SpreadConfettiGroup(EnPaper* this, PlayState* play); +void EnPaper_SetupFlyConfettiGroup(EnPaper* this); +void EnPaper_FlyConfettiGroup(EnPaper* this, PlayState* play); +void EnPaper_InitConfettiPiece(EnPaper* this, EnPaperConfetto* piece); +void EnPaper_FlyConfettiPiece(EnPaper* this, EnPaperConfetto* piece); ActorInit En_Paper_InitVars = { ACTOR_EN_PAPER, @@ -35,114 +39,155 @@ ActorInit En_Paper_InitVars = { (ActorFunc)EnPaper_Draw, }; -Vec3f D_80C1FC60 = { 0.0f, 0.0f, 1.0f }; +static Vec3f sUnitVecZ = { 0.0f, 0.0f, 1.0f }; void EnPaper_Init(Actor* thisx, PlayState* play) { EnPaper* this = THIS; Actor_SetScale(&this->actor, 0.01f); this->timer = 70; - this->unk_D78 = D_80C1FC60; + this->windForce = sUnitVecZ; Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); - func_80C1F46C(this); + EnPaper_SetupSpreadConfettiGroup(this); } void EnPaper_Destroy(Actor* thisx, PlayState* play) { } -void func_80C1F46C(EnPaper* this) { - this->actionFunc = func_80C1F480; +void EnPaper_SetupSpreadConfettiGroup(EnPaper* this) { + this->actionFunc = EnPaper_SpreadConfettiGroup; } -void func_80C1F480(EnPaper* this, PlayState* play) { +/** + * Set up the pieces of confetti. + */ +void EnPaper_SpreadConfettiGroup(EnPaper* this, PlayState* play) { s32 i; - for (i = 0; i < ARRAY_COUNT(this->unk_148); i++) { - func_80C1F55C(this, &this->unk_148[i]); + for (i = 0; i < ARRAY_COUNT(this->pieces); i++) { + EnPaper_InitConfettiPiece(this, &this->pieces[i]); } - func_80C1F4E8(this); + EnPaper_SetupFlyConfettiGroup(this); } -void func_80C1F4E8(EnPaper* this) { - this->actionFunc = func_80C1F4FC; +void EnPaper_SetupFlyConfettiGroup(EnPaper* this) { + this->actionFunc = EnPaper_FlyConfettiGroup; } -void func_80C1F4FC(EnPaper* this, PlayState* play) { +/** + * Main action function for the group. + */ +void EnPaper_FlyConfettiGroup(EnPaper* this, PlayState* play) { s32 i; - for (i = 0; i < ARRAY_COUNT(this->unk_148); i++) { - func_80C1F6E0(this, &this->unk_148[i]); + for (i = 0; i < ARRAY_COUNT(this->pieces); i++) { + EnPaper_FlyConfettiPiece(this, &this->pieces[i]); } } -void func_80C1F55C(EnPaper* this, EnPaperStruct* arg1) { +void EnPaper_InitConfettiPiece(EnPaper* this, EnPaperConfetto* piece) { + // Pick rotation axis randomly (significantly biased towards the z = 0 plane) Matrix_RotateZYX(Rand_Next(), Rand_Next(), Rand_Next(), MTXMODE_NEW); - Matrix_MultVec3f(&D_80C1FC60, &arg1->unk_0C); + Matrix_MultVec3f(&sUnitVecZ, &piece->rotAxis); - arg1->unk_18 = this->actor.world.pos; + // copy actor position and distribute uniformly in a cube of side 2 around it + piece->pos = this->actor.world.pos; + piece->pos.x += Rand_Centered() * 4.0f; + piece->pos.y += Rand_Centered() * 4.0f; + piece->pos.z += Rand_Centered() * 4.0f; - arg1->unk_18.x += Rand_Centered() * 4.0f; - arg1->unk_18.y += Rand_Centered() * 4.0f; - arg1->unk_18.z += Rand_Centered() * 4.0f; + // copy actor velocity and distrbute uniformly in a cuboid with sides 9, 6, 9 with actor.velocity in the middle + // of the base. + piece->vel = this->actor.velocity; + piece->vel.x += Rand_Centered() * 9.0f; + piece->vel.y += Rand_ZeroOne() * 6.0f; + piece->vel.z += Rand_Centered() * 9.0f; - arg1->unk_24 = this->actor.velocity; + // Choose random starting angle and angular velocity + piece->angle = Rand_Next(); + piece->angVel = (Rand_Next() >> 4) + (0x10000 / 180); - arg1->unk_24.x += Rand_Centered() * 9.0f; - arg1->unk_24.y += Rand_ZeroOne() * 6.0f; - arg1->unk_24.z += Rand_Centered() * 9.0f; - - arg1->unk_30 = Rand_Next(); - arg1->unk_32 = (Rand_Next() >> 4) + 0x16C; - - Matrix_RotateAxisS(arg1->unk_30, &arg1->unk_0C, MTXMODE_NEW); - Matrix_MultVec3f(&D_80C1FC60, &arg1->unk_00); + // Rotate the unit Z-vector by the random starting axis and angle + Matrix_RotateAxisS(piece->angle, &piece->rotAxis, MTXMODE_NEW); + Matrix_MultVec3f(&sUnitVecZ, &piece->normal); } -void func_80C1F6E0(EnPaper* this, EnPaperStruct* arg1) { - f32 sp1C = Math_CosS(arg1->unk_30); - f32 sp18 = Math_SinS(arg1->unk_30); - f32 temp_ft4 = 1.0f - sp1C; +/** + * Main falling function for a single piece, handles dynamics. + * + * Position \f$ \mathbf{x} \f$ essentially satisfies discretised version of the equation + * + * \f[ + * \ddot{\mathbf{x}} = -0.2 \mathbf{n} (\dot{\mathbf{x}} + \mathbf{W}) + \mathbf{g} , + * \f] + * + * where + * + * - \f$ \mathbf{n} \f$ is the unit normal to the confetti triangle's plane + * - \f$ \mathbf{W} \f$ is the random wind pressure + * - \f$ \mathbf{g} \f$ is gravity + * + * and the product is componentwise: the normal is being used as a cross-sectional area measure rather than vectorially. + */ +void EnPaper_FlyConfettiPiece(EnPaper* this, EnPaperConfetto* piece) { + f32 cos = Math_CosS(piece->angle); + f32 sin = Math_SinS(piece->angle); + f32 versin = 1.0f - cos; - if (arg1->unk_18.y < (this->actor.floorHeight - 40.0f)) { + if (piece->pos.y < (this->actor.floorHeight - 40.0f)) { return; } - arg1->unk_24.y += this->actor.gravity; + // acceleration due to gravity + piece->vel.y += this->actor.gravity; - arg1->unk_24.x -= 0.2f * fabsf(arg1->unk_00.x) * (arg1->unk_24.x + this->unk_D78.x); - arg1->unk_24.y -= 0.2f * fabsf(arg1->unk_00.y) * (arg1->unk_24.y + this->unk_D78.y); - arg1->unk_24.z -= 0.2f * fabsf(arg1->unk_00.z) * (arg1->unk_24.z + this->unk_D78.z); + // drag and wind force: normal is used to simulate cross-section size of piece, although + piece->vel.x -= 0.2f * fabsf(piece->normal.x) * (piece->vel.x + this->windForce.x); + piece->vel.y -= 0.2f * fabsf(piece->normal.y) * (piece->vel.y + this->windForce.y); + piece->vel.z -= 0.2f * fabsf(piece->normal.z) * (piece->vel.z + this->windForce.z); - arg1->unk_30 += arg1->unk_32; + // rotate around axis + piece->angle += piece->angVel; - arg1->unk_18.x += arg1->unk_24.x; - arg1->unk_18.y += arg1->unk_24.y; - arg1->unk_18.z += arg1->unk_24.z; + // move + piece->pos.x += piece->vel.x; + piece->pos.y += piece->vel.y; + piece->pos.z += piece->vel.z; - arg1->unk_00.x = (arg1->unk_0C.x * temp_ft4 * arg1->unk_0C.z) - (arg1->unk_0C.y * sp18); - arg1->unk_00.y = (arg1->unk_0C.y * temp_ft4 * arg1->unk_0C.z) + (arg1->unk_0C.x * sp18); - arg1->unk_00.z = (arg1->unk_0C.z * temp_ft4 * arg1->unk_0C.z) + sp1C; + // Rotate unit Z vector about `axis` by `angle` to get forward direction. This is the same calculation as at the + // bottom of EnPaper_InitConfettiPiece(), but done manually instead of using any matrix functions. + piece->normal.x = (versin * piece->rotAxis.x * piece->rotAxis.z) - (piece->rotAxis.y * sin); + piece->normal.y = (versin * piece->rotAxis.y * piece->rotAxis.z) + (piece->rotAxis.x * sin); + piece->normal.z = (versin * piece->rotAxis.z * piece->rotAxis.z) + cos; } -void func_80C1F87C(EnPaper* this) { - f32 sp2C = (Rand_Centered() * 4.0f) + 6.0f; - f32 sp28; +#define WIND_PITCH_BOUND (0x10000 / 12) - this->unk_D78.y = Math_SinS(this->actor.shape.rot.x) * -sp2C; +/** + * Sets the wind force for the whole group, using the shape.rot from the previous frame, and picks a new random one + * for the next frame. + */ +void EnPaper_UpdateWind(EnPaper* this) { + f32 strength = (Rand_Centered() * 4.0f) + 6.0f; + f32 cosX; - sp28 = Math_CosS(this->actor.shape.rot.x) * -sp2C; - this->unk_D78.x = Math_SinS(this->actor.shape.rot.y) * sp28; - this->unk_D78.z = Math_CosS(this->actor.shape.rot.y) * sp28; + this->windForce.y = Math_SinS(this->actor.shape.rot.x) * -strength; + cosX = Math_CosS(this->actor.shape.rot.x) * -strength; + this->windForce.x = Math_SinS(this->actor.shape.rot.y) * cosX; + this->windForce.z = Math_CosS(this->actor.shape.rot.y) * cosX; + // New random wind direction. A uniform distribution of the angles in spherical coordinates is not uniformly + // distributed on the sphere, so this is biased more towards up and down. this->actor.shape.rot.x += (s16)(Rand_Next() >> 8); this->actor.shape.rot.y += (s16)(Rand_Next() >> 6); - if (ABS_ALT(this->actor.shape.rot.x) > 0x1555) { + // Essentially a clamp + if (ABS_ALT(this->actor.shape.rot.x) > WIND_PITCH_BOUND) { if (this->actor.shape.rot.x > 0) { - this->actor.shape.rot.x = 0x1555; + this->actor.shape.rot.x = WIND_PITCH_BOUND; } else { - this->actor.shape.rot.x = -0x1555; + this->actor.shape.rot.x = -WIND_PITCH_BOUND; } } } @@ -151,8 +196,8 @@ void EnPaper_Update(Actor* thisx, PlayState* play) { EnPaper* this = THIS; this->actionFunc(this, play); + EnPaper_UpdateWind(this); - func_80C1F87C(this); if (this->timer == 0) { Actor_Kill(&this->actor); return; @@ -163,7 +208,7 @@ void EnPaper_Update(Actor* thisx, PlayState* play) { void EnPaper_Draw(Actor* thisx, PlayState* play) { EnPaper* this = THIS; - EnPaperStruct* ptr = this->unk_148; + EnPaperConfetto* piece = this->pieces; s32 i; OPEN_DISPS(play->state.gfxCtx); @@ -174,7 +219,8 @@ void EnPaper_Draw(Actor* thisx, PlayState* play) { gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, SHADE, 0, 0, 0, SHADE, PRIMITIVE, 0, COMBINED, 0, 0, 0, 0, COMBINED); gSPLoadGeometryMode(POLY_OPA_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH); - for (i = 0; i < ARRAY_COUNT(this->unk_148); i++, ptr++) { + for (i = 0; i < ARRAY_COUNT(this->pieces); i++, piece++) { + // colour the first 30 white and 10 each of the other 3 colours if (i == 0) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); } else if (i == 30) { @@ -185,14 +231,15 @@ void EnPaper_Draw(Actor* thisx, PlayState* play) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 64, 255, 128, 255); } - if ((this->actor.floorHeight - 40.0f) < ptr->unk_18.y) { - MtxF* mf = GRAPH_ALLOC(play->state.gfxCtx, sizeof(MtxF)); + if ((this->actor.floorHeight - 40.0f) < piece->pos.y) { + Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Mtx)); - func_8017842C(mf, this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, ptr->unk_30, ptr->unk_0C.x, - ptr->unk_0C.y, ptr->unk_0C.z, ptr->unk_18.x, ptr->unk_18.y, ptr->unk_18.z); + Mtx_SetTranslationRotationScaleMtx(mtx, this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, + piece->angle, piece->rotAxis.x, piece->rotAxis.y, piece->rotAxis.z, + piece->pos.x, piece->pos.y, piece->pos.z); - gSPMatrix(POLY_OPA_DISP++, mf, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, object_bal_DL_00D5A0); + gSPMatrix(POLY_OPA_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, gTingleConfettiDL); } } diff --git a/src/overlays/actors/ovl_En_Paper/z_en_paper.h b/src/overlays/actors/ovl_En_Paper/z_en_paper.h index 5e8450722..a48c6ae88 100644 --- a/src/overlays/actors/ovl_En_Paper/z_en_paper.h +++ b/src/overlays/actors/ovl_En_Paper/z_en_paper.h @@ -7,20 +7,22 @@ struct EnPaper; typedef void (*EnPaperActionFunc)(struct EnPaper*, PlayState*); +#define ENPAPER_PIECES_COUNT 60 + typedef struct { - /* 0x00 */ Vec3f unk_00; - /* 0x0C */ Vec3f unk_0C; - /* 0x18 */ Vec3f unk_18; - /* 0x24 */ Vec3f unk_24; - /* 0x30 */ s16 unk_30; - /* 0x32 */ s16 unk_32; -} EnPaperStruct; // size = 0x34 + /* 0x00 */ Vec3f normal; // normal to the plane of the confetti piece + /* 0x0C */ Vec3f rotAxis; // axis to spin around + /* 0x18 */ Vec3f pos; + /* 0x24 */ Vec3f vel; + /* 0x30 */ s16 angle; // angle to rotate around `rotAxis` + /* 0x32 */ s16 angVel; // angular velocity of `angle` +} EnPaperConfetto; // size = 0x34 typedef struct EnPaper { /* 0x000 */ Actor actor; /* 0x144 */ EnPaperActionFunc actionFunc; - /* 0x148 */ EnPaperStruct unk_148[60]; - /* 0xD78 */ Vec3f unk_D78; + /* 0x148 */ EnPaperConfetto pieces[ENPAPER_PIECES_COUNT]; + /* 0xD78 */ Vec3f windForce; /* 0xD84 */ s16 timer; } EnPaper; // size = 0xD88 diff --git a/src/overlays/actors/ovl_En_Part/overlay.cfg b/src/overlays/actors/ovl_En_Part/overlay.cfg deleted file mode 100644 index 883554d5b..000000000 --- a/src/overlays/actors/ovl_En_Part/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Part -z_en_part.c diff --git a/src/overlays/actors/ovl_En_Peehat/overlay.cfg b/src/overlays/actors/ovl_En_Peehat/overlay.cfg deleted file mode 100644 index 588e53bd7..000000000 --- a/src/overlays/actors/ovl_En_Peehat/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Peehat -z_en_peehat.c diff --git a/src/overlays/actors/ovl_En_Pm/overlay.cfg b/src/overlays/actors/ovl_En_Pm/overlay.cfg deleted file mode 100644 index 43905ae8c..000000000 --- a/src/overlays/actors/ovl_En_Pm/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Pm -z_en_pm.c diff --git a/src/overlays/actors/ovl_En_Pm/z_en_pm.c b/src/overlays/actors/ovl_En_Pm/z_en_pm.c index 317a5eee4..c2846a26b 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -132,7 +132,7 @@ static u8 D_80AFAD80[] = { /* 0x239 */ SCHEDULE_CMD_RET_TIME(10, 21, 10, 35, 44), /* 0x23F */ SCHEDULE_CMD_RET_NONE(), /* 0x240 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(2, 0x414 - 0x245), - /* 0x245 */ SCHEDULE_CMD_CHECK_FLAG_L(0x1C, 0x08, 0x2EF - 0x24A), + /* 0x245 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_28_08, 0x2EF - 0x24A), /* 0x24A */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(9, 0, 12, 0, 0x117 - 0x251), /* 0x251 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(12, 0, 13, 1, 0x2E4 - 0x258), /* 0x258 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 1, 15, 0, 0x2DC - 0x25E), @@ -226,8 +226,8 @@ static u8 D_80AFAD80[] = { /* 0x40D */ SCHEDULE_CMD_RET_TIME(12, 0, 13, 1, 21), /* 0x413 */ SCHEDULE_CMD_RET_NONE(), /* 0x414 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(3, 0x588 - 0x419), - /* 0x419 */ SCHEDULE_CMD_CHECK_FLAG_L(0x1C, 0x08, 0x55D - 0x41E), - /* 0x41E */ SCHEDULE_CMD_CHECK_FLAG_L(0x1C, 0x10, 0x52F - 0x423), + /* 0x419 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_28_08, 0x55D - 0x41E), + /* 0x41E */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_28_10, 0x52F - 0x423), /* 0x423 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(9, 0, 12, 0, 0x117 - 0x42A), /* 0x42A */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(12, 0, 13, 1, 0x527 - 0x431), /* 0x431 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 1, 15, 0, 0x446 - 0x437), @@ -544,19 +544,19 @@ static AnimationInfoS sAnimationInfo[] = { }; s32 func_80AF7B40(void) { - if (gSaveContext.save.weekEventReg[90] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_90_01)) { return 4; } - if (gSaveContext.save.weekEventReg[89] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_89_40)) { return 3; } - if (gSaveContext.save.weekEventReg[89] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_89_08)) { return 2; } - if (gSaveContext.save.weekEventReg[86] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_86_01)) { return 1; } @@ -566,28 +566,28 @@ s32 func_80AF7B40(void) { s32 func_80AF7BAC(EnPm* this) { switch (this->unk_38C) { case 0: - if (gSaveContext.save.weekEventReg[86] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_86_01)) { D_801F4E78 = gSaveContext.save.time; this->unk_38C++; } break; case 1: - if (gSaveContext.save.weekEventReg[89] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_89_08)) { D_801F4E78 = gSaveContext.save.time; this->unk_38C++; } break; case 2: - if (gSaveContext.save.weekEventReg[89] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_89_40)) { D_801F4E78 = 0; this->unk_38C++; } break; case 3: - if (gSaveContext.save.weekEventReg[90] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_90_01)) { D_801F4E78 = gSaveContext.save.time; this->unk_38C++; } @@ -842,7 +842,7 @@ s32 func_80AF81E8(EnPm* this, PlayState* play) { case 1: case 3: case 5: - if ((gSaveContext.save.weekEventReg[86] & 8) && (this->unk_378 == 3)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_86_08) && (this->unk_378 == 3)) { ActorCutscene_Stop(sp2A); } else { Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), &this->actor); @@ -1103,31 +1103,29 @@ void func_80AF8AC8(EnPm* this) { void func_80AF8BA8(s32 arg0) { static u16 D_80AFB8D4[] = { - 0x1B02, 0x1B04, 0x1B08, 0x1B10, 0x1B20, + WEEKEVENTREG_27_02, WEEKEVENTREG_27_04, WEEKEVENTREG_27_08, WEEKEVENTREG_27_10, WEEKEVENTREG_27_20, }; static u16 D_80AFB8E0[] = { - 0x1B40, 0x1B80, 0x1C01, 0x1C02, 0x1C04, + WEEKEVENTREG_27_40, WEEKEVENTREG_27_80, WEEKEVENTREG_28_01, WEEKEVENTREG_28_02, WEEKEVENTREG_28_04, }; - if (!(gSaveContext.save.weekEventReg[88] & 2)) { - if (gSaveContext.save.weekEventReg[D_80AFB8D4[arg0] >> 8] & - (D_80AFB8D4[arg0] & (1 | 2 | 4 | 0x38 | 0x40 | 0x80))) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_88_02)) { + if (CHECK_WEEKEVENTREG(D_80AFB8D4[arg0])) { switch (gSaveContext.save.day) { case 2: - gSaveContext.save.weekEventReg[28] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_28_08); break; case 3: - gSaveContext.save.weekEventReg[28] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_28_10); break; } - gSaveContext.save.weekEventReg[51] |= 2; - gSaveContext.save.weekEventReg[90] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_51_02); + SET_WEEKEVENTREG(WEEKEVENTREG_90_08); } } - gSaveContext.save.weekEventReg[D_80AFB8E0[arg0] >> 8] = - ((void)0, gSaveContext.save.weekEventReg[D_80AFB8E0[arg0] >> 8]) | (u8)D_80AFB8E0[arg0]; + SET_WEEKEVENTREG(D_80AFB8E0[arg0]); } void func_80AF8C68(EnPm* this, PlayState* play) { @@ -1135,7 +1133,7 @@ void func_80AF8C68(EnPm* this, PlayState* play) { s32 talkState = Message_GetState(&play->msgCtx); u16 textId = play->msgCtx.currentTextId; - if ((player->targetActor == &this->actor) && ((textId < 0xFF) || (textId > 0x200)) && (talkState == TEXT_STATE_3) && + if ((player->talkActor == &this->actor) && ((textId < 0xFF) || (textId > 0x200)) && (talkState == TEXT_STATE_3) && (this->prevTalkState == TEXT_STATE_3)) { if ((play->state.frames % 3) == 0) { if (this->unk_360 == 120.0f) { @@ -1261,7 +1259,7 @@ s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->unk_36C = scheduleOutput->time1 - scheduleOutput->time0; this->unk_36E = sp56 - scheduleOutput->time0; this->actor.flags &= ~ACTOR_FLAG_1; - if (gSaveContext.save.weekEventReg[90] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_90_08)) { this->unk_356 |= 0x800; } this->unk_356 |= 0x9000; @@ -1341,7 +1339,7 @@ s32 func_80AF91E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { default: SubS_UpdateFlags(&this->unk_356, 3, 7); func_80AF7E98(this, 0); - if (gSaveContext.save.weekEventReg[90] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_90_08)) { this->unk_356 |= 0x800; } this->unk_356 |= 0x9000; @@ -1380,7 +1378,7 @@ s32 func_80AF94AC(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { if (scheduleOutput->result == 24) { Flags_UnsetSwitch(play, 0); Flags_UnsetSwitch(play, 1); - this->unk_394 = PLAYER_AP_NONE; + this->unk_394 = PLAYER_IA_NONE; this->unk_368 = 60.0f; func_80AF7E98(this, 9); } @@ -1457,10 +1455,10 @@ s32 func_80AF95E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { break; case 23: - if (gSaveContext.save.weekEventReg[90] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_90_08)) { this->unk_356 |= 0x800; } - gSaveContext.save.weekEventReg[60] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_60_04); default: if (scheduleOutput->result == 29) { @@ -1568,7 +1566,7 @@ s32 func_80AF9BF8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->actor.flags |= ACTOR_FLAG_1; this->actor.targetMode = 0; - this->unk_394 = PLAYER_AP_NONE; + this->unk_394 = PLAYER_IA_NONE; this->unk_356 = 0; this->unk_368 = 40.0f; @@ -1780,11 +1778,9 @@ s32 func_80AF9E7C(EnPm* this, PlayState* play) { } if ((this->unk_356 & 0x10) && (this->unk_258 == 90)) { - u8 val = gSaveContext.save.weekEventReg[89] | 0x40; - - gSaveContext.save.weekEventReg[89] = val; - if (val == 0) { - gSaveContext.save.weekEventReg[89] |= 0x40; + //! @bug Uses SET_WEEKEVENTREG instead of CHECK_WEEKEVENTREG + if (!SET_WEEKEVENTREG(WEEKEVENTREG_89_40)) { + SET_WEEKEVENTREG(WEEKEVENTREG_89_40); } } @@ -1798,7 +1794,7 @@ s32 func_80AFA170(EnPm* this, PlayState* play) { switch (this->unk_258) { case 28: if (gSaveContext.save.time >= CLOCK_TIME(1, 39)) { - gSaveContext.save.weekEventReg[89] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_89_08); } case 16: @@ -1991,7 +1987,7 @@ void func_80AFA4D0(EnPm* this, PlayState* play) { u16 sp3C = 0; ScheduleOutput sp2C; - this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed); + this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (this->unk_38C != 0) { time = gSaveContext.save.time - D_801F4E78; sp3C = gSaveContext.save.time; @@ -2120,7 +2116,7 @@ void EnPm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Matrix_MultVec3f(&gZeroVec3f, &this->actor.focus.pos); Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot); } - if ((this->unk_356 & 0x8000) && !(gSaveContext.save.weekEventReg[90] & 4)) { + if ((this->unk_356 & 0x8000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_90_04)) { func_80AF8890(this, gfx, 1); } break; diff --git a/src/overlays/actors/ovl_En_Po_Composer/overlay.cfg b/src/overlays/actors/ovl_En_Po_Composer/overlay.cfg deleted file mode 100644 index 25791e887..000000000 --- a/src/overlays/actors/ovl_En_Po_Composer/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Po_Composer -z_en_po_composer.c diff --git a/src/overlays/actors/ovl_En_Po_Fusen/overlay.cfg b/src/overlays/actors/ovl_En_Po_Fusen/overlay.cfg deleted file mode 100644 index 71a747b65..000000000 --- a/src/overlays/actors/ovl_En_Po_Fusen/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Po_Fusen -z_en_po_fusen.c diff --git a/src/overlays/actors/ovl_En_Po_Sisters/overlay.cfg b/src/overlays/actors/ovl_En_Po_Sisters/overlay.cfg deleted file mode 100644 index 7c59c1704..000000000 --- a/src/overlays/actors/ovl_En_Po_Sisters/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Po_Sisters -z_en_po_sisters.c diff --git a/src/overlays/actors/ovl_En_Poh/overlay.cfg b/src/overlays/actors/ovl_En_Poh/overlay.cfg deleted file mode 100644 index d83d8bd2f..000000000 --- a/src/overlays/actors/ovl_En_Poh/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Poh -z_en_poh.c diff --git a/src/overlays/actors/ovl_En_Pp/overlay.cfg b/src/overlays/actors/ovl_En_Pp/overlay.cfg deleted file mode 100644 index 3cca2c18d..000000000 --- a/src/overlays/actors/ovl_En_Pp/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Pp -z_en_pp.c diff --git a/src/overlays/actors/ovl_En_Pr/overlay.cfg b/src/overlays/actors/ovl_En_Pr/overlay.cfg deleted file mode 100644 index efb1dfb56..000000000 --- a/src/overlays/actors/ovl_En_Pr/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Pr -z_en_pr.c diff --git a/src/overlays/actors/ovl_En_Pr/z_en_pr.c b/src/overlays/actors/ovl_En_Pr/z_en_pr.c index 97fd2c7f5..5068c96ee 100644 --- a/src/overlays/actors/ovl_En_Pr/z_en_pr.c +++ b/src/overlays/actors/ovl_En_Pr/z_en_pr.c @@ -345,7 +345,7 @@ void func_80A32B20(EnPr* this, PlayState* play) { this->actor.speedXZ = BREG(57) + 3.0f; Math_SmoothStepToS(&this->unk_22C, this->actor.yawTowardsPlayer, BREG(49) + 1, BREG(50) + 1000, BREG(51)); - this->unk_2B8 = D_80A338C0[(void)0, gSaveContext.save.playerForm] + player->actor.world.pos.y; + this->unk_2B8 = D_80A338C0[GET_PLAYER_FORM] + player->actor.world.pos.y; func_80A324E0(this, play); if (!(player->stateFlags1 & PLAYER_STATE1_8000000)) { @@ -382,7 +382,7 @@ void func_80A32D28(EnPr* this, PlayState* play) { } else { Math_SmoothStepToS(&this->unk_22C, this->actor.yawTowardsPlayer, BREG(49) + 1, BREG(50) + 1000, BREG(51)); func_80A325E4(this); - this->unk_2B8 = D_80A338C0[(void)0, gSaveContext.save.playerForm] + player->actor.world.pos.y; + this->unk_2B8 = D_80A338C0[GET_PLAYER_FORM] + player->actor.world.pos.y; func_80A324E0(this, play); if (this->unk_2C8 < sqrtf(SQ(player->actor.world.pos.x - this->actor.home.pos.x) + SQ(player->actor.world.pos.z - this->actor.home.pos.z))) { diff --git a/src/overlays/actors/ovl_En_Pr2/overlay.cfg b/src/overlays/actors/ovl_En_Pr2/overlay.cfg deleted file mode 100644 index 11a975ed0..000000000 --- a/src/overlays/actors/ovl_En_Pr2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Pr2 -z_en_pr2.c diff --git a/src/overlays/actors/ovl_En_Prz/overlay.cfg b/src/overlays/actors/ovl_En_Prz/overlay.cfg deleted file mode 100644 index dc79492a0..000000000 --- a/src/overlays/actors/ovl_En_Prz/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Prz -z_en_prz.c diff --git a/src/overlays/actors/ovl_En_Prz/z_en_prz.c b/src/overlays/actors/ovl_En_Prz/z_en_prz.c index 23b7d7fd4..dad8fc126 100644 --- a/src/overlays/actors/ovl_En_Prz/z_en_prz.c +++ b/src/overlays/actors/ovl_En_Prz/z_en_prz.c @@ -353,7 +353,7 @@ void func_80A767A8(EnPrz* this, PlayState* play) { this->unk_1C8 = 1; } - this->unk_1D8.y = (player->actor.world.pos.y + D_80A771E0[((void)0, gSaveContext.save.playerForm)]) + + this->unk_1D8.y = (player->actor.world.pos.y + D_80A771E0[GET_PLAYER_FORM]) + randPlusMinusPoint5Scaled((2.0f * this->unk_1E6) + 1.0f); func_80A76070(this, Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_1D8), play); } diff --git a/src/overlays/actors/ovl_En_Pst/overlay.cfg b/src/overlays/actors/ovl_En_Pst/overlay.cfg deleted file mode 100644 index 857d2ee7e..000000000 --- a/src/overlays/actors/ovl_En_Pst/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Pst -z_en_pst.c diff --git a/src/overlays/actors/ovl_En_Pst/z_en_pst.c b/src/overlays/actors/ovl_En_Pst/z_en_pst.c index bae89c5c7..c49852746 100644 --- a/src/overlays/actors/ovl_En_Pst/z_en_pst.c +++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.c @@ -162,15 +162,15 @@ void EnPst_UpdateCollision(EnPst* this, PlayState* play) { s32 EnPst_HandleLetterDay1(EnPst* this) { switch (this->actor.params) { case POSTBOX_SOUTH_UPPER_CLOCKTOWN: - return gSaveContext.save.weekEventReg[27] & 0x2; + return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_02); case POSTBOX_NORTH_CLOCKTOWN: - return gSaveContext.save.weekEventReg[27] & 0x4; + return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_04); case POSTBOX_EAST_UPPER_CLOCKTOWN: - return gSaveContext.save.weekEventReg[27] & 0x8; + return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_08); case POSTBOX_EAST_LOWER_CLOCKTOWN: - return gSaveContext.save.weekEventReg[27] & 0x10; + return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_10); case POSTBOX_SOUTH_LOWER_CLOCKTOWN: - return gSaveContext.save.weekEventReg[27] & 0x20; + return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_20); default: return false; } @@ -179,22 +179,22 @@ s32 EnPst_HandleLetterDay1(EnPst* this) { s32 EnPst_HandleLetterDay2(EnPst* this) { switch (this->actor.params) { case POSTBOX_SOUTH_UPPER_CLOCKTOWN: - return gSaveContext.save.weekEventReg[27] & 0x40; + return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_40); case POSTBOX_NORTH_CLOCKTOWN: - return gSaveContext.save.weekEventReg[27] & 0x80; + return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_80); case POSTBOX_EAST_UPPER_CLOCKTOWN: - return gSaveContext.save.weekEventReg[28] & 0x1; + return CHECK_WEEKEVENTREG(WEEKEVENTREG_28_01); case POSTBOX_EAST_LOWER_CLOCKTOWN: - return gSaveContext.save.weekEventReg[28] & 0x2; + return CHECK_WEEKEVENTREG(WEEKEVENTREG_28_02); case POSTBOX_SOUTH_LOWER_CLOCKTOWN: - return gSaveContext.save.weekEventReg[28] & 0x4; + return CHECK_WEEKEVENTREG(WEEKEVENTREG_28_04); default: return false; } } s32 EnPst_ChooseBehaviour(Actor* thisx, PlayState* play) { - s32 itemActionParam = 0; + PlayerItemAction itemAction = PLAYER_IA_NONE; s32 scriptBranch = 0; EnPst* this = THIS; @@ -205,17 +205,16 @@ s32 EnPst_ChooseBehaviour(Actor* thisx, PlayState* play) { case TEXT_STATE_5: if (Message_ShouldAdvance(play)) { case TEXT_STATE_16: - itemActionParam = func_80123810(play); + itemAction = func_80123810(play); scriptBranch = 0; - if ((itemActionParam == PLAYER_AP_LETTER_TO_KAFEI) || - (itemActionParam == PLAYER_AP_LETTER_MAMA)) { - this->exchangeItemId = itemActionParam; + if ((itemAction == PLAYER_IA_LETTER_TO_KAFEI) || (itemAction == PLAYER_IA_LETTER_MAMA)) { + this->exchangeItemId = itemAction; this->behaviour++; scriptBranch = 1; - } else if (itemActionParam < PLAYER_AP_NONE) { + } else if (itemAction <= PLAYER_IA_MINUS1) { this->behaviour++; scriptBranch = 3; - } else if (itemActionParam != PLAYER_AP_NONE) { + } else if (itemAction != PLAYER_IA_NONE) { this->behaviour++; scriptBranch = 2; } @@ -224,7 +223,7 @@ s32 EnPst_ChooseBehaviour(Actor* thisx, PlayState* play) { } break; case POSTBOX_BEHAVIOUR_TAKE_ITEM: - if (this->exchangeItemId == PLAYER_AP_LETTER_TO_KAFEI) { + if (this->exchangeItemId == PLAYER_IA_LETTER_TO_KAFEI) { scriptBranch = 1; } break; @@ -253,7 +252,7 @@ s32* EnPst_GetMsgEventScript(EnPst* this, PlayState* play) { return NULL; } } else if (this->stateFlags & 0x20) { - if (this->exchangeItemId == PLAYER_AP_LETTER_MAMA) { + if (this->exchangeItemId == PLAYER_IA_LETTER_MAMA) { return D_80B2C488; } else { return D_80B2C490; @@ -284,10 +283,10 @@ s32 EnPst_CheckTalk(EnPst* this, PlayState* play) { if (this->stateFlags & 7) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->stateFlags &= ~0x30; - if (player->exchangeItemId == PLAYER_AP_LETTER_TO_KAFEI) { + if (player->exchangeItemId == PLAYER_IA_LETTER_TO_KAFEI) { this->stateFlags |= 0x10; this->exchangeItemId = player->exchangeItemId; - } else if (player->exchangeItemId != PLAYER_AP_NONE) { + } else if (player->exchangeItemId != PLAYER_IA_NONE) { this->stateFlags |= 0x20; this->exchangeItemId = player->exchangeItemId; } @@ -358,19 +357,19 @@ void EnPst_Talk(EnPst* this, PlayState* play) { if (EnPst_HandleLetterDay1(this) != this->isLetterToKafeiDeposited) { switch (gSaveContext.save.day) { case 1: - gSaveContext.save.weekEventReg[91] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_91_04); break; case 2: if (EnPst_HandleLetterDay2(this)) { - gSaveContext.save.weekEventReg[91] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_91_08); } else { - gSaveContext.save.weekEventReg[91] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_91_04); } break; default: - gSaveContext.save.weekEventReg[91] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_91_08); break; } } diff --git a/src/overlays/actors/ovl_En_Racedog/overlay.cfg b/src/overlays/actors/ovl_En_Racedog/overlay.cfg deleted file mode 100644 index 6461b9ff5..000000000 --- a/src/overlays/actors/ovl_En_Racedog/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Racedog -z_en_racedog.c diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c index 261c94adc..0caa2f8ca 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c @@ -15,6 +15,8 @@ #define THIS ((EnRacedog*)thisx) +//! TODO: this file require macros for its uses of weekEventReg + void EnRacedog_Init(Actor* thisx, PlayState* play); void EnRacedog_Destroy(Actor* thisx, PlayState* play); void EnRacedog_Update(Actor* thisx, PlayState* play); @@ -286,7 +288,7 @@ s16 EnRacedog_GetYRotation(Path* path, s32 pointIndex, Vec3f* pos, f32* distSQ) } *distSQ = SQ(diffX) + SQ(diffZ); - return RADF_TO_BINANG(Math_Acot2F(diffZRand, diffXRand)); + return RADF_TO_BINANG(Math_Atan2F_XY(diffZRand, diffXRand)); } void EnRacedog_GetFloorRot(EnRacedog* this, Vec3f* floorRot) { @@ -297,7 +299,7 @@ void EnRacedog_GetFloorRot(EnRacedog* this, Vec3f* floorRot) { ny = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.y); nz = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.z); - floorRot->x = -Math_Acot2F(1.0f, -nz * ny); + floorRot->x = -Math_Atan2F_XY(1.0f, -nz * ny); } } diff --git a/src/overlays/actors/ovl_En_Raf/overlay.cfg b/src/overlays/actors/ovl_En_Raf/overlay.cfg deleted file mode 100644 index 086e64a72..000000000 --- a/src/overlays/actors/ovl_En_Raf/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Raf -z_en_raf.c diff --git a/src/overlays/actors/ovl_En_Raf/z_en_raf.c b/src/overlays/actors/ovl_En_Raf/z_en_raf.c index c44268509..8421b20ac 100644 --- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c +++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c @@ -235,8 +235,8 @@ void EnRaf_Init(Actor* thisx, PlayState* play) { } if (((this->switchFlag >= 0) || (this->mainType == EN_RAF_TYPE_DORMANT) || - (gSaveContext.save.weekEventReg[12] & 1)) && - ((Flags_GetSwitch(play, this->switchFlag)) || (this->mainType == EN_RAF_TYPE_DORMANT))) { + CHECK_WEEKEVENTREG(WEEKEVENTREG_12_01)) && + (Flags_GetSwitch(play, this->switchFlag) || (this->mainType == EN_RAF_TYPE_DORMANT))) { s32 i; for (i = CARNIVOROUS_LILY_PAD_LIMB_TRAP_1_LOWER_SEGMENT; i <= CARNIVOROUS_LILY_PAD_LIMB_TRAP_3_UPPER_SEGMENT; @@ -430,7 +430,7 @@ void EnRaf_Chew(EnRaf* this, PlayState* play) { switch (this->grabTarget) { case EN_RAF_GRAB_TARGET_PLAYER: play->damagePlayer(play, -2); - func_800B8E58((Player*)this, player->ageProperties->unk_92 + NA_SE_VO_LI_DAMAGE_S); + func_800B8E58((Player*)this, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S); CollisionCheck_GreenBlood(play, NULL, &player->actor.world.pos); if ((this->chewCount > (BREG(53) + 5)) || !(player->stateFlags2 & PLAYER_STATE2_80)) { player->actor.freezeTimer = 10; @@ -700,7 +700,7 @@ void EnRaf_Update(Actor* thisx, PlayState* play) { DECR(this->timer); this->actionFunc(this, play); - if ((this->action == EN_RAF_ACTION_IDLE) && (gSaveContext.save.weekEventReg[12] & 1)) { + if ((this->action == EN_RAF_ACTION_IDLE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_12_01)) { this->petalScaleType = EN_RAF_PETAL_SCALE_TYPE_DEAD; EnRaf_SetupConvulse(this); return; diff --git a/src/overlays/actors/ovl_En_Rail_Skb/overlay.cfg b/src/overlays/actors/ovl_En_Rail_Skb/overlay.cfg deleted file mode 100644 index df550bd19..000000000 --- a/src/overlays/actors/ovl_En_Rail_Skb/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Rail_Skb -z_en_rail_skb.c diff --git a/src/overlays/actors/ovl_En_Railgibud/overlay.cfg b/src/overlays/actors/ovl_En_Railgibud/overlay.cfg deleted file mode 100644 index 6c055c27c..000000000 --- a/src/overlays/actors/ovl_En_Railgibud/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Railgibud -z_en_railgibud.c diff --git a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c index 7772127a0..50a203c81 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -272,7 +272,7 @@ void EnRailgibud_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - if (gSaveContext.save.weekEventReg[14] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) { Actor_Kill(&this->actor); } @@ -450,7 +450,7 @@ void EnRailgibud_Grab(EnRailgibud* this, PlayState* play) { if (this->grabDamageTimer == 20) { s16 requiredScopeTemp; - damageSfxId = player->ageProperties->unk_92 + NA_SE_VO_LI_DAMAGE_S; + damageSfxId = player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S; play->damagePlayer(play, -8); func_800B8E58(player, damageSfxId); Rumble_Request(this->actor.xzDistToPlayer, 240, 1, 12); diff --git a/src/overlays/actors/ovl_En_Rat/overlay.cfg b/src/overlays/actors/ovl_En_Rat/overlay.cfg deleted file mode 100644 index 3562582ca..000000000 --- a/src/overlays/actors/ovl_En_Rat/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Rat -z_en_rat.c diff --git a/src/overlays/actors/ovl_En_Rd/overlay.cfg b/src/overlays/actors/ovl_En_Rd/overlay.cfg deleted file mode 100644 index 3864774ca..000000000 --- a/src/overlays/actors/ovl_En_Rd/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Rd -z_en_rd.c diff --git a/src/overlays/actors/ovl_En_Rd/z_en_rd.c b/src/overlays/actors/ovl_En_Rd/z_en_rd.c index a086375e7..3e46c9f04 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c @@ -881,7 +881,7 @@ void EnRd_Grab(EnRd* this, PlayState* play) { play->damagePlayer(play, -8); Rumble_Request(this->actor.xzDistToPlayer, 240, 1, 12); this->grabDamageTimer = 20; - func_800B8E58(player, player->ageProperties->unk_92 + NA_SE_VO_LI_DAMAGE_S); + func_800B8E58(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S); } break; diff --git a/src/overlays/actors/ovl_En_Recepgirl/overlay.cfg b/src/overlays/actors/ovl_En_Recepgirl/overlay.cfg deleted file mode 100644 index bec7425de..000000000 --- a/src/overlays/actors/ovl_En_Recepgirl/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Recepgirl -z_en_recepgirl.c diff --git a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c index 692bdeef2..051cc8b33 100644 --- a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c +++ b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c @@ -149,8 +149,8 @@ void EnRecepgirl_Talk(EnRecepgirl* this, PlayState* play) { Flags_SetSwitch(play, this->actor.params); Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 10.0f); - if (gSaveContext.save.weekEventReg[63] & 0x80) { // showed Couple's Mask to meeting - this->actor.textId = 0x2ADF; // Mayor's office is on the left (meeting ended) + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_80)) { + this->actor.textId = 0x2ADF; // Mayor's office is on the left (meeting ended) } else { this->actor.textId = 0x2ADA; // Mayor's office is on the left (meeting ongoing) } diff --git a/src/overlays/actors/ovl_En_Rg/overlay.cfg b/src/overlays/actors/ovl_En_Rg/overlay.cfg deleted file mode 100644 index 4cbc29697..000000000 --- a/src/overlays/actors/ovl_En_Rg/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Rg -z_en_rg.c diff --git a/src/overlays/actors/ovl_En_Rg/z_en_rg.c b/src/overlays/actors/ovl_En_Rg/z_en_rg.c index 2a357739a..7f6d39886 100644 --- a/src/overlays/actors/ovl_En_Rg/z_en_rg.c +++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.c @@ -659,7 +659,7 @@ void func_80BF4EBC(EnRg* this, PlayState* play) { this->actor.shape.yOffset = 14.0f; this->actionFunc = func_80BF4FC4; } - } else if (gSaveContext.save.weekEventReg[12] & 2) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_02)) { if (DECR(this->unk_318) == 0) { func_80BF409C(this, 1); this->unk_310 &= ~8; @@ -698,7 +698,7 @@ void func_80BF4FC4(EnRg* this, PlayState* play) { this->unk_310 &= ~0x800; } - if (gSaveContext.eventInf[1] & 1) { + if (CHECK_EVENTINF(EVENTINF_10)) { if (DECR(this->unk_318) == 0) { func_80BF47AC(this, play); @@ -751,7 +751,7 @@ void EnRg_Init(Actor* thisx, PlayState* play) { this->actor.gravity = -1.0f; SubS_UpdateFlags(&this->unk_310, 3, 7); - if (!(gSaveContext.save.weekEventReg[12] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_02)) { this->unk_318 = Rand_S16Offset(30, 30); } diff --git a/src/overlays/actors/ovl_En_River_Sound/overlay.cfg b/src/overlays/actors/ovl_En_River_Sound/overlay.cfg deleted file mode 100644 index 82d1e4c4a..000000000 --- a/src/overlays/actors/ovl_En_River_Sound/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_River_Sound -z_en_river_sound.c diff --git a/src/overlays/actors/ovl_En_Rr/overlay.cfg b/src/overlays/actors/ovl_En_Rr/overlay.cfg deleted file mode 100644 index d7730c1f0..000000000 --- a/src/overlays/actors/ovl_En_Rr/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Rr -z_en_rr.c diff --git a/src/overlays/actors/ovl_En_Rr/z_en_rr.c b/src/overlays/actors/ovl_En_Rr/z_en_rr.c index 15dd1d1c4..6c7ac273c 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c @@ -874,20 +874,18 @@ void EnRr_Update(Actor* thisx, PlayState* play) { void EnRr_Draw(Actor* thisx, PlayState* play2) { PlayState* play = play2; EnRr* this = THIS; - Mtx* matrix; + Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, 4 * sizeof(Mtx)); Vec3f* vecPtr; s32 i; EnRrStruct* ptr; Vec3f spA4; f32 temp_f20; - matrix = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Mtx) * 4); - OPEN_DISPS(play->state.gfxCtx); func_8012C28C(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x0C, matrix); + gSPSegment(POLY_OPA_DISP++, 0x0C, mtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, (this->unk_1E8 * 0) & 0x7F, (this->unk_1E8 * 0) & 0x3F, 0x20, 0x10, 1, (this->unk_1E8 * 0) & 0x3F, (this->unk_1E8 * -6) & 0x7F, 0x20, 0x10)); @@ -914,7 +912,7 @@ void EnRr_Draw(Actor* thisx, PlayState* play2) { Matrix_RotateZYX(ptr->unk_1A.x, ptr->unk_1A.y, ptr->unk_1A.z, MTXMODE_APPLY); Matrix_Push(); Matrix_Scale(temp_f20, 1.0f, temp_f20, MTXMODE_APPLY); - Matrix_ToMtx(matrix); + Matrix_ToMtx(mtx); if ((i & 1) != 0) { Matrix_RotateYS(0x2000, MTXMODE_APPLY); @@ -925,7 +923,7 @@ void EnRr_Draw(Actor* thisx, PlayState* play2) { Matrix_MultVecX(1842.1053f, vecPtr++); Matrix_MultVecX(-1842.1053f, vecPtr++); Matrix_Pop(); - matrix++; + mtx++; if (i == 3) { Matrix_MultZero(&spA4); } diff --git a/src/overlays/actors/ovl_En_Rsn/overlay.cfg b/src/overlays/actors/ovl_En_Rsn/overlay.cfg deleted file mode 100644 index f99efb1a6..000000000 --- a/src/overlays/actors/ovl_En_Rsn/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Rsn -z_en_rsn.c diff --git a/src/overlays/actors/ovl_En_Ru/overlay.cfg b/src/overlays/actors/ovl_En_Ru/overlay.cfg deleted file mode 100644 index 408030385..000000000 --- a/src/overlays/actors/ovl_En_Ru/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ru -z_en_ru.c diff --git a/src/overlays/actors/ovl_En_Ruppecrow/overlay.cfg b/src/overlays/actors/ovl_En_Ruppecrow/overlay.cfg deleted file mode 100644 index 63f0bbb60..000000000 --- a/src/overlays/actors/ovl_En_Ruppecrow/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ruppecrow -z_en_ruppecrow.c diff --git a/src/overlays/actors/ovl_En_Rz/overlay.cfg b/src/overlays/actors/ovl_En_Rz/overlay.cfg deleted file mode 100644 index 10c34f949..000000000 --- a/src/overlays/actors/ovl_En_Rz/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Rz -z_en_rz.c diff --git a/src/overlays/actors/ovl_En_Rz/z_en_rz.c b/src/overlays/actors/ovl_En_Rz/z_en_rz.c index a53ad3bda..108d88023 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c @@ -118,7 +118,7 @@ void EnRz_Init(Actor* thisx, PlayState* play) { switch (EN_RZ_GET_TYPE(thisx)) { case EN_RZ_TYPE_1: - if (!(gSaveContext.save.weekEventReg[77] & 4)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04)) { Actor_Kill(&this->actor); return; } @@ -129,7 +129,7 @@ void EnRz_Init(Actor* thisx, PlayState* play) { case EN_RZ_TYPE_2: this->actor.flags |= ACTOR_FLAG_10; - if (gSaveContext.save.weekEventReg[77] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04)) { EnRz_ChangeAnim(play, this, EN_RZ_ANIM_LINK_DANCE, ANIMMODE_LOOP, 0.0f); } else { EnRz_ChangeAnim(play, this, EN_RZ_ANIM_DANCE, ANIMMODE_LOOP, 0.0f); @@ -141,7 +141,7 @@ void EnRz_Init(Actor* thisx, PlayState* play) { default: // EN_RZ_TYPE_0 this->stateFlags |= EN_RZ_STATE_2; - if (gSaveContext.save.weekEventReg[77] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04)) { Actor_Kill(&this->actor); return; } @@ -344,7 +344,7 @@ EnRz* EnRz_FindSister(EnRz* this, PlayState* play) { } void func_80BFBDFC(PlayState* play) { - if (gSaveContext.save.weekEventReg[75] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_80)) { func_80151BB4(play, 0x27); } func_80151BB4(play, 0xC); @@ -424,7 +424,7 @@ void func_80BFC078(EnRz* this, PlayState* play) { case 0x2927: case 0x2928: func_80151938(play, play->msgCtx.currentTextId + 1); - gSaveContext.save.weekEventReg[77] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_77_04); break; default: @@ -489,12 +489,12 @@ void func_80BFC2F4(EnRz* this, PlayState* play) { void func_80BFC36C(EnRz* this, PlayState* play) { EnRz_UpdateSkelAnime(this, play); if (func_80BFBFAC(this, play)) { - gSaveContext.save.weekEventReg[77] |= 4; - if (gSaveContext.save.weekEventReg[75] & 0x80) { + SET_WEEKEVENTREG(WEEKEVENTREG_77_04); + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_80)) { this->actionFunc = func_80BFC214; } else { this->actionFunc = func_80BFC2F4; - gSaveContext.save.weekEventReg[75] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_75_80); } this->actor.cutscene = this->cutscenes[1]; } @@ -519,7 +519,7 @@ void func_80BFC3F8(EnRz* this, PlayState* play) { this->actor.cutscene = this->cutscenes[0]; this->actor.flags &= ~ACTOR_FLAG_10000; } else if (Player_GetMask(play) == PLAYER_MASK_KAMARO) { - if (gSaveContext.save.weekEventReg[77] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04)) { Message_StartTextbox(play, 0x2925, &this->actor); func_80BFBDFC(play); } else { @@ -532,9 +532,9 @@ void func_80BFC3F8(EnRz* this, PlayState* play) { } } else if (EnRz_CanTalk(this, play)) { - if (func_80BFBCEC(this, play) && !(gSaveContext.save.weekEventReg[77] & 4) && this->sister != NULL) { + if (func_80BFBCEC(this, play) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04) && this->sister != NULL) { this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { this->actor.flags &= ~ACTOR_FLAG_10000; func_800B8614(&this->actor, play, 120.0f); diff --git a/src/overlays/actors/ovl_En_S_Goro/overlay.cfg b/src/overlays/actors/ovl_En_S_Goro/overlay.cfg deleted file mode 100644 index 195f952ea..000000000 --- a/src/overlays/actors/ovl_En_S_Goro/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_S_Goro -z_en_s_goro.c diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c index e78f1970f..cc3cd2455 100644 --- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c +++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c @@ -235,16 +235,16 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { switch (EN_S_GORO_GET_MAIN_TYPE(&this->actor)) { case EN_S_GORO_TYPE_SHRINE_WINTER_A: - if (!(gSaveContext.save.weekEventReg[22] & 4)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { if (player->transformation == PLAYER_FORM_GORON) { - if (!(gSaveContext.save.weekEventReg[36] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_02)) { switch (this->textId) { case 0xCFB: return 0xCFC; case 0xCFC: return 0xCFD; case 0xCFD: - gSaveContext.save.weekEventReg[36] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_36_02); this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; return 0xCFE; default: @@ -255,8 +255,8 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { return 0xCFE; } } else { - if (!(gSaveContext.save.weekEventReg[36] & 1)) { - gSaveContext.save.weekEventReg[36] |= 1; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_01)) { + SET_WEEKEVENTREG(WEEKEVENTREG_36_01); return 0xCF9; } this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; @@ -266,9 +266,9 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { // Scene flag - Checks whether the chandelier has been lit if (!Flags_GetSwitch(play, EN_S_GORO_SCENEFLAG_INDEX(&this->actor))) { if (player->transformation == PLAYER_FORM_GORON) { - if (!(gSaveContext.save.weekEventReg[36] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_08)) { if (this->textId == 0xD02) { - gSaveContext.save.weekEventReg[36] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_36_08); this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; return 0xD03; } @@ -277,10 +277,10 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; return 0xD04; } - if (!(gSaveContext.save.weekEventReg[36] & 4)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_04)) { if (this->textId == 0xCFF) { this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; - gSaveContext.save.weekEventReg[36] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_36_04); return 0xD00; } return 0xCFF; @@ -288,9 +288,9 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; return 0xD01; } - if (!(gSaveContext.save.weekEventReg[36] & 0x10)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_10)) { if (this->textId == 0xD05) { - gSaveContext.save.weekEventReg[36] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_36_10); this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; return 0xD06; } @@ -302,14 +302,14 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { break; case EN_S_GORO_TYPE_SHRINE_WINTER_B: - if (!(gSaveContext.save.weekEventReg[22] & 4)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { if (player->transformation == PLAYER_FORM_GORON) { - if (!(gSaveContext.save.weekEventReg[36] & 0x40)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_40)) { switch (this->textId) { case 0xD15: return 0xD16; case 0xD16: - gSaveContext.save.weekEventReg[36] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_36_40); this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; return 0xD17; default: @@ -320,20 +320,20 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { return 0xD17; } } else { - if (!(gSaveContext.save.weekEventReg[36] & 0x20)) { - gSaveContext.save.weekEventReg[36] |= 0x20; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_20)) { + SET_WEEKEVENTREG(WEEKEVENTREG_36_20); return 0xD13; } this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; return 0xD14; } } else if (player->transformation == PLAYER_FORM_GORON) { - if (!(gSaveContext.save.weekEventReg[37] & 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_37_01)) { switch (this->textId) { case 0xD1E: return 0xD1F; case 0xD1F: - gSaveContext.save.weekEventReg[37] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_37_01); this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; return 0xD20; default: @@ -344,7 +344,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { return 0xD21; } } else { - if (!(gSaveContext.save.weekEventReg[36] & 0x80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_80)) { switch (this->textId) { case 0xD18: return 0xD19; @@ -353,7 +353,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { case 0xD1A: return 0xD1B; case 0xD1B: - gSaveContext.save.weekEventReg[36] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_36_80); this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; return 0xD1C; default: @@ -367,16 +367,16 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { break; case EN_S_GORO_TYPE_SHRINE_WINTER_C: - if (!(gSaveContext.save.weekEventReg[22] & 4)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { if (player->transformation == PLAYER_FORM_GORON) { - if (!(gSaveContext.save.weekEventReg[37] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_37_02)) { switch (this->textId) { case 0xD09: return 0xD0A; case 0xD0A: return 0xD0B; case 0xD0B: - gSaveContext.save.weekEventReg[37] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_37_02); this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; return 0xD0C; default: @@ -391,12 +391,12 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { return 0xD08; } } else if (player->transformation == PLAYER_FORM_GORON) { - if (!(gSaveContext.save.weekEventReg[37] & 4)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_37_04)) { switch (this->textId) { case 0xD0E: return 0xD0F; case 0xD0F: - gSaveContext.save.weekEventReg[37] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_37_04); this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; return 0xD10; default: @@ -414,7 +414,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { case EN_S_GORO_TYPE_SHRINE_SPRING_A: if (player->transformation == PLAYER_FORM_GORON) { - if (gSaveContext.save.weekEventReg[77] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_80)) { if (this->textId == 0xDE3) { this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; return 0xDE4; @@ -429,7 +429,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { case EN_S_GORO_TYPE_SHRINE_SPRING_B: if (player->transformation == PLAYER_FORM_GORON) { - if (gSaveContext.save.weekEventReg[77] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_80)) { if (this->textId == 0xDE7) { this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; return 0xDE8; @@ -444,7 +444,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { case EN_S_GORO_TYPE_SHRINE_SPRING_C: if (player->transformation == PLAYER_FORM_GORON) { - if (gSaveContext.save.weekEventReg[77] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_80)) { if (this->textId == 0xDEB) { this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; return 0xDEC; @@ -459,7 +459,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { case EN_S_GORO_TYPE_SHRINE_SPRING_D: if (player->transformation == PLAYER_FORM_GORON) { - if (gSaveContext.save.weekEventReg[77] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_80)) { if (this->textId == 0xDF1) { this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; return 0xDF2; @@ -482,7 +482,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { case EN_S_GORO_TYPE_SHRINE_SPRING_E: if (player->transformation == PLAYER_FORM_GORON) { - if (gSaveContext.save.weekEventReg[77] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_80)) { if (this->textId == 0xDF6) { this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; return 0xDF7; @@ -500,7 +500,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { case EN_S_GORO_TYPE_SHRINE_SPRING_F: if (player->transformation == PLAYER_FORM_GORON) { - if (gSaveContext.save.weekEventReg[77] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_80)) { switch (this->textId) { case 0xDFB: return 0xDFC; @@ -771,7 +771,7 @@ void EnSGoro_UpdateSleeping(EnSGoro* this, PlayState* play) { Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_SNORE1); } } - } else if (gSaveContext.save.weekEventReg[22] & 4) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { this->actionFlags &= ~EN_S_GORO_ACTIONFLAG_SUPPRESS_SNORE; } @@ -842,7 +842,7 @@ s32 EnSGoro_CheckGKBehavior(EnSGoro* this, PlayState* play) { return false; } if ((!(this->actionFlags & EN_S_GORO_ACTIONFLAG_GKQUIET_ACKNOWLEDGED)) && - ((((EnGk*)this->otherGoron)->unk_1E4 & 0x80) || (gSaveContext.save.weekEventReg[22] & 4))) { + ((((EnGk*)this->otherGoron)->unk_1E4 & 0x80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04))) { this->actionFlags |= EN_S_GORO_ACTIONFLAG_GKQUIET_ACKNOWLEDGED; this->animInfoIndex = EN_S_GORO_ANIM_ROLLUP; @@ -963,7 +963,7 @@ s32 EnSGoro_UpdateRotationToPlayer(EnSGoro* this, PlayState* play) { this->bodyRotY = CLAMP(this->bodyRotY, -0x1C70, 0x1C70); playerPos = player->actor.world.pos; - playerPos.y = player->bodyPartsPos[7].y + 3.0f; + playerPos.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; thisPos = this->actor.world.pos; thisPos.y += 70.0f; @@ -1026,7 +1026,7 @@ void EnSGoro_SetupAction(EnSGoro* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->loadedObjIndex)) { this->actionFlags = 0; if (EN_S_GORO_OFTYPE_WSHRINE) { - if (gSaveContext.save.weekEventReg[22] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { this->actionFlags |= EN_S_GORO_ACTIONFLAG_GKQUIET_ACKNOWLEDGED; this->actionFlags |= EN_S_GORO_ACTIONFLAG_EYESOPEN; this->animInfoIndex = EN_S_GORO_ANIM_SHIVER_A; diff --git a/src/overlays/actors/ovl_En_Sb/overlay.cfg b/src/overlays/actors/ovl_En_Sb/overlay.cfg deleted file mode 100644 index 12658e763..000000000 --- a/src/overlays/actors/ovl_En_Sb/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Sb -z_en_sb.c diff --git a/src/overlays/actors/ovl_En_Sc_Ruppe/overlay.cfg b/src/overlays/actors/ovl_En_Sc_Ruppe/overlay.cfg deleted file mode 100644 index 2262aa0bb..000000000 --- a/src/overlays/actors/ovl_En_Sc_Ruppe/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Sc_Ruppe -z_en_sc_ruppe.c diff --git a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c index 15e808971..fa017af87 100644 --- a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c +++ b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c @@ -73,38 +73,38 @@ void EnScRuppe_UpdateCollision(EnScRuppe* this, PlayState* play) { s32 func_80BD697C(s16 ruppeIndex) { switch (ruppeIndex) { case RUPEE_GREEN: - if (gSaveContext.save.weekEventReg[53] & 4) { - gSaveContext.save.weekEventReg[53] &= (u8)~4; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_04)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_53_04); return true; } break; case RUPEE_BLUE: - if (gSaveContext.save.weekEventReg[53] & 0x80) { - gSaveContext.save.weekEventReg[53] &= (u8)~0x80; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_80)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_53_80); return true; } break; case RUPEE_RED: - if (gSaveContext.save.weekEventReg[54] & 1) { - gSaveContext.save.weekEventReg[54] &= (u8)~1; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_01)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_54_01); return true; } break; case RUPEE_ORANGE: - if (gSaveContext.save.weekEventReg[54] & 2) { - gSaveContext.save.weekEventReg[54] &= (u8)~2; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_02)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_54_02); return true; } break; case RUPEE_PURPLE: - if (gSaveContext.save.weekEventReg[54] & 4) { - gSaveContext.save.weekEventReg[54] &= (u8)~4; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_04)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_54_04); return true; } break; case RUPEE_UNUSED: - if ((gSaveContext.save.weekEventReg[54] & 8)) { - gSaveContext.save.weekEventReg[54] &= (u8)~8; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_08)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_54_08); return true; } break; diff --git a/src/overlays/actors/ovl_En_Scopecoin/overlay.cfg b/src/overlays/actors/ovl_En_Scopecoin/overlay.cfg deleted file mode 100644 index 2c605c8bc..000000000 --- a/src/overlays/actors/ovl_En_Scopecoin/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Scopecoin -z_en_scopecoin.c diff --git a/src/overlays/actors/ovl_En_Scopecrow/overlay.cfg b/src/overlays/actors/ovl_En_Scopecrow/overlay.cfg deleted file mode 100644 index 880bf5539..000000000 --- a/src/overlays/actors/ovl_En_Scopecrow/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Scopecrow -z_en_scopecrow.c diff --git a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c index bcf7be085..b37190ee1 100644 --- a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c +++ b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c @@ -69,40 +69,46 @@ void func_80BCD000(EnScopecrow* this, PlayState* play) { s32 func_80BCD09C(s16 arg0) { switch (arg0) { case 0: - if (gSaveContext.save.weekEventReg[53] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_04)) { return true; + } else { + return false; } - return false; case 1: - if (gSaveContext.save.weekEventReg[53] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_80)) { return true; + } else { + return false; } - return false; case 2: - if (gSaveContext.save.weekEventReg[54] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_01)) { return true; + } else { + return false; } - return false; case 3: - if (gSaveContext.save.weekEventReg[54] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_02)) { return true; + } else { + return false; } - return false; case 4: - if (gSaveContext.save.weekEventReg[54] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_04)) { return true; + } else { + return false; } - return false; case 5: - if (gSaveContext.save.weekEventReg[54] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_08)) { return true; + } else { + return false; } - return false; } return false; @@ -111,43 +117,43 @@ s32 func_80BCD09C(s16 arg0) { s32 func_80BCD1AC(s16 arg0) { switch (arg0) { case 0: - if (!(gSaveContext.save.weekEventReg[53] & 4)) { - gSaveContext.save.weekEventReg[53] |= 4; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_53_04)) { + SET_WEEKEVENTREG(WEEKEVENTREG_53_04); return true; } break; case 1: - if (!(gSaveContext.save.weekEventReg[53] & 0x80)) { - gSaveContext.save.weekEventReg[53] |= 0x80; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_53_80)) { + SET_WEEKEVENTREG(WEEKEVENTREG_53_80); return true; } break; case 2: - if (!(gSaveContext.save.weekEventReg[54] & 1)) { - gSaveContext.save.weekEventReg[54] |= 1; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_54_01)) { + SET_WEEKEVENTREG(WEEKEVENTREG_54_01); return true; } break; case 3: - if (!(gSaveContext.save.weekEventReg[54] & 2)) { - gSaveContext.save.weekEventReg[54] |= 2; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_54_02)) { + SET_WEEKEVENTREG(WEEKEVENTREG_54_02); return true; } break; case 4: - if (!(gSaveContext.save.weekEventReg[54] & 4)) { - gSaveContext.save.weekEventReg[54] |= 4; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_54_04)) { + SET_WEEKEVENTREG(WEEKEVENTREG_54_04); return true; } break; case 5: - if (!(gSaveContext.save.weekEventReg[54] & 8)) { - gSaveContext.save.weekEventReg[54] |= 8; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_54_08)) { + SET_WEEKEVENTREG(WEEKEVENTREG_54_08); return true; } break; diff --git a/src/overlays/actors/ovl_En_Scopenuts/overlay.cfg b/src/overlays/actors/ovl_En_Scopenuts/overlay.cfg deleted file mode 100644 index 5989378a1..000000000 --- a/src/overlays/actors/ovl_En_Scopenuts/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Scopenuts -z_en_scopenuts.c diff --git a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c index a4a344ce7..4f8207046 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -170,7 +170,7 @@ void func_80BCAE78(EnScopenuts* this, PlayState* play) { s16 func_80BCAF0C(EnScopenuts* this) { switch (this->unk_33C) { case 0x0: - if (gSaveContext.save.weekEventReg[53] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_02)) { this->unk_328 |= 1; return 0x1638; } @@ -239,7 +239,7 @@ void func_80BCB1C8(EnScopenuts* this, PlayState* play) { this->unk_350 *= 0.92f; Actor_SetScale(&this->actor, this->unk_350); if (this->actor.bgCheckFlags & 1) { - gSaveContext.save.weekEventReg[52] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_52_40); Actor_Kill(&this->actor); } } @@ -368,7 +368,7 @@ void func_80BCB6D0(EnScopenuts* this, PlayState* play) { void func_80BCB90C(EnScopenuts* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; - gSaveContext.save.weekEventReg[53] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_53_02); this->actionFunc = func_80BCB6D0; } else { Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 300.0f, 300.0f); @@ -594,7 +594,7 @@ void func_80BCBFFC(EnScopenuts* this, PlayState* play) { if (sp32 == 3) { if (this->unk_334 >= (this->path->count - 1)) { ActorCutscene_Stop(this->unk_338); - gSaveContext.save.weekEventReg[52] &= (u8)~0x40; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_40); this->actionFunc = func_80BCC288; } else { this->unk_334++; @@ -684,8 +684,7 @@ void EnScopenuts_Init(Actor* thisx, PlayState* play) { s32 pad; EnScopenuts* this = THIS; - if (!(gSaveContext.save.weekEventReg[74] & 0x40) && - (gSaveContext.save.inventory.items[ITEM_OCARINA] == ITEM_NONE)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_74_40) && (gSaveContext.save.inventory.items[ITEM_OCARINA] == ITEM_NONE)) { Actor_Kill(&this->actor); return; } @@ -705,7 +704,7 @@ void EnScopenuts_Init(Actor* thisx, PlayState* play) { this->actor.speedXZ = 0.0f; if (ENSCOPENUTS_GET_3E0(&this->actor) == ENSCOPENUTS_3E0_0) { - if (gSaveContext.save.weekEventReg[52] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_40)) { Actor_Kill(&this->actor); } else if (play->actorCtx.flags & ACTORCTX_FLAG_1) { this->path = SubS_GetPathByIndex(play, ENSCOPENUTS_GET_FC00(&this->actor), 0x3F); @@ -716,7 +715,7 @@ void EnScopenuts_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); } } else if (ENSCOPENUTS_GET_3E0(&this->actor) == ENSCOPENUTS_3E0_1) { - if (gSaveContext.save.weekEventReg[52] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_40)) { this->path = SubS_GetPathByIndex(play, ENSCOPENUTS_GET_FC00(&this->actor), 0x3F); if (this->path == NULL) { Actor_Kill(&this->actor); diff --git a/src/overlays/actors/ovl_En_Sda/overlay.cfg b/src/overlays/actors/ovl_En_Sda/overlay.cfg deleted file mode 100644 index 694122dd7..000000000 --- a/src/overlays/actors/ovl_En_Sda/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Sda -z_en_sda.c diff --git a/src/overlays/actors/ovl_En_Sda/z_en_sda.c b/src/overlays/actors/ovl_En_Sda/z_en_sda.c index bd453c84c..8835d92da 100644 --- a/src/overlays/actors/ovl_En_Sda/z_en_sda.c +++ b/src/overlays/actors/ovl_En_Sda/z_en_sda.c @@ -50,8 +50,8 @@ u8 D_80947AEC[] = { 2, 2, 2, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 3, }; -s8 D_80947AFC[] = { - 2, 9, 10, 11, 12, 13, 14, 0, 15, -1, 3, 4, 5, 6, 7, 8, -1, 1, 0, 0, +s8 D_80947AFC[PLAYER_BODYPART_MAX] = { + 2, 9, 10, 11, 12, 13, 14, 0, 15, -1, 3, 4, 5, 6, 7, 8, -1, 1, }; Vec3f D_80947B10[] = { @@ -93,7 +93,7 @@ void EnSda_Update(Actor* thisx, PlayState* play) { void EnSda_Draw(Actor* thisx, PlayState* play) { EnSda* this = THIS; Player* player; - u8* shadowTexture = GRAPH_ALLOC(play->state.gfxCtx, 64 * 64); + u8* shadowTex = GRAPH_ALLOC(play->state.gfxCtx, 64 * 64); if (this->actor.params == ENSDA_1) { player = (Player*)this->actor.parent; @@ -102,10 +102,10 @@ void EnSda_Draw(Actor* thisx, PlayState* play) { } player->actor.shape.shadowAlpha = 0; - func_8094702C(this, shadowTexture, player, play); + func_8094702C(this, shadowTex, player, play); if (KREG(0) < 5) { - func_80947668(shadowTexture, player, play); + func_80947668(shadowTex, player, play); } } @@ -242,7 +242,7 @@ void func_8094702C(EnSda* this, u8* shadowTexture, Player* player, PlayState* pl Matrix_RotateXFNew((BREG(50) + 70) / 100.0f); - for (i = 0; i < 18; i++) { + for (i = 0; i < PLAYER_BODYPART_MAX; i++) { if (D_80947AFC[i] >= 0) { D_80947EA0[D_80947AFC[i]] = player->bodyPartsPos[i]; } diff --git a/src/overlays/actors/ovl_En_Sekihi/overlay.cfg b/src/overlays/actors/ovl_En_Sekihi/overlay.cfg deleted file mode 100644 index 96c2eae2f..000000000 --- a/src/overlays/actors/ovl_En_Sekihi/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Sekihi -z_en_sekihi.c diff --git a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c index 5ad105a76..88fab3298 100644 --- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c +++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c @@ -54,14 +54,15 @@ void EnSekihi_Init(Actor* thisx, PlayState* play) { s32 objectIndex; s32 pad; - if (((params < SEKIHI_TYPE_0) || (params >= SEKIHI_TYPE_MAX)) || sOpaDLists[params] == NULL) { + if ((params < SEKIHI_TYPE_0 || params >= SEKIHI_TYPE_MAX) || sOpaDLists[params] == NULL) { Actor_Kill(&this->dyna.actor); return; } - if ((params == SEKIHI_TYPE_4) && ((gSaveContext.save.skullTokenCount & 0xFFFF) >= 30)) { - gSaveContext.save.weekEventReg[13] |= 0x20; + if ((params == SEKIHI_TYPE_4) && (((gSaveContext.save.skullTokenCount & 0xFFFF)) >= 30)) { + SET_WEEKEVENTREG(WEEKEVENTREG_13_20); } + objectIndex = Object_GetIndex(&play->objectCtx, sObjectIds[params]); if (objectIndex >= 0) { this->objectIndex = objectIndex; diff --git a/src/overlays/actors/ovl_En_Sellnuts/overlay.cfg b/src/overlays/actors/ovl_En_Sellnuts/overlay.cfg deleted file mode 100644 index f3b9a3eca..000000000 --- a/src/overlays/actors/ovl_En_Sellnuts/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Sellnuts -z_en_sellnuts.c diff --git a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c index de8036ef8..b16153a53 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -341,28 +341,28 @@ void func_80ADB544(EnSellnuts* this, PlayState* play) { Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0x7D0, 0); this->actor.world.rot.y = this->actor.shape.rot.y; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if (Player_GetExchangeItemId(play) == PLAYER_AP_MOON_TEAR) { + if (Player_GetExchangeItemId(play) == PLAYER_IA_MOON_TEAR) { player->actor.textId = D_80ADD928[this->unk_33A]; this->unk_340 = player->actor.textId; this->actionFunc = func_80ADBAB8; } else { switch (this->unk_340) { case 0x60E: - gSaveContext.save.weekEventReg[17] |= 0x20; - gSaveContext.save.weekEventReg[86] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_17_20); + SET_WEEKEVENTREG(WEEKEVENTREG_86_04); Message_StartTextbox(play, this->unk_340, &this->actor); this->actionFunc = func_80ADB0D8; break; case 0x628: - gSaveContext.save.weekEventReg[77] |= 0x40; - gSaveContext.save.weekEventReg[86] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_77_40); + SET_WEEKEVENTREG(WEEKEVENTREG_86_04); Message_StartTextbox(play, this->unk_340, &this->actor); this->actionFunc = func_80ADB0D8; break; case 0x614: - gSaveContext.save.weekEventReg[17] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_17_40); Message_StartTextbox(play, this->unk_340, &this->actor); this->actionFunc = func_80ADB0D8; break; @@ -382,24 +382,24 @@ void func_80ADB544(EnSellnuts* this, PlayState* play) { } else if (((this->actor.xzDistToPlayer < 80.0f) && (((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false)) || this->actor.isTargeted) { - func_800B85E0(&this->actor, play, 80.0f, PLAYER_AP_MOON_TEAR); + func_800B85E0(&this->actor, play, 80.0f, PLAYER_IA_MOON_TEAR); if (player->transformation == PLAYER_FORM_DEKU) { if (gSaveContext.save.day == 3) { this->unk_33A = 2; - if (gSaveContext.save.weekEventReg[77] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_40)) { this->unk_340 = D_80ADD918[this->unk_33A]; } else { this->unk_340 = D_80ADD910[this->unk_33A]; } } else { this->unk_33A = 1; - if (gSaveContext.save.weekEventReg[17] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_17_20)) { this->unk_340 = D_80ADD918[this->unk_33A]; } else { this->unk_340 = D_80ADD910[this->unk_33A]; } } - } else if (gSaveContext.save.weekEventReg[17] & 0x40) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_17_40)) { this->unk_340 = D_80ADD918[this->unk_33A]; } else { this->unk_340 = D_80ADD910[this->unk_33A]; @@ -417,15 +417,16 @@ void func_80ADB544(EnSellnuts* this, PlayState* play) { void func_80ADB924(EnSellnuts* this, PlayState* play) { Player* player = GET_PLAYER(play); u8 talkState = Message_GetState(&play->msgCtx); - s32 item; + PlayerItemAction itemAction; if (talkState == TEXT_STATE_16) { - item = func_80123810(play); - if (item > PLAYER_AP_NONE) { - if (item == PLAYER_AP_MOON_TEAR) { + itemAction = func_80123810(play); + + if (itemAction > PLAYER_IA_NONE) { + if (itemAction == PLAYER_IA_MOON_TEAR) { player->actor.textId = D_80ADD928[this->unk_33A]; this->unk_340 = player->actor.textId; - player->exchangeItemId = item; + player->exchangeItemId = itemAction; this->actionFunc = func_80ADBAB8; } else { player->actor.textId = D_80ADD920[this->unk_33A]; @@ -433,7 +434,7 @@ void func_80ADB924(EnSellnuts* this, PlayState* play) { this->actionFunc = func_80ADB0D8; } func_801477B4(play); - } else if (item < PLAYER_AP_NONE) { + } else if (itemAction <= PLAYER_IA_MINUS1) { this->unk_340 = D_80ADD920[this->unk_33A]; func_80151938(play, this->unk_340); this->actionFunc = func_80ADB0D8; @@ -472,14 +473,14 @@ void func_80ADBAB8(EnSellnuts* this, PlayState* play) { play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; this->actionFunc = func_80ADBBEC; - func_800B7298(play, NULL, 0x13); + func_800B7298(play, NULL, PLAYER_CSMODE_19); } } void func_80ADBBEC(EnSellnuts* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; - gSaveContext.save.weekEventReg[17] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_17_80); this->actionFunc = func_80ADBCE4; } else { Actor_PickUp(&this->actor, play, GI_DEED_LAND, 300.0f, 300.0f); @@ -491,14 +492,14 @@ void func_80ADBC60(EnSellnuts* this, PlayState* play) { Message_StartTextbox(play, this->unk_340, &this->actor); this->actionFunc = func_80ADB0D8; } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); this->unk_340 = D_80ADD930[this->unk_33A]; } } void func_80ADBCE4(EnSellnuts* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); this->unk_340 = D_80ADD930[this->unk_33A]; this->actionFunc = func_80ADBC60; } @@ -835,7 +836,7 @@ void func_80ADCA64(EnSellnuts* this, PlayState* play) { SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 17); } else if (this->unk_34C == 17) { ActorCutscene_Stop(this->cutscene); - gSaveContext.save.weekEventReg[73] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_73_04); Actor_Kill(&this->actor); } } @@ -871,7 +872,7 @@ void func_80ADCC04(EnSellnuts* this, PlayState* play) { void func_80ADCD3C(EnSellnuts* this, PlayState* play) { Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 2, 0xE38); - if (gSaveContext.save.weekEventReg[73] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_04)) { this->unk_338 |= 2; this->unk_338 |= 1; this->unk_340 = 0x626; @@ -947,7 +948,7 @@ void EnSellnuts_Init(Actor* thisx, PlayState* play) { Player* player = GET_PLAYER(play); s32 pad2; - if ((gSaveContext.save.weekEventReg[17] & 0x80) || (gSaveContext.save.weekEventReg[61] & 0x10)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_17_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_61_10)) { Actor_Kill(&this->actor); } @@ -969,7 +970,7 @@ void EnSellnuts_Init(Actor* thisx, PlayState* play) { this->unk_36C = 0.01f; this->actor.speedXZ = 0.0f; this->actor.velocity.y = 0.0f; - if (gSaveContext.save.weekEventReg[73] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_04)) { if (ENSELLNUTS_GET_1(&this->actor)) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_En_Shn/overlay.cfg b/src/overlays/actors/ovl_En_Shn/overlay.cfg deleted file mode 100644 index f0526f58c..000000000 --- a/src/overlays/actors/ovl_En_Shn/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Shn -z_en_shn.c diff --git a/src/overlays/actors/ovl_En_Shn/z_en_shn.c b/src/overlays/actors/ovl_En_Shn/z_en_shn.c index 9c1af02bf..0e1b182e6 100644 --- a/src/overlays/actors/ovl_En_Shn/z_en_shn.c +++ b/src/overlays/actors/ovl_En_Shn/z_en_shn.c @@ -181,7 +181,7 @@ void func_80AE6488(EnShn* this, PlayState* play) { this->unk_2D4 += (this->unk_2D0 != 0.0f) ? 40.0f : -40.0f; this->unk_2D4 = CLAMP(this->unk_2D4, 0.0f, 80.0f); Matrix_Translate(this->unk_2D4, 0.0f, 0.0f, MTXMODE_APPLY); - if ((&this->actor == player->targetActor) && + if ((&this->actor == player->talkActor) && ((play->msgCtx.currentTextId < 0xFF) || (play->msgCtx.currentTextId >= 0x201)) && (talkState == TEXT_STATE_3) && (this->prevTalkState == TEXT_STATE_3)) { if (play->state.frames % 2 == 0) { @@ -216,7 +216,7 @@ s32 func_80AE65F4(EnShn* this, PlayState* play) { this->unk_1DA = temp; this->unk_1D8 |= 0x40; } else if (this->unk_1D8 & 0x40) { - if (!(gSaveContext.save.weekEventReg[23] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_08)) { func_80AE615C(this, 3); } this->unk_1DA = 0; @@ -227,8 +227,8 @@ s32 func_80AE65F4(EnShn* this, PlayState* play) { s32 func_80AE6704(Actor* thisx, PlayState* play) { static s32 sPictographFlags[] = { - PICTOGRAPH_0, PICTOGRAPH_MONKEY, PICTOGRAPH_BIG_OCTO, - PICTOGRAPH_TINGLE, PICTOGRAPH_DEKU_KING, PICTOGRAPH_IN_SWAMP, + PICTO_VALID_0, PICTO_VALID_MONKEY, PICTO_VALID_BIG_OCTO, + PICTO_VALID_TINGLE, PICTO_VALID_DEKU_KING, PICTO_VALID_IN_SWAMP, }; EnShn* this = THIS; s32 ret = 0; @@ -258,13 +258,13 @@ s32 func_80AE6704(Actor* thisx, PlayState* play) { break; case 6: - gSaveContext.save.weekEventReg[90] &= (u8)~0x40; - func_800B7298(play, &this->actor, 7); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40); + func_800B7298(play, &this->actor, PLAYER_CSMODE_7); play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_POISONED, 6); gSaveContext.nextCutsceneIndex = 0; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_03; - gSaveContext.nextTransitionType = TRANS_TYPE_07; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE_SLOW; this->unk_2C6++; break; } @@ -293,17 +293,17 @@ s32 func_80AE68F0(EnShn* this, PlayState* play) { if (this->unk_1D8 & 7) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->unk_1D8 &= ~0x180; - if (player->exchangeItemId == PLAYER_AP_PICTO_BOX) { + if (player->exchangeItemId == PLAYER_IA_PICTO_BOX) { this->unk_1D8 |= 0x80; this->unk_2E4 = player->exchangeItemId; - } else if (player->exchangeItemId != PLAYER_AP_NONE) { + } else if (player->exchangeItemId != PLAYER_IA_NONE) { this->unk_1D8 |= 0x100; this->unk_2E4 = player->exchangeItemId; } SubS_UpdateFlags(&this->unk_1D8, 0, 7); this->unk_1DC = func_80AE6880(this, play); this->unk_2C6 = 0; - if (gSaveContext.save.weekEventReg[23] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_08)) { this->unk_1D8 |= 8; } this->actionFunc = func_80AE6A64; @@ -315,7 +315,7 @@ s32 func_80AE68F0(EnShn* this, PlayState* play) { void func_80AE69E8(EnShn* this, PlayState* play) { Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8); - if ((gSaveContext.save.weekEventReg[23] & 8) && EnShn_IsFacingPlayer(this)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_08) && EnShn_IsFacingPlayer(this)) { this->unk_1D8 |= 8; } else { this->unk_1D8 &= ~0x8; @@ -350,7 +350,7 @@ void EnShn_Init(Actor* thisx, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &gBurlyGuySkel, NULL, this->jointTable, this->morphTable, BURLY_GUY_LIMB_MAX); this->unk_2E8 = -1; - if (gSaveContext.save.weekEventReg[23] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_08)) { func_80AE615C(this, 0); } else { func_80AE615C(this, 2); @@ -382,7 +382,7 @@ void EnShn_Update(Actor* thisx, PlayState* play) { func_80AE6130(this); func_80AE63A8(this, play); this->unk_2E0 = 0; - func_8013C964(&this->actor, play, 120.0f, 40.0f, PLAYER_AP_NONE, this->unk_1D8 & 7); + func_8013C964(&this->actor, play, 120.0f, 40.0f, PLAYER_IA_NONE, this->unk_1D8 & 7); } s32 EnShn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { diff --git a/src/overlays/actors/ovl_En_Si/overlay.cfg b/src/overlays/actors/ovl_En_Si/overlay.cfg deleted file mode 100644 index 67fe95518..000000000 --- a/src/overlays/actors/ovl_En_Si/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Si -z_en_si.c diff --git a/src/overlays/actors/ovl_En_Skb/overlay.cfg b/src/overlays/actors/ovl_En_Skb/overlay.cfg deleted file mode 100644 index dfa528943..000000000 --- a/src/overlays/actors/ovl_En_Skb/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Skb -z_en_skb.c diff --git a/src/overlays/actors/ovl_En_Skb/z_en_skb.c b/src/overlays/actors/ovl_En_Skb/z_en_skb.c index 4fd9f5f14..bb1fb7e0b 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c @@ -807,7 +807,7 @@ void func_809964A0(EnSkb* this, PlayState* play) { void func_809964DC(EnSkb* this, PlayState* play) { if (this->unk_3D6 == 0) { if ((this->actionFunc != func_80994E94) && (this->actionFunc != func_80996284) && - (this->actionFunc != func_809964A0) && (gSaveContext.save.weekEventReg[85] & 0x40)) { + (this->actionFunc != func_809964A0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_85_40)) { this->actor.colChkInfo.health = 0; func_809961E4(this, play); } diff --git a/src/overlays/actors/ovl_En_Slime/overlay.cfg b/src/overlays/actors/ovl_En_Slime/overlay.cfg deleted file mode 100644 index ad13869e8..000000000 --- a/src/overlays/actors/ovl_En_Slime/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Slime -z_en_slime.c diff --git a/src/overlays/actors/ovl_En_Snowman/overlay.cfg b/src/overlays/actors/ovl_En_Snowman/overlay.cfg deleted file mode 100644 index 97b6aa6e9..000000000 --- a/src/overlays/actors/ovl_En_Snowman/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Snowman -z_en_snowman.c diff --git a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c index 8bd665bc0..994115f89 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c @@ -1040,8 +1040,8 @@ void EnSnowman_Update(Actor* thisx, PlayState* play) { if ((this->actor.floorPoly != NULL) && ((this->actor.floorPoly->normal.y * SHT_MINV) < 0.7f)) { Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos); if (!this->turningOnSteepSlope) { - this->snowPileTargetRotY = Math_FAtan2F(this->actor.floorPoly->normal.z * SHT_MINV, - this->actor.floorPoly->normal.x * SHT_MINV); + this->snowPileTargetRotY = Math_Atan2S_XY(this->actor.floorPoly->normal.z * SHT_MINV, + this->actor.floorPoly->normal.x * SHT_MINV); this->turningOnSteepSlope = true; } } else { diff --git a/src/overlays/actors/ovl_En_Snowwd/overlay.cfg b/src/overlays/actors/ovl_En_Snowwd/overlay.cfg deleted file mode 100644 index 4a4495833..000000000 --- a/src/overlays/actors/ovl_En_Snowwd/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Snowwd -z_en_snowwd.c diff --git a/src/overlays/actors/ovl_En_Sob1/overlay.cfg b/src/overlays/actors/ovl_En_Sob1/overlay.cfg deleted file mode 100644 index cd2fa2a2e..000000000 --- a/src/overlays/actors/ovl_En_Sob1/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Sob1 -z_en_sob1.c diff --git a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c index 2a3fb4e32..035bc2bfa 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -190,7 +190,7 @@ u16 EnSob1_GetTalkOption(EnSob1* this, PlayState* play) { if (this->shopType == BOMB_SHOP) { if (gSaveContext.save.day == 1 && gSaveContext.save.time >= CLOCK_TIME(6, 00)) { return 0x648; - } else if (gSaveContext.save.weekEventReg[33] & 8) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { return 0x649; } else { return 0x64A; @@ -229,10 +229,12 @@ u16 EnSob1_GetWelcome(EnSob1* this, PlayState* play) { case PLAYER_MASK_BUNNY: case PLAYER_MASK_POSTMAN: return 0x644; + case PLAYER_MASK_GORON: case PLAYER_MASK_ZORA: case PLAYER_MASK_DEKU: return 0x64B; + case PLAYER_MASK_TRUTH: case PLAYER_MASK_ALL_NIGHT: case PLAYER_MASK_KEATON: @@ -243,78 +245,96 @@ u16 EnSob1_GetWelcome(EnSob1* this, PlayState* play) { case PLAYER_MASK_BREMEN: case PLAYER_MASK_SCENTS: return 0x685; + case PLAYER_MASK_GARO: case PLAYER_MASK_CIRCUS_LEADER: case PLAYER_MASK_GIBDO: case PLAYER_MASK_CAPTAIN: return 0x686; + case PLAYER_MASK_COUPLE: return 0x687; + case PLAYER_MASK_STONE: return 0x688; + case PLAYER_MASK_BLAST: return 0x689; + case PLAYER_MASK_KAFEIS_MASK: return 0x68A; } } else if (this->shopType == ZORA_SHOP) { switch (player->transformation) { case PLAYER_FORM_HUMAN: - if (gSaveContext.save.weekEventReg[57] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_57_10)) { return 0x12CF; + } else { + SET_WEEKEVENTREG(WEEKEVENTREG_57_10); + return 0x12CE; } - gSaveContext.save.weekEventReg[57] |= 0x10; - return 0x12CE; + case PLAYER_FORM_DEKU: - if (gSaveContext.save.weekEventReg[57] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_57_20)) { return 0x12D1; + } else { + SET_WEEKEVENTREG(WEEKEVENTREG_57_20); + return 0x12D0; } - gSaveContext.save.weekEventReg[57] |= 0x20; - return 0x12D0; + case PLAYER_FORM_GORON: - if (gSaveContext.save.weekEventReg[57] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_57_40)) { return 0x12D3; + } else { + SET_WEEKEVENTREG(WEEKEVENTREG_57_40); + return 0x12D2; } - gSaveContext.save.weekEventReg[57] |= 0x40; - return 0x12D2; + case PLAYER_FORM_ZORA: - if (gSaveContext.save.weekEventReg[57] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_57_80)) { return 0x12D5; + } else { + SET_WEEKEVENTREG(WEEKEVENTREG_57_80); + return 0x12D4; } - gSaveContext.save.weekEventReg[57] |= 0x80; - return 0x12D4; + default: return 0x12CE; } } else if (this->shopType == GORON_SHOP) { if (player->transformation != PLAYER_FORM_GORON) { - if (gSaveContext.save.weekEventReg[58] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_04)) { return 0xBB9; + } else { + SET_WEEKEVENTREG(WEEKEVENTREG_58_04); + return 0xBB8; } - gSaveContext.save.weekEventReg[58] |= 4; - return 0xBB8; } else { - if (gSaveContext.save.weekEventReg[58] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_08)) { return 0xBBB; + } else { + SET_WEEKEVENTREG(WEEKEVENTREG_58_08); + return 0xBBA; } - gSaveContext.save.weekEventReg[58] |= 8; - return 0xBBA; } } else if (this->shopType == GORON_SHOP_SPRING) { if (player->transformation != PLAYER_FORM_GORON) { - if (gSaveContext.save.weekEventReg[58] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_10)) { return 0xBBD; + } else { + SET_WEEKEVENTREG(WEEKEVENTREG_58_10); + return 0xBBC; } - gSaveContext.save.weekEventReg[58] |= 0x10; - return 0xBBC; } else { - if (gSaveContext.save.weekEventReg[58] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_20)) { return 0xBBF; + } else { + SET_WEEKEVENTREG(WEEKEVENTREG_58_20); + return 0xBBE; } - gSaveContext.save.weekEventReg[58] |= 0x20; - return 0xBBE; } } + return 0; } @@ -386,7 +406,7 @@ void EnSob1_Init(Actor* thisx, PlayState* play) { this->shopType = ZORA_SHOP; break; case GORON_SHOP: - if (gSaveContext.save.weekEventReg[33] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { this->shopType = GORON_SHOP_SPRING; } else { this->shopType = GORON_SHOP; @@ -474,7 +494,7 @@ s32 EnSob1_TestCancelOption(EnSob1* this, PlayState* play, Input* input) { } void EnSob1_SetupStartShopping(PlayState* play, EnSob1* this, u8 skipHello) { - func_8011552C(play, 16); + func_8011552C(play, DO_ACTION_NEXT); if (!skipHello) { EnSob1_SetupAction(this, EnSob1_Hello); } else { @@ -485,7 +505,7 @@ void EnSob1_SetupStartShopping(PlayState* play, EnSob1* this, u8 skipHello) { void EnSob1_StartShopping(PlayState* play, EnSob1* this) { EnSob1_SetupAction(this, EnSob1_FaceShopkeeper); func_80151938(play, sFacingShopkeeperTextIds[this->shopType]); - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = true; } @@ -494,7 +514,7 @@ void EnSob1_TalkToShopkeeper(PlayState* play, EnSob1* this) { EnSob1_SetupAction(this, EnSob1_TalkingToShopkeeper); this->talkOptionTextId = EnSob1_GetTalkOption(this, play); func_80151938(play, this->talkOptionTextId); - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = false; } @@ -660,7 +680,7 @@ void EnSob1_FaceShopkeeper(EnSob1* this, PlayState* play) { this->cutsceneState = ENSOB1_CUTSCENESTATE_WAITING; } else { if (talkState == TEXT_STATE_CHOICE) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); if (!EnSob1_TestEndInteraction(this, play, CONTROLLER1(&play->state))) { if (!Message_ShouldAdvance(play) || !EnSob1_FacingShopkeeperDialogResult(this, play)) { if (this->stickAccumX > 0) { @@ -668,7 +688,7 @@ void EnSob1_FaceShopkeeper(EnSob1* this, PlayState* play) { if (cursorIndex != CURSOR_INVALID) { this->cursorIndex = cursorIndex; EnSob1_SetupAction(this, EnSob1_LookToShelf); - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); this->stickRightPrompt.isEnabled = false; play_sound(NA_SE_SY_CURSOR); } @@ -824,7 +844,7 @@ void EnSob1_ItemPurchased(EnSob1* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { func_80151938(play, 0x647); } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } @@ -913,7 +933,7 @@ void EnSob1_BrowseShelf(EnSob1* this, PlayState* play) { this->stickLeftPrompt.isEnabled = true; EnSob1_UpdateCursorPos(play, this); if (talkState == TEXT_STATE_5) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); if (!EnSob1_HasPlayerSelectedItem(play, this, CONTROLLER1(&play->state))) { EnSob1_CursorLeftRight(play, this); cursorIndex = this->cursorIndex; @@ -1021,7 +1041,7 @@ void EnSob1_SelectItem(EnSob1* this, PlayState* play) { u8 talkState = Message_GetState(&play->msgCtx); if (EnSob1_TakeItemOffShelf(this) && (talkState == TEXT_STATE_CHOICE)) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); if (!EnSob1_TestCancelOption(this, play, CONTROLLER1(&play->state)) && Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: @@ -1080,7 +1100,7 @@ void EnSob1_SetupItemPurchased(EnSob1* this, PlayState* play) { this->cutscene = this->lookToShopkeeperCutscene; ActorCutscene_SetIntentToPlay(this->cutscene); } - func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } @@ -1096,7 +1116,7 @@ void EnSob1_ContinueShopping(EnSob1* this, PlayState* play) { player->stateFlags2 |= PLAYER_STATE2_20000000; Message_StartTextbox(play, this->welcomeTextId, &this->actor); EnSob1_SetupStartShopping(play, this, true); - func_800B85E0(&this->actor, play, 200.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1); } } @@ -1266,7 +1286,7 @@ s16 EnSob1_GetDistSqAndOrient(Path* path, s32 pointIndex, Vec3f* pos, f32* distS diffZ = 0.0f; } *distSq = SQ(diffX) + SQ(diffZ); - return RADF_TO_BINANG(Math_Acot2F(diffZ, diffX)); + return RADF_TO_BINANG(Math_Atan2F_XY(diffZ, diffX)); } void EnSob1_GetCutscenes(EnSob1* this) { @@ -1361,7 +1381,7 @@ void EnSob1_InitShop(EnSob1* this, PlayState* play) { this->actor.world.pos.y += posOffset->y; this->actor.world.pos.z += posOffset->z; shopItems = sShops[this->shopType]; - if ((this->shopType == BOMB_SHOP) && (gSaveContext.save.weekEventReg[33] & 8)) { + if ((this->shopType == BOMB_SHOP) && CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { sShops[this->shopType][0].shopItemId = SI_BOMB_BAG_30_2; } @@ -1611,13 +1631,12 @@ void EnSob1_BombShopkeeper_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dL } Gfx* EnSob1_EndDList(GraphicsContext* gfxCtx) { - Gfx* dList; - Gfx* dListHead; + Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, sizeof(Gfx)); + Gfx* gfx = gfxHead; - dList = dListHead = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2); - gSPEndDisplayList(dListHead++); + gSPEndDisplayList(gfx++); - return dList; + return gfxHead; } void EnSob1_ZoraShopkeeper_Draw(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Ssh/overlay.cfg b/src/overlays/actors/ovl_En_Ssh/overlay.cfg deleted file mode 100644 index f8a88c0be..000000000 --- a/src/overlays/actors/ovl_En_Ssh/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Ssh -z_en_ssh.c diff --git a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c index 023c6ba5d..233c6c811 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c @@ -595,7 +595,7 @@ s32 EnSsh_SetCylinderOC(EnSsh* this, PlayState* play) { Matrix_Push(); Matrix_Translate(colliderPos.x, colliderPos.y, colliderPos.z, MTXMODE_NEW); - Matrix_RotateYF(BINANG_TO_RAD(this->initialYaw), MTXMODE_APPLY); + Matrix_RotateYF(BINANG_TO_RAD_ALT(this->initialYaw), MTXMODE_APPLY); Matrix_MultVec3f(&colliderOffsets[i], &colliderPos); Matrix_Pop(); @@ -708,11 +708,11 @@ void EnSsh_Talk(EnSsh* this, PlayState* play) { void func_809756D0(EnSsh* this, PlayState* play) { u16 phi_a1; - if (gSaveContext.save.weekEventReg[34] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_08)) { phi_a1 = 0x914; } else { phi_a1 = 0x910; - gSaveContext.save.weekEventReg[34] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_34_08); } Message_StartTextbox(play, phi_a1, &this->actor); } diff --git a/src/overlays/actors/ovl_En_St/overlay.cfg b/src/overlays/actors/ovl_En_St/overlay.cfg deleted file mode 100644 index b384f8265..000000000 --- a/src/overlays/actors/ovl_En_St/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_St -z_en_st.c diff --git a/src/overlays/actors/ovl_En_Sth/overlay.cfg b/src/overlays/actors/ovl_En_Sth/overlay.cfg deleted file mode 100644 index 9420fb8f1..000000000 --- a/src/overlays/actors/ovl_En_Sth/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Sth -z_en_sth.c diff --git a/src/overlays/actors/ovl_En_Sth/z_en_sth.c b/src/overlays/actors/ovl_En_Sth/z_en_sth.c index 4ca1caae4..5d1bd1471 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c @@ -119,7 +119,7 @@ void EnSth_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); } this->actor.textId = 0; - if (!(gSaveContext.save.weekEventReg[34] & 0x40) || !(gSaveContext.save.weekEventReg[34] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_34_40) || !CHECK_WEEKEVENTREG(WEEKEVENTREG_34_08)) { this->unk_29C |= 1; } break; @@ -136,19 +136,19 @@ void EnSth_Init(Actor* thisx, PlayState* play) { break; case ENSTH_F_4: - if (gSaveContext.save.weekEventReg[13] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_20)) { Actor_Kill(&this->actor); return; } this->actor.textId = 0; this->actionFunc = func_80B677BC; - if (gSaveContext.save.weekEventReg[13] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_80)) { this->unk_29C |= 2; } break; case ENSTH_F_5: - if (!(gSaveContext.save.weekEventReg[13] & 0x20) || (Inventory_GetSkullTokenCount(play->sceneId) < 30)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_13_20) || (Inventory_GetSkullTokenCount(play->sceneId) < 30)) { Actor_Kill(&this->actor); return; } @@ -258,7 +258,7 @@ void func_80B67348(EnSth* this, PlayState* play) { break; case 5: - if (gSaveContext.save.weekEventReg[13] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_40)) { phi_a1 = 0x113D; } else { phi_a1 = 0x113C; @@ -266,7 +266,7 @@ void func_80B67348(EnSth* this, PlayState* play) { break; default: - if (gSaveContext.save.weekEventReg[13] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_40)) { phi_a1 = 0x1142; } else { phi_a1 = 0x1141; @@ -275,7 +275,7 @@ void func_80B67348(EnSth* this, PlayState* play) { } Message_StartTextbox(play, phi_a1, &this->actor); } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -286,7 +286,7 @@ void func_80B67458(EnSth* this, PlayState* play) { this->actor.parent = NULL; this->actionFunc = func_80B67348; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); if (CURRENT_DAY == 3) { func_80B670A4(this, 6); } else { @@ -331,14 +331,14 @@ void func_80B67540(EnSth* this, PlayState* play) { break; case 0x1136: - gSaveContext.save.weekEventReg[13] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_13_80); switch (sp2C) { case 0: - if (gSaveContext.save.weekEventReg[13] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_40)) { this->actor.home.rot.z = 6; } else { - gSaveContext.save.weekEventReg[13] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_13_40); switch (CUR_UPG_VALUE(UPG_WALLET)) { case 0: this->actor.home.rot.z = 8; @@ -433,14 +433,14 @@ void func_80B67958(EnSth* this, PlayState* play) { void func_80B67984(EnSth* this, PlayState* play) { u16 sp1E; - if (gSaveContext.save.weekEventReg[34] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_10)) { sp1E = 0x903; func_80B670A4(this, 2); - } else if (gSaveContext.save.weekEventReg[34] & 0x20) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_20)) { sp1E = 0x90F; func_80B670A4(this, 2); - } else if (gSaveContext.save.weekEventReg[34] & 0x40) { - if (!(gSaveContext.save.weekEventReg[34] & 8)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_40)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_34_08)) { sp1E = 0x91B; } else { sp1E = 0x918; @@ -453,11 +453,11 @@ void func_80B67984(EnSth* this, PlayState* play) { } else { sp1E = 0x916; } - } else if (gSaveContext.save.weekEventReg[34] & 2) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_02)) { sp1E = 0x8FF; } else { sp1E = 0x8FC; - gSaveContext.save.weekEventReg[34] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_34_02); } Message_StartTextbox(play, sp1E, &this->actor); } @@ -467,10 +467,10 @@ void func_80B67AB4(EnSth* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80B67C1C; - gSaveContext.save.weekEventReg[34] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_34_40); Message_StartTextbox(play, 0x918, &this->actor); } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -481,10 +481,10 @@ void func_80B67B50(EnSth* this, PlayState* play) { this->actor.parent = NULL; this->actionFunc = func_80B67AB4; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { this->unk_29C &= ~1; - gSaveContext.save.weekEventReg[34] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_34_08); Actor_PickUp(&this->actor, play, GI_MASK_TRUTH, 10000.0f, 50.0f); } } @@ -524,8 +524,8 @@ void func_80B67C1C(EnSth* this, PlayState* play) { break; case 0x91A: - gSaveContext.save.weekEventReg[34] |= 0x40; - gSaveContext.save.weekEventReg[34] &= (u8)~8; + SET_WEEKEVENTREG(WEEKEVENTREG_34_40); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_34_08); case 0x902: case 0x903: @@ -579,8 +579,8 @@ void EnSth_Update(Actor* thisx, PlayState* play) { this->jointTable, this->morphTable, 16); Animation_PlayLoop(&this->skelAnime, &ovl_En_Sth_Anim_0045B4); this->unk_29A = 1; - if ((gSaveContext.save.weekEventReg[34] & 0x10) || (gSaveContext.save.weekEventReg[34] & 0x20) || - (gSaveContext.save.weekEventReg[34] & 0x40) || (Inventory_GetSkullTokenCount(play->sceneId) >= 30)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_34_20) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_34_40) || (Inventory_GetSkullTokenCount(play->sceneId) >= 30)) { func_80B670A4(this, 3); } } else { @@ -598,7 +598,7 @@ void EnSth_Update(Actor* thisx, PlayState* play) { break; case ENSTH_F_4: - if (gSaveContext.save.weekEventReg[13] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_80)) { func_80B670A4(this, 5); } else { func_80B670A4(this, 5); diff --git a/src/overlays/actors/ovl_En_Sth2/overlay.cfg b/src/overlays/actors/ovl_En_Sth2/overlay.cfg deleted file mode 100644 index 594b96573..000000000 --- a/src/overlays/actors/ovl_En_Sth2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Sth2 -z_en_sth2.c diff --git a/src/overlays/actors/ovl_En_Stone_heishi/overlay.cfg b/src/overlays/actors/ovl_En_Stone_heishi/overlay.cfg deleted file mode 100644 index 743a4bb0f..000000000 --- a/src/overlays/actors/ovl_En_Stone_heishi/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Stone_heishi -z_en_stone_heishi.c diff --git a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c index 9cc5b5fad..36dd9398e 100644 --- a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c +++ b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c @@ -161,13 +161,13 @@ void EnStoneheishi_TrackPlayer(EnStoneheishi* this) { void func_80BC94B0(EnStoneheishi* this) { this->textIdIndex = 0; - if (gSaveContext.save.weekEventReg[41] & 0x40) { // After drinking bottle + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_41_40)) { // After drinking bottle EnStoneheishi_ChangeAnim(this, EN_STONE_HEISHI_ANIM_CHEER_WITH_SPEAR); this->textIdIndex = 8; this->actor.flags &= ~ACTOR_FLAG_80; } else { // Initial configuration EnStoneheishi_ChangeAnim(this, EN_STONE_HEISHI_ANIM_WAVE); - if (gSaveContext.save.weekEventReg[41] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_41_80)) { this->textIdIndex = 2; } } @@ -185,7 +185,7 @@ void func_80BC9560(EnStoneheishi* this, PlayState* play) { return; } - if (!(gSaveContext.save.weekEventReg[41] & 0x40) && (play->actorCtx.lensMaskSize != 100)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_40) && (play->actorCtx.lensMaskSize != 100)) { this->actor.flags |= ACTOR_FLAG_8000000; return; } @@ -265,19 +265,20 @@ void EnStoneheishi_SetupCheckGivenItem(EnStoneheishi* this) { } void EnStoneheishi_CheckGivenItem(EnStoneheishi* this, PlayState* play) { - s32 itemActionParam; + PlayerItemAction itemAction; SkelAnime_Update(&this->skelAnime); if (Message_GetState(&play->msgCtx) == TEXT_STATE_16) { - itemActionParam = func_80123810(play); - if (itemActionParam > PLAYER_AP_NONE) { + itemAction = func_80123810(play); + + if (itemAction > PLAYER_IA_NONE) { this->timer = 40; func_801477B4(play); - if ((itemActionParam == PLAYER_AP_BOTTLE_POTION_RED) || (itemActionParam == PLAYER_AP_BOTTLE_POTION_BLUE)) { + if ((itemAction == PLAYER_IA_BOTTLE_POTION_RED) || (itemAction == PLAYER_IA_BOTTLE_POTION_BLUE)) { this->playerGivesBluePotion = false; - if (itemActionParam == PLAYER_AP_BOTTLE_POTION_BLUE) { + if (itemAction == PLAYER_IA_BOTTLE_POTION_BLUE) { this->playerGivesBluePotion = true; } EnStoneheishi_SetupDrinkBottleProcess(this); @@ -286,11 +287,11 @@ void EnStoneheishi_CheckGivenItem(EnStoneheishi* this, PlayState* play) { this->textIdIndex = 3; player->actor.textId = 0; - gSaveContext.save.weekEventReg[41] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_41_80); this->action = EN_STONE_ACTION_1; this->actionFunc = func_80BC9680; } - } else if (itemActionParam < PLAYER_AP_NONE) { + } else if (itemAction <= PLAYER_IA_MINUS1) { func_801477B4(play); func_80151BB4(play, 0x12); func_80BC94B0(this); @@ -327,7 +328,7 @@ void EnStoneheishi_DrinkBottleProcess(EnStoneheishi* this, PlayState* play) { play->msgCtx.msgLength = 0; player->actor.textId = 0; - player->exchangeItemId = PLAYER_AP_NONE; + player->exchangeItemId = PLAYER_IA_NONE; this->bottleDisplay = EN_STONE_BOTTLE_RED_POTION; if (this->playerGivesBluePotion) { @@ -346,7 +347,7 @@ void EnStoneheishi_DrinkBottleProcess(EnStoneheishi* this, PlayState* play) { if ((this->timer < 10) && (this->bottleDisplay != EN_STONE_BOTTLE_EMPTY)) { this->bottleDisplay = EN_STONE_BOTTLE_EMPTY; Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_NP_DRINK); - func_80123D50(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_AP_BOTTLE); + Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE); } } else { this->drinkBottleState++; @@ -395,9 +396,9 @@ void func_80BC9D28(EnStoneheishi* this, PlayState* play) { this->actor.parent = NULL; this->textIdIndex++; this->actor.textId = sEnStoneHeishiTextIds[this->textIdIndex]; - gSaveContext.save.weekEventReg[41] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_41_40); Actor_ProcessTalkRequest(&this->actor, &play->state); - func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); this->actionFunc = func_80BC9E50; } else if (INV_CONTENT(ITEM_MASK_STONE) == ITEM_MASK_STONE) { Actor_PickUp(&this->actor, play, GI_RUPEE_BLUE, 300.0f, 300.0f); @@ -415,7 +416,7 @@ void func_80BC9E50(EnStoneheishi* this, PlayState* play) { this->action = EN_STONE_ACTION_1; this->actionFunc = func_80BC9680; } else { - func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1); } } @@ -435,7 +436,7 @@ void EnStoneheishi_Update(Actor* thisx, PlayState* play) { Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); Actor_SetScale(&this->actor, 0.01f); - if (((gSaveContext.save.weekEventReg[41] & 0x40) || (play->actorCtx.lensMaskSize == 100)) && + if ((CHECK_WEEKEVENTREG(WEEKEVENTREG_41_40) || (play->actorCtx.lensMaskSize == 100)) && !(player->stateFlags1 & PLAYER_STATE1_800000)) { if ((this->animIndex != EN_STONE_HEISHI_ANIM_WAVE) && ((((this->action == EN_STONE_ACTION_0) || (this->action == EN_STONE_ACTION_1)) || @@ -447,7 +448,7 @@ void EnStoneheishi_Update(Actor* thisx, PlayState* play) { this->targetHeadRot.y = 0; } - if (!(gSaveContext.save.weekEventReg[41] & 0x40)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_40)) { Actor_SetFocus(&this->actor, 30.0f); } else { Actor_SetFocus(&this->actor, 60.0f); @@ -516,7 +517,7 @@ void EnStoneheishi_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - if (!(gSaveContext.save.weekEventReg[41] & 0x40)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_40)) { func_8012C2DC(play->state.gfxCtx); POLY_XLU_DISP = diff --git a/src/overlays/actors/ovl_En_Stop_heishi/overlay.cfg b/src/overlays/actors/ovl_En_Stop_heishi/overlay.cfg deleted file mode 100644 index cf5960b30..000000000 --- a/src/overlays/actors/ovl_En_Stop_heishi/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Stop_heishi -z_en_stop_heishi.c diff --git a/src/overlays/actors/ovl_En_Stream/overlay.cfg b/src/overlays/actors/ovl_En_Stream/overlay.cfg deleted file mode 100644 index 3789ae1fe..000000000 --- a/src/overlays/actors/ovl_En_Stream/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Stream -z_en_stream.c diff --git a/src/overlays/actors/ovl_En_Suttari/overlay.cfg b/src/overlays/actors/ovl_En_Suttari/overlay.cfg deleted file mode 100644 index 9eea97af5..000000000 --- a/src/overlays/actors/ovl_En_Suttari/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Suttari -z_en_suttari.c diff --git a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c index e8d56b602..93c93eef9 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -130,7 +130,7 @@ static TrackOptionsSet sTrackOptions = { static u8 D_80BAE820[] = { /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x80 - 0x04), - /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(0x21, 0x08, 0x7F - 0x08), + /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_33_08, 0x7F - 0x08), /* 0x08 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ICHIBA, 0x3D - 0x0C), /* 0x0C */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 0, 0, 25, 0x37 - 0x12), /* 0x12 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 25, 0, 30, 0x31 - 0x18), @@ -231,8 +231,8 @@ void EnSuttari_TriggerTransition(PlayState* play, u16 entrance) { } void EnSuttari_UpdateTime(void) { - gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)REG(15); - gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.daySpeed); + gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED; + gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.timeSpeedOffset); } s32 func_80BAA904(EnSuttari* this, PlayState* play) { @@ -364,7 +364,7 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) { } else if (this->flags1 & 1) { switch (this->textId) { case 0: - if (gSaveContext.save.weekEventReg[81] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_81_01)) { this->textId = 0x1455; ((EnElf*)GET_PLAYER(play)->tatlActor)->unk_264 |= 8; this->flags2 |= 1; @@ -382,12 +382,12 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) { } else { this->flags1 |= 0x400; this->textId = 0x1452; - gSaveContext.save.weekEventReg[81] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_81_01); } break; case 0x1453: this->flags1 |= 0x400; - gSaveContext.save.weekEventReg[81] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_81_01); ((EnElf*)GET_PLAYER(play)->tatlActor)->unk_264 |= 8; this->flags2 |= 1; this->textId = 0x1454; @@ -456,7 +456,7 @@ void func_80BAAFDC(EnSuttari* this, PlayState* play) { if (this->unk1F4[0] != 0) { this->unk1F4[0]--; } - gSaveContext.save.weekEventReg[61] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_61_08); this->unk3F6 = 20; this->actionFunc = func_80BADE8C; } @@ -489,7 +489,7 @@ void func_80BAB1A0(EnSuttari* this, PlayState* play) { if (this->unk1F4[0] != 0) { this->unk1F4[0]--; } - gSaveContext.save.weekEventReg[61] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_61_08); this->unk3F6 = 20; this->actionFunc = func_80BADE8C; } else { @@ -531,7 +531,7 @@ void func_80BAB4F0(EnSuttari* this, PlayState* play) { if (!(this->flags1 & 4) && (Player_GetMask(play) != PLAYER_MASK_STONE)) { if (SubS_AngleDiffLessEqual(this->actor.shape.rot.y, 0x36B0, this->actor.yawTowardsPlayer)) { point.x = player->actor.world.pos.x; - point.y = player->bodyPartsPos[7].y + 3.0f; + point.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; point.z = player->actor.world.pos.z; SubS_TrackPoint(&point, &this->actor.focus.pos, &this->actor.shape.rot, &this->trackTarget, &this->headRot, &this->torsoRot, &sTrackOptions); @@ -563,7 +563,7 @@ s16 EnSuttari_GetDistSqAndOrient(Path* path, s32 index, Vec3f* pos, f32* distSq) } *distSq = SQ(diffX) + SQ(diffZ); - return RADF_TO_BINANG(Math_Acot2F(diffZ, diffX)); + return RADF_TO_BINANG(Math_Atan2F_XY(diffZ, diffX)); } s32 func_80BAB758(EnSuttari* this, Path* path, s32 arg2) { @@ -858,7 +858,7 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) { this->animIndex = 2; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } - if (!(gSaveContext.save.weekEventReg[83] & 4) && !(this->flags1 & 0x1000)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_83_04) && !(this->flags1 & 0x1000)) { if (ActorCutscene_GetCanPlayNext(this->cutscenes[0])) { ActorCutscene_Start(this->cutscenes[0], &this->actor); if (!(player->stateFlags1 & PLAYER_STATE1_10000000)) { @@ -907,7 +907,7 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) { Actor_Kill(&this->actor); break; case 2: - if (!(gSaveContext.save.weekEventReg[81] & 4)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_81_04)) { this->flags1 |= 0x80; this->actor.world.pos.x = -16.0f; this->actor.world.pos.z = -16.0f; @@ -917,7 +917,7 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) { } break; case 4: - if (!(gSaveContext.save.weekEventReg[33] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { if (this->animIndex == 2 || this->animIndex == 1) { this->animIndex = 5; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); @@ -954,8 +954,8 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) { this->actionFunc = func_80BACA14; return; } else if ((gSaveContext.save.day == 3) && (gSaveContext.save.time <= CLOCK_TIME(19, 0)) && - !(gSaveContext.save.weekEventReg[61] & 8) && !(gSaveContext.save.weekEventReg[33] & 8) && - (gSaveContext.save.weekEventReg[51] & 8)) { + !CHECK_WEEKEVENTREG(WEEKEVENTREG_61_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) && + CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) { this->animIndex = 2; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); this->actionFunc = func_80BACEE0; @@ -965,8 +965,8 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) { if (gSaveContext.save.time >= CLOCK_TIME(0, 20) && gSaveContext.save.time < CLOCK_TIME(6, 00)) { Actor_Kill(&this->actor); } - if ((gSaveContext.save.entrance == ENTRANCE(NORTH_CLOCK_TOWN, 7)) || - (gSaveContext.save.weekEventReg[58] & 0x40)) { + + if ((gSaveContext.save.entrance == ENTRANCE(NORTH_CLOCK_TOWN, 7)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_58_40)) { Actor_Kill(&this->actor); } this->cutscenes[0] = this->actor.cutscene; @@ -978,7 +978,7 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) { this->actionFunc = func_80BAD004; return; } else if (play->sceneId == SCENE_ICHIBA) { - if (gSaveContext.save.weekEventReg[33] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { Actor_Kill(&this->actor); return; } @@ -988,7 +988,7 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) { this->actionFunc = func_80BAD5F8; return; } else if (play->sceneId == SCENE_AYASHIISHOP) { - if (gSaveContext.save.weekEventReg[33] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { Actor_Kill(&this->actor); return; } @@ -1104,7 +1104,7 @@ void func_80BACE4C(EnSuttari* this, PlayState* play) { void func_80BACEE0(EnSuttari* this, PlayState* play) { ScheduleOutput scheduleOutput; - this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed); + this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) || ((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) { this->actor.flags &= ~ACTOR_FLAG_1; @@ -1116,7 +1116,7 @@ void func_80BACEE0(EnSuttari* this, PlayState* play) { func_80BAC2FC(this, play); func_80BAB434(this); if (this->unk428 == 5) { - gSaveContext.save.weekEventReg[58] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_58_80); this->actionFunc = func_80BADDB4; this->actor.speedXZ = 0.0f; } else if (Player_GetMask(play) != PLAYER_MASK_STONE) { @@ -1128,7 +1128,7 @@ void func_80BACEE0(EnSuttari* this, PlayState* play) { void func_80BAD004(EnSuttari* this, PlayState* play) { ScheduleOutput scheduleOutput; - this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed); + this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) || ((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) { this->actor.flags &= ~ACTOR_FLAG_1; @@ -1220,7 +1220,7 @@ void func_80BAD380(EnSuttari* this, PlayState* play) { this->flags2 |= 8; func_80BAAF1C(this); } else if (this->flags1 & 0x200) { - gSaveContext.save.weekEventReg[79] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_79_40); this->flags2 |= 4; this->actor.speedXZ = 0.0f; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y, @@ -1231,7 +1231,7 @@ void func_80BAD380(EnSuttari* this, PlayState* play) { } if (this->unk1F4[1] == -0x63) { if (this->flags2 & 8) { - gSaveContext.save.weekEventReg[33] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_33_08); } this->actor.speedXZ = 0.0f; Audio_QueueSeqCmd(0x101400FF); @@ -1255,7 +1255,7 @@ void func_80BAD5F8(EnSuttari* this, PlayState* play) { this->animIndex = 2; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } - this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed); + this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) || ((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) { this->actor.flags &= ~ACTOR_FLAG_1; @@ -1293,7 +1293,7 @@ void func_80BAD7F8(EnSuttari* this, PlayState* play) { this->animIndex = 2; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } - this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed); + this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) || ((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) { this->actor.flags &= ~ACTOR_FLAG_1; @@ -1323,7 +1323,7 @@ void func_80BADA08(EnSuttari* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actor.flags &= ~ACTOR_FLAG_10000; func_80BAAB78(this, play); - gSaveContext.save.weekEventReg[81] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_81_04); } else if (this->actor.xzDistToPlayer < 500.0f) { this->actor.flags |= ACTOR_FLAG_10000; func_800B8614(&this->actor, play, 500.0f); @@ -1401,7 +1401,7 @@ void func_80BADD0C(EnSuttari* this, PlayState* play) { void func_80BADDB4(EnSuttari* this, PlayState* play) { func_80BABA90(this, 1, 1); func_80BAB434(this); - if (gSaveContext.save.weekEventReg[51] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_51_10)) { this->actionFunc = func_80BADE14; } Actor_MoveWithGravity(&this->actor); @@ -1447,7 +1447,7 @@ void EnSuttari_Init(Actor* thisx, PlayState* play) { EnSuttari* this = THIS; s32 pad; - if (gSaveContext.save.weekEventReg[79] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Sw/overlay.cfg b/src/overlays/actors/ovl_En_Sw/overlay.cfg deleted file mode 100644 index af7fca6ea..000000000 --- a/src/overlays/actors/ovl_En_Sw/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Sw -z_en_sw.c diff --git a/src/overlays/actors/ovl_En_Sw/z_en_sw.c b/src/overlays/actors/ovl_En_Sw/z_en_sw.c index da5ba5b8d..bbc010a2a 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -277,7 +277,7 @@ void func_808D90F0(EnSw* this, s32 arg1, s16 arg2) { temp = arg2; } - Matrix_RotateAxisF(BINANG_TO_RAD(temp), &this->unk_368, MTXMODE_NEW); + Matrix_RotateAxisF(BINANG_TO_RAD_ALT(temp), &this->unk_368, MTXMODE_NEW); Matrix_MultVec3f(&this->unk_350, &sp2C); Math_Vec3f_Copy(&this->unk_350, &sp2C); Math3D_CrossProduct(&this->unk_368, &this->unk_350, &this->unk_35C); @@ -761,7 +761,7 @@ void func_808DA3F4(EnSw* this, PlayState* play) { Math_Vec3f_Copy(&sp38, &this->unk_374); func_808D9894(this, &sp38); - temp_v0 = Math_FAtan2F(sp38.z, sp38.x); + temp_v0 = Math_Atan2S_XY(sp38.z, sp38.x); if (ABS_ALT(temp_v0) < temp_s1) { this->skelAnime.curFrame = 0.0f; Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALWALL_DASH); @@ -794,7 +794,7 @@ void func_808DA578(EnSw* this, PlayState* play) { if ((this->actor.speedXZ == 0.0f) && (this->unk_44C != 0.0f)) { Math_Vec3f_Copy(&sp30, &this->unk_374); func_808D9894(this, &sp30); - temp2 = Math_FAtan2F(sp30.z, sp30.x); + temp2 = Math_Atan2S_XY(sp30.z, sp30.x); func_808D94D0(this, play, 0, 0, temp2); } } else if (this->unk_410 & 0x20) { @@ -825,7 +825,7 @@ void func_808DA6FC(EnSw* this, PlayState* play) { if ((this->actor.speedXZ == 0.0f) && (this->unk_44C != 0.0f)) { Math_Vec3f_Copy(&sp38, &this->unk_374); func_808D9894(this, &sp38); - temp2 = Math_FAtan2F(sp38.z, sp38.x); + temp2 = Math_Atan2S_XY(sp38.z, sp38.x); func_808D94D0(this, play, 0, 0, temp2); } } else { @@ -916,7 +916,7 @@ void func_808DAA60(EnSw* this, PlayState* play) { if (this->unk_45E == 0) { Math_Vec3s_ToVec3f(&sp34, &sp44[this->unk_4A0]); func_808D9894(this, &sp34); - temp_v0 = Math_FAtan2F(sp34.z, sp34.x); + temp_v0 = Math_Atan2S_XY(sp34.z, sp34.x); if (ABS_ALT(temp_v0) < sp40) { this->skelAnime.curFrame = 0.0f; Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALWALL_DASH); @@ -967,7 +967,7 @@ void func_808DACF4(EnSw* this, PlayState* play) { Math_Vec3f_Copy(&sp38, &this->unk_374); func_808D9894(this, &sp38); - temp_f6 = Math_FAtan2F(sp38.z, sp38.x); + temp_f6 = Math_Atan2S_XY(sp38.z, sp38.x); func_808D94D0(this, play, 0, 0, temp_f6); } } else { diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/overlay.cfg b/src/overlays/actors/ovl_En_Syateki_Crow/overlay.cfg deleted file mode 100644 index 5a90d72e0..000000000 --- a/src/overlays/actors/ovl_En_Syateki_Crow/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Syateki_Crow -z_en_syateki_crow.c diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/overlay.cfg b/src/overlays/actors/ovl_En_Syateki_Dekunuts/overlay.cfg deleted file mode 100644 index 1165e9df0..000000000 --- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Syateki_Dekunuts -z_en_syateki_dekunuts.c diff --git a/src/overlays/actors/ovl_En_Syateki_Man/overlay.cfg b/src/overlays/actors/ovl_En_Syateki_Man/overlay.cfg deleted file mode 100644 index 492b143b5..000000000 --- a/src/overlays/actors/ovl_En_Syateki_Man/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Syateki_Man -z_en_syateki_man.c diff --git a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c index c6d04def5..759e97206 100644 --- a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c +++ b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c @@ -222,7 +222,7 @@ void EnSyatekiMan_Init(Actor* thisx, PlayState* play) { } void EnSyatekiMan_Destroy(Actor* thisx, PlayState* play) { - gSaveContext.save.weekEventReg[63] &= (u8)~1; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01); } /** @@ -334,15 +334,15 @@ void EnSyatekiMan_Swamp_HandleChoice(EnSyatekiMan* this, PlayState* play) { Message_StartTextbox(play, 0xA31, &this->actor); this->prevTextId = 0xA31; if (this->shootingGameState == SG_GAME_STATE_ONE_MORE_GAME) { - gSaveContext.minigameState = 3; + gSaveContext.minigameStatus = MINIGAME_STATUS_END; } this->shootingGameState = SG_GAME_STATE_NOT_PLAYING; } else { func_8019F208(); Rupees_ChangeBy(-20); - gSaveContext.save.weekEventReg[63] |= 1; - gSaveContext.save.weekEventReg[63] &= (u8)~2; + SET_WEEKEVENTREG(WEEKEVENTREG_63_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02); play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; this->shootingGameState = SG_GAME_STATE_MOVING_PLAYER; @@ -373,7 +373,7 @@ void EnSyatekiMan_Swamp_HandleChoice(EnSyatekiMan* this, PlayState* play) { } if (this->shootingGameState == SG_GAME_STATE_ONE_MORE_GAME) { - gSaveContext.minigameState = 3; + gSaveContext.minigameStatus = MINIGAME_STATUS_END; } this->shootingGameState = SG_GAME_STATE_NOT_PLAYING; @@ -399,8 +399,8 @@ void EnSyatekiMan_Swamp_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; player->actor.freezeTimer = 0; - func_80112AFC(play); - play->interfaceCtx.hbaAmmo = 80; + Interface_InitMinigame(play); + play->interfaceCtx.minigameAmmo = 80; func_80123F2C(play, 80); this->shootingGameState = SG_GAME_STATE_RUNNING; this->actionFunc = EnSyatekiMan_Swamp_StartGame; @@ -408,13 +408,13 @@ void EnSyatekiMan_Swamp_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) break; case 0xA32: // You have to try harder! - if (gSaveContext.save.weekEventReg[63] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_02)) { func_801477B4(play); player->stateFlags1 &= ~PLAYER_STATE1_20; - gSaveContext.save.weekEventReg[63] &= (u8)~1; - gSaveContext.save.weekEventReg[63] &= (u8)~2; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02); this->actionFunc = EnSyatekiMan_Swamp_Idle; - gSaveContext.minigameState = 3; + gSaveContext.minigameStatus = MINIGAME_STATUS_END; this->shootingGameState = SG_GAME_STATE_NONE; } else { // Wanna play again? @@ -434,7 +434,7 @@ void EnSyatekiMan_Swamp_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; player->actor.freezeTimer = 0; - gSaveContext.minigameState = 3; + gSaveContext.minigameStatus = MINIGAME_STATUS_END; player->stateFlags1 |= PLAYER_STATE1_20; this->actionFunc = EnSyatekiMan_Swamp_SetupGiveReward; EnSyatekiMan_Swamp_SetupGiveReward(this, play); @@ -469,8 +469,8 @@ void EnSyatekiMan_Swamp_Talk(EnSyatekiMan* this, PlayState* play) { play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; player->stateFlags1 &= ~PLAYER_STATE1_20; - gSaveContext.save.weekEventReg[63] &= (u8)~1; - gSaveContext.save.weekEventReg[63] &= (u8)~2; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02); this->actionFunc = EnSyatekiMan_Swamp_Idle; this->shootingGameState = SG_GAME_STATE_NONE; } @@ -641,7 +641,7 @@ void EnSyatekiMan_Town_HandleChoice(EnSyatekiMan* this, PlayState* play) { if (this->shootingGameState == SG_GAME_STATE_ONE_MORE_GAME) { player->stateFlags3 &= ~PLAYER_STATE3_400; - gSaveContext.minigameState = 3; + gSaveContext.minigameStatus = MINIGAME_STATUS_END; } this->shootingGameState = SG_GAME_STATE_NOT_PLAYING; @@ -660,8 +660,8 @@ void EnSyatekiMan_Town_HandleChoice(EnSyatekiMan* this, PlayState* play) { this->prevTextId = 0x3FF; } - gSaveContext.save.weekEventReg[63] |= 1; - gSaveContext.save.weekEventReg[63] &= (u8)~2; + SET_WEEKEVENTREG(WEEKEVENTREG_63_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02); } } else { func_8019F230(); @@ -677,7 +677,7 @@ void EnSyatekiMan_Town_HandleChoice(EnSyatekiMan* this, PlayState* play) { if (this->shootingGameState == SG_GAME_STATE_ONE_MORE_GAME) { player->stateFlags3 &= ~PLAYER_STATE3_400; - gSaveContext.minigameState = 3; + gSaveContext.minigameStatus = MINIGAME_STATUS_END; } this->shootingGameState = SG_GAME_STATE_NOT_PLAYING; @@ -747,8 +747,8 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) player->actor.freezeTimer = 0; this->shootingGameState = SG_GAME_STATE_MOVING_PLAYER; player->stateFlags1 |= PLAYER_STATE1_20; - gSaveContext.save.weekEventReg[63] |= 1; - gSaveContext.save.weekEventReg[63] &= (u8)~2; + SET_WEEKEVENTREG(WEEKEVENTREG_63_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02); this->actionFunc = EnSyatekiMan_Town_MovePlayerAndSayHighScore; } break; @@ -759,7 +759,7 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) play->msgCtx.stateTimer = 4; player->actor.freezeTimer = 0; this->flagsIndex = 0; - func_80112AFC(play); + Interface_InitMinigame(play); func_80123F2C(play, 0x63); this->shootingGameState = SG_GAME_STATE_RUNNING; func_801A2BB8(NA_BGM_TIMED_MINI_GAME); @@ -767,10 +767,10 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) break; case 0x401: // You got [score]? Oh, that's too bad... - if (gSaveContext.save.weekEventReg[63] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_02)) { func_801477B4(play); - gSaveContext.save.weekEventReg[63] &= (u8)~1; - gSaveContext.save.weekEventReg[63] &= (u8)~2; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02); this->shootingGameState = SG_GAME_STATE_NONE; this->actionFunc = EnSyatekiMan_Town_Idle; } else { @@ -781,10 +781,10 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) break; case 0x403: // You got [score]? Too bad... - if (gSaveContext.save.weekEventReg[63] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_02)) { func_801477B4(play); - gSaveContext.save.weekEventReg[63] &= (u8)~1; - gSaveContext.save.weekEventReg[63] &= (u8)~2; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02); this->shootingGameState = SG_GAME_STATE_NONE; this->actionFunc = EnSyatekiMan_Town_Idle; } else { @@ -808,7 +808,7 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) play->msgCtx.msgMode = 0x43; play->msgCtx.stateTimer = 4; player->actor.freezeTimer = 0; - gSaveContext.minigameState = 3; + gSaveContext.minigameStatus = MINIGAME_STATUS_END; this->actionFunc = EnSyatekiMan_Town_SetupGiveReward; EnSyatekiMan_Town_SetupGiveReward(this, play); break; @@ -839,8 +839,8 @@ void EnSyatekiMan_Town_Talk(EnSyatekiMan* this, PlayState* play) { case TEXT_STATE_DONE: if (Message_ShouldAdvance(play)) { - gSaveContext.save.weekEventReg[63] &= (u8)~1; - gSaveContext.save.weekEventReg[63] &= (u8)~2; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02); player->stateFlags1 &= ~PLAYER_STATE1_20; this->actionFunc = EnSyatekiMan_Town_Idle; this->shootingGameState = SG_GAME_STATE_NONE; @@ -862,20 +862,20 @@ void EnSyatekiMan_Swamp_SetupGiveReward(EnSyatekiMan* this, PlayState* play) { Player* player = GET_PLAYER(play); if (Actor_HasParent(&this->actor, play)) { - if (!(gSaveContext.save.weekEventReg[59] & 0x10)) { - gSaveContext.save.weekEventReg[59] |= 0x10; - } else if (!(gSaveContext.save.weekEventReg[32] & 2) && (this->score >= 2180)) { - gSaveContext.save.weekEventReg[32] |= 2; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_10)) { + SET_WEEKEVENTREG(WEEKEVENTREG_59_10); + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_02) && (this->score >= 2180)) { + SET_WEEKEVENTREG(WEEKEVENTREG_32_02); } this->actor.parent = NULL; this->actionFunc = EnSyatekiMan_Swamp_GiveReward; } else { - if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) && !(gSaveContext.save.weekEventReg[59] & 0x10)) { + if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_10)) { Actor_PickUp(&this->actor, play, GI_QUIVER_30 + CUR_UPG_VALUE(UPG_QUIVER), 500.0f, 100.0f); } else if (this->score < 2180) { Actor_PickUp(&this->actor, play, GI_RUPEE_RED, 500.0f, 100.0f); - } else if (!(gSaveContext.save.weekEventReg[32] & 2)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_02)) { Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f); } else { Actor_PickUp(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f); @@ -908,7 +908,7 @@ void EnSyatekiMan_Swamp_GiveReward(EnSyatekiMan* this, PlayState* play) { this->shootingGameState = SG_GAME_STATE_NONE; this->actionFunc = EnSyatekiMan_Swamp_Talk; } else { - func_800B85E0(&this->actor, play, 500.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 500.0f, PLAYER_IA_MINUS1); } } @@ -917,14 +917,14 @@ void EnSyatekiMan_Town_SetupGiveReward(EnSyatekiMan* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { if (this->prevTextId == 0x407) { - if (!(gSaveContext.save.weekEventReg[59] & 0x20)) { - gSaveContext.save.weekEventReg[59] |= 0x20; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_20)) { + SET_WEEKEVENTREG(WEEKEVENTREG_59_20); } } if ((this->prevTextId == 0x405) || (this->prevTextId == 0x406)) { - if (!(gSaveContext.save.weekEventReg[32] & 4)) { - gSaveContext.save.weekEventReg[32] |= 4; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_04)) { + SET_WEEKEVENTREG(WEEKEVENTREG_32_04); } } @@ -932,12 +932,12 @@ void EnSyatekiMan_Town_SetupGiveReward(EnSyatekiMan* this, PlayState* play) { this->actionFunc = EnSyatekiMan_Town_GiveReward; } else { if (this->prevTextId == 0x407) { - if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) && !(gSaveContext.save.weekEventReg[59] & 0x20)) { + if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_20)) { Actor_PickUp(&this->actor, play, GI_QUIVER_30 + CUR_UPG_VALUE(UPG_QUIVER), 500.0f, 100.0f); } else { Actor_PickUp(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f); } - } else if (!(gSaveContext.save.weekEventReg[32] & 4)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_04)) { Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f); } else { Actor_PickUp(&this->actor, play, GI_RUPEE_HUGE, 500.0f, 100.0f); @@ -958,8 +958,8 @@ void EnSyatekiMan_Town_GiveReward(EnSyatekiMan* this, PlayState* play) { player->stateFlags1 &= ~PLAYER_STATE1_20; this->score = 0; this->shootingGameState = SG_GAME_STATE_NONE; - gSaveContext.save.weekEventReg[63] &= (u8)~1; - gSaveContext.save.weekEventReg[63] &= (u8)~2; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02); this->actionFunc = EnSyatekiMan_SetupIdle; } } else if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { @@ -972,7 +972,7 @@ void EnSyatekiMan_Town_GiveReward(EnSyatekiMan* this, PlayState* play) { this->shootingGameState = SG_GAME_STATE_NONE; this->actionFunc = EnSyatekiMan_Town_Talk; } else { - func_800B85E0(&this->actor, play, 500.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 500.0f, PLAYER_IA_MINUS1); } } @@ -1005,7 +1005,7 @@ void EnSyatekiMan_Swamp_StartGame(EnSyatekiMan* this, PlayState* play) { player->actor.world.pos = sSwampPlayerPos; player->actor.shape.rot.y = -0x8000; player->actor.world.rot.y = player->actor.shape.rot.y; - play->unk_18790(play, -0x8000, &this->actor); + play->unk_18790(play, -0x8000); sGameStartTimer--; } else { sGameStartTimer = 30; @@ -1090,7 +1090,7 @@ void EnSyatekiMan_Swamp_RunGame(EnSyatekiMan* this, PlayState* play) { func_801A2C20(); this->shootingGameState = SG_GAME_STATE_GIVING_BONUS; if (this->score == 2120) { - func_8011B4E0(play, 2); + Interface_SetPerfectLetters(play, PERFECT_LETTERS_TYPE_2); gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_6; this->actionFunc = EnSyatekiMan_Swamp_AddBonusPoints; } else { @@ -1118,11 +1118,11 @@ void EnSyatekiMan_Swamp_EndGame(EnSyatekiMan* this, PlayState* play) { this->prevTextId = 0xA34; this->shootingGameState = SG_GAME_STATE_ENDED; } else if (this->score >= 2000) { - if (gSaveContext.save.weekEventReg[63] & 2) { - gSaveContext.save.weekEventReg[63] &= (u8)~1; - gSaveContext.save.weekEventReg[63] &= (u8)~2; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_02)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02); this->shootingGameState = SG_GAME_STATE_NONE; - gSaveContext.minigameState = 3; + gSaveContext.minigameStatus = MINIGAME_STATUS_END; this->actionFunc = EnSyatekiMan_Swamp_Idle; return; } @@ -1156,7 +1156,7 @@ void EnSyatekiMan_Swamp_AddBonusPoints(EnSyatekiMan* this, PlayState* play) { Player* player = GET_PLAYER(play); player->stateFlags1 |= PLAYER_STATE1_20; - if (play->interfaceCtx.unk_286 == 0) { + if (!play->interfaceCtx.perfectLettersOn) { if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_1] == SECONDS_TO_TIMER(0)) { gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_1] = SECONDS_TO_TIMER(0); gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP; @@ -1166,7 +1166,7 @@ void EnSyatekiMan_Swamp_AddBonusPoints(EnSyatekiMan* this, PlayState* play) { sBonusTimer = 0; } else if (sBonusTimer > 10) { gSaveContext.timerStopTimes[TIMER_ID_MINIGAME_1] += SECONDS_TO_TIMER(1); - play->interfaceCtx.unk_25C += 10; + play->interfaceCtx.minigamePoints += 10; this->score += 10; Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR); sBonusTimer = 0; @@ -1215,7 +1215,7 @@ void EnSyatekiMan_Town_StartGame(EnSyatekiMan* this, PlayState* play) { player->actor.prevPos = player->actor.world.pos; player->actor.shape.rot.y = -0x8000; player->actor.world.rot.y = player->actor.shape.rot.y; - play->unk_18790(play, -0x8000, &this->actor); + play->unk_18790(play, -0x8000); player->stateFlags1 |= PLAYER_STATE1_20; sGameStartTimer--; } else if (sGameStartTimer > 0) { @@ -1359,7 +1359,7 @@ void EnSyatekiMan_Town_RunGame(EnSyatekiMan* this, PlayState* play) { this->actionFunc = EnSyatekiMan_Town_EndGame; if (this->score == 50) { Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900); - func_8011B4E0(play, 1); + Interface_SetPerfectLetters(play, PERFECT_LETTERS_TYPE_1); } } } @@ -1368,12 +1368,12 @@ void EnSyatekiMan_Town_RunGame(EnSyatekiMan* this, PlayState* play) { void EnSyatekiMan_Town_EndGame(EnSyatekiMan* this, PlayState* play) { if (this->shootingGameState == SG_GAME_STATE_RUNNING) { this->octorokFlags = 0; - if ((this->talkWaitTimer <= 0) && (play->interfaceCtx.unk_286 == 0)) { + if ((this->talkWaitTimer <= 0) && !play->interfaceCtx.perfectLettersOn) { Flags_SetAllTreasure(play, this->score); this->talkWaitTimer = 15; if ((GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) || (this->score == 50)) { if (GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) { - if (!(gSaveContext.save.weekEventReg[59] & 0x20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_20)) { // You got a new record! Message_StartTextbox(play, 0x407, &this->actor); this->prevTextId = 0x407; diff --git a/src/overlays/actors/ovl_En_Syateki_Okuta/overlay.cfg b/src/overlays/actors/ovl_En_Syateki_Okuta/overlay.cfg deleted file mode 100644 index 5c4c2e7c5..000000000 --- a/src/overlays/actors/ovl_En_Syateki_Okuta/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Syateki_Okuta -z_en_syateki_okuta.c diff --git a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c index 5358d44cf..162a6d718 100644 --- a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c +++ b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c @@ -370,7 +370,7 @@ void EnSyatekiOkuta_Update(Actor* thisx, PlayState* play) { syatekiMan = (EnSyatekiMan*)this->actor.parent; if (this->unk_2A6 == 1) { Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR); - play->interfaceCtx.unk_25C++; + play->interfaceCtx.minigamePoints++; syatekiMan->score++; syatekiMan->perGameVar2.octorokHitType = SG_OCTO_HIT_TYPE_RED; } else { diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/overlay.cfg b/src/overlays/actors/ovl_En_Syateki_Wf/overlay.cfg deleted file mode 100644 index 4a5373e73..000000000 --- a/src/overlays/actors/ovl_En_Syateki_Wf/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Syateki_Wf -z_en_syateki_wf.c diff --git a/src/overlays/actors/ovl_En_Tab/overlay.cfg b/src/overlays/actors/ovl_En_Tab/overlay.cfg deleted file mode 100644 index 234201830..000000000 --- a/src/overlays/actors/ovl_En_Tab/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Tab -z_en_tab.c diff --git a/src/overlays/actors/ovl_En_Tab/z_en_tab.c b/src/overlays/actors/ovl_En_Tab/z_en_tab.c index ad1367f06..abd7c100c 100644 --- a/src/overlays/actors/ovl_En_Tab/z_en_tab.c +++ b/src/overlays/actors/ovl_En_Tab/z_en_tab.c @@ -268,7 +268,7 @@ void func_80BE0A98(EnTab* this, PlayState* play) { Matrix_Translate(this->unk_308, 0.0f, 0.0f, MTXMODE_APPLY); - if ((&this->actor == player->targetActor) && + if ((&this->actor == player->talkActor) && ((play->msgCtx.currentTextId < 0xFF) || (play->msgCtx.currentTextId > 0x200)) && (talkState == TEXT_STATE_3) && (this->prevTalkState == TEXT_STATE_3)) { if ((play->state.frames % 2) == 0) { @@ -435,8 +435,7 @@ s32 func_80BE10BC(EnTab* this, PlayState* play) { } else { dist = Math_Vec3f_DistXYZ(&this->actor.world.pos, &this->unk_1E4->actor.world.pos); - if ((gSaveContext.save.weekEventReg[75] & 1) || (this->unk_1E4->actor.draw == NULL) || - !(dist < 160.0f)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_01) || (this->unk_1E4->actor.draw == NULL) || !(dist < 160.0f)) { tempActor = &GET_PLAYER(play)->actor; this->actor.child = tempActor; } else { @@ -474,7 +473,7 @@ void func_80BE1224(EnTab* this, PlayState* play) { void func_80BE127C(EnTab* this, PlayState* play) { ScheduleOutput sp18; - this->unk_31A = REG(15) + ((void)0, gSaveContext.save.daySpeed); + this->unk_31A = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (!Schedule_RunScript(play, D_80BE18D0, &sp18) || ((this->unk_1D8 != sp18.result) && !func_80BE1060(this, play, &sp18))) { @@ -552,7 +551,7 @@ void EnTab_Update(Actor* thisx, PlayState* play) { radius = this->collider.dim.radius + this->unk_30C; height = this->collider.dim.height + 10; - func_8013C964(&this->actor, play, radius, height, PLAYER_AP_NONE, this->unk_2FC & 7); + func_8013C964(&this->actor, play, radius, height, PLAYER_IA_NONE, this->unk_2FC & 7); Actor_MoveWithGravity(&this->actor); Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); func_80BE0620(this, play); diff --git a/src/overlays/actors/ovl_En_Tag_Obj/overlay.cfg b/src/overlays/actors/ovl_En_Tag_Obj/overlay.cfg deleted file mode 100644 index 0939c8b84..000000000 --- a/src/overlays/actors/ovl_En_Tag_Obj/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Tag_Obj -z_en_tag_obj.c diff --git a/src/overlays/actors/ovl_En_Takaraya/overlay.cfg b/src/overlays/actors/ovl_En_Takaraya/overlay.cfg deleted file mode 100644 index 3fbedd25e..000000000 --- a/src/overlays/actors/ovl_En_Takaraya/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Takaraya -z_en_takaraya.c diff --git a/src/overlays/actors/ovl_En_Talk/overlay.cfg b/src/overlays/actors/ovl_En_Talk/overlay.cfg deleted file mode 100644 index 3fed504a4..000000000 --- a/src/overlays/actors/ovl_En_Talk/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Talk -z_en_talk.c diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/overlay.cfg b/src/overlays/actors/ovl_En_Talk_Gibud/overlay.cfg deleted file mode 100644 index 9f776a093..000000000 --- a/src/overlays/actors/ovl_En_Talk_Gibud/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Talk_Gibud -z_en_talk_gibud.c diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c index ed17ca42c..a84059634 100644 --- a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c +++ b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c @@ -49,8 +49,8 @@ void EnTalkGibud_TurnTowardsPlayer(EnTalkGibud* this, PlayState* play); s32 EnTalkGibud_MoveToIdealGrabPositionAndRotation(EnTalkGibud* this, PlayState* play); typedef struct { - /* 0x0 */ s32 itemActionParam; - /* 0x4 */ s32 item; + /* 0x0 */ PlayerItemAction itemAction; + /* 0x4 */ ItemId item; /* 0x8 */ s32 amount; /* 0xC */ s16 isBottledItem; } EnTalkGibudRequestedItem; @@ -200,16 +200,16 @@ static DamageTable sDamageTable = { static CollisionCheckInfoInit2 sColChkInfoInit = { 8, 0, 0, 0, MASS_HEAVY }; static EnTalkGibudRequestedItem sRequestedItemTable[] = { - { PLAYER_AP_BOTTLE_POTION_BLUE, ITEM_POTION_BLUE, 1, true }, - { PLAYER_AP_MAGIC_BEANS, ITEM_MAGIC_BEANS, 5, false }, - { PLAYER_AP_BOTTLE_SPRING_WATER, ITEM_SPRING_WATER, 1, true }, - { PLAYER_AP_BOTTLE_FISH, ITEM_FISH, 1, true }, - { PLAYER_AP_BOTTLE_BUG, ITEM_BUG, 1, true }, - { PLAYER_AP_NUT, ITEM_NUT, 10, false }, - { PLAYER_AP_BOMB, ITEM_BOMB, 10, false }, - { PLAYER_AP_BOTTLE_HOT_SPRING_WATER, ITEM_HOT_SPRING_WATER, 1, true }, - { PLAYER_AP_BOTTLE_BIG_POE, ITEM_BIG_POE, 1, true }, - { PLAYER_AP_BOTTLE_MILK, ITEM_MILK_BOTTLE, 1, true }, + { PLAYER_IA_BOTTLE_POTION_BLUE, ITEM_POTION_BLUE, 1, true }, + { PLAYER_IA_MAGIC_BEANS, ITEM_MAGIC_BEANS, 5, false }, + { PLAYER_IA_BOTTLE_SPRING_WATER, ITEM_SPRING_WATER, 1, true }, + { PLAYER_IA_BOTTLE_FISH, ITEM_FISH, 1, true }, + { PLAYER_IA_BOTTLE_BUG, ITEM_BUG, 1, true }, + { PLAYER_IA_NUT, ITEM_NUT, 10, false }, + { PLAYER_IA_BOMB, ITEM_BOMB, 10, false }, + { PLAYER_IA_BOTTLE_HOT_SPRING_WATER, ITEM_HOT_SPRING_WATER, 1, true }, + { PLAYER_IA_BOTTLE_BIG_POE, ITEM_BIG_POE, 1, true }, + { PLAYER_IA_BOTTLE_MILK, ITEM_MILK_BOTTLE, 1, true }, }; static InitChainEntry sInitChain[] = { @@ -242,7 +242,7 @@ void EnTalkGibud_Init(Actor* thisx, PlayState* play) { this->playerStunWaitTimer = 0; this->grabState = EN_TALK_GIBUD_GRAB_START; this->grabWaitTimer = 0; - this->itemActionParam = PLAYER_AP_NONE; + this->itemAction = PLAYER_IA_NONE; this->drawDmgEffTimer = 0; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE; this->isTalking = false; @@ -407,7 +407,7 @@ void EnTalkGibud_Grab(EnTalkGibud* this, PlayState* play) { if (this->grabDamageTimer == 20) { s16 requiredScopeTemp; - damageSfxId = player->ageProperties->unk_92 + NA_SE_VO_LI_DAMAGE_S; + damageSfxId = player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S; play->damagePlayer(play, -8); func_800B8E58(player, damageSfxId); Rumble_Request(this->actor.xzDistToPlayer, 240, 1, 12); @@ -703,10 +703,10 @@ void EnTalkGibud_GetNextTextBoxId(EnTalkGibud* this, PlayState* play) { } } -s32 EnTalkGibud_PresentedItemMatchesRequest(EnTalkGibud* this, PlayState* play, s32 presentedItemActionParam) { +s32 EnTalkGibud_PresentedItemMatchesRequest(EnTalkGibud* this, PlayState* play, PlayerItemAction presentedItemAction) { EnTalkGibudRequestedItem* requestedItem = &sRequestedItemTable[this->requestedItemIndex]; - if (requestedItem->itemActionParam == presentedItemActionParam) { + if (requestedItem->itemAction == presentedItemAction) { if (!requestedItem->isBottledItem) { if (AMMO(requestedItem->item) >= requestedItem->amount) { return EN_TALK_GIBUD_REQUESTED_ITEM_MET; @@ -723,15 +723,16 @@ s32 EnTalkGibud_PresentedItemMatchesRequest(EnTalkGibud* this, PlayState* play, void EnTalkGibud_CheckPresentedItem(EnTalkGibud* this, PlayState* play) { Player* player = GET_PLAYER(play); - s32 itemActionParam; + PlayerItemAction itemAction; - if (this->itemActionParam == PLAYER_AP_NONE) { - itemActionParam = func_80123810(play); - if (itemActionParam != PLAYER_AP_NONE) { - this->itemActionParam = itemActionParam; + if (this->itemAction == PLAYER_IA_NONE) { + itemAction = func_80123810(play); + + if (itemAction != PLAYER_IA_NONE) { + this->itemAction = itemAction; } - if (this->itemActionParam > PLAYER_AP_NONE) { - switch (EnTalkGibud_PresentedItemMatchesRequest(this, play, this->itemActionParam)) { + if (this->itemAction > PLAYER_IA_NONE) { + switch (EnTalkGibud_PresentedItemMatchesRequest(this, play, this->itemAction)) { case EN_TALK_GIBUD_REQUESTED_ITEM_MET: player->actor.textId = 0x138A; this->textId = 0x138A; @@ -751,7 +752,7 @@ void EnTalkGibud_CheckPresentedItem(EnTalkGibud* this, PlayState* play) { break; } func_801477B4(play); - } else if (this->itemActionParam < PLAYER_AP_NONE) { + } else if (this->itemAction <= PLAYER_IA_MINUS1) { Message_StartTextbox(play, 0x1389, &this->actor); this->textId = 0x1389; } @@ -787,7 +788,7 @@ void EnTalkGibud_PassiveIdle(EnTalkGibud* this, PlayState* play) { } void EnTalkGibud_SetupTalk(EnTalkGibud* this) { - this->itemActionParam = PLAYER_AP_NONE; + this->itemAction = PLAYER_IA_NONE; this->actionFunc = EnTalkGibud_Talk; } @@ -822,7 +823,7 @@ void EnTalkGibud_Talk(EnTalkGibud* this, PlayState* play) { if (!requestedItem->isBottledItem) { Inventory_ChangeAmmo(requestedItem->item, -requestedItem->amount); } else { - func_80123D50(play, player, ITEM_BOTTLE, PLAYER_AP_BOTTLE); + Player_UpdateBottleHeld(play, player, ITEM_BOTTLE, PLAYER_IA_BOTTLE); } player->stateFlags1 |= PLAYER_STATE1_20; player->stateFlags1 |= PLAYER_STATE1_20000000; diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h index 4d11e6c15..d887b1c0d 100644 --- a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h +++ b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h @@ -19,7 +19,7 @@ typedef struct EnTalkGibud { /* 0x1D8 */ Vec3f limbPos[15]; /* 0x28C */ s32 limbIndex; /* 0x290 */ s32 requestedItemIndex; - /* 0x294 */ s32 itemActionParam; + /* 0x294 */ PlayerItemAction itemAction; /* 0x298 */ s32 switchFlag; /* 0x29C */ f32 drawDmgEffAlpha; /* 0x2A0 */ f32 drawDmgEffScale; diff --git a/src/overlays/actors/ovl_En_Tanron1/overlay.cfg b/src/overlays/actors/ovl_En_Tanron1/overlay.cfg deleted file mode 100644 index 5a6959a4e..000000000 --- a/src/overlays/actors/ovl_En_Tanron1/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Tanron1 -z_en_tanron1.c diff --git a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c index d6089e5b5..fec6a2d3b 100644 --- a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c +++ b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c @@ -149,7 +149,7 @@ void EnTanron1_Update(Actor* thisx, PlayState* play) { break; } - if ((player->itemActionParam == 7) && (player->unk_B28 != 0)) { + if ((player->heldItemAction == PLAYER_IA_STICK) && (player->unk_B28 != 0)) { this->unk_14C.x = player->meleeWeaponInfo[0].tip.x; this->unk_14C.y = player->meleeWeaponInfo[0].tip.y; this->unk_14C.z = player->meleeWeaponInfo[0].tip.z; diff --git a/src/overlays/actors/ovl_En_Tanron2/overlay.cfg b/src/overlays/actors/ovl_En_Tanron2/overlay.cfg deleted file mode 100644 index c585d560b..000000000 --- a/src/overlays/actors/ovl_En_Tanron2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Tanron2 -z_en_tanron2.c diff --git a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c index 1c46247ba..332560403 100644 --- a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c +++ b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c @@ -143,7 +143,7 @@ void EnTanron2_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider1, &this->actor, &sCylinderInit1); Collider_InitAndSetCylinder(play, &this->collider2, &this->actor, &sCylinderInit2); - if ((KREG(64) != 0) || (gSaveContext.eventInf[6] & 1)) { + if ((KREG(64) != 0) || CHECK_EVENTINF(EVENTINF_60)) { func_80BB69C0(this); } else { func_80BB6F64(this); @@ -428,8 +428,8 @@ void func_80BB7578(EnTanron2* this, PlayState* play) { func_80BB6B80(this); this->unk_158 = 1; Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IKURA_DAMAGE); - if ((player->unk_730 != 0) && (&this->actor != player->unk_730)) { - player->unk_730 = &this->actor; + if ((player->targetedActor != NULL) && (&this->actor != player->targetedActor)) { + player->targetedActor = &this->actor; play->actorCtx.targetContext.arrowPointedActor = &this->actor; play->actorCtx.targetContext.targetedActor = &this->actor; } diff --git a/src/overlays/actors/ovl_En_Tanron3/overlay.cfg b/src/overlays/actors/ovl_En_Tanron3/overlay.cfg deleted file mode 100644 index 1084615ef..000000000 --- a/src/overlays/actors/ovl_En_Tanron3/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Tanron3 -z_en_tanron3.c diff --git a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c index 3d831913e..0e7be15f3 100644 --- a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c +++ b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c @@ -232,7 +232,7 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) { // on attacking the player; in that case, this code will make it turn in the // opposite direction and swim away. In both cases, the fish's target y-position // will be slightly above the halfway point of the water. - atanTemp = Math_FAtan2F(this->targetPos.z, this->targetPos.x); + atanTemp = Math_Atan2S_XY(this->targetPos.z, this->targetPos.x); Matrix_RotateYS(atanTemp, MTXMODE_NEW); Matrix_MultVecZ(700.0f, &this->targetPos); this->targetPos.y = 250.0f; @@ -259,9 +259,9 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) { // Rotate the fish to look towards its target xzDistance = sqrtf(SQ(xDistance) + SQ(zDistance)); - atanTemp = Math_FAtan2F(xzDistance, -yDistance); + atanTemp = Math_Atan2S_XY(xzDistance, -yDistance); Math_ApproachS(&this->actor.world.rot.x, atanTemp, this->rotationScale, this->rotationStep); - atanTemp = Math_FAtan2F(zDistance, xDistance); + atanTemp = Math_Atan2S_XY(zDistance, xDistance); Math_SmoothStepToS(&this->actor.world.rot.y, atanTemp, this->rotationScale, this->rotationStep, 0); Math_ApproachS(&this->rotationStep, this->targetRotationStep, 1, 0x100); @@ -304,7 +304,7 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) { if (Rand_ZeroOne() < 0.5f) { this->targetShapeRotation.y = (s16)Rand_ZeroFloat(0x10000); } - this->actor.world.rot.y = Math_FAtan2F(this->actor.world.pos.z, this->actor.world.pos.x) + + this->actor.world.rot.y = Math_Atan2S_XY(this->actor.world.pos.z, this->actor.world.pos.x) + (s16)randPlusMinusPoint5Scaled(0xCE20); } @@ -343,8 +343,8 @@ void EnTanron3_SetupDie(EnTanron3* this, PlayState* play) { xDistance = this->actor.world.pos.x - player->actor.world.pos.x; yDistance = this->actor.world.pos.y - player->actor.world.pos.y + 30.0f; zDistance = this->actor.world.pos.z - player->actor.world.pos.z; - this->actor.world.rot.x = Math_FAtan2F(sqrtf(SQ(xDistance) + SQ(zDistance)), -yDistance); - this->actor.world.rot.y = Math_FAtan2F(zDistance, xDistance); + this->actor.world.rot.x = Math_Atan2S_XY(sqrtf(SQ(xDistance) + SQ(zDistance)), -yDistance); + this->actor.world.rot.y = Math_Atan2S_XY(zDistance, xDistance); this->workTimer[WORK_TIMER_DIE] = 6; this->actor.speedXZ = 10.0f; Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KONB_MINI_DEAD); @@ -367,8 +367,8 @@ void EnTanron3_CheckCollisions(EnTanron3* this, PlayState* play) { if (player->actor.world.pos.y > 350.0f) { if (this->atCollider.base.atFlags & AT_HIT) { this->atCollider.base.atFlags &= ~AT_HIT; - func_800B8D50(play, NULL, 3.0f, Math_FAtan2F(-player->actor.world.pos.z, -player->actor.world.pos.x), 5.0f, - 0); + func_800B8D50(play, NULL, 3.0f, Math_Atan2S_XY(-player->actor.world.pos.z, -player->actor.world.pos.x), + 5.0f, 0); } } if (this->acCollider.base.acFlags & AC_HIT) { @@ -458,7 +458,7 @@ void EnTanron3_Draw(Actor* thisx, PlayState* play) { } SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnTanron3_OverrideLimbDraw, NULL, &this->actor); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Tanron4/overlay.cfg b/src/overlays/actors/ovl_En_Tanron4/overlay.cfg deleted file mode 100644 index 734d70ac7..000000000 --- a/src/overlays/actors/ovl_En_Tanron4/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Tanron4 -z_en_tanron4.c diff --git a/src/overlays/actors/ovl_En_Tanron5/overlay.cfg b/src/overlays/actors/ovl_En_Tanron5/overlay.cfg deleted file mode 100644 index 4a522458e..000000000 --- a/src/overlays/actors/ovl_En_Tanron5/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Tanron5 -z_en_tanron5.c diff --git a/src/overlays/actors/ovl_En_Tanron6/overlay.cfg b/src/overlays/actors/ovl_En_Tanron6/overlay.cfg deleted file mode 100644 index 2e81ae121..000000000 --- a/src/overlays/actors/ovl_En_Tanron6/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Tanron6 -z_en_tanron6.c diff --git a/src/overlays/actors/ovl_En_Test/overlay.cfg b/src/overlays/actors/ovl_En_Test/overlay.cfg deleted file mode 100644 index 3f264536a..000000000 --- a/src/overlays/actors/ovl_En_Test/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Test -z_en_test.c diff --git a/src/overlays/actors/ovl_En_Test/z_en_test.c b/src/overlays/actors/ovl_En_Test/z_en_test.c index 95fdce4e1..7f0a3e971 100644 --- a/src/overlays/actors/ovl_En_Test/z_en_test.c +++ b/src/overlays/actors/ovl_En_Test/z_en_test.c @@ -250,7 +250,7 @@ s32 EnTest_OverrideKeyframeDraw(PlayState* play, SkeletonInfo* skeletonInfo, s32 void EnTest_Draw(Actor* thisx, PlayState* play) { EnTest* this = THIS; - Mtx* sp28; + Mtx* mtx; s32 sp2C = this->unk_208 - 1; if (sp2C >= 29) { @@ -263,11 +263,11 @@ void EnTest_Draw(Actor* thisx, PlayState* play) { AnimatedMat_DrawStep(play, Lib_SegmentedToVirtual(gameplay_keep_Matanimheader_06B6A0), sp2C); } - sp28 = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx))); + mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx)); - if (sp28 != NULL) { + if (mtx != NULL) { func_8012C2DC(play->state.gfxCtx); - func_8018450C(play, &this->skeletonInfo, sp28, EnTest_OverrideKeyframeDraw, NULL, thisx); + func_8018450C(play, &this->skeletonInfo, mtx, EnTest_OverrideKeyframeDraw, NULL, thisx); func_80863048(play, this->unk_20C); } } diff --git a/src/overlays/actors/ovl_En_Test2/overlay.cfg b/src/overlays/actors/ovl_En_Test2/overlay.cfg deleted file mode 100644 index 8a698679c..000000000 --- a/src/overlays/actors/ovl_En_Test2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Test2 -z_en_test2.c diff --git a/src/overlays/actors/ovl_En_Test3/overlay.cfg b/src/overlays/actors/ovl_En_Test3/overlay.cfg deleted file mode 100644 index 25736e068..000000000 --- a/src/overlays/actors/ovl_En_Test3/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Test3 -z_en_test3.c diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index a5777e9d4..22883d53d 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -4,17 +4,171 @@ * Description: Kafei */ +#include "prevent_bss_reordering.h" #include "z_en_test3.h" +#include "objects/object_test3/object_test3.h" +#include "overlays/actors/ovl_En_Door/z_en_door.h" +#include "objects/gameplay_keep/gameplay_keep.h" +#include "objects/object_mask_ki_tan/object_mask_ki_tan.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_4000000) #define THIS ((EnTest3*)thisx) -void EnTest3_Init(Actor* thisx, PlayState* play); -void EnTest3_Destroy(Actor* thisx, PlayState* play); -void EnTest3_Update(Actor* thisx, PlayState* play); +typedef struct { + /* 0x0 */ s8 unk_0; + /* 0x1 */ s8 unk_1_0 : 4; + /* 0x1 */ s8 unk_1_4 : 4; +} struct_80A41828; // size = 0x2 + +typedef s32 (*EnTest3UnkFunc2)(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput); +typedef s32 (*EnTest3UnkFunc)(EnTest3* this, PlayState* play); + +typedef struct { + /* 0x0 */ EnTest3UnkFunc2 unk_0; + /* 0x4 */ EnTest3UnkFunc unk_4; +} struct_80A40678; // size = 0x8 + +typedef struct { + /* 0x0 */ EnTest3ActionFunc unk_0; // might not actually be an action function + /* 0x4 */ EnTest3ActionFunc actionFunc; +} struct_80A4168C; // size = 0x8 + +// Main functions +void EnTest3_Init(Actor* thisx, PlayState* play2); +void EnTest3_Destroy(Actor* thisx, PlayState* play2); +void EnTest3_Update(Actor* thisx, PlayState* play2); +void EnTest3_Draw(Actor* thisx, PlayState* play2); + +// Functions used in D_80A4169C and D_80A416C0. Purpose unclear, but related to Schedule +s32 func_80A3E870(EnTest3* this, PlayState* play); +s32 func_80A3E884(EnTest3* this, PlayState* play); +s32 func_80A3E898(EnTest3* this, PlayState* play); +s32 func_80A3E960(EnTest3* this, PlayState* play); +s32 func_80A3E97C(EnTest3* this, PlayState* play); +s32 func_80A3E9DC(EnTest3* this, PlayState* play); +s32 func_80A3EA30(EnTest3* this, PlayState* play); +s32 func_80A3EAC4(EnTest3* this, PlayState* play); +s32 func_80A3EAF8(EnTest3* this, PlayState* play); +s32 func_80A3EB8C(EnTest3* this, PlayState* play); +s32 func_80A3EBFC(EnTest3* this, PlayState* play); +s32 func_80A3EC30(EnTest3* this, PlayState* play); +s32 func_80A3EC44(EnTest3* this, PlayState* play); + +// Functions used in D_80A417E8. Purpose unclear, but related to Schedule +s32 func_80A3F080(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput); +s32 func_80A3F09C(EnTest3* this, PlayState* play); +s32 func_80A3F62C(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput); +s32 func_80A3F73C(EnTest3* this, PlayState* play); +s32 func_80A3F8D4(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput); +s32 func_80A3F9A4(EnTest3* this, PlayState* play); +s32 func_80A3F9E4(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput); +s32 func_80A3FA58(EnTest3* this, PlayState* play); +s32 func_80A3FBCC(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput); +s32 func_80A3FBE8(EnTest3* this, PlayState* play); +s32 func_80A3FDE4(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput); +s32 func_80A3FE20(EnTest3* this, PlayState* play); +s32 func_80A3FF10(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput); +s32 func_80A3FFD0(EnTest3* this, PlayState* play2); +s32 func_80A40098(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput); +s32 func_80A40230(EnTest3* this, PlayState* play); + +// Action functions +void func_80A40678(EnTest3* this, PlayState* play); +void func_80A40824(EnTest3* this, PlayState* play); +void func_80A4084C(EnTest3* this, PlayState* play); +void func_80A40908(EnTest3* this, PlayState* play); +void func_80A40A6C(EnTest3* this, PlayState* play); + +static u8 sScheduleScript[] = { + /* 0x000 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(1, 0x046 - 0x004), + /* 0x004 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ALLEY, 0x020 - 0x008), + /* 0x008 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 50, 7, 20, 0x01A - 0x00E), + /* 0x00E */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(7, 30, 0x019 - 0x012), + /* 0x012 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_04, 0x017 - 0x016), + /* 0x016 */ SCHEDULE_CMD_RET_NONE(), + /* 0x017 */ SCHEDULE_CMD_RET_VAL_S(10), + /* 0x019 */ SCHEDULE_CMD_RET_NONE(), + /* 0x01A */ SCHEDULE_CMD_RET_TIME(6, 50, 7, 20, 15), + /* 0x020 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_CLOCKTOWER, 0x045 - 0x024), + /* 0x024 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 0, 6, 30, 0x03F - 0x02A), + /* 0x02A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 30, 6, 35, 0x03D - 0x030), + /* 0x030 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 35, 6, 50, 0x037 - 0x036), + /* 0x036 */ SCHEDULE_CMD_RET_NONE(), + /* 0x037 */ SCHEDULE_CMD_RET_TIME(6, 35, 6, 50, 14), + /* 0x03D */ SCHEDULE_CMD_RET_VAL_S(1), + /* 0x03F */ SCHEDULE_CMD_RET_TIME(6, 0, 6, 30, 13), + /* 0x045 */ SCHEDULE_CMD_RET_NONE(), + /* 0x046 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x09B - 0x04A), + /* 0x04A */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_02, 0x058 - 0x04E), + /* 0x04E */ SCHEDULE_CMD_BRANCH_S(0x0), + /* 0x050 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_04, 0x055 - 0x054), + /* 0x054 */ SCHEDULE_CMD_RET_NONE(), + /* 0x055 */ SCHEDULE_CMD_RET_VAL_L(10), + /* 0x058 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ALLEY, 0x081 - 0x05C), + /* 0x05C */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(13, 0, 0x050 - 0x060), + /* 0x060 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 5, 15, 25, 0x07B - 0x066), + /* 0x066 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 25, 15, 40, 0x079 - 0x06C), + /* 0x06C */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 40, 16, 0, 0x073 - 0x072), + /* 0x072 */ SCHEDULE_CMD_RET_NONE(), + /* 0x073 */ SCHEDULE_CMD_RET_TIME(15, 40, 16, 0, 17), + /* 0x079 */ SCHEDULE_CMD_RET_VAL_S(1), + /* 0x07B */ SCHEDULE_CMD_RET_TIME(15, 5, 15, 25, 16), + /* 0x081 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_AYASHIISHOP, 0x09A - 0x085), + /* 0x085 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 55, 16, 10, 0x094 - 0x08B), + /* 0x08B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 10, 22, 10, 0x092 - 0x091), + /* 0x091 */ SCHEDULE_CMD_RET_NONE(), + /* 0x092 */ SCHEDULE_CMD_RET_VAL_S(3), + /* 0x094 */ SCHEDULE_CMD_RET_TIME(15, 55, 16, 10, 12), + /* 0x09A */ SCHEDULE_CMD_RET_NONE(), + /* 0x09B */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(3, 0x138 - 0x0A0), + /* 0x0A0 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_33_08, 0x12C - 0x0A5), + /* 0x0A5 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_79_40, 0x12C - 0x0AA), + /* 0x0AA */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_SECOM, 0x0B0 - 0x0AE), + /* 0x0AE */ SCHEDULE_CMD_RET_VAL_S(7), + /* 0x0B0 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_20, 0x0DD - 0x0B4), + /* 0x0B4 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_IKANA, 0x0DC - 0x0B8), + /* 0x0B8 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_08, 0x0BE - 0x0BC), + /* 0x0BC */ SCHEDULE_CMD_RET_VAL_S(5), + /* 0x0BE */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_61_08, 0x0DA - 0x0C2), + /* 0x0C2 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_10, 0x0CD - 0x0C6), + /* 0x0C6 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(19, 0, 0x0CB - 0x0CA), + /* 0x0CA */ SCHEDULE_CMD_RET_NONE(), + /* 0x0CB */ SCHEDULE_CMD_RET_VAL_S(5), + /* 0x0CD */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(19, 0, 19, 10, 0x0D4 - 0x0D3), + /* 0x0D3 */ SCHEDULE_CMD_RET_NONE(), + /* 0x0D4 */ SCHEDULE_CMD_RET_TIME(19, 0, 19, 10, 20), + /* 0x0DA */ SCHEDULE_CMD_RET_VAL_S(5), + /* 0x0DC */ SCHEDULE_CMD_RET_NONE(), + /* 0x0DD */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_IKANA, 0x0E8 - 0x0E1), + /* 0x0E1 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_90_02, 0x0E7 - 0x0E5), + /* 0x0E5 */ SCHEDULE_CMD_RET_VAL_S(9), + /* 0x0E7 */ SCHEDULE_CMD_RET_NONE(), + /* 0x0E8 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x0F9 - 0x0EC), + /* 0x0EC */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 0, 4, 10, 0x0F3 - 0x0F2), + /* 0x0F2 */ SCHEDULE_CMD_RET_NONE(), + /* 0x0F3 */ SCHEDULE_CMD_RET_TIME(4, 0, 4, 10, 11), + /* 0x0F9 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x12B - 0x0FD), + /* 0x0FD */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 10, 4, 30, 0x125 - 0x103), + /* 0x103 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_01, 0x11C - 0x107), + /* 0x107 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 30, 4, 45, 0x116 - 0x10D), + /* 0x10D */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 45, 6, 0, 0x114 - 0x113), + /* 0x113 */ SCHEDULE_CMD_RET_NONE(), + /* 0x114 */ SCHEDULE_CMD_RET_VAL_S(6), + /* 0x116 */ SCHEDULE_CMD_RET_TIME(4, 30, 4, 45, 19), + /* 0x11C */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 30, 6, 0, 0x123 - 0x122), + /* 0x122 */ SCHEDULE_CMD_RET_NONE(), + /* 0x123 */ SCHEDULE_CMD_RET_VAL_S(8), + /* 0x125 */ SCHEDULE_CMD_RET_TIME(4, 10, 4, 30, 18), + /* 0x12B */ SCHEDULE_CMD_RET_NONE(), + /* 0x12C */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_AYASHIISHOP, 0x137 - 0x130), + /* 0x130 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_08, 0x135 - 0x134), + /* 0x134 */ SCHEDULE_CMD_RET_NONE(), + /* 0x135 */ SCHEDULE_CMD_RET_VAL_S(4), + /* 0x137 */ SCHEDULE_CMD_RET_NONE(), + /* 0x138 */ SCHEDULE_CMD_RET_NONE(), +}; -#if 0 ActorInit En_Test3_InitVars = { ACTOR_EN_TEST3, ACTORCAT_NPC, @@ -27,113 +181,1123 @@ ActorInit En_Test3_InitVars = { (ActorFunc)NULL, }; -#endif +static struct_80A4168C D_80A4168C[] = { + { func_80A40A6C, NULL }, + { NULL, NULL }, +}; -extern UNK_TYPE D_0600EDD0; -extern UNK_TYPE D_0600F7EC; +static EnTest3UnkFunc D_80A4169C[] = { + func_80A3E898, func_80A3E898, func_80A3E884, func_80A3E898, func_80A3E898, + func_80A3EA30, func_80A3E898, func_80A3E960, func_80A3E870, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3E7E0.s") +static EnTest3UnkFunc D_80A416C0[] = { + func_80A3EAC4, func_80A3EAF8, func_80A3EBFC, func_80A3EC44, + func_80A3EC30, func_80A3E9DC, func_80A3EB8C, func_80A3E97C, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3E80C.s") +static PlayerAgeProperties sAgeProperties = { + 40.0f, + 60.0f, + 11.0f / 17.0f, + 71.0f, + 50.0f, + 49.0f, + 39.0f, + 27.0f, + 19.0f, + 22.0f, + 32.4f, + 32.0f, + 48.0f, + 11.0f / 17.0f * 70.0f, + 14.0f, + 12.0f, + 55.0f, + { 0xFFE8, 0x0DED, 0x036C }, + { { 0xFFE8, 0x0D92, 0x035E }, { 0xFFE8, 0x1371, 0x03A9 }, { 0x0008, 0x1256, 0x017C }, { 0x0009, 0x17EA, 0x0167 } }, + { { 0xFFE8, 0x1371, 0x03A9 }, { 0xFFE8, 0x195F, 0x03A9 }, { 0x0009, 0x17EA, 0x0167 }, { 0x0009, 0x1E0D, 0x017C } }, + { { 0x0008, 0x1256, 0x017C }, { 0x0009, 0x17EA, 0x0167 }, { 0xF9C8, 0x1256, 0x017C }, { 0xF9C9, 0x17EA, 0x0167 } }, + 0x0020, + 0x0000, + 22.0f, + 29.4343f, + &gPlayerAnim_clink_demo_Tbox_open, + &gPlayerAnim_clink_demo_goto_future, + &gPlayerAnim_clink_demo_return_to_future, + &gPlayerAnim_clink_normal_climb_startA, + &gPlayerAnim_clink_normal_climb_startB, + { &gPlayerAnim_clink_normal_climb_upL, &gPlayerAnim_clink_normal_climb_upR, &gPlayerAnim_link_normal_Fclimb_upL, + &gPlayerAnim_link_normal_Fclimb_upR }, + { &gPlayerAnim_link_normal_Fclimb_sideL, &gPlayerAnim_link_normal_Fclimb_sideR }, + { &gPlayerAnim_clink_normal_climb_endAL, &gPlayerAnim_clink_normal_climb_endAR }, + { &gPlayerAnim_clink_normal_climb_endBR, &gPlayerAnim_clink_normal_climb_endBL }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3E870.s") +static EffectBlureInit2 sBlureInit = { + 0, 8, 0, { 255, 255, 255, 255 }, { 255, 255, 255, 64 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, 4, + 0, 2, 0, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3E884.s") +static EffectTireMarkInit sTireMarkInit = { + 0, + 63, + { 0, 0, 15, 100 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3E898.s") +static struct_80A40678 D_80A417E8[] = { + { func_80A3F080, func_80A3F09C }, { func_80A40098, func_80A40230 }, { func_80A3F62C, func_80A3F73C }, + { func_80A3F8D4, func_80A3F9A4 }, { func_80A3F9E4, func_80A3FA58 }, { func_80A3FBCC, func_80A3FBE8 }, + { func_80A3FDE4, func_80A3FE20 }, { func_80A3FF10, func_80A3FFD0 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3E960.s") +static struct_80A41828 D_80A41828[] = { + { 0, 0, 0 }, { 3, -2, 0 }, { 2, -1, 0 }, { 2, -1, 1 }, { 2, -1, 2 }, { 2, 1, 3 }, { 2, -2, 4 }, { 5, 1, 0 }, + { 7, -1, 0 }, { 6, 2, 0 }, { 4, 4, 0 }, { 1, 1, 0 }, { 1, 1, 0 }, { 1, 2, 0 }, { 1, 1, 0 }, { 1, 1, 0 }, + { 1, 2, 0 }, { 1, 3, 0 }, { 1, 1, 0 }, { 1, 2, 0 }, { 1, 1, 0 }, { 0, 0, 0 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3E97C.s") +static EnTest3_struct_D78 D_80A41854[] = { + { 4, 0, 0x2B25 }, { 1, 0, 0x2969 }, { 3, 1, 0x296A }, { 1, 0, 0x296B }, { 5, 1, 0x0000 }, { 8, 0, 0x0000 }, + { 4, 0, 0x2976 }, { 6, 0, 0x2977 }, { 7, 10, 0x2978 }, { 4, 1, 0x0000 }, { 4, 0, 0x2968 }, { 4, 0, 0x297A }, + { 1, 0, 0x145D }, { 1, 0, 0x145E }, { 5, 1, 0x145F }, { 1, 0, 0x145F }, { 5, 0, 0x0000 }, { 4, 0, 0x1460 }, + { 4, 0, 0x145C }, { 4, 0, 0x2913 }, { 4, 0, 0x1465 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3E9DC.s") +s32 D_80A41D20; +s32 D_80A41D24; +Input sEnTest3_Input; +f32 D_80A41D40; +s16 D_80A41D44; +s32 D_80A41D48; +Vec3f D_80A41D50; +s32 D_80A41D5C; +s32 D_80A41D60; +s32 D_80A41D64; +s32 D_80A41D68; +Vec3f* D_80A41D6C; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3EA30.s") +s32 func_80A3E7E0(EnTest3* this, EnTest3ActionFunc actionFunc) { + if (actionFunc == this->unk_D94) { + return false; + } else { + this->unk_D94 = actionFunc; + this->unk_D8A = 0; + this->unk_D88 = 0; + return true; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3EAC4.s") +s32 func_80A3E80C(EnTest3* this, PlayState* play, s32 arg2) { + s32 pad; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3EAF8.s") + D_80A4168C[arg2].unk_0(this, play); + if (D_80A4168C[arg2].actionFunc == NULL) { + // D_80A4168C[arg2].actionFunc is always NULL + return false; + } else { + func_80A3E7E0(this, D_80A4168C[arg2].actionFunc); + return true; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3EB8C.s") +s32 func_80A3E870(EnTest3* this, PlayState* play) { + return true; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3EBFC.s") +s32 func_80A3E884(EnTest3* this, PlayState* play) { + return false; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3EC30.s") +s32 func_80A3E898(EnTest3* this, PlayState* play) { + u16 textId = this->unk_D78->textId; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3EC44.s") + if ((this->unk_D78->unk_0 == 4) && CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) { + func_80151BB4(play, 2); + } + if (textId == 0xFFFF) { + func_801477B4(play); + } else if (textId) { // != 0 + func_80151938(play, textId); + } + if (textId == 0x296B) { + LinkAnimation_PlayOnceSetSpeed(play, &this->player.skelAnime, &gPlayerAnim_al_yareyare, 2.0f / 3.0f); + } + return false; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3ECEC.s") +s32 func_80A3E960(EnTest3* this, PlayState* play) { + this->unk_D8C = this->unk_D78->unk_1; + return false; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3ED24.s") +s32 func_80A3E97C(EnTest3* this, PlayState* play) { + if (DECR(this->unk_D8C) == 0) { + Message_StartTextbox(play, this->unk_D78->textId, NULL); + return true; + } + return false; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/EnTest3_Init.s") +s32 func_80A3E9DC(EnTest3* this, PlayState* play) { + if (ActorCutscene_GetCanPlayNext(this->unk_D8D)) { + ActorCutscene_StartAndSetUnkLinkFields(this->unk_D8D, &this->player.actor); + return true; + } else { + ActorCutscene_SetIntentToPlay(this->unk_D8D); + return false; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/EnTest3_Destroy.s") +s32 func_80A3EA30(EnTest3* this, PlayState* play) { + if (this->unk_D78->textId == 0x145F) { + Actor* hideoutDoor = SubS_FindActor(play, NULL, ACTORCAT_BG, ACTOR_BG_IKNV_OBJ); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F080.s") + if (hideoutDoor != NULL) { + this->player.targetedActor = hideoutDoor; + } + } + if (this->unk_D78->unk_1 != 0) { + ActorCutscene_Stop(0x7C); + ActorCutscene_SetIntentToPlay(this->unk_D8D); + play->msgCtx.msgMode = 0x44; + } + return false; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F09C.s") +s32 func_80A3EAC4(EnTest3* this, PlayState* play) { + if (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) { + return 1; + } + return 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F0B0.s") +s32 func_80A3EAF8(EnTest3* this, PlayState* play) { + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + if (this->unk_D78->textId == 0x145F) { + ActorCutscene_Stop(this->unk_D8D); + this->unk_D8D = 0x7C; + ActorCutscene_SetIntentToPlay(this->unk_D8D); + this->player.targetedActor = &GET_PLAYER(play)->actor; + } + return 1; + } + return 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F114.s") +s32 func_80A3EB8C(EnTest3* this, PlayState* play) { + if (func_80A3EAF8(this, play)) { + Actor* hideoutObject = SubS_FindActor(play, NULL, ACTORCAT_ITEMACTION, ACTOR_OBJ_NOZOKI); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F15C.s") + if (hideoutObject != NULL) { + this->player.targetedActor = hideoutObject; + } + play->msgCtx.msgMode = 0x44; + return 1; + } + return 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F2BC.s") +s32 func_80A3EBFC(EnTest3* this, PlayState* play) { + if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { + return 1; + } + return 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F384.s") +s32 func_80A3EC30(EnTest3* this, PlayState* play) { + return 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F4A4.s") +s32 func_80A3EC44(EnTest3* this, PlayState* play) { + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { + if (play->msgCtx.choiceIndex != 0) { + func_8019F230(); + } else { + func_8019F208(); + } + if (play->msgCtx.choiceIndex != 0) { + return 1; + } else { + s32 ret = this->unk_D78->unk_1 + 1; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F534.s") + return ret; + } + } + return 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F5A4.s") +s32 func_80A3ECEC(EnTest3* this, PlayState* play) { + return D_80A4169C[this->unk_D78->unk_0](this, play); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F62C.s") +s32 func_80A3ED24(EnTest3* this, PlayState* play) { + s32 temp = D_80A416C0[this->unk_D78->unk_0](this, play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F73C.s") + if (temp != 0) { + this->unk_D78 = &this->unk_D78[temp]; + return func_80A3ECEC(this, play); + } + return false; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F8D4.s") +void EnTest3_Init(Actor* thisx, PlayState* play2) { + PlayState* play = play2; + EnTest3* this = THIS; + Camera* subCam; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F9A4.s") + if (D_80A41D24) { + Actor_Kill(&this->player.actor); + return; + } + D_80A41D24 = true; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F9E4.s") + this->player.actor.room = -1; + this->player.unk_A86 = -1; + this->player.transformation = PLAYER_FORM_HUMAN; + this->player.ageProperties = &sAgeProperties; + this->player.heldItemAction = PLAYER_IA_NONE; + this->player.heldItemId = ITEM_OCARINA; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3FA58.s") + Player_SetModelGroup(&this->player, 3); + play->playerInit(&this->player, play, &object_test3_Skel_00F7EC); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3FBCC.s") + Effect_Add(play, &this->player.meleeWeaponEffectIndex[0], EFFECT_BLURE2, 0, 0, &sBlureInit); + Effect_Add(play, &this->player.meleeWeaponEffectIndex[1], EFFECT_BLURE2, 0, 0, &sBlureInit); + Effect_Add(play, &this->player.meleeWeaponEffectIndex[2], EFFECT_TIRE_MARK, 0, 0, &sTireMarkInit); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3FBE8.s") + this->player.maskObjectSegment = ZeldaArena_Malloc(0x3800); + play->func_18780(&this->player, play); + this->unk_D90 = GET_PLAYER(play); + this->player.giObjectSegment = this->unk_D90->giObjectSegment; + this->player.tatlActor = this->unk_D90->tatlActor; + if ((CURRENT_DAY != 3) || CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) || !CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) { + this->player.currentMask = PLAYER_MASK_KEATON; + } + this->player.prevMask = this->player.currentMask; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3FDE4.s") + if (play->sceneId == SCENE_SECOM) { + this->subCamId = Play_CreateSubCamera(play); + subCam = Play_GetCamera(play, this->subCamId); + Camera_InitPlayerSettings(subCam, &this->player); + Camera_SetFlags(subCam, CAM_STATE_0 | CAM_STATE_6); + Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_WAIT); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3FE20.s") + this->player.actor.colChkInfo.cylRadius = 20; + this->player.actor.colChkInfo.cylHeight = 60; + this->player.actor.colChkInfo.health = 255; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3FF10.s") + if (KAFEI_GET_PARAM_1E0(&this->player.actor) == 0) { + func_80A3E7E0(this, func_80A40824); + } else { + func_80A3E7E0(this, func_80A40678); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3FFD0.s") +void EnTest3_Destroy(Actor* thisx, PlayState* play2) { + PlayState* play = play2; + EnTest3* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A40098.s") + Effect_Destroy(play, this->player.meleeWeaponEffectIndex[0]); + Effect_Destroy(play, this->player.meleeWeaponEffectIndex[1]); + Effect_Destroy(play, this->player.meleeWeaponEffectIndex[2]); + Collider_DestroyCylinder(play, &this->player.cylinder); + Collider_DestroyCylinder(play, &this->player.shieldCylinder); + Collider_DestroyQuad(play, &this->player.meleeWeaponQuads[0]); + Collider_DestroyQuad(play, &this->player.meleeWeaponQuads[1]); + Collider_DestroyQuad(play, &this->player.shieldQuad); + ZeldaArena_Free(this->player.maskObjectSegment); + Environment_StartTime(); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A40230.s") +s32 func_80A3F080(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) { + return true; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A40678.s") +s32 func_80A3F09C(EnTest3* this, PlayState* play) { + this->player.actor.draw = NULL; + return true; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A40824.s") +void func_80A3F0B0(EnTest3* this, PlayState* play) { + func_800BC154(play, &play->actorCtx, &this->unk_D90->actor, 2); + func_800BC154(play, &play->actorCtx, &this->player.actor, 4); + this->unk_D90->stateFlags1 &= ~PLAYER_STATE1_20; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A4084C.s") +void func_80A3F114(EnTest3* this, PlayState* play) { + if (this->player.csMode != 0) { + play->startPlayerCutscene(play, &this->player, 6); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A40908.s") +s32 func_80A3F15C(EnTest3* this, PlayState* play, struct_80A41828* arg2) { + s32 pathIndex; + Path* path; + Vec3s* curPathPoint; + Vec3s* nextPathPoint; + Vec3f curPathPos; + Vec3f nextPathPos; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A409D4.s") + pathIndex = ABS_ALT(arg2->unk_1_0) - 1; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A40A6C.s") + if (pathIndex >= 0) { + path = SubS_GetAdditionalPath(play, KAFEI_GET_PARAM_1F(&this->player.actor), pathIndex); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/EnTest3_Update.s") + curPathPoint = Lib_SegmentedToVirtual(path->points); + if (arg2->unk_1_0 > 0) { + nextPathPoint = curPathPoint + 1; + } else { + curPathPoint += path->count - 1; + nextPathPoint = curPathPoint - 1; + } + Math_Vec3s_ToVec3f(&curPathPos, curPathPoint); + Math_Vec3s_ToVec3f(&nextPathPos, nextPathPoint); + if (Math_Vec3f_DistXZ(&this->player.actor.world.pos, &curPathPos) > 10.0f) { + Math_Vec3f_Copy(&this->player.actor.world.pos, &curPathPos); + Math_Vec3f_Copy(&this->player.actor.home.pos, &curPathPos); + Math_Vec3f_Copy(&this->player.actor.prevPos, &curPathPos); + this->player.currentYaw = Math_Vec3f_Yaw(&this->player.actor.world.pos, &nextPathPos); + if (arg2->unk_1_0 < 0) { + this->player.currentYaw += 0x8000; + } + this->player.actor.shape.rot.y = this->player.currentYaw; + return true; + } + } + return false; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A40CF0.s") +Actor* func_80A3F2BC(PlayState* play, EnTest3* this, s32 actorId, s32 category, f32 arg4, f32 arg5) { + Actor* actor = play->actorCtx.actorLists[category].first; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A40F34.s") + while (actor != NULL) { + if (actorId == actor->id) { + f32 dy = this->player.actor.world.pos.y - actor->world.pos.y; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A4129C.s") + if ((fabsf(dy) < arg5) && (Actor_XZDistanceBetweenActors(&this->player.actor, actor) < arg4)) { + return actor; + } + } + actor = actor->next; + } + return NULL; +} + +s32 func_80A3F384(EnTest3* this, PlayState* play) { + Player* player = GET_PLAYER(play); + EnDoor* door = (EnDoor*)func_80A3F2BC(play, this, ACTOR_EN_DOOR, ACTORCAT_DOOR, 55.0f, 20.0f); + Vec3f offset; + + if ((door != NULL) && (door->unk_1A1 == 0) && + ((player->doorType == 0) || (&door->dyna.actor != player->doorActor)) && + Actor_ActorAIsFacingActorB(&this->player.actor, &door->dyna.actor, 0x3000)) { + Actor_OffsetOfPointInActorCoords(&door->dyna.actor, &offset, &this->player.actor.world.pos); + this->player.doorType = 1; + this->player.doorDirection = (offset.z >= 0.0f) ? 1.0f : -1.0f; + this->player.doorActor = &door->dyna.actor; + this->player.unk_A86 = -1; + return true; + } + return false; +} + +s32 func_80A3F4A4(PlayState* play) { + return (Player_GetMask(play) == PLAYER_MASK_NONE) || (Player_GetMask(play) == PLAYER_MASK_BUNNY) || + (Player_GetMask(play) == PLAYER_MASK_POSTMAN) || (Player_GetMask(play) == PLAYER_MASK_KEATON) || + (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK); +} + +void func_80A3F534(EnTest3* this, PlayState* play) { + if (!func_80A3F4A4(play)) { + this->unk_D78 = &D_80A41854[10]; + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) { + this->unk_D78 = &D_80A41854[7]; + } else { + this->unk_D78 = &D_80A41854[1]; + } + this->unk_D8D = this->player.actor.cutscene; +} + +void func_80A3F5A4(EnTest3* this, PlayState* play) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08) || !func_80A3F4A4(play)) { + this->unk_D78 = &D_80A41854[18]; + D_80A41D5C = false; + } else if (D_80A41D5C) { + this->unk_D78 = &D_80A41854[17]; + } else { + this->unk_D78 = &D_80A41854[12]; + } + this->unk_D8D = this->player.actor.cutscene; +} + +s32 func_80A3F62C(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) { + static EnTest3_struct_D78* D_80A418A8[] = { + &D_80A41854[0], &D_80A41854[1], &D_80A41854[11], &D_80A41854[12], &D_80A41854[19], + }; + + if (((func_80A3F15C(this, play, arg2) || (this->unk_D88 >= 8)) && ((arg2->unk_1_4 == 1) || (arg2->unk_1_4 == 2))) || + (arg2->unk_1_4 == 4)) { + if (arg2->unk_1_4 == 4) { + this->player.actor.home.rot.y = 0x7FFF; + } else { + this->player.actor.home.rot.y = this->player.actor.shape.rot.y + 0x8000; + } + this->player.stateFlags2 |= PLAYER_STATE2_40000; + play->startPlayerCutscene(play, &this->player, -1); + } + this->unk_D78 = D_80A418A8[arg2->unk_1_4]; + return true; +} + +s32 func_80A3F73C(EnTest3* this, PlayState* play) { + if (Actor_ProcessTalkRequest(&this->player.actor, &play->state)) { + func_80A3E7E0(this, func_80A4084C); + this->player.targetedActor = &GET_PLAYER(play)->actor; + this->player.stateFlags2 &= ~PLAYER_STATE2_40000; + D_80A41D5C = true; + if ((this->unk_D78->unk_0 == 4) && CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) { + func_80151BB4(play, 2); + } + } else { + if (play->actorCtx.flags & ACTORCTX_FLAG_4) { + play->actorCtx.flags &= ~ACTORCTX_FLAG_4; + this->player.stateFlags2 &= ~PLAYER_STATE2_40000; + this->unk_D90->stateFlags1 |= PLAYER_STATE1_20; + func_800BC154(play, &play->actorCtx, &this->unk_D90->actor, 4); + func_800BC154(play, &play->actorCtx, &this->player.actor, 2); + ActorCutscene_SetReturnCamera(this->subCamId); + play->startPlayerCutscene(play, &this->player, 7); + } + func_800B863C(&this->player.actor, play); + if (this->unk_D88 == 3) { + func_80A3F534(this, play); + } else if (this->unk_D88 == 5) { + func_80A3F5A4(this, play); + } + this->player.actor.textId = this->unk_D78->textId; + this->player.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + } + return false; +} + +s32 func_80A3F8D4(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) { + Actor* postActor; + + func_80A3F15C(this, play, arg2); + if (((postActor = func_80A3F2BC(play, this, ACTOR_EN_PST, ACTORCAT_PROP, 100.0f, 20.0f)) != NULL) || + ((postActor = func_80A3F2BC(play, this, ACTOR_EN_PM, ACTORCAT_NPC, 100.0f, 20.0f)) != NULL)) { + this->player.actor.home.rot.y = Actor_YawBetweenActors(&this->player.actor, postActor); + } + play->startPlayerCutscene(play, &this->player, 0x61); + return true; +} + +s32 func_80A3F9A4(EnTest3* this, PlayState* play) { + Math_ScaledStepToS(&this->player.actor.shape.rot.y, this->player.actor.home.rot.y, 0x320); + this->player.currentYaw = this->player.actor.shape.rot.y; + return false; +} + +s32 func_80A3F9E4(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) { + scheduleOutput->time0 = SCHEDULE_TIME_NOW; + scheduleOutput->time1 = (u16)(scheduleOutput->time0 + 70); + func_80A40098(this, play, arg2, scheduleOutput); + if (this->player.actor.xzDistToPlayer < 300.0f) { + this->unk_D8A = -1; + } else { + this->unk_D8A = 120; + } + return true; +} + +s32 func_80A3FA58(EnTest3* this, PlayState* play) { + s32 pad; + Player* player = GET_PLAYER(play); + u32 cond; + struct_80A41828 sp40; + ScheduleOutput scheduleOutput; + + if (player->stateFlags1 & PLAYER_STATE1_40) { + return false; + } + cond = func_80A40230(this, play); + if (this->unk_D8A > 0) { + this->unk_D8A--; + cond = cond && (this->player.actor.xzDistToPlayer < 200.0f); + if (cond || this->unk_D8A <= 0) { + func_80A3F114(this, play); + sp40.unk_1_0 = 5; + scheduleOutput.time0 = SCHEDULE_TIME_NOW; + scheduleOutput.time1 = (u16)(scheduleOutput.time0 + (cond ? 80 : 140)); + + func_80A40098(this, play, &sp40, &scheduleOutput); + this->unk_D8A = -40; + return false; + } + if (this->unk_D8A == 90) { + play->startPlayerCutscene(play, &this->player, 0x15); + } + } else { + this->unk_D8A++; + if (this->unk_D8A == 0) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_51_04); + this->unk_D88 = 0; + } + } + return false; +} + +s32 func_80A3FBCC(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) { + return true; +} + +s32 func_80A3FBE8(EnTest3* this, PlayState* play) { + if (D_80A41D20 == 0) { + if (!Play_InCsMode(play)) { + D_80A41D20 = 1; + this->unk_D78 = &D_80A41854[20]; + this->unk_D8D = this->player.actor.cutscene; + this->player.actor.textId = this->unk_D78->textId; + } + } else if (D_80A41D20 == 1) { + if (this->unk_D8D >= 0) { + if (func_80A3E9DC(this, play)) { + this->unk_D8D = -1; + Environment_StopTime(); + } + } else if ((play->actorCtx.flags & ACTORCTX_FLAG_6) || (play->actorCtx.flags & ACTORCTX_FLAG_5)) { + this->unk_D8D = ActorCutscene_GetAdditionalCutscene(this->player.actor.cutscene); + SET_WEEKEVENTREG(WEEKEVENTREG_90_02); + if (play->actorCtx.flags & ACTORCTX_FLAG_5) { + this->unk_D8D = ActorCutscene_GetAdditionalCutscene(this->unk_D8D); + } + Audio_QueueSeqCmd(NA_BGM_STOP | 0x10000); + D_80A41D20 = 2; + } else { + func_80A3F73C(this, play); + } + } else if ((D_80A41D20 == 2) && func_80A3E9DC(this, play)) { + ActorCutscene_SetReturnCamera(CAM_ID_MAIN); + Environment_StartTime(); + if (((void)0, gSaveContext.save.time) > CLOCK_TIME(6, 0)) { + func_800FE658(TIME_TO_MINUTES_ALT_F(fabsf((s16) - ((void)0, gSaveContext.save.time)))); + } + if (play->actorCtx.flags & ACTORCTX_FLAG_6) { + SET_WEEKEVENTREG(WEEKEVENTREG_51_20); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_02); + } + D_80A41D20 = 3; + } + return false; +} + +s32 func_80A3FDE4(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) { + this->unk_D8D = ActorCutscene_GetAdditionalCutscene(this->player.actor.cutscene); + return true; +} + +s32 func_80A3FE20(EnTest3* this, PlayState* play) { + struct_80A41828 sp2C; + ScheduleOutput scheduleOutput; + + if (D_80A41D64 == 0) { + if (func_80A3E9DC(this, play)) { + sp2C.unk_1_0 = 2; + scheduleOutput.time0 = SCHEDULE_TIME_NOW; + scheduleOutput.time1 = (u16)(scheduleOutput.time0 + 1000); + func_80A40098(this, play, &sp2C, &scheduleOutput); + D_80A41D64 = 1; + return false; + } + } else if (D_80A41D64 == 1) { + func_80A40230(this, play); + } else if (D_80A41D64 == 2) { + ActorCutscene_Stop(this->unk_D8D); + SET_WEEKEVENTREG(WEEKEVENTREG_90_02); + D_80A41D64 = 3; + } + return false; +} + +s32 func_80A3FF10(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) { + static Vec3f D_80A418BC = { -420.0f, 210.0f, -162.0f }; + + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_51_40)) { + D_80A41D68 = 2; + Math_Vec3f_Copy(&this->player.actor.world.pos, &D_80A418BC); + Math_Vec3f_Copy(&this->player.actor.home.pos, &D_80A418BC); + + this->player.actor.home.rot.y = -0x2AAB; + this->player.actor.shape.rot.y = -0x2AAB; + this->player.currentYaw = -0x2AAB; + if (1) {} // macro? + return true; + } else { + func_80A3F15C(this, play, arg2); + this->unk_D8D = this->player.actor.cutscene; + if (play->roomCtx.curRoom.num == 2) { + this->unk_D8D = ActorCutscene_GetAdditionalCutscene(this->unk_D8D); + } + return true; + } +} + +s32 func_80A3FFD0(EnTest3* this, PlayState* play2) { + PlayState* play = play2; + + if (D_80A41D68 == 0) { + if (!Play_InCsMode(play) && (play->roomCtx.curRoom.num == 2)) { + D_80A41D68 = 1; + } + } else if (D_80A41D68 == 1) { + if (func_80A3E9DC(this, play)) { + D_80A41D68 = 2; + } + } else { + SET_WEEKEVENTREG(WEEKEVENTREG_51_40); + play->startPlayerCutscene(play, &this->player, 0x6E); + } + return false; +} + +s32 func_80A40098(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) { + u16 now = SCHEDULE_TIME_NOW; + u16 startTime; + u16 numWaypoints; + + func_80A3F15C(this, play, arg2); + this->unk_D7C = SubS_GetAdditionalPath(play, KAFEI_GET_PARAM_1F(&this->player.actor), ABS_ALT(arg2->unk_1_0) - 1); + if ((this->unk_D88 < 7) && (this->unk_D88 != 0) && (this->unk_D80 >= 0)) { + startTime = now; + } else { + startTime = scheduleOutput->time0; + } + if (scheduleOutput->time1 < startTime) { + this->unk_DA8 = (startTime - scheduleOutput->time1) + (DAY_LENGTH - 1); + } else { + this->unk_DA8 = scheduleOutput->time1 - startTime; + } + this->unk_DB4 = now - startTime; + numWaypoints = startTime = this->unk_D7C->count - (SUBS_TIME_PATHING_ORDER - 1); + this->unk_DAC = this->unk_DA8 / numWaypoints; + this->unk_DB0 = (this->unk_DB4 / this->unk_DAC) + (SUBS_TIME_PATHING_ORDER - 1); + this->unk_D89 &= ~1; + this->unk_D84 = 1.0f; + return true; +} + +s32 func_80A40230(EnTest3* this, PlayState* play) { + f32 knots[265]; + Vec3f worldPos; + Vec3f sp7C; + Vec3f sp70; + s32 sp6C = 0; + s32 sp68 = 0; + s32 pad1; + f32 dx; + f32 dy; + s32 ret = false; + + SubS_TimePathing_FillKnots(knots, 3, this->unk_D7C->count + 3); + if (!(this->unk_D89 & 1)) { + sp70 = gZeroVec3f; + SubS_TimePathing_Update(this->unk_D7C, &this->unk_DA4, &this->unk_DB4, this->unk_DAC, this->unk_DA8, + &this->unk_DB0, knots, &sp70, this->unk_D80); + SubS_TimePathing_ComputeInitialY(play, this->unk_D7C, this->unk_DB0, &sp70); + Math_Vec3f_Copy(&this->player.actor.home.pos, &sp70); + Math_Vec3f_Copy(&this->player.actor.prevPos, &sp70); + this->player.actor.world.pos.y = sp70.y; + this->unk_D89 |= 1; + } else { + sp70 = this->unk_D98; + } + this->player.actor.world.pos.x = sp70.x; + this->player.actor.world.pos.z = sp70.z; + if (play->transitionMode != TRANS_MODE_OFF) { + sp6C = this->unk_DB4; + sp68 = this->unk_DB0; + sp70 = this->player.actor.world.pos; + } + this->unk_D98 = gZeroVec3f; + if (SubS_TimePathing_Update(this->unk_D7C, &this->unk_DA4, &this->unk_DB4, this->unk_DAC, this->unk_DA8, + &this->unk_DB0, knots, &this->unk_D98, this->unk_D80)) { + if (this->unk_D88 == 0x14) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_58_80); + this->player.actor.draw = NULL; + } else if (this->unk_D88 == 9) { + D_80A41D64 = 2; + } + ret = true; + } else { + worldPos = this->player.actor.world.pos; + sp7C = this->unk_D98; + this->player.actor.world.rot.y = Math_Vec3f_Yaw(&worldPos, &sp7C); + } + if (play->transitionMode != TRANS_MODE_OFF) { + this->unk_DB4 = sp6C; + this->unk_DB0 = sp68; + this->unk_D98 = sp70; + } + dx = this->player.actor.world.pos.x - this->player.actor.prevPos.x; + dy = this->player.actor.world.pos.z - this->player.actor.prevPos.z; + if (!Math_StepToF(&this->unk_D84, 1.0f, 0.1f)) { + this->player.actor.world.pos.x = this->player.actor.prevPos.x + (dx * this->unk_D84); + this->player.actor.world.pos.z = this->player.actor.prevPos.z + (dy * this->unk_D84); + } + Math_Vec3f_Copy(&D_80A41D50, &this->player.actor.world.pos); + dx = this->player.actor.world.pos.x - this->player.actor.prevPos.x; + dy = this->player.actor.world.pos.z - this->player.actor.prevPos.z; + this->player.linearVelocity = sqrtf(SQ(dx) + SQ(dy)); + this->player.linearVelocity *= 1.0f + (1.05f * fabsf(Math_SinS(this->player.unk_B6C))); + D_80A41D40 = (this->player.linearVelocity * 10.0f) + 20.0f; + D_80A41D40 = CLAMP_MAX(D_80A41D40, 60.0f); + D_80A41D44 = this->player.actor.world.rot.y; + this->player.actor.world.pos.x = this->player.actor.prevPos.x; + this->player.actor.world.pos.z = this->player.actor.prevPos.z; + if (!func_80A3F384(this, play)) { + D_80A41D48 = true; + } + return ret; +} + +void func_80A40678(EnTest3* this, PlayState* play) { + struct_80A41828* sp3C; + ScheduleOutput scheduleOutput; + + this->unk_D80 = ((this->unk_D88 == 20) || (this->unk_D88 == 10) || (this->unk_D88 == 9)) ? 3 + : Play_InCsMode(play) ? 0 + : R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); + + if (Schedule_RunScript(play, sScheduleScript, &scheduleOutput)) { + if (this->unk_D88 != scheduleOutput.result) { + sp3C = &D_80A41828[scheduleOutput.result]; + func_80A3F114(this, play); + if (sp3C->unk_0 != 4) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_51_04); + } + if (!D_80A417E8[sp3C->unk_0].unk_0(this, play, sp3C, &scheduleOutput)) { + return; + } + if (scheduleOutput.result == 6) { + this->player.actor.home.rot.y = 0x7FFF; + this->player.stateFlags2 |= PLAYER_STATE2_40000; + play->startPlayerCutscene(play, &this->player, -1); + } + } + } else { + scheduleOutput.result = 0; + } + this->unk_D88 = scheduleOutput.result; + sp3C = &D_80A41828[this->unk_D88]; + D_80A417E8[sp3C->unk_0].unk_4(this, play); +} + +void func_80A40824(EnTest3* this, PlayState* play) { + this->unk_D78 = &D_80A41854[0]; + func_80A3F73C(this, play); +} + +void func_80A4084C(EnTest3* this, PlayState* play) { + if (Actor_TextboxIsClosing(&this->player.actor, play)) { + if ((this->unk_D78->unk_1 == 0) || !func_80A3E80C(this, play, this->unk_D78->unk_1 - 1)) { + if (KAFEI_GET_PARAM_1E0(&this->player.actor) == 0) { + func_80A3E7E0(this, func_80A40824); + } else { + func_80A3E7E0(this, func_80A40678); + } + this->player.targetedActor = NULL; + } + } else if (func_80A3ED24(this, play)) { + func_80A3E7E0(this, func_80A40908); + } +} + +void func_80A40908(EnTest3* this, PlayState* play) { + if (Actor_ProcessTalkRequest(&this->player.actor, &play->state)) { + func_80A3E7E0(this, func_80A4084C); + this->player.targetedActor = &GET_PLAYER(play)->actor; + SET_WEEKEVENTREG(WEEKEVENTREG_51_08); + func_80151BB4(play, 0x19); + func_80151BB4(play, 2); + } else { + func_800B8500(&this->player.actor, play, 9999.9f, 9999.9f, PLAYER_IA_MINUS1); + this->unk_D78 = &D_80A41854[6]; + this->player.actor.textId = this->unk_D78->textId; + this->player.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); + } +} + +void func_80A409D4(EnTest3* this, PlayState* play) { + if ((play->actorCtx.flags & ACTORCTX_FLAG_5) || (play->actorCtx.flags & ACTORCTX_FLAG_4)) { + play->actorCtx.flags &= ~ACTORCTX_FLAG_4; + func_80A3F0B0(this, play); + ActorCutscene_SetReturnCamera(CAM_ID_MAIN); + } else { + sEnTest3_Input = *CONTROLLER1(&play->state); + } +} + +void func_80A40A6C(EnTest3* this, PlayState* play) { + SET_WEEKEVENTREG(WEEKEVENTREG_64_20); +} + +void EnTest3_Update(Actor* thisx, PlayState* play2) { + PlayState* play = play2; + EnTest3* this = THIS; + + sEnTest3_Input.rel.button = sEnTest3_Input.cur.button; + sEnTest3_Input.cur.button = 0; + sEnTest3_Input.rel.stick_x = 0; + sEnTest3_Input.rel.stick_y = 0; + + play->actorCtx.flags &= ~ACTORCTX_FLAG_7; + this->player.actor.draw = EnTest3_Draw; + D_80A41D48 = false; + this->player.actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); + if (Cutscene_CheckActorAction(play, 0x1FA) && + !((this->player.actor.category == ACTORCAT_PLAYER) && + ((play->actorCtx.flags & ACTORCTX_FLAG_5) || (play->actorCtx.flags & ACTORCTX_FLAG_4)))) { + if (this->player.csMode != 5) { + play->startPlayerCutscene(play, &this->player, 5); + } + play->actorCtx.flags &= ~ACTORCTX_FLAG_4; + } else if (this->player.actor.category == ACTORCAT_PLAYER) { + func_80A409D4(this, play); + } else if (play->startPlayerCutscene(play, &this->player, 0)) { + if (this->unk_D88 >= 7) { + Vec3f worldPos; + + Math_Vec3f_Copy(&worldPos, &this->player.actor.world.pos); + this->unk_D80 = 4; + func_80A40230(this, play); + Math_Vec3f_Copy(&this->player.actor.world.pos, &worldPos); + D_80A41D48 = false; + this->unk_D84 = 0.0f; + } + } else { + D_80A41D40 = 0.0f; + D_80A41D44 = this->player.actor.shape.rot.y; + this->unk_D94(this, play); + sEnTest3_Input.press.button = + (sEnTest3_Input.rel.button ^ sEnTest3_Input.cur.button) & sEnTest3_Input.cur.button; + func_800B6F20(play, &sEnTest3_Input, D_80A41D40, D_80A41D44); + } + play->playerUpdate(&this->player, play, &sEnTest3_Input); + if (D_80A41D48) { + this->player.actor.world.pos.x = D_80A41D50.x; + this->player.actor.world.pos.z = D_80A41D50.z; + this->player.linearVelocity = 0.0f; + } +} + +s32 D_80A418C8 = false; + +s32 EnTest3_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { + EnTest3* this = THIS; + + if (limbIndex == OBJECT_TEST3_LIMB_01) { + D_80A41D6C = &this->player.bodyPartsPos[-1]; + if (!(this->player.skelAnime.moveFlags & ANIM_FLAG_4) || (this->player.skelAnime.moveFlags & ANIM_FLAG_1)) { + pos->x *= this->player.ageProperties->unk_08; + pos->z *= this->player.ageProperties->unk_08; + } + if (!(this->player.skelAnime.moveFlags & ANIM_FLAG_4) || + (this->player.skelAnime.moveFlags & ANIM_FLAG_UPDATEY)) { + pos->y *= this->player.ageProperties->unk_08; + } + pos->y -= this->player.unk_AB8; + if (this->player.unk_AAA != 0) { + + Matrix_Translate(pos->x, ((Math_CosS(this->player.unk_AAA) - 1.0f) * 200.0f) + pos->y, pos->z, + MTXMODE_APPLY); + Matrix_RotateXS(this->player.unk_AAA, MTXMODE_APPLY); + Matrix_RotateZYX(rot->x, rot->y, rot->z, MTXMODE_APPLY); + func_80125318(pos, rot); + } + } else { + if (*dList != NULL) { + D_80A41D6C++; + } + if (D_80A418C8) { + *dList = NULL; + } + if (limbIndex == OBJECT_TEST3_LIMB_0B) { + rot->x += this->player.unk_AAC.z; + rot->y -= this->player.unk_AAC.y; + rot->z += this->player.unk_AAC.x; + } else if (limbIndex == OBJECT_TEST3_LIMB_0A) { + s32 requiredScopeTemp; + + if (this->player.unk_AA8 != 0) { + Matrix_RotateZS(0x44C, MTXMODE_APPLY); + Matrix_RotateYS(this->player.unk_AA8, MTXMODE_APPLY); + } + if (this->player.unk_AB2.y != 0) { + Matrix_RotateYS(this->player.unk_AB2.y, MTXMODE_APPLY); + } + Matrix_RotateXS(this->player.unk_AB2.x, MTXMODE_APPLY); + if (this->player.unk_AB2.z != 0) { + Matrix_RotateZS(this->player.unk_AB2.z, MTXMODE_APPLY); + } + } else { + func_80125500(play, &this->player, limbIndex, pos, rot); + } + } + return false; +} + +void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dList2, Vec3s* rot, Actor* thisx) { + s32 pad; + EnTest3* this = THIS; + + if (*dList2 != NULL) { + Matrix_MultZero(D_80A41D6C); + } + if (limbIndex == OBJECT_TEST3_LIMB_10) { + MtxF curMtxF; + Actor* leftHandActor; + + Math_Vec3f_Copy(&this->player.leftHandWorld.pos, D_80A41D6C); + if (*dList1 != NULL) { + func_80128640(play, &this->player, *dList1); + if (this->player.stateFlags3 & PLAYER_STATE3_20000000) { + OPEN_DISPS(play->state.gfxCtx); + gSPDisplayList(POLY_OPA_DISP++, object_test3_DL_00EDD0); + CLOSE_DISPS(play->state.gfxCtx); + } + } + leftHandActor = this->player.heldActor; + if ((leftHandActor != NULL) && (this->player.stateFlags1 & PLAYER_STATE1_800)) { + Vec3s curRot; + + Matrix_Get(&curMtxF); + Matrix_MtxFToYXZRot(&curMtxF, &curRot, false); + leftHandActor->world.rot.y = this->player.actor.shape.rot.y + this->player.leftHandWorld.rot.y; + leftHandActor->shape.rot.y = leftHandActor->world.rot.y; + } else { + Matrix_Get(&this->player.mf_CC4); + Matrix_MtxFToYXZRot(&this->player.mf_CC4, &this->player.leftHandWorld.rot, false); + func_80126B8C(play, &this->player); + } + + } else if (limbIndex == OBJECT_TEST3_LIMB_13) { + Actor* leftHandActor = this->player.heldActor; + + if (leftHandActor != NULL) { + leftHandActor->world.pos.x = (this->player.bodyPartsPos[15].x + this->player.leftHandWorld.pos.x) / 2.0f; + leftHandActor->world.pos.y = (this->player.bodyPartsPos[15].y + this->player.leftHandWorld.pos.y) / 2.0f; + leftHandActor->world.pos.z = (this->player.bodyPartsPos[15].z + this->player.leftHandWorld.pos.z) / 2.0f; + } + } else if (limbIndex == OBJECT_TEST3_LIMB_0B) { + Actor* actor730 = this->player.targetedActor; + + if ((*dList1 != NULL) && this->player.currentMask && !(this->player.stateFlags2 & PLAYER_STATE2_1000000)) { + // this->player.currentMask != PLAYER_MASK_NONE + if ((this->player.skelAnime.animation != &gPlayerAnim_cl_maskoff) && + ((this->player.skelAnime.animation != &gPlayerAnim_cl_setmask) || + (this->player.skelAnime.curFrame >= 12.0f))) { + if (func_80127438(play, &this->player, this->player.currentMask)) { + OPEN_DISPS(play->state.gfxCtx); + gSPDisplayList(POLY_OPA_DISP++, object_mask_ki_tan_DL_0004A0); + CLOSE_DISPS(play->state.gfxCtx); + } + } + } + if ((actor730 != NULL) && (actor730->id == ACTOR_BG_IKNV_OBJ)) { + Math_Vec3f_Copy(&this->player.actor.focus.pos, &actor730->focus.pos); + } else { + static Vec3f D_80A418CC = { 1100.0f, -700.0f, 0.0f }; + + Matrix_MultVec3f(&D_80A418CC, &this->player.actor.focus.pos); + } + } else if (limbIndex == OBJECT_TEST3_LIMB_15) { + if (D_80A41D60 || CHECK_WEEKEVENTREG(WEEKEVENTREG_50_80) || + (INV_CONTENT(ITEM_PENDANT_OF_MEMORIES) == ITEM_PENDANT_OF_MEMORIES) || + (this->player.getItemDrawId - 1 == GID_PENDANT_OF_MEMORIES)) { + D_80A41D60 = true; + } else { + OPEN_DISPS(play->state.gfxCtx); + gSPDisplayList(POLY_OPA_DISP++, object_test3_DL_00CB60); + CLOSE_DISPS(play->state.gfxCtx); + } + } else { + func_80128B74(play, &this->player, limbIndex); + } +} + +static TexturePtr sEyeTextures[] = { + object_test3_Tex_000DC0, object_test3_Tex_003680, object_test3_Tex_003E80, object_test3_Tex_004680, + object_test3_Tex_004E80, object_test3_Tex_005680, object_test3_Tex_005E80, object_test3_Tex_006680, +}; + +static TexturePtr sMouthTextures[] = { + object_test3_Tex_0009C0, + object_test3_Tex_006E80, + object_test3_Tex_007280, + object_test3_Tex_007680, +}; + +typedef struct { + /* 0x0 */ u8 eyeIndex; + /* 0x1 */ u8 mouthIndex; +} KafeiFace; // size = 0x2 + +static KafeiFace sFaceExpressions[] = { + { 0, 0 }, { 1, 0 }, { 2, 0 }, { 0, 0 }, { 1, 0 }, { 2, 0 }, { 4, 0 }, { 5, 1 }, { 7, 2 }, { 0, 2 }, + { 3, 0 }, { 4, 0 }, { 2, 2 }, { 1, 1 }, { 0, 2 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, +}; + +void EnTest3_Draw(Actor* thisx, PlayState* play2) { + PlayState* play = play2; + EnTest3* this = THIS; + s32 eyeTexIndex = (this->player.skelAnime.jointTable[OBJECT_TEST3_LIMB_MAX].x & 0xF) - 1; + s32 mouthTexIndex = ((this->player.skelAnime.jointTable[OBJECT_TEST3_LIMB_MAX].x >> 4) & 0xF) - 1; + Gfx* gfx; + + OPEN_DISPS(play->state.gfxCtx); + + func_8012C268(play); + if (this->player.invincibilityTimer > 0) { + s32 temp2; // Must exist for stack order. Could hold the result of CLAMP instead. + + this->player.unk_B5F += CLAMP(50 - this->player.invincibilityTimer, 8, 40); + temp2 = Math_CosS(this->player.unk_B5F * 0x100) * 2000.0f; + POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 255, 0, 0, 0, 0, 4000 - temp2); + } + func_800B8050(&this->player.actor, play, 0); + D_80A418C8 = false; + if (this->player.stateFlags1 & PLAYER_STATE1_100000) { + Vec3f sp4C; + + SkinMatrix_Vec3fMtxFMultXYZ(&play->viewProjectionMtxF, &this->player.actor.focus.pos, &sp4C); + if (sp4C.z < -4.0f) { + D_80A418C8 = true; + } + } + + gfx = POLY_OPA_DISP; + + if (eyeTexIndex < 0) { + eyeTexIndex = sFaceExpressions[this->player.actor.shape.face].eyeIndex; + } + gSPSegment(&gfx[0], 0x08, Lib_SegmentedToVirtual(sEyeTextures[eyeTexIndex])); + if (mouthTexIndex < 0) { + mouthTexIndex = sFaceExpressions[this->player.actor.shape.face].mouthIndex; + } + gSPSegment(&gfx[1], 0x09, Lib_SegmentedToVirtual(sMouthTextures[mouthTexIndex])); + + POLY_OPA_DISP = &gfx[2]; + + SkelAnime_DrawFlexLod(play, this->player.skelAnime.skeleton, this->player.skelAnime.jointTable, + this->player.skelAnime.dListCount, EnTest3_OverrideLimbDraw, EnTest3_PostLimbDraw, + &this->player.actor, 0); + if (this->player.invincibilityTimer > 0) { + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); + } + if ((this->player.getItemDrawId - 1) != GID_NONE) { + Player_DrawGetItem(play, &this->player); + } + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.h b/src/overlays/actors/ovl_En_Test3/z_en_test3.h index fbddc77f1..a4f1ff659 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.h +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.h @@ -7,11 +7,35 @@ struct EnTest3; typedef void (*EnTest3ActionFunc)(struct EnTest3*, PlayState*); +#define KAFEI_GET_PARAM_1F(thisx) ((thisx)->params & 0x1F) +#define KAFEI_GET_PARAM_1E0(thisx) (((thisx)->params >> 5) & 0xF) + +typedef struct { + /* 0x0 */ u8 unk_0; + /* 0x1 */ u8 unk_1; + /* 0x2 */ u16 textId; +} EnTest3_struct_D78; // size = 0x4 + typedef struct EnTest3 { - /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x628]; - /* 0x76C */ EnTest3ActionFunc actionFunc; - /* 0x770 */ char unk_770[0x648]; + /* 0x000 */ Player player; + /* 0xD78 */ EnTest3_struct_D78* unk_D78; + /* 0xD7C */ Path* unk_D7C; + /* 0xD80 */ s32 unk_D80; + /* 0xD84 */ f32 unk_D84; + /* 0xD88 */ s8 unk_D88; + /* 0xD89 */ u8 unk_D89; + /* 0xD8A */ s16 unk_D8A; + /* 0xD8C */ u8 unk_D8C; + /* 0xD8D */ s8 unk_D8D; + /* 0xD8E */ s16 subCamId; + /* 0xD90 */ Player* unk_D90; + /* 0xD94 */ EnTest3ActionFunc unk_D94; + /* 0xD98 */ Vec3f unk_D98; + /* 0xDA4 */ f32 unk_DA4; + /* 0xDA8 */ s32 unk_DA8; + /* 0xDAC */ s32 unk_DAC; + /* 0xDB0 */ s32 unk_DB0; + /* 0xDB4 */ s32 unk_DB4; } EnTest3; // size = 0xDB8 #endif // Z_EN_TEST3_H diff --git a/src/overlays/actors/ovl_En_Test4/overlay.cfg b/src/overlays/actors/ovl_En_Test4/overlay.cfg deleted file mode 100644 index 06bfe7839..000000000 --- a/src/overlays/actors/ovl_En_Test4/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Test4 -z_en_test4.c diff --git a/src/overlays/actors/ovl_En_Test4/z_en_test4.c b/src/overlays/actors/ovl_En_Test4/z_en_test4.c index 439f3837f..5a6c4573f 100644 --- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c +++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c @@ -1,7 +1,7 @@ /* * File: z_en_test4.c * Overlay: ovl_En_Test4 - * Description: Three-Day Timer + * Description: Three-Day Events */ #include "prevent_bss_reordering.h" @@ -59,7 +59,7 @@ void func_80A41D70(EnTest4* this, PlayState* play) { this->unk_146 = gSaveContext.save.time += CLOCK_TIME_MINUTE; } - func_8010EE74(play, CURRENT_DAY); + Interface_NewDay(play, CURRENT_DAY); D_801BDBC8 = 0xFE; func_800FB758(play); func_800FEAF4(&play->envCtx); @@ -71,7 +71,7 @@ void func_80A41D70(EnTest4* this, PlayState* play) { this->actionFunc = func_80A42F20; sCurrentCs = sCutscenes[this->unk_144]; this->transitionCsTimer = 0; - gSaveContext.eventInf[1] |= 0x80; + SET_EVENTINF(EVENTINF_17); } else if (this->unk_144 == 0) { play_sound(NA_SE_EV_CHICKEN_CRY_M); } else { @@ -95,7 +95,7 @@ void func_80A41FA4(EnTest4* this, PlayState* play) { } else if ((sCutscenes[this->unk_144] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) { Sram_IncrementDay(); gSaveContext.save.time = CLOCK_TIME(6, 0); - func_8010EE74(play, CURRENT_DAY); + Interface_NewDay(play, CURRENT_DAY); func_80151A68(play, sDayMessages2[CURRENT_DAY - 1]); D_801BDBC8 = 0xFE; func_800FB758(play); @@ -108,7 +108,7 @@ void func_80A41FA4(EnTest4* this, PlayState* play) { this->actionFunc = func_80A42F20; sCurrentCs = sCutscenes[this->unk_144]; this->transitionCsTimer = 0; - gSaveContext.eventInf[1] |= 0x80; + SET_EVENTINF(EVENTINF_17); } else if (this->unk_144 == 0) { play_sound(NA_SE_EV_CHICKEN_CRY_M); } else { @@ -283,7 +283,7 @@ void func_80A425E4(EnTest4* this, PlayState* play) { gSaveContext.screenScale = 1000.0f; } if (gSaveContext.screenScale != 1000.0f) { - gSaveContext.screenScaleFlag = 1; + gSaveContext.screenScaleFlag = true; } } } @@ -298,19 +298,19 @@ void EnTest4_Init(Actor* thisx, PlayState* play) { if (temp_v0 >= 0) { ActorCutscene* temp_v0_2 = ActorCutscene_GetCutscene(sCutscenes[0]); - gSaveContext.eventInf[5] |= 0x4; + SET_EVENTINF(EVENTINF_52); sCutscenes[1] = temp_v0_2->additionalCutscene; } else { - gSaveContext.eventInf[5] &= (u8)~0x4; + CLEAR_EVENTINF(EVENTINF_52); sCutscenes[1] = sCutscenes[0]; } - if (sIsLoaded || (gSaveContext.eventInf[2] & 0x80)) { + if (sIsLoaded || (CHECK_EVENTINF(EVENTINF_27))) { Actor_Kill(&this->actor); } else { sIsLoaded = true; this->actor.room = -1; - gSaveContext.screenScaleFlag = 0; + gSaveContext.screenScaleFlag = false; gSaveContext.screenScale = 1000.0f; if (CURRENT_DAY == 0) { if (gSaveContext.save.time < CLOCK_TIME(6, 1)) { @@ -355,7 +355,7 @@ void EnTest4_Init(Actor* thisx, PlayState* play) { this->lastBellTime = gSaveContext.save.time; if ((sCutscenes[this->unk_144] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) { - gSaveContext.screenScaleFlag = 0; + gSaveContext.screenScaleFlag = false; gSaveContext.screenScale = 1000.0f; } } @@ -381,8 +381,8 @@ void func_80A42AB8(EnTest4* this, PlayState* play) { if ((temp_a3 * temp_a2) <= 0) { gSaveContext.unk_3CA7 = 1; - if (play->actorCtx.flags & ACTORCTX_FLAG_2) { - play->actorCtx.flags &= ~ACTORCTX_FLAG_2; + if (play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON) { + play->actorCtx.flags &= ~ACTORCTX_FLAG_PICTO_BOX_ON; } if (temp_a0 != CLOCK_TIME(6, 0)) { @@ -391,14 +391,14 @@ void func_80A42AB8(EnTest4* this, PlayState* play) { if (CURRENT_DAY == 3) { Interface_StartMoonCrash(play); Actor_Kill(&this->actor); - gSaveContext.eventInf[1] |= 0x80; + SET_EVENTINF(EVENTINF_17); } else if (((sCutscenes[this->unk_144] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) && (CURRENT_DAY != 3)) { func_80A41FA4(this, play); } else { gSaveContext.screenScale = 0.0f; Play_SetRespawnData(&play->state, RESPAWN_MODE_DOWN, Entrance_CreateFromSpawn(0), player->unk_3CE, - 0xBFF, &player->unk_3C0, player->unk_3CC); + PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &player->unk_3C0, player->unk_3CC); func_80169EFC(&play->state); if (player->stateFlags1 & PLAYER_STATE1_800000) { EnHorse* rideActor = (EnHorse*)player->rideActor; @@ -413,7 +413,7 @@ void func_80A42AB8(EnTest4* this, PlayState* play) { } gSaveContext.respawnFlag = -4; - gSaveContext.eventInf[2] |= 0x80; + SET_EVENTINF(EVENTINF_27); Actor_Kill(&this->actor); } } @@ -442,9 +442,9 @@ void func_80A42AB8(EnTest4* this, PlayState* play) { u32 entrance = gSaveContext.save.entrance; if ((play->actorCtx.flags & ACTORCTX_FLAG_1)) { - playerParams = 0xCFF; + playerParams = PLAYER_PARAMS(0xFF, PLAYER_INITMODE_TELESCOPE); } else { - playerParams = 0xBFF; + playerParams = PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B); } Play_SetRespawnData(&play->state, RESPAWN_MODE_RETURN, entrance, player->unk_3CE, playerParams, &player->unk_3C0, player->unk_3CC); @@ -456,7 +456,7 @@ void func_80A42AB8(EnTest4* this, PlayState* play) { } gSaveContext.nextCutsceneIndex = 0xFFF1; play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_02; + play->transitionType = TRANS_TYPE_FADE_BLACK; player->stateFlags1 |= PLAYER_STATE1_200; Actor_Kill(&this->actor); } @@ -508,8 +508,9 @@ void func_80A42F20(EnTest4* this, PlayState* play) { if (sCurrentCs >= 0) { ActorCutscene_Stop(sCurrentCs); } + gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; - gSaveContext.eventInf[1] &= (u8)~0x80; + CLEAR_EVENTINF(EVENTINF_17); Interface_SetHudVisibility(HUD_VISIBILITY_ALL); } } diff --git a/src/overlays/actors/ovl_En_Test5/overlay.cfg b/src/overlays/actors/ovl_En_Test5/overlay.cfg deleted file mode 100644 index 9ad6cee31..000000000 --- a/src/overlays/actors/ovl_En_Test5/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Test5 -z_en_test5.c diff --git a/src/overlays/actors/ovl_En_Test6/overlay.cfg b/src/overlays/actors/ovl_En_Test6/overlay.cfg deleted file mode 100644 index 35635730d..000000000 --- a/src/overlays/actors/ovl_En_Test6/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Test6 -z_en_test6.c diff --git a/src/overlays/actors/ovl_En_Test6/z_en_test6.c b/src/overlays/actors/ovl_En_Test6/z_en_test6.c index 48f5327ad..6f1c5ac54 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c @@ -125,7 +125,7 @@ void func_80A90730(EnTest6* this, PlayState* play) { phi_s0 = 0; phi_f24 = -900.0f; - if (gSaveContext.eventInf[7] & 1) { + if (CHECK_EVENTINF(EVENTINF_70)) { for (i = 0; i < 6; i++) { D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 5; } @@ -134,7 +134,7 @@ void func_80A90730(EnTest6* this, PlayState* play) { phi_s0 |= 1; } - if (gSaveContext.eventInf[7] & 0x10) { + if (CHECK_EVENTINF(EVENTINF_74)) { D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 1; D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 1; if (!(phi_s0 & 1)) { @@ -144,7 +144,7 @@ void func_80A90730(EnTest6* this, PlayState* play) { phi_s0 |= 0x10; } - if (gSaveContext.eventInf[7] & 2) { + if (CHECK_EVENTINF(EVENTINF_71)) { D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 2; D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 2; if (!(phi_s0 & 1)) { @@ -154,7 +154,7 @@ void func_80A90730(EnTest6* this, PlayState* play) { phi_s0 |= 2; } - if (gSaveContext.eventInf[7] & 4) { + if (CHECK_EVENTINF(EVENTINF_72)) { D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 3; if (!(phi_s0 & (0x10 | 0x2 | 0x1))) { D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 3; @@ -162,7 +162,7 @@ void func_80A90730(EnTest6* this, PlayState* play) { phi_s0 |= 4; } - if (gSaveContext.eventInf[7] & 8) { + if (CHECK_EVENTINF(EVENTINF_73)) { D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 4; if (!(phi_s0 & (0x10 | 0x2 | 0x1))) { D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 4; @@ -183,16 +183,16 @@ void func_80A90730(EnTest6* this, PlayState* play) { } } -void func_80A90C08(s16 arg0) { - func_8016566C(arg0); +void EnTest6_EnableMotionBlur(s16 alpha) { + Play_EnableMotionBlur(alpha); } -void func_80A90C34(void) { - func_80165690(); +void EnTest6_DisableMotionBlur(void) { + Play_DisableMotionBlur(); } void func_80A90C54(PlayState* play, f32 arg1) { - play->envCtx.fillScreen = 1; + play->envCtx.fillScreen = true; play->envCtx.screenFillColor[0] = 250; play->envCtx.screenFillColor[1] = 250; play->envCtx.screenFillColor[2] = 250; @@ -200,7 +200,7 @@ void func_80A90C54(PlayState* play, f32 arg1) { } void func_80A90D20(PlayState* play) { - play->envCtx.fillScreen = 0; + play->envCtx.fillScreen = false; } void func_80A90D34(EnTest6* this, PlayState* play, EnTest6Struct* ptr) { @@ -211,7 +211,7 @@ void func_80A90D34(EnTest6* this, PlayState* play, EnTest6Struct* ptr) { if (ptr->unk_00 != 0) { Matrix_Translate(ptr->unk_08 * ptr->unk_04, ptr->unk_0C, ptr->unk_10 * ptr->unk_04, MTXMODE_NEW); Matrix_Scale(ptr->unk_04 * 0.02f, ptr->unk_04 * 0.02f, ptr->unk_04 * 0.02f, MTXMODE_APPLY); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A9402C[ptr->unk_00])); @@ -240,8 +240,8 @@ void func_80A90D34(EnTest6* this, PlayState* play, EnTest6Struct* ptr) { void func_80A90FC0(EnTest6* this, PlayState* play, EnTest6Struct* ptr) { s32 pad; - Gfx* gfx = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Gfx) * 2); - Gfx* gfx2 = gfx; + Gfx* gfxHead = GRAPH_ALLOC(play->state.gfxCtx, 2 * sizeof(Gfx)); + Gfx* gfx = gfxHead; Hilite* sp70; Vec3f sp64; @@ -253,14 +253,14 @@ void func_80A90FC0(EnTest6* this, PlayState* play, EnTest6Struct* ptr) { OPEN_DISPS(play->state.gfxCtx); - if (gfx != NULL) { + if (gfxHead != NULL) { func_8012C28C(play->state.gfxCtx); gDPSetTileSize(gfx++, 1, sp70->h.x1 & 0xFFFF, sp70->h.y1 & 0xFFFF, (sp70->h.x1 + 60) & 0xFFFF, (sp70->h.y1 + 60) & 0xFFFF); - gSPEndDisplayList(gfx); + gSPEndDisplayList(gfx++); - gSPSegment(POLY_OPA_DISP++, 0x07, gfx2); + gSPSegment(POLY_OPA_DISP++, 0x07, gfxHead); Matrix_Translate(sp64.x, sp64.y, sp64.z, MTXMODE_NEW); Matrix_Scale(ptr->unk_04 * 0.018f, ptr->unk_04 * 0.018f, ptr->unk_04 * 0.018f, MTXMODE_APPLY); @@ -338,8 +338,8 @@ void EnTest6_Destroy(Actor* thisx, PlayState* play2) { play->envCtx.lightSettings.fogColor[1] = 0; play->envCtx.lightSettings.fogColor[2] = 0; play->envCtx.lightSettings.fogNear = 0; - play->envCtx.lightSettings.fogFar = 0; - play->envCtx.fillScreen = 0; + play->envCtx.lightSettings.zFar = 0; + play->envCtx.fillScreen = false; for (i = 0; i < ARRAY_COUNT(this->lights); i++) { LightContext_RemoveLight(play, &play->lightCtx, this->lights[i].node); @@ -393,10 +393,10 @@ void func_80A916F0(EnTest6* this, PlayState* play) { Player* player = GET_PLAYER(play); player->actor.freezeTimer = 0; - play->unk_18844 = 0; + play->unk_18844 = false; ActorCutscene_Stop(play->playerActorCsIds[8]); - func_800B7298(play, NULL, 6); - func_80A90C34(); + func_800B7298(play, NULL, PLAYER_CSMODE_6); + EnTest6_DisableMotionBlur(); Distortion_ClearType(DISTORTION_TYPE_5); Actor_Kill(&this->actor); } @@ -462,10 +462,10 @@ void func_80A91760(EnTest6* this, PlayState* play) { ((subCam->at.z - subCam->eye.z) * 0.2f); } } - func_80A90C08(0x78); + EnTest6_EnableMotionBlur(120); Distortion_SetType(DISTORTION_TYPE_5); Distortion_SetCountdown(80); - play->unk_18844 = 1; + play->unk_18844 = true; this->unk_274 = 95; } break; @@ -517,9 +517,9 @@ void func_80A91760(EnTest6* this, PlayState* play) { if (this->unk_27A == 10) { this->unk_14C = 0.1f; - func_80A90C34(); + EnTest6_DisableMotionBlur(); Distortion_ClearType(DISTORTION_TYPE_5); - play->unk_18844 = 0; + play->unk_18844 = false; if (this->unk_254 != NULL) { ZeldaArena_Free(this->unk_254); } @@ -537,22 +537,22 @@ void func_80A91760(EnTest6* this, PlayState* play) { } if (this->unk_286 != 0) { - func_800B7298(play, NULL, 7); + func_800B7298(play, NULL, PLAYER_CSMODE_7); } else { if (this->unk_27A == 90) { - func_800B7298(play, NULL, 0x42); + func_800B7298(play, NULL, PLAYER_CSMODE_66); } if (this->unk_27A == 70) { - func_800B7298(play, NULL, 0x52); + func_800B7298(play, NULL, PLAYER_CSMODE_82); } if (this->unk_27A == 30) { - func_800B7298(play, NULL, 0x51); + func_800B7298(play, NULL, PLAYER_CSMODE_81); } if (this->unk_27A == 5) { - func_800B7298(play, NULL, 0x4A); + func_800B7298(play, NULL, PLAYER_CSMODE_74); } } @@ -614,10 +614,10 @@ void func_80A92118(EnTest6* this, PlayState* play) { Player* player = GET_PLAYER(play); player->actor.freezeTimer = 0; - play->unk_18844 = 0; + play->unk_18844 = false; ActorCutscene_Stop(play->playerActorCsIds[8]); - func_800B7298(play, NULL, 6); - func_80A90C34(); + func_800B7298(play, NULL, PLAYER_CSMODE_6); + EnTest6_DisableMotionBlur(); Distortion_ClearType(DISTORTION_TYPE_5); Actor_Kill(&this->actor); } @@ -657,7 +657,7 @@ void func_80A92188(EnTest6* this, PlayState* play) { func_800FD5E0(play, &D_80A94070, 1.0f); func_800FD654(play, &D_80A94068, 1.0f); func_800FD698(play, D_80A94074, D_80A94078, 1.0f); - play->unk_18844 = 1; + play->unk_18844 = true; } if (this->unk_27A == 15) { @@ -665,7 +665,7 @@ void func_80A92188(EnTest6* this, PlayState* play) { func_800FD5E0(play, &D_80A94070, 0.0f); func_800FD654(play, &D_80A94068, 0.0f); func_800FD698(play, D_80A94074, D_80A94078, 0.0f); - play->unk_18844 = 0; + play->unk_18844 = false; } if (this->unk_286 >= 20) { @@ -673,18 +673,18 @@ void func_80A92188(EnTest6* this, PlayState* play) { func_800FD5E0(play, &D_80A94070, this->unk_160); func_800FD654(play, &D_80A94068, this->unk_160); func_800FD698(play, D_80A94074, D_80A94078, this->unk_160); - play->unk_18844 = 0; + play->unk_18844 = false; } func_800B8F98(&player->actor, NA_SE_PL_FLYING_AIR - SFX_FLAG); switch (this->unk_27A) { case 119: - func_80A90C08(0x32); + EnTest6_EnableMotionBlur(50); break; case 115: - func_80A90C08(0x14); + EnTest6_EnableMotionBlur(20); Distortion_SetType(DISTORTION_TYPE_5); Distortion_SetCountdown(90); this->unk_274 = 2; @@ -704,25 +704,25 @@ void func_80A92188(EnTest6* this, PlayState* play) { break; case 61: - func_80A90C08(0x96); + EnTest6_EnableMotionBlur(150); this->unk_274 = 4; break; case 51: - func_80A90C08(0xB4); + EnTest6_EnableMotionBlur(180); this->unk_274 = 5; break; case 14: case 15: - func_80A90C08(0x32); + EnTest6_EnableMotionBlur(50); Distortion_ClearType(DISTORTION_TYPE_5); this->unk_274 = 0; break; case 1: - func_80A90C34(); - if (gSaveContext.eventInf[5] & 4) { + EnTest6_DisableMotionBlur(); + if (CHECK_EVENTINF(EVENTINF_52)) { this->unk_274 = 9; } break; @@ -764,23 +764,23 @@ void func_80A92188(EnTest6* this, PlayState* play) { break; case 98: - func_800B7298(play, NULL, 0x40); + func_800B7298(play, NULL, PLAYER_CSMODE_64); break; case 68: - func_800B7298(play, NULL, 0x41); + func_800B7298(play, NULL, PLAYER_CSMODE_65); break; case 52: - func_800B7298(play, NULL, 0x58); + func_800B7298(play, NULL, PLAYER_CSMODE_88); break; case 43: - func_800B7298(play, NULL, 0x72); + func_800B7298(play, NULL, PLAYER_CSMODE_114); break; case 38: - func_800B7298(play, NULL, 7); + func_800B7298(play, NULL, PLAYER_CSMODE_7); break; case 14: @@ -972,14 +972,14 @@ void func_80A92950(EnTest6* this, PlayState* play) { case 9: Play_SetRespawnData(&play->state, 1, ((void)0, gSaveContext.save.entrance & 0xFFFF), player->unk_3CE, - 0xBFF, &player->unk_3C0, player->unk_3CC); + PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &player->unk_3C0, player->unk_3CC); this->unk_276 = 99; play->transitionTrigger = TRANS_TRIGGER_START; play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance; - play->transitionType = TRANS_TYPE_02; + play->transitionType = TRANS_TYPE_FADE_BLACK; if ((gSaveContext.save.time > CLOCK_TIME(18, 0)) || (gSaveContext.save.time < CLOCK_TIME(6, 0))) { gSaveContext.respawnFlag = -0x63; - gSaveContext.eventInf[2] |= 0x80; + SET_EVENTINF(EVENTINF_27); } else { gSaveContext.respawnFlag = 2; } @@ -1053,11 +1053,12 @@ void func_80A92950(EnTest6* this, PlayState* play) { case 9: if (gSaveContext.save.time > CLOCK_TIME(12, 0)) { Play_SetRespawnData(&play->state, 1, ((void)0, gSaveContext.save.entrance & 0xFFFF), - player->unk_3CE, 0xBFF, &player->unk_3C0, player->unk_3CC); + player->unk_3CE, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &player->unk_3C0, + player->unk_3CC); this->unk_276 = 99; play->transitionTrigger = TRANS_TRIGGER_START; play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance; - play->transitionType = TRANS_TYPE_02; + play->transitionType = TRANS_TYPE_FADE_BLACK; gSaveContext.respawnFlag = 2; play->msgCtx.ocarinaMode = 4; } @@ -1272,7 +1273,7 @@ void func_80A939E8(EnTest6* this, PlayState* play2) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gOwlStatueWhiteFlashDL); + gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); } } Lights_PointSetPosition(&this->lights[0].info, player->actor.world.pos.x, player->actor.world.pos.y - 10.0f, diff --git a/src/overlays/actors/ovl_En_Test7/overlay.cfg b/src/overlays/actors/ovl_En_Test7/overlay.cfg deleted file mode 100644 index 5a898f7c0..000000000 --- a/src/overlays/actors/ovl_En_Test7/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Test7 -z_en_test7.c diff --git a/src/overlays/actors/ovl_En_Test7/z_en_test7.c b/src/overlays/actors/ovl_En_Test7/z_en_test7.c index 7dbbaec93..bf0dc785b 100644 --- a/src/overlays/actors/ovl_En_Test7/z_en_test7.c +++ b/src/overlays/actors/ovl_En_Test7/z_en_test7.c @@ -438,7 +438,7 @@ void func_80AF19A8(EnTest7* this, PlayState* play) { } else { ActorCutscene_Start(play->playerActorCsIds[8], NULL); func_80AF082C(this, func_80AF1A2C); - play->unk_18844 = 1; + play->unk_18844 = true; } } @@ -461,7 +461,7 @@ void func_80AF1A2C(EnTest7* this, PlayState* play) { func_80AF082C(this, func_80AF1CA0); this->unk_144 |= 0x20; Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_PL_WARP_WING_OPEN); - func_8016566C(0x78); + Play_EnableMotionBlur(120); } } @@ -599,10 +599,10 @@ void func_80AF2030(EnTest7* this, PlayState* play) { R_PLAY_FILL_SCREEN_G = 255; R_PLAY_FILL_SCREEN_B = 255; R_PLAY_FILL_SCREEN_ALPHA = 255; - play->unk_18844 = 0; + play->unk_18844 = false; this->unk_144 &= ~4; func_80AF082C(this, func_80AF21E8); - func_80165690(); + Play_DisableMotionBlur(); } } @@ -667,16 +667,16 @@ void func_80AF2350(EnTest7* this, PlayState* play) { gSaveContext.respawnFlag = -6; } else { play->nextEntrance = D_80AF343C[ENTEST7_GET(&this->actor) - ENTEST7_1C]; - if ((play->nextEntrance == ENTRANCE(SOUTHERN_SWAMP_POISONED, 10)) && (gSaveContext.save.weekEventReg[20] & 2)) { + if ((play->nextEntrance == ENTRANCE(SOUTHERN_SWAMP_POISONED, 10)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_CLEARED, 10); } else if ((play->nextEntrance == ENTRANCE(MOUNTAIN_VILLAGE_WINTER, 8)) && - (gSaveContext.save.weekEventReg[33] & 0x80)) { + CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) { play->nextEntrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 8); } } play->transitionTrigger = TRANS_TRIGGER_START; - play->transitionType = TRANS_TYPE_02; + play->transitionType = TRANS_TYPE_FADE_BLACK; gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; } @@ -957,7 +957,7 @@ void EnTest7_Draw(Actor* thisx, PlayState* play) { s32 sp40; if (this->unk_144 & 1) { - Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(sizeof(Mtx) * this->unk_18CC.unk_18->unk_1)); + Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, this->unk_18CC.unk_18->unk_1 * sizeof(Mtx)); if (mtx != NULL) { func_8018450C(play, &this->unk_18CC, mtx, func_80AF31D0, NULL, &this->actor); diff --git a/src/overlays/actors/ovl_En_Tg/overlay.cfg b/src/overlays/actors/ovl_En_Tg/overlay.cfg deleted file mode 100644 index 99ad048ba..000000000 --- a/src/overlays/actors/ovl_En_Tg/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Tg -z_en_tg.c diff --git a/src/overlays/actors/ovl_En_Tg/z_en_tg.c b/src/overlays/actors/ovl_En_Tg/z_en_tg.c index 947f97b62..0b7a5c3f3 100644 --- a/src/overlays/actors/ovl_En_Tg/z_en_tg.c +++ b/src/overlays/actors/ovl_En_Tg/z_en_tg.c @@ -259,7 +259,7 @@ void EnTg_DrawHearts(PlayState* play, EnTgHeartEffect* effect, s32 numEffects) { OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); for (i = 0; i < numEffects; i++, effect++) { diff --git a/src/overlays/actors/ovl_En_Thiefbird/overlay.cfg b/src/overlays/actors/ovl_En_Thiefbird/overlay.cfg deleted file mode 100644 index f469c156a..000000000 --- a/src/overlays/actors/ovl_En_Thiefbird/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Thiefbird -z_en_thiefbird.c diff --git a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c index 54a680562..58f44d468 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c @@ -4,6 +4,7 @@ * Description: Takkuri */ +#include "prevent_bss_reordering.h" #include "z_en_thiefbird.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200 | ACTOR_FLAG_1000 | ACTOR_FLAG_80000000) @@ -130,8 +131,9 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(1, 0x0), }; -static s16 D_80C13664[] = { ITEM00_ARROWS_10, ITEM00_BOMBS_B, ITEM00_RUPEE_GREEN, - ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_RUPEE_PURPLE }; +static s16 D_80C13664[] = { + ITEM00_ARROWS_10, ITEM00_BOMBS_B, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_RUPEE_PURPLE, +}; static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneForward, 3000, ICHAIN_CONTINUE), @@ -140,8 +142,8 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32(targetArrowOffset, 500, ICHAIN_STOP), }; -static Vec3f D_80C13920; -static s32 D_80C1392C; +Vec3f D_80C13920; +s32 D_80C1392C; void EnThiefbird_Init(Actor* thisx, PlayState* play) { EnThiefbird* this = THIS; @@ -209,7 +211,11 @@ void func_80C10984(EnThiefbird* this, s32 arg1) { } s32 func_80C10B0C(EnThiefbird* this, PlayState* play) { - static Gfx* D_80C13680[] = { gTakkuriStolenKokiriSwordDL, gTakkuriStolenRazorSwordDL, gTakkuriStolenGildedSwordDL }; + static Gfx* D_80C13680[] = { + gTakkuriStolenKokiriSwordDL, + gTakkuriStolenRazorSwordDL, + gTakkuriStolenGildedSwordDL, + }; s32 isItemFound = false; s32 phi_a3 = 0; s32 slotId = SLOT_BOTTLE_1; diff --git a/src/overlays/actors/ovl_En_Time_Tag/overlay.cfg b/src/overlays/actors/ovl_En_Time_Tag/overlay.cfg deleted file mode 100644 index 9759bee86..000000000 --- a/src/overlays/actors/ovl_En_Time_Tag/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Time_Tag -z_en_time_tag.c diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c index fa140ba85..4e09f01a9 100644 --- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c +++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c @@ -49,7 +49,7 @@ void EnTimeTag_Init(Actor* thisx, PlayState* play) { switch (ENTIMETAG_GET_E000(&this->actor)) { case 4: - if ((gSaveContext.save.weekEventReg[8] & 0x40) || (CURRENT_DAY != 3)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40) || (CURRENT_DAY != 3)) { Actor_Kill(&this->actor); return; } @@ -93,7 +93,7 @@ void func_80AC9FE4(EnTimeTag* this, PlayState* play) { gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF; if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) && CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG) && CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD)) { - gSaveContext.save.weekEventReg[25] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_25_02); } } else { ActorCutscene_SetIntentToPlay(this->actor.cutscene); @@ -273,8 +273,8 @@ void func_80ACA724(EnTimeTag* this, PlayState* play) { } void func_80ACA7C4(EnTimeTag* this, PlayState* play) { - if (!(gSaveContext.save.weekEventReg[63] & 1) && !(gSaveContext.save.weekEventReg[63] & 2)) { - func_800B7298(play, &this->actor, 7); + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_63_01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_63_02)) { + func_800B7298(play, &this->actor, PLAYER_CSMODE_7); Message_StartTextbox(play, ENTIMETAG_GET_1FE0(&this->actor) + 0x1883, NULL); this->actionFunc = func_80ACA724; } @@ -287,15 +287,15 @@ void func_80ACA840(EnTimeTag* this, PlayState* play) { if ((play->sceneId != SCENE_YADOYA) || (INV_CONTENT(ITEM_ROOM_KEY) != ITEM_ROOM_KEY)) { temp_ft4 = gSaveContext.save.time * (24.0f / 0x10000); // TIME_TO_HOURS_F temp_hi = (s32)TIME_TO_MINUTES_F(gSaveContext.save.time) % 60; - if (gSaveContext.save.weekEventReg[63] & 1) { - if (gSaveContext.save.weekEventReg[63] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_02)) { this->actionFunc = func_80ACA7C4; } else if ((temp_ft4 == this->actor.home.rot.x) && (temp_hi == this->actor.home.rot.y)) { - gSaveContext.save.weekEventReg[63] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_63_02); } } else if ((temp_ft4 == this->actor.home.rot.x) && (temp_hi == this->actor.home.rot.y) && !Play_InCsMode(play)) { - func_800B7298(play, &this->actor, 7); + func_800B7298(play, &this->actor, PLAYER_CSMODE_7); Message_StartTextbox(play, ENTIMETAG_GET_1FE0(&this->actor) + 0x1883, NULL); this->actionFunc = func_80ACA724; } diff --git a/src/overlays/actors/ovl_En_Tite/overlay.cfg b/src/overlays/actors/ovl_En_Tite/overlay.cfg deleted file mode 100644 index 0d91c61fe..000000000 --- a/src/overlays/actors/ovl_En_Tite/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Tite -z_en_tite.c diff --git a/src/overlays/actors/ovl_En_Tk/overlay.cfg b/src/overlays/actors/ovl_En_Tk/overlay.cfg deleted file mode 100644 index a7ca23e6e..000000000 --- a/src/overlays/actors/ovl_En_Tk/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Tk -z_en_tk.c diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c index 5ce216aff..1bdc92b4a 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -323,8 +323,8 @@ void func_80AECB6C(EnTk* this, PlayState* play) { return; } - if (REG(15) != 0.0f) { - this->skelAnime.playSpeed = (f32)func_800FE620(play) / REG(15); + if (R_TIME_SPEED != 0.0f) { + this->skelAnime.playSpeed = (f32)func_800FE620(play) / R_TIME_SPEED; } else { this->skelAnime.playSpeed = 0.0f; } @@ -337,14 +337,14 @@ void func_80AECB6C(EnTk* this, PlayState* play) { func_80AEC658(&this->skelAnime, this->unk_320, 1.0f, &sp48, &sp44); } - temp2 = REG(15) * sp44; + temp2 = R_TIME_SPEED * sp44; temp_f0 = temp2; - this->unk_2DC += (REG(15) * sp44) - temp2; + this->unk_2DC += (R_TIME_SPEED * sp44) - temp2; temp3 = this->unk_2DC; this->timePathTimeSpeed = temp2 + temp3; this->unk_2DC -= temp3; - this->unk_2E0 += REG(15); + this->unk_2E0 += R_TIME_SPEED; if (Schedule_RunScript(play, D_80AEF800, &sp34)) { if ((this->unk_3CC != sp34.result) && !func_80AED354(this, play, &sp34)) { @@ -486,7 +486,7 @@ s32 func_80AECE60(EnTk* this, PlayState* play) { } if (!(this->unk_3CE & 8) && !(this->unk_2CA & 0x10) && (this->actor.xzDistToPlayer < 100.0f)) { - func_8013E8F8(&this->actor, play, 100.0f, 100.0f, PLAYER_AP_NONE, 0x4000, 0x4000); + func_8013E8F8(&this->actor, play, 100.0f, 100.0f, PLAYER_IA_NONE, 0x4000, 0x4000); } return false; @@ -535,9 +535,9 @@ void func_80AED4F8(EnTk* this, PlayState* play) { } void func_80AED544(EnTk* this, PlayState* play) { - if (!(gSaveContext.save.weekEventReg[31] & 0x10)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_10)) { Message_StartTextbox(play, 0x13FE, &this->actor); - gSaveContext.save.weekEventReg[31] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_31_10); } else if (gSaveContext.save.time < CLOCK_TIME(9, 0)) { Message_StartTextbox(play, 0x13FF, &this->actor); } else if (gSaveContext.save.time < CLOCK_TIME(12, 0)) { @@ -564,7 +564,7 @@ void func_80AED610(EnTk* this, PlayState* play) { func_80AED544(this, play); } else if (!Flags_GetSwitch(play, ENTK_GET_7F0(&this->actor))) { Message_StartTextbox(play, 0x1403, &this->actor); - } else if (gSaveContext.save.weekEventReg[60] & 2) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_60_02)) { func_80AED544(this, play); } else { Message_StartTextbox(play, 0x1413, &this->actor); @@ -595,7 +595,7 @@ void func_80AED610(EnTk* this, PlayState* play) { case 0x1413: Rupees_ChangeBy(30); - gSaveContext.save.weekEventReg[60] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_60_02); func_80151938(play, 0x13FF); break; @@ -657,7 +657,7 @@ void func_80AED940(EnTk* this, PlayState* play) { } Math_Vec3f_Copy(&sp44, &player->actor.world.pos); - sp44.y = player->bodyPartsPos[7].y + 3.0f; + sp44.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; temp_v0 = Math_Vec3f_Pitch(&this->actor.focus.pos, &sp44); if (ABS(temp_v0) < 0x800) { Math_SmoothStepToS(&this->unk_31A, temp_v0, 3, 0x16C, 0); @@ -696,10 +696,10 @@ void func_80AED940(EnTk* this, PlayState* play) { func_80AEDE10(this, play); } else if (!(this->unk_2CA & 0x80)) { if (this->actor.xzDistToPlayer < 100.0f) { - func_8013E8F8(&this->actor, play, 100.0f, 100.0f, PLAYER_AP_NONE, 0x4000, 0x4000); + func_8013E8F8(&this->actor, play, 100.0f, 100.0f, PLAYER_IA_NONE, 0x4000, 0x4000); } } else { - func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_AP_NONE); + func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_NONE); } } @@ -758,7 +758,7 @@ void func_80AEDE10(EnTk* this, PlayState* play) { switch (this->unk_310) { case 0: this->unk_2CA &= ~0x1000; - if (!(gSaveContext.save.weekEventReg[52] & 0x80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_80)) { this->unk_2E6 = 0x1405; } else { this->unk_2E6 = 0x140B; @@ -863,7 +863,7 @@ void func_80AEDF5C(EnTk* this, PlayState* play) { break; case 0x140A: - gSaveContext.save.weekEventReg[52] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_52_80); case 0x140B: func_80AEE784(this, play); diff --git a/src/overlays/actors/ovl_En_Torch/overlay.cfg b/src/overlays/actors/ovl_En_Torch/overlay.cfg deleted file mode 100644 index 081513543..000000000 --- a/src/overlays/actors/ovl_En_Torch/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Torch -z_en_torch.c diff --git a/src/overlays/actors/ovl_En_Torch2/overlay.cfg b/src/overlays/actors/ovl_En_Torch2/overlay.cfg deleted file mode 100644 index 25ddefa7f..000000000 --- a/src/overlays/actors/ovl_En_Torch2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Torch2 -z_en_torch2.c diff --git a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c index 83d084951..75f966a3c 100644 --- a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c +++ b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c @@ -83,9 +83,9 @@ void EnTorch2_Destroy(Actor* thisx, PlayState* play) { EnTorch2* this = THIS; Collider_DestroyCylinder(play, &this->collider); - Play_SetRespawnData(&play->state, this->actor.params + RESPAWN_MODE_GORON - 1, 0xFF, 0, 0xBFF, - &this->actor.world.pos, this->actor.shape.rot.y); - play->actorCtx.unk254[this->actor.params] = 0; + Play_SetRespawnData(&play->state, this->actor.params + RESPAWN_MODE_GORON - 1, 0xFF, 0, + PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &this->actor.world.pos, this->actor.shape.rot.y); + play->actorCtx.elegyShells[this->actor.params] = NULL; } void EnTorch2_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Toto/overlay.cfg b/src/overlays/actors/ovl_En_Toto/overlay.cfg deleted file mode 100644 index 48534631e..000000000 --- a/src/overlays/actors/ovl_En_Toto/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Toto -z_en_toto.c diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c index 75878a7b6..aefa6383f 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -11,7 +11,7 @@ #define THIS ((EnToto*)thisx) -#define ENTOTO_WEEK_EVENT_FLAGS (gSaveContext.save.weekEventReg[50] & 1 || gSaveContext.save.weekEventReg[51] & 0x80) +#define ENTOTO_WEEK_EVENT_FLAGS (CHECK_WEEKEVENTREG(WEEKEVENTREG_50_01) || CHECK_WEEKEVENTREG(WEEKEVENTREG_51_80)) void EnToto_Init(Actor* thisx, PlayState* play); void EnToto_Destroy(Actor* thisx, PlayState* play); @@ -258,7 +258,7 @@ void func_80BA39C8(EnToto* this, PlayState* play) { if (this->unk2B6 != 0) { this->text = D_80BA5044; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 9999.9f, 9999.9f, PLAYER_AP_NONE); + func_800B8500(&this->actor, play, 9999.9f, 9999.9f, PLAYER_IA_NONE); } else { this->actor.flags &= ~ACTOR_FLAG_10000; func_800B8614(&this->actor, play, 50.0f); @@ -357,7 +357,7 @@ s32 func_80BA3ED4(EnToto* this, PlayState* play) { s32 func_80BA3EE8(EnToto* this, PlayState* play) { if (this->text->unk1 == 2) { - func_800B7298(play, NULL, 7); + func_800B7298(play, NULL, PLAYER_CSMODE_7); } return 0; } @@ -452,7 +452,7 @@ s32 func_80BA42BC(EnToto* this, PlayState* play) { Vec3s* end = &D_80BA510C[3]; func_80BA3FB0(this, play); - func_800B7298(play, NULL, 6); + func_800B7298(play, NULL, PLAYER_CSMODE_6); if (player->actor.world.pos.z > -310.0f) { if ((player->actor.world.pos.x > -150.0f) || (player->actor.world.pos.z > -172.0f)) { phi_s0 = 3; @@ -472,7 +472,7 @@ s32 func_80BA42BC(EnToto* this, PlayState* play) { s32 func_80BA43F4(EnToto* this, PlayState* play) { func_80BA3C88(this); if (func_80122760(play, &this->unk_2BC, 60.0f)) { - func_800B7298(play, NULL, 0x13); + func_800B7298(play, NULL, PLAYER_CSMODE_19); return func_80BA4204(this, play); } return 0; @@ -480,7 +480,7 @@ s32 func_80BA43F4(EnToto* this, PlayState* play) { s32 func_80BA445C(EnToto* this, PlayState* play) { if (func_80BA4128(this, play)) { - func_800B7298(play, NULL, 6); + func_800B7298(play, NULL, PLAYER_CSMODE_6); return 1; } return 0; @@ -524,13 +524,12 @@ s32 func_80BA4530(EnToto* this, PlayState* play) { return func_80BA407C(this, play); } if (!ENTOTO_WEEK_EVENT_FLAGS) { - for (i = 0; i < 4; i++) { + for (i = 0; i < ARRAY_COUNT(D_80BA50DC); i++) { if (func_80BA44D4(&D_80BA50DC[i], player)) { if (this->unk2B1 < 10) { this->unk2B1++; if (this->unk2B1 >= 10) { - Message_StartTextbox(play, D_80BA50DC[((void)0, gSaveContext.save.playerForm) - 1].unk2, - NULL); + Message_StartTextbox(play, D_80BA50DC[GET_PLAYER_FORM - 1].unk2, NULL); } } return 0; @@ -543,7 +542,7 @@ s32 func_80BA4530(EnToto* this, PlayState* play) { } s32 func_80BA46D8(EnToto* this, PlayState* play) { - func_800B7298(play, NULL, 0x44); + func_800B7298(play, NULL, PLAYER_CSMODE_68); func_80152434(play, D_80BA5120[CUR_FORM]); return 0; } @@ -551,16 +550,16 @@ s32 func_80BA46D8(EnToto* this, PlayState* play) { s32 func_80BA4740(EnToto* this, PlayState* play) { if (play->msgCtx.ocarinaMode == 4) { if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { - gSaveContext.save.weekEventReg[56] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_56_10); } if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { - gSaveContext.save.weekEventReg[56] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_56_20); } if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { - gSaveContext.save.weekEventReg[56] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_56_40); } if (gSaveContext.save.playerForm == PLAYER_FORM_GORON) { - gSaveContext.save.weekEventReg[56] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_56_80); } return 1; } @@ -572,22 +571,23 @@ s32 func_80BA47E0(EnToto* this, PlayState* play) { s32 i; this->unk2B3 = 0; - if (gSaveContext.save.weekEventReg[56] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_56_10)) { this->unk2B3 += 1; } - if (gSaveContext.save.weekEventReg[56] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_56_20)) { this->unk2B3 += 2; } - if (gSaveContext.save.weekEventReg[56] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_56_40)) { this->unk2B3 += 4; } - if (gSaveContext.save.weekEventReg[56] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_56_80)) { this->unk2B3 += 8; } - for (i = 0; i < 4; i++) { + for (i = 0; i < ARRAY_COUNT(D_80BA50DC); i++) { if (gSaveContext.save.playerForm != (i + 1) && (D_80BA5128[i] & this->unk2B3)) { Math_Vec3s_ToVec3f(&spawnPos, &D_80BA50DC[i].unk6); - Actor_Spawn(&play->actorCtx, play, ACTOR_PLAYER, spawnPos.x, spawnPos.y, spawnPos.z, i + 2, 0, 0, -1); + Actor_Spawn(&play->actorCtx, play, ACTOR_PLAYER, spawnPos.x, spawnPos.y, spawnPos.z, i + 2, 0, 0, + PLAYER_PARAMS(0xFF, PLAYER_INITMODE_F) | 0xFFFFF000); } } func_80BA402C(this, play); @@ -598,7 +598,7 @@ s32 func_80BA47E0(EnToto* this, PlayState* play) { } s32 func_80BA49A4(EnToto* this, PlayState* play) { - func_800B7298(play, NULL, 0x44); + func_800B7298(play, NULL, PLAYER_CSMODE_68); func_801A31EC(NA_BGM_BALLAD_OF_THE_WIND_FISH, 4, this->unk2B3 ^ 0xF); this->unk2B1 = 4; return 0; @@ -618,12 +618,12 @@ s32 func_80BA4A00(EnToto* this, PlayState* play) { if (this->spotlights != NULL) { Actor_Kill(this->spotlights); } - func_800B7298(play, NULL, 0x45); + func_800B7298(play, NULL, PLAYER_CSMODE_69); if (this->unk2B3 == 0xF) { if (CURRENT_DAY == 1) { - gSaveContext.save.weekEventReg[50] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_50_01); } else { - gSaveContext.save.weekEventReg[51] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_51_80); } } else { func_80BA402C(this, play); diff --git a/src/overlays/actors/ovl_En_Trt/overlay.cfg b/src/overlays/actors/ovl_En_Trt/overlay.cfg deleted file mode 100644 index d0b1d075f..000000000 --- a/src/overlays/actors/ovl_En_Trt/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Trt -z_en_trt.c diff --git a/src/overlays/actors/ovl_En_Trt/z_en_trt.c b/src/overlays/actors/ovl_En_Trt/z_en_trt.c index 3c144bc99..caceb62bd 100644 --- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c +++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c @@ -202,7 +202,7 @@ u16 EnTrt_GetItemTextId(EnTrt* this) { u16 EnTrt_GetItemChoiceTextId(EnTrt* this) { EnGirlA* item = this->items[this->cursorIndex]; - if ((item->actor.params == SI_POTION_BLUE) && !(gSaveContext.save.weekEventReg[53] & 0x10)) { + if ((item->actor.params == SI_POTION_BLUE) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_53_10)) { this->textId = 0x881; return 0x881; } @@ -253,7 +253,7 @@ s32 EnTrt_TestCancelOption(EnTrt* this, PlayState* play, Input* input) { } void EnTrt_SetupStartShopping(PlayState* play, EnTrt* this, u8 skipHello) { - func_8011552C(play, 0x10); + func_8011552C(play, DO_ACTION_NEXT); if (!skipHello) { this->actionFunc = EnTrt_Hello; } else { @@ -263,7 +263,7 @@ void EnTrt_SetupStartShopping(PlayState* play, EnTrt* this, u8 skipHello) { void EnTrt_StartShopping(PlayState* play, EnTrt* this) { func_80151938(play, 0x83E); - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = true; this->actionFunc = EnTrt_FaceShopkeeper; @@ -348,8 +348,8 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) { case 0x883: this->textId = 0x884; Message_StartTextbox(play, this->textId, &this->actor); - gSaveContext.save.weekEventReg[53] |= 8; - func_80123D50(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_AP_BOTTLE); + SET_WEEKEVENTREG(WEEKEVENTREG_53_08); + Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE); break; case 0x888: this->textId = 0x889; @@ -375,7 +375,7 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) { void EnTrt_PayForMushroom(EnTrt* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; - func_80123D50(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_AP_BOTTLE); + Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE); this->actionFunc = EnTrt_SetupItemGiven; } else { Actor_PickUp(&this->actor, play, GI_RUPEE_RED, 300.0f, 300.0f); @@ -400,7 +400,7 @@ void EnTrt_Goodbye(EnTrt* this, PlayState* play) { void EnTrt_StartRedPotionConversation(EnTrt* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { if (this->textId == 0x88F) { - if (Inventory_HasEmptyBottle() || !(gSaveContext.save.weekEventReg[12] & 0x10)) { + if (Inventory_HasEmptyBottle() || !CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) { if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) { ActorCutscene_Stop(this->cutscene); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; @@ -411,28 +411,28 @@ void EnTrt_StartRedPotionConversation(EnTrt* this, PlayState* play) { } else { this->prevTextId = this->textId; this->textId = 0x88E; - gSaveContext.save.weekEventReg[85] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_85_08); Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnTrt_EndConversation; } } else { - if (gSaveContext.save.weekEventReg[12] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08)) { this->textId = 0x83D; EnTrt_SetupStartShopping(play, this, 0); - } else if (gSaveContext.save.weekEventReg[84] & 0x40) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40)) { this->textId = 0x83B; if (Inventory_HasItemInBottle(ITEM_POTION_RED)) { EnTrt_SetupStartShopping(play, this, false); } else { this->actionFunc = EnTrt_TryToGiveRedPotion; } - } else if (gSaveContext.save.weekEventReg[16] & 0x10) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { this->timer = 30; this->textId = 0x838; this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING_SPECIAL; this->actionFunc = EnTrt_Surprised; return; - } else if (gSaveContext.save.weekEventReg[17] & 1) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_17_01)) { this->textId = 0x835; EnTrt_SetupStartShopping(play, this, false); } @@ -446,13 +446,13 @@ void EnTrt_GiveRedPotionForKoume(EnTrt* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; - if (!(gSaveContext.save.weekEventReg[12] & 0x10)) { - gSaveContext.save.weekEventReg[12] |= 0x10; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) { + SET_WEEKEVENTREG(WEEKEVENTREG_12_10); } - gSaveContext.save.weekEventReg[84] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_84_40); player->stateFlags2 &= ~PLAYER_STATE2_20000000; this->actionFunc = EnTrt_GivenRedPotionForKoume; - } else if (gSaveContext.save.weekEventReg[12] & 0x10) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) { Actor_PickUp(&this->actor, play, GI_POTION_RED, 300.0f, 300.0f); } else { Actor_PickUp(&this->actor, play, GI_POTION_RED_BOTTLE, 300.0f, 300.0f); @@ -479,7 +479,7 @@ void EnTrt_GivenRedPotionForKoume(EnTrt* this, PlayState* play) { ActorCutscene_SetIntentToPlay(this->cutscene); } } - func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); this->actionFunc = EnTrt_ItemGiven; } } @@ -532,7 +532,7 @@ void EnTrt_FaceShopkeeper(EnTrt* this, PlayState* play) { ActorCutscene_SetIntentToPlay(this->cutscene); this->cutsceneState = ENTRT_CUTSCENESTATE_WAITING; } else if (talkState == TEXT_STATE_CHOICE) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); if (!EnTrt_TestEndInteraction(this, play, CONTROLLER1(&play->state))) { if ((!Message_ShouldAdvance(play) || !EnTrt_FacingShopkeeperDialogResult(this, play)) && (this->stickAccumX > 0)) { @@ -540,7 +540,7 @@ void EnTrt_FaceShopkeeper(EnTrt* this, PlayState* play) { if (cursorIndex != CURSOR_INVALID) { this->cursorIndex = cursorIndex; this->actionFunc = EnTrt_LookToShelf; - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); this->stickRightPrompt.isEnabled = false; play_sound(NA_SE_SY_CURSOR); } @@ -634,7 +634,7 @@ void EnTrt_BrowseShelf(EnTrt* this, PlayState* play) { this->stickLeftPrompt.isEnabled = true; EnTrt_UpdateCursorPos(play, this); if (talkState == TEXT_STATE_5) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); if (!EnTrt_HasPlayerSelectedItem(play, this, CONTROLLER1(&play->state))) { EnTrt_CursorLeftRight(play, this); if (this->cursorIndex != prevCursorIdx) { @@ -727,7 +727,7 @@ void EnTrt_SelectItem(EnTrt* this, PlayState* play) { if (EnTrt_TakeItemOffShelf(this)) { if (talkState == TEXT_STATE_CHOICE) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); if (!EnTrt_TestCancelOption(this, play, CONTROLLER1(&play->state)) && Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: @@ -753,7 +753,7 @@ void EnTrt_SelectItem(EnTrt* this, PlayState* play) { this->drawCursor = 0; this->shopItemSelectedTween = 0.0f; item->boughtFunc(play, item); - gSaveContext.save.weekEventReg[53] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_53_10); } } } @@ -762,14 +762,14 @@ void EnTrt_SelectItem(EnTrt* this, PlayState* play) { void EnTrt_IdleSleeping(EnTrt* this, PlayState* play) { Player* player = GET_PLAYER(play); - if ((gSaveContext.save.weekEventReg[85] & 8) && !(gSaveContext.save.weekEventReg[84] & 0x40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_85_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40)) { this->textId = 0x88F; } else if (!(this->flags & ENTRT_MET)) { this->textId = 0x834; } else { this->textId = 0x83E; } - if (!(gSaveContext.save.weekEventReg[53] & 8)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_53_08)) { this->talkOptionTextId = 0x845; } else if (this->flags & ENTRT_GIVEN_MUSHROOM) { this->talkOptionTextId = 0x882; @@ -894,9 +894,9 @@ void EnTrt_BeginInteraction(EnTrt* this, PlayState* play) { this->animIndex = TRT_ANIM_HANDS_ON_COUNTER; switch (this->textId) { case 0x834: - if (!(gSaveContext.save.weekEventReg[12] & 8) && !(gSaveContext.save.weekEventReg[84] & 0x40) && - !(gSaveContext.save.weekEventReg[16] & 0x10) && !(gSaveContext.save.weekEventReg[17] & 1)) { - func_8011552C(play, 6); + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40) && + !CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_17_01)) { + func_8011552C(play, DO_ACTION_DECIDE); this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = true; this->actionFunc = EnTrt_Hello; @@ -905,7 +905,7 @@ void EnTrt_BeginInteraction(EnTrt* this, PlayState* play) { } break; case 0x83E: - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = true; this->actionFunc = EnTrt_FaceShopkeeper; @@ -952,7 +952,7 @@ void EnTrt_TryToGiveRedPotionAfterSurprised(EnTrt* this, PlayState* play) { this->blinkFunc = EnTrt_Blink; if ((talkState == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - if (Inventory_HasEmptyBottle() || !(gSaveContext.save.weekEventReg[12] & 0x10)) { + if (Inventory_HasEmptyBottle() || !CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) { if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) { ActorCutscene_Stop(this->cutscene); this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED; @@ -961,7 +961,7 @@ void EnTrt_TryToGiveRedPotionAfterSurprised(EnTrt* this, PlayState* play) { } else { this->prevTextId = this->textId; this->textId = 0x88E; - gSaveContext.save.weekEventReg[85] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_85_08); Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnTrt_EndConversation; } @@ -982,7 +982,7 @@ void EnTrt_TryToGiveRedPotion(EnTrt* this, PlayState* play) { } else { this->prevTextId = this->textId; this->textId = 0x88E; - gSaveContext.save.weekEventReg[85] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_85_08); Message_StartTextbox(play, this->textId, &this->actor); this->actionFunc = EnTrt_EndConversation; } @@ -1031,7 +1031,7 @@ void EnTrt_ItemGiven(EnTrt* this, PlayState* play) { } func_80151938(play, this->textId); } else { - func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } @@ -1054,7 +1054,7 @@ void EnTrt_ShopkeeperGone(EnTrt* this, PlayState* play) { } } if ((talkState == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - if (gSaveContext.save.weekEventReg[20] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_CLEARED, 5); } else { play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_POISONED, 5); @@ -1104,7 +1104,7 @@ void EnTrt_SetupItemGiven(EnTrt* this, PlayState* play) { this->cutscene = this->lookToShopkeeperCutscene; ActorCutscene_SetIntentToPlay(this->cutscene); } - func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); } } @@ -1114,7 +1114,7 @@ void EnTrt_ContinueShopping(EnTrt* this, PlayState* play) { EnGirlA* item; if (talkState == TEXT_STATE_CHOICE) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); if (Message_ShouldAdvance(play)) { EnTrt_ResetItemPosition(this); item = this->items[this->cursorIndex]; @@ -1127,7 +1127,7 @@ void EnTrt_ContinueShopping(EnTrt* this, PlayState* play) { player->stateFlags2 |= PLAYER_STATE2_20000000; Message_StartTextbox(play, this->textId, &this->actor); EnTrt_SetupStartShopping(play, this, true); - func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1); + func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); break; case 1: default: @@ -1380,7 +1380,7 @@ void EnTrt_OpenEyesThenSetToBlink(EnTrt* this) { void EnTrt_TalkToShopkeeper(EnTrt* this, PlayState* play) { u8 talkState = talkState = Message_GetState(&play->msgCtx); Player* player = GET_PLAYER(play); - s32 itemGiven; + PlayerItemAction itemAction; if (talkState == TEXT_STATE_5) { if (Message_ShouldAdvance(play)) { @@ -1391,16 +1391,16 @@ void EnTrt_TalkToShopkeeper(EnTrt* this, PlayState* play) { } } } else if (talkState == TEXT_STATE_16) { - itemGiven = func_80123810(play); - if (itemGiven > PLAYER_AP_NONE) { - if (itemGiven == PLAYER_AP_BOTTLE_MUSHROOM) { - if (gSaveContext.save.weekEventReg[53] & 8) { + itemAction = func_80123810(play); + if (itemAction > PLAYER_IA_NONE) { + if (itemAction == PLAYER_IA_BOTTLE_MUSHROOM) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_08)) { player->actor.textId = 0x888; } else { player->actor.textId = 0x883; } this->textId = player->actor.textId; - player->exchangeItemId = itemGiven; + player->exchangeItemId = itemAction; this->actionFunc = EnTrt_GetMushroom; } else { if (this->flags & ENTRT_GIVEN_MUSHROOM) { @@ -1412,7 +1412,7 @@ void EnTrt_TalkToShopkeeper(EnTrt* this, PlayState* play) { this->actionFunc = EnTrt_Goodbye; } func_801477B4(play); - } else if (itemGiven < PLAYER_AP_NONE) { + } else if (itemAction <= PLAYER_IA_MINUS1) { if (this->flags & ENTRT_GIVEN_MUSHROOM) { this->textId = 0x88B; } else { @@ -1427,7 +1427,7 @@ void EnTrt_TalkToShopkeeper(EnTrt* this, PlayState* play) { void EnTrt_SetupTalkToShopkeeper(PlayState* play, EnTrt* this) { this->actionFunc = EnTrt_TalkToShopkeeper; func_80151938(play, this->talkOptionTextId); - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = false; } @@ -1463,7 +1463,7 @@ void EnTrt_LookToShopkeeperFromShelf(EnTrt* this, PlayState* play) { void EnTrt_InitShopkeeper(EnTrt* this, PlayState* play) { SkelAnime_InitFlex(play, &this->skelAnime, &gKotakeSkel, &gKotakeSleepingAnim, NULL, NULL, 0); - if (!(gSaveContext.save.weekEventReg[12] & 8) && !(gSaveContext.save.weekEventReg[84] & 0x40) && + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40) && (gSaveContext.save.day >= 2)) { this->actor.draw = NULL; } else { @@ -1479,7 +1479,7 @@ void EnTrt_InitShop(EnTrt* this, PlayState* play) { this->actor.colChkInfo.mass = MASS_IMMOVABLE; this->actor.colChkInfo.cylRadius = 50; this->timer = Rand_S16Offset(40, 20); - if (!(gSaveContext.save.weekEventReg[12] & 8) && !(gSaveContext.save.weekEventReg[84] & 0x40) && + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40) && gSaveContext.save.day >= 2) { this->textId = 0x84A; this->actionFunc = EnTrt_ShopkeeperGone; @@ -1545,7 +1545,7 @@ void EnTrt_InitShop(EnTrt* this, PlayState* play) { this->blinkTimer = 20; this->eyeTexIndex = 0; this->blinkFunc = EnTrt_EyesClosed; - if (gSaveContext.save.weekEventReg[53] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_08)) { this->flags |= ENTRT_GIVEN_MUSHROOM; } @@ -1711,7 +1711,7 @@ void EnTrt_TrackPlayer(EnTrt* this, PlayState* play) { this->headYaw = CLAMP(this->headYaw, -0x38E0, 0x38E0); playerPos = player->actor.world.pos; - playerPos.y = player->bodyPartsPos[7].y + 3.0f; + playerPos.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; pos = this->actor.world.pos; Math_SmoothStepToS(&this->headPitch, Math_Vec3f_Pitch(&pos, &playerPos), 4, 0x1C70, 1); this->headPitch = CLAMP(this->headPitch, -0x1C70, 0x1C70); diff --git a/src/overlays/actors/ovl_En_Trt2/overlay.cfg b/src/overlays/actors/ovl_En_Trt2/overlay.cfg deleted file mode 100644 index 60a280872..000000000 --- a/src/overlays/actors/ovl_En_Trt2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Trt2 -z_en_trt2.c diff --git a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c index 0dca63bd2..4018a5021 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c @@ -144,13 +144,13 @@ void func_80AD341C(EnTrt2* this, PlayState* play) { } void func_80AD349C(EnTrt2* this) { - if ((gSaveContext.save.weekEventReg[85] & 0x10) && !(gSaveContext.save.weekEventReg[84] & 0x40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_85_10) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40)) { this->unk_3A8 = 0x88F; } else if (this->unk_3A8 == 0) { this->unk_3A8 = 0x84B; - } else if (gSaveContext.save.weekEventReg[16] & 0x10) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { this->unk_3A8 = 0x838; - } else if (gSaveContext.save.weekEventReg[17] & 1) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_17_01)) { this->unk_3A8 = 0x84D; } else { this->unk_3A8 = 0x849; @@ -378,7 +378,7 @@ void func_80AD3E34(EnTrt2* this, PlayState* play) { play->msgCtx.stateTimer = 4; this->unk_3B2 = 12; } else { - gSaveContext.save.weekEventReg[85] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_85_10); this->unk_3A8 = 0x88E; Message_StartTextbox(play, this->unk_3A8, &this->actor); this->unk_3B2 = 10; @@ -391,11 +391,11 @@ void func_80AD3EF0(EnTrt2* this, PlayState* play) { if (talkState == TEXT_STATE_DONE) { if (Message_ShouldAdvance(play)) { - if ((Inventory_HasEmptyBottle() && !(gSaveContext.save.weekEventReg[84] & 0x40)) || - !(gSaveContext.save.weekEventReg[12] & 0x10)) { + if ((Inventory_HasEmptyBottle() && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40)) || + !CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) { this->unk_3B2 = 12; } else { - gSaveContext.save.weekEventReg[85] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_85_10); this->unk_3A8 = 0x88E; Message_StartTextbox(play, this->unk_3A8, &this->actor); this->unk_3B2 = 10; @@ -410,13 +410,13 @@ void func_80AD3EF0(EnTrt2* this, PlayState* play) { void func_80AD3FF4(EnTrt2* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { - if (!(gSaveContext.save.weekEventReg[12] & 0x10)) { - gSaveContext.save.weekEventReg[12] |= 0x10; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) { + SET_WEEKEVENTREG(WEEKEVENTREG_12_10); } - gSaveContext.save.weekEventReg[84] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_84_40); this->actor.parent = NULL; this->unk_3B2 = 14; - } else if (gSaveContext.save.weekEventReg[12] & 0x10) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) { Actor_PickUp(&this->actor, play, GI_POTION_RED, 300.0f, 300.0f); } else { Actor_PickUp(&this->actor, play, GI_POTION_RED_BOTTLE, 300.0f, 300.0f); @@ -615,7 +615,7 @@ s16 func_80AD48F8(Path* path, s32 arg1, Vec3f* arg2, f32* arg3) { phi_f12 = 0.0f; } *arg3 = SQ(phi_f14) + SQ(phi_f12); - return RADF_TO_BINANG(Math_Acot2F(phi_f12, phi_f14)); + return RADF_TO_BINANG(Math_Atan2F_XY(phi_f12, phi_f14)); } f32 func_80AD49B8(Path* path, s32 arg1, Vec3f* arg2, Vec3s* arg3) { @@ -742,20 +742,20 @@ void func_80AD4DB4(EnTrt2* this, PlayState* play) { this->unk_3B8 = 0; this->unk_3BC = func_80AD4608; - if (gSaveContext.save.weekEventReg[12] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08)) { Actor_Kill(&this->actor); return; } - if (gSaveContext.save.weekEventReg[84] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40)) { Actor_Kill(&this->actor); return; } if ((play->sceneId == SCENE_20SICHITAI) || (play->sceneId == SCENE_20SICHITAI2)) { if (gSaveContext.save.day == 2) { - if (!(gSaveContext.save.weekEventReg[15] & 0x80)) { - gSaveContext.save.weekEventReg[15] |= 0x80; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_15_80)) { + SET_WEEKEVENTREG(WEEKEVENTREG_15_80); this->unk_3B2 = 3; } else { Actor_Kill(&this->actor); @@ -766,7 +766,7 @@ void func_80AD4DB4(EnTrt2* this, PlayState* play) { return; } } else if (gSaveContext.save.day == 2) { - if (gSaveContext.save.weekEventReg[15] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_15_80)) { this->unk_3B2 = 4; } else { Actor_Kill(&this->actor); @@ -850,9 +850,9 @@ void func_80AD5234(EnTrt2* this, PlayState* play) { sp40 = player->actor.world.pos; if (this->unk_3B2 == 8) { - sp40.y = player->bodyPartsPos[7].y + 3.0f; + sp40.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; } else { - sp40.y = player->bodyPartsPos[7].y + 45.0f; + sp40.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 45.0f; } sp34 = this->actor.world.pos; diff --git a/src/overlays/actors/ovl_En_Tru/overlay.cfg b/src/overlays/actors/ovl_En_Tru/overlay.cfg deleted file mode 100644 index 49e1ffdd9..000000000 --- a/src/overlays/actors/ovl_En_Tru/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Tru -z_en_tru.c diff --git a/src/overlays/actors/ovl_En_Tru/z_en_tru.c b/src/overlays/actors/ovl_En_Tru/z_en_tru.c index 518ca189e..733ea0c57 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c @@ -465,7 +465,7 @@ s32 func_80A869DC(EnTru* this, PlayState* play) { Math_ApproachS(&this->unk_368, this->actor.yawTowardsPlayer - this->actor.shape.rot.y, 4, 0x2AA8); this->unk_368 = CLAMP(this->unk_368, -0x1FFE, 0x1FFE); Math_Vec3f_Copy(&sp38, &player->actor.world.pos); - sp38.y = player->bodyPartsPos[7].y + 3.0f; + sp38.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; Math_Vec3f_Copy(&sp2C, &this->actor.focus.pos); sp2C.y -= 30.0f; Math_ApproachS(&this->unk_366, Math_Vec3f_Pitch(&sp2C, &sp38), 4, 0x2AA8); @@ -671,11 +671,11 @@ UNK_TYPE* func_80A871E0(EnTru* this, PlayState* play) { return D_80A88924; } - if (!(this->unk_34E & 0x40) && !(gSaveContext.save.weekEventReg[16] & 0x10)) { + if (!(this->unk_34E & 0x40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { return D_80A88918; } - if ((this->unk_34E & 0x1000) && !(gSaveContext.save.weekEventReg[16] & 0x10)) { + if ((this->unk_34E & 0x1000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { return D_80A88910; } @@ -770,7 +770,7 @@ s32 func_80A875AC(Actor* thisx, PlayState* play) { switch (this->unk_364) { case 0: - if ((this->unk_34E & 0x40) || (gSaveContext.save.weekEventReg[16] & 0x10)) { + if ((this->unk_34E & 0x40) || CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { this->unk_374 = this->actor.cutscene; this->unk_364++; } else { @@ -827,7 +827,7 @@ s32 func_80A875AC(Actor* thisx, PlayState* play) { s32 func_80A8777C(Actor* thisx, PlayState* play) { EnTru* this = THIS; s32 ret = 0; - s32 itemActionParam; + PlayerItemAction itemAction; switch (Message_GetState(&play->msgCtx)) { case TEXT_STATE_CHOICE: @@ -837,10 +837,11 @@ s32 func_80A8777C(Actor* thisx, PlayState* play) { } // Fallthrough case TEXT_STATE_16: - itemActionParam = func_80123810(play); - if ((itemActionParam == PLAYER_AP_BOTTLE_POTION_RED) || (itemActionParam == PLAYER_AP_BOTTLE_POTION_BLUE)) { + itemAction = func_80123810(play); + + if ((itemAction == PLAYER_IA_BOTTLE_POTION_RED) || (itemAction == PLAYER_IA_BOTTLE_POTION_BLUE)) { this->unk_34E |= 8; - if (itemActionParam == PLAYER_AP_BOTTLE_POTION_RED) { + if (itemAction == PLAYER_IA_BOTTLE_POTION_RED) { this->unk_390 = 1; } else { this->unk_390 = 2; @@ -848,9 +849,9 @@ s32 func_80A8777C(Actor* thisx, PlayState* play) { this->unk_378 = func_80A87880; this->unk_364 = 0; ret = 1; - } else if (itemActionParam < PLAYER_AP_NONE) { + } else if (itemAction <= PLAYER_IA_MINUS1) { ret = 3; - } else if (itemActionParam != PLAYER_AP_NONE) { + } else if (itemAction != PLAYER_IA_NONE) { ret = 2; } break; @@ -899,7 +900,7 @@ s32 func_80A87880(Actor* thisx, PlayState* play) { } else if (Animation_OnFrame(&this->skelAnime, 12.0f) && !(this->unk_34E & 0x800)) { this->unk_34E |= 0x400; this->unk_34E |= 0x800; - Player_SetModels(player, 3); + Player_SetModels(player, PLAYER_MODELGROUP_DEFAULT); } break; @@ -912,7 +913,7 @@ s32 func_80A87880(Actor* thisx, PlayState* play) { Animation_OnFrame(&this->skelAnime, 52.0f)) { if (Animation_OnFrame(&this->skelAnime, 52.0f)) { this->unk_34E &= ~0x400; - func_80123D50(play, player, 18, 21); + Player_UpdateBottleHeld(play, player, ITEM_BOTTLE, PLAYER_IA_BOTTLE); } Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOUME_DRINK); } else if (Animation_OnFrame(&this->skelAnime, 90.0f)) { @@ -1040,7 +1041,7 @@ s32 func_80A87DC0(Actor* thisx, PlayState* play) { case 4: if (func_80A87400(this, play) || (DECR(this->unk_362) == 0)) { ret = true; - gSaveContext.save.weekEventReg[12] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_12_08); } break; } @@ -1057,7 +1058,7 @@ s32 func_80A87DC0(Actor* thisx, PlayState* play) { void func_80A87FD0(EnTru* this, PlayState* play) { if (this->actor.draw != NULL) { - if ((this->unk_34E & 0x80) || (gSaveContext.save.weekEventReg[16] & 0x10)) { + if ((this->unk_34E & 0x80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { if (func_80A873B8(this)) { SubS_UpdateFlags(&this->unk_34E, 3, 7); } else { @@ -1080,7 +1081,7 @@ void func_80A87FD0(EnTru* this, PlayState* play) { EnTru_ChangeAnim(this, KOUME_ANIM_TRY_GET_UP); } } - } else if (!(gSaveContext.save.weekEventReg[16] & 0x10) && (fabsf(this->actor.playerHeightRel) < 10.0f) && + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10) && (fabsf(this->actor.playerHeightRel) < 10.0f) && (this->actor.xzDistToPlayer < 140.0f)) { SubS_UpdateFlags(&this->unk_34E, 4, 7); this->unk_34E |= 0x1040; @@ -1105,12 +1106,12 @@ void func_80A881E0(EnTru* this, PlayState* play) { ActorCutscene_Stop(ActorCutscene_GetCurrentIndex()); } - if (!(this->unk_34E & 0x40) && !(gSaveContext.save.weekEventReg[16] & 0x10)) { + if (!(this->unk_34E & 0x40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { EnTru_ChangeAnim(this, KOUME_ANIM_INJURED_LYING_DOWN); } else if (this->unk_34E & 0x80) { EnTru_ChangeAnim(this, KOUME_ANIM_INJURED_LYING_DOWN); func_80A86460(this); - } else if (gSaveContext.save.weekEventReg[16] & 0x10) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { EnTru_ChangeAnim(this, KOUME_ANIM_INJURED_HEAD_UP_MORPH); } @@ -1127,7 +1128,7 @@ void func_80A881E0(EnTru* this, PlayState* play) { void EnTru_Init(Actor* thisx, PlayState* play) { EnTru* this = THIS; - if ((gSaveContext.save.entrance != 0xC200) || (gSaveContext.save.weekEventReg[12] & 8)) { + if ((gSaveContext.save.entrance != ENTRANCE(WOODS_OF_MYSTERY, 0)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08)) { Actor_Kill(&this->actor); return; } @@ -1147,10 +1148,10 @@ void EnTru_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.008f); this->unk_34E = 0; - if (gSaveContext.save.weekEventReg[16] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) { EnTru_ChangeAnim(this, KOUME_ANIM_INJURED_HEAD_UP); } else { - this->unk_388 = PLAYER_AP_NONE; + this->unk_388 = PLAYER_IA_NONE; } this->actionFunc = func_80A87FD0; @@ -1176,7 +1177,7 @@ void EnTru_Update(Actor* thisx, PlayState* play) { func_80A86DB8(this); radius = this->collider.dim.worldSphere.radius + 30; - this->unk_388 = !(this->unk_34E & 0x80) ? PLAYER_AP_NONE : PLAYER_AP_NONE; + this->unk_388 = !(this->unk_34E & 0x80) ? PLAYER_IA_NONE : PLAYER_IA_NONE; func_8013C964(&this->actor, play, radius, 20.0f, this->unk_388, this->unk_34E & 7); func_80A8697C(this, play); diff --git a/src/overlays/actors/ovl_En_Tru_Mt/overlay.cfg b/src/overlays/actors/ovl_En_Tru_Mt/overlay.cfg deleted file mode 100644 index 8c432043f..000000000 --- a/src/overlays/actors/ovl_En_Tru_Mt/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Tru_Mt -z_en_tru_mt.c diff --git a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c index dd199db69..e5ff4350f 100644 --- a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c +++ b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c @@ -185,7 +185,7 @@ s32 func_80B761FC(EnTruMt* this, PlayState* play) { this->unk_3A4 = 0; Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOUME_DAMAGE2); } - play->interfaceCtx.unk_25E = 1; + play->interfaceCtx.minigameHiddenPoints = 1; Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 25); return true; } @@ -318,7 +318,7 @@ void func_80B7679C(EnTruMt* this, PlayState* play) { this->unk_34A = CLAMP(this->unk_34A, -0x38E0, 0x38E0); sp40 = player->actor.world.pos; - sp40.y = player->bodyPartsPos[7].y + 3.0f; + sp40.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; sp34 = this->actor.world.pos; sp34.y += 30.0f; @@ -342,20 +342,20 @@ void func_80B76924(EnTruMt* this) { void func_80B76980(EnTruMt* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (gSaveContext.unk_3F3C >= 10) { + if (gSaveContext.minigameHiddenScore >= 10) { Message_StartTextbox(play, 0x87F, &this->actor); - gSaveContext.eventInf[3] |= 0x40; - gSaveContext.eventInf[4] |= 1; + SET_EVENTINF(EVENTINF_36); + SET_EVENTINF(EVENTINF_40); player->stateFlags3 &= ~PLAYER_STATE3_400; this->actor.speedXZ = 0.0f; this->actionFunc = func_80B76BB8; - } else if (gSaveContext.eventInf[4] & 1) { + } else if (CHECK_EVENTINF(EVENTINF_40)) { u32 score = gSaveContext.minigameScore; if (((gSaveContext.save.unk_EE8 & 0xFFFF0000) >> 0x10) < score) { gSaveContext.save.unk_EE8 = ((gSaveContext.minigameScore & 0xFFFF) << 0x10) | (gSaveContext.save.unk_EE8 & 0xFFFF); - gSaveContext.eventInf[3] |= 0x80; + SET_EVENTINF(EVENTINF_37); } } } @@ -394,8 +394,8 @@ void func_80B76BB8(EnTruMt* this, PlayState* play) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_5) { if (Message_ShouldAdvance(play)) { play->nextEntrance = ENTRANCE(TOURIST_INFORMATION, 1); - play->transitionType = TRANS_TYPE_03; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; play->transitionTrigger = TRANS_TRIGGER_START; } } @@ -413,7 +413,7 @@ void EnTruMt_Init(Actor* thisx, PlayState* play) { s32 pad; EnTruMt* this = THIS; - if (!(gSaveContext.eventInf[3] & 0x20)) { + if (!CHECK_EVENTINF(EVENTINF_35)) { Actor_Kill(&this->actor); return; } @@ -461,7 +461,7 @@ void EnTruMt_Update(Actor* thisx, PlayState* play) { func_80B76110(this); Actor_SetFocus(&this->actor, 34.0f); - if (!(gSaveContext.eventInf[4] & 1)) { + if (!CHECK_EVENTINF(EVENTINF_40)) { func_80B761FC(this, play); } diff --git a/src/overlays/actors/ovl_En_Tsn/overlay.cfg b/src/overlays/actors/ovl_En_Tsn/overlay.cfg deleted file mode 100644 index 7c9110389..000000000 --- a/src/overlays/actors/ovl_En_Tsn/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Tsn -z_en_tsn.c diff --git a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c index 31674a668..5b6f7b978 100644 --- a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c +++ b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c @@ -87,7 +87,7 @@ void func_80ADFCEC(EnTsn* this, PlayState* play) { switch (ENTSN_GET_F(&this->actor)) { case ENTSN_F_0: - if (gSaveContext.save.weekEventReg[26] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_26_08)) { Actor_Kill(&this->actor); return; } @@ -95,7 +95,7 @@ void func_80ADFCEC(EnTsn* this, PlayState* play) { break; case ENTSN_F_1: - if (gSaveContext.save.weekEventReg[26] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_26_04)) { this->actor.textId = 0x1091; } else { this->actor.textId = 0x108A; @@ -103,7 +103,7 @@ void func_80ADFCEC(EnTsn* this, PlayState* play) { break; } - if (gSaveContext.save.weekEventReg[55] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { if ((ENTSN_GET_F(&this->actor)) == ENTSN_F_0) { this->actionFunc = func_80AE0D78; } else { @@ -144,7 +144,7 @@ void EnTsn_Init(Actor* thisx, PlayState* play) { this->actor.terminalVelocity = -9.0f; this->actor.gravity = -1.0f; - if (gSaveContext.save.weekEventReg[55] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { Actor_Kill(&this->actor); } } @@ -158,15 +158,15 @@ void EnTsn_Destroy(Actor* thisx, PlayState* play) { void func_80ADFF84(EnTsn* this, PlayState* play) { u16 textId; - if (gSaveContext.save.weekEventReg[26] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_26_08)) { textId = 0x107E; } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { - if (gSaveContext.save.weekEventReg[25] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_80)) { textId = 0x1083; } else { textId = 0x107F; } - } else if (gSaveContext.save.weekEventReg[26] & 1) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_26_01)) { textId = 0x1089; } else { textId = 0x1084; @@ -208,14 +208,14 @@ void func_80AE0010(EnTsn* this, PlayState* play) { case 0x1082: Animation_MorphToLoop(&this->skelAnime, &object_tsn_Anim_0092FC, -10.0f); - gSaveContext.save.weekEventReg[25] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_25_80); func_801477B4(play); this->actionFunc = func_80AE0304; this->actor.textId = 0; break; case 0x1083: - gSaveContext.save.weekEventReg[25] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_25_80); func_801477B4(play); this->actionFunc = func_80AE0304; this->actor.textId = 0; @@ -233,7 +233,7 @@ void func_80AE0010(EnTsn* this, PlayState* play) { case 0x1089: case 0x1093: - gSaveContext.save.weekEventReg[26] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_26_01); func_801477B4(play); Animation_MorphToLoop(&this->skelAnime, &object_tsn_Anim_0092FC, -10.0f); this->actionFunc = func_80AE0304; @@ -246,7 +246,7 @@ void func_80AE0010(EnTsn* this, PlayState* play) { break; case 0x1088: - gSaveContext.save.weekEventReg[26] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_26_01); if (INV_CONTENT(ITEM_MASK_ZORA) == ITEM_MASK_ZORA) { func_801477B4(play); Animation_MorphToLoop(&this->skelAnime, &object_tsn_Anim_0092FC, -10.0f); @@ -311,26 +311,27 @@ void func_80AE04C4(EnTsn* this, PlayState* play) { } void func_80AE04FC(EnTsn* this, PlayState* play) { - s32 sp24; + PlayerItemAction itemAction; Player* player = GET_PLAYER(play); if (Message_GetState(&play->msgCtx) == TEXT_STATE_16) { - sp24 = func_80123810(play); - if (sp24 != 0) { - gSaveContext.save.weekEventReg[26] |= 2; + itemAction = func_80123810(play); + + if (itemAction != PLAYER_IA_NONE) { + SET_WEEKEVENTREG(WEEKEVENTREG_26_02); } - if (sp24 > 0) { + if (itemAction > PLAYER_IA_NONE) { func_801477B4(play); this->actionFunc = func_80AE0704; - if (sp24 == 19) { + if (itemAction == PLAYER_IA_PICTO_BOX) { if (CHECK_QUEST_ITEM(QUEST_PICTOGRAPH)) { - if (Snap_CheckFlag(PICTOGRAPH_PIRATE_GOOD)) { + if (Snap_CheckFlag(PICTO_VALID_PIRATE_GOOD)) { player->actor.textId = 0x107B; return; } - if (Snap_CheckFlag(PICTOGRAPH_PIRATE_TOO_FAR)) { + if (Snap_CheckFlag(PICTO_VALID_PIRATE_TOO_FAR)) { player->actor.textId = 0x10A9; return; } @@ -345,7 +346,7 @@ void func_80AE04FC(EnTsn* this, PlayState* play) { return; } - if (sp24 == 13) { + if (itemAction == PLAYER_IA_HOOKSHOT) { player->actor.textId = 0x1075; return; } @@ -355,7 +356,7 @@ void func_80AE04FC(EnTsn* this, PlayState* play) { return; } - if (sp24 < 0) { + if (itemAction <= PLAYER_IA_MINUS1) { func_80151938(play, 0x1078); Animation_MorphToLoop(&this->unk_1D8->skelAnime, &object_tsn_Anim_001198, -10.0f); this->actionFunc = func_80AE0704; @@ -389,13 +390,13 @@ void func_80AE0704(EnTsn* this, PlayState* play) { if (Message_ShouldAdvance(play)) { switch (play->msgCtx.currentTextId) { case 0x106E: - if (gSaveContext.save.weekEventReg[25] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_40)) { func_80151938(play, 0x1074); } else { func_80151938(play, 0x106F); } this->unk_220 |= 2; - gSaveContext.save.weekEventReg[25] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_25_40); ENTSN_SET_Z(&this->unk_1D8->actor, true); this->unk_220 |= 4; break; @@ -426,7 +427,7 @@ void func_80AE0704(EnTsn* this, PlayState* play) { case 0x107C: if (Inventory_HasEmptyBottle()) { - gSaveContext.save.weekEventReg[26] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_26_08); func_801477B4(play); this->actionFunc = func_80AE0460; func_80AE0460(this, play); @@ -463,7 +464,7 @@ void func_80AE0704(EnTsn* this, PlayState* play) { case 0x108A: case 0x1091: - gSaveContext.save.weekEventReg[26] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_26_04); func_80151938(play, play->msgCtx.currentTextId + 1); this->unk_220 |= 2; this->actor.textId = 0x1091; @@ -478,7 +479,7 @@ void func_80AE0704(EnTsn* this, PlayState* play) { break; case 0x1092: - if (gSaveContext.save.weekEventReg[26] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_26_08)) { func_80AE0698(this, play); } else { func_80151938(play, 0x10A7); diff --git a/src/overlays/actors/ovl_En_Tubo_Trap/overlay.cfg b/src/overlays/actors/ovl_En_Tubo_Trap/overlay.cfg deleted file mode 100644 index 364d4c7e9..000000000 --- a/src/overlays/actors/ovl_En_Tubo_Trap/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Tubo_Trap -z_en_tubo_trap.c diff --git a/src/overlays/actors/ovl_En_Twig/overlay.cfg b/src/overlays/actors/ovl_En_Twig/overlay.cfg deleted file mode 100644 index 29491912c..000000000 --- a/src/overlays/actors/ovl_En_Twig/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Twig -z_en_twig.c diff --git a/src/overlays/actors/ovl_En_Twig/z_en_twig.c b/src/overlays/actors/ovl_En_Twig/z_en_twig.c index e0c46c7cb..5843357ee 100644 --- a/src/overlays/actors/ovl_En_Twig/z_en_twig.c +++ b/src/overlays/actors/ovl_En_Twig/z_en_twig.c @@ -74,18 +74,18 @@ void EnTwig_Init(Actor* thisx, PlayState* play2) { break; case 1: if (!sRingsHaveSpawned) { - sRingCount = (gSaveContext.save.weekEventReg[24] & 4) ? 25 : 20; + sRingCount = CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04) ? 25 : 20; for (i = 0; i < sRingCount; i++) { sRingNotCollected[i] = false; } sRingsHaveSpawned = true; } if (RACERING_GET_PARAM_1F0(&this->dyna.actor) != 0) { - if (!(gSaveContext.save.weekEventReg[24] & 4)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) { Actor_Kill(&this->dyna.actor); return; } - } else if (gSaveContext.save.weekEventReg[24] & 4) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) { Actor_Kill(&this->dyna.actor); return; } @@ -198,7 +198,7 @@ void func_80AC0D2C(EnTwig* this, PlayState* play) { (s32)(Rand_ZeroOne() * 10.0f) + 20); } play_sound(NA_SE_SY_GET_ITEM); - play->interfaceCtx.unk_25C--; + play->interfaceCtx.minigamePoints--; sRingNotCollected[RACERING_GET_PARAM_FE0(&this->dyna.actor)] = true; if (sCurrentRing == RACERING_GET_PARAM_FE0(&this->dyna.actor)) { s32 i; diff --git a/src/overlays/actors/ovl_En_Viewer/overlay.cfg b/src/overlays/actors/ovl_En_Viewer/overlay.cfg deleted file mode 100644 index 3faa113d4..000000000 --- a/src/overlays/actors/ovl_En_Viewer/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Viewer -z_en_viewer.c diff --git a/src/overlays/actors/ovl_En_Vm/overlay.cfg b/src/overlays/actors/ovl_En_Vm/overlay.cfg deleted file mode 100644 index 7c1774086..000000000 --- a/src/overlays/actors/ovl_En_Vm/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Vm -z_en_vm.c diff --git a/src/overlays/actors/ovl_En_Wallmas/overlay.cfg b/src/overlays/actors/ovl_En_Wallmas/overlay.cfg deleted file mode 100644 index badbf57d0..000000000 --- a/src/overlays/actors/ovl_En_Wallmas/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Wallmas -z_en_wallmas.c diff --git a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c index 1ddcc4add..74bd4fec6 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c @@ -459,14 +459,14 @@ void EnWallmas_SetupTakePlayer(EnWallmas* this, PlayState* play) { this->actor.speedXZ = 0.0f; this->actor.velocity.y = 0.0f; this->yTarget = this->actor.playerHeightRel; - func_800B724C(play, &this->actor, 18); + func_800B724C(play, &this->actor, PLAYER_CSMODE_18); } void EnWallmas_TakePlayer(EnWallmas* this, PlayState* play) { Player* player = GET_PLAYER(play); if (Animation_OnFrame(&this->skelAnime, 1.0f)) { - func_800B8E58(player, player->ageProperties->unk_92 + NA_SE_VO_LI_DAMAGE_S); + func_800B8E58(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S); Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FALL_CATCH); } @@ -480,9 +480,9 @@ void EnWallmas_TakePlayer(EnWallmas* this, PlayState* play) { this->actor.world.pos.y += 10.0f; } - player->actor.world.pos.y = this->actor.world.pos.y - sYOffsetPerForm[((void)0, gSaveContext.save.playerForm)]; + player->actor.world.pos.y = this->actor.world.pos.y - sYOffsetPerForm[GET_PLAYER_FORM]; if (this->timer == -30) { - func_800B8E58(player, player->ageProperties->unk_92 + NA_SE_VO_LI_TAKEN_AWAY); + func_800B8E58(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_TAKEN_AWAY); } if (this->timer == 0) { @@ -491,8 +491,7 @@ void EnWallmas_TakePlayer(EnWallmas* this, PlayState* play) { this->timer += 2; } else { - Math_StepToF(&this->actor.world.pos.y, - sYOffsetPerForm[((void)0, gSaveContext.save.playerForm)] + player->actor.world.pos.y, 5.0f); + Math_StepToF(&this->actor.world.pos.y, sYOffsetPerForm[GET_PLAYER_FORM] + player->actor.world.pos.y, 5.0f); } Math_StepToF(&this->actor.world.pos.x, player->actor.world.pos.x, 3.0f); diff --git a/src/overlays/actors/ovl_En_Warp_Uzu/overlay.cfg b/src/overlays/actors/ovl_En_Warp_Uzu/overlay.cfg deleted file mode 100644 index 833f1a0b6..000000000 --- a/src/overlays/actors/ovl_En_Warp_Uzu/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Warp_Uzu -z_en_warp_uzu.c diff --git a/src/overlays/actors/ovl_En_Warp_tag/overlay.cfg b/src/overlays/actors/ovl_En_Warp_tag/overlay.cfg deleted file mode 100644 index a70ec6a5c..000000000 --- a/src/overlays/actors/ovl_En_Warp_tag/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Warp_tag -z_en_warp_tag.c diff --git a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c index 67a1196bc..ef1ae15bc 100644 --- a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c +++ b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c @@ -84,7 +84,7 @@ void EnWarpTag_CheckDungeonKeepObject(EnWarptag* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->dangeonKeepObject)) { this->actionFunc = EnWarpTag_WaitForPlayer; DynaPolyActor_Init(&this->dyna, 0x1); - DynaPolyActor_LoadMesh(play, &this->dyna, &gWarpTagGoronTrialBaseCollider); + DynaPolyActor_LoadMesh(play, &this->dyna, &gWarpTagGoronTrialBaseCol); this->dyna.actor.objBankIndex = this->dangeonKeepObject; this->dyna.actor.draw = EnWarpTag_Draw; } @@ -94,10 +94,10 @@ void EnWarpTag_WaitForPlayer(EnWarptag* this, PlayState* play) { if (!Player_InCsMode(play) && (this->dyna.actor.xzDistToPlayer <= 30.0f) && (this->dyna.actor.playerHeightRel <= 10.0f)) { if (WARPTAG_GET_INVISIBLE(&this->dyna.actor)) { - func_800B7298(play, NULL, 0x51); + func_800B7298(play, NULL, PLAYER_CSMODE_81); this->actionFunc = EnWarpTag_GrottoReturn; } else { - func_800B7298(play, NULL, 0xF); + func_800B7298(play, NULL, PLAYER_CSMODE_15); this->actionFunc = EnWarpTag_RespawnPlayer; } } @@ -126,7 +126,7 @@ void EnWarpTag_Unused809C09A0(EnWarptag* this, PlayState* play) { */ void EnWarpTag_Unused809C0A20(EnWarptag* this, PlayState* play) { if (play->msgCtx.ocarinaMode == 9) { - func_800B7298(play, NULL, 7); + func_800B7298(play, NULL, PLAYER_CSMODE_7); this->actionFunc = EnWarpTag_RespawnPlayer; ActorCutscene_Stop(ActorCutscene_GetCurrentIndex()); @@ -157,7 +157,7 @@ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) { } else { ActorCutscene_StartAndSetUnkLinkFields(play->playerActorCsIds[4], &this->dyna.actor); func_800B8E58(player, NA_SE_PL_WARP_PLATE); - func_8016566C(0); + Play_EnableMotionBlur(0); } } else { @@ -201,21 +201,21 @@ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) { newRespawnPos.z = playerActorEntry->pos.z; if (WARPTAG_GET_3C0_MAX(&this->dyna.actor) == WARPTAG_3C0_MAX) { - playerParams = 0x9FF; + playerParams = PLAYER_PARAMS(0xFF, PLAYER_INITMODE_9); } else { // not used by any known variant - playerParams = 0x8FF; + playerParams = PLAYER_PARAMS(0xFF, PLAYER_INITMODE_8); } // why are we getting player home rotation from the room data? doesnt player have home.rot.y? // especially because we are converting from deg to binang, but isnt home.rot.y already in binang?? Play_SetRespawnData( - &play->state, 0, entrance, // parameter 3 is called "sceneSetup" - play->setupEntranceList[playerSpawnIndex].room, playerParams, &newRespawnPos, + &play->state, 0, entrance, play->setupEntranceList[playerSpawnIndex].room, playerParams, + &newRespawnPos, ((((playerActorEntry->rot.y >> 7) & 0x1FF) / 180.0f) * 32768.0f)); // DEG_TO_BINANG ? func_80169EFC(&play->state); - gSaveContext.respawnFlag = ~0x4; - func_80165690(); + gSaveContext.respawnFlag = -5; + Play_DisableMotionBlur(); } } @@ -224,7 +224,7 @@ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) { if (new15E < 0) { new15E = 0; } - func_80165658(new15E * 0.04f); // unknown Play_ function + Play_SetMotionBlurAlpha(new15E * (1 / 25.0f)); } } @@ -264,7 +264,7 @@ void EnWarpTag_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); func_8012C28C(play->state.gfxCtx); - AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWarpTagRainbowTexAnim)); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWarpTagRainbowTexAnim)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gWarpTagGoronTrialBaseDL); diff --git a/src/overlays/actors/ovl_En_Water_Effect/overlay.cfg b/src/overlays/actors/ovl_En_Water_Effect/overlay.cfg deleted file mode 100644 index 7aac8fdd8..000000000 --- a/src/overlays/actors/ovl_En_Water_Effect/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Water_Effect -z_en_water_effect.c diff --git a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c index 5f92164b3..983104001 100644 --- a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c +++ b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c @@ -482,7 +482,7 @@ void func_80A59C04(Actor* thisx, PlayState* play2) { player->flameTimers[j] = Rand_S16Offset(0, 200); } player->isBurning = true; - func_800B8E58(player, player->ageProperties->unk_92 + NA_SE_VO_LI_DEMO_DAMAGE); + func_800B8E58(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DEMO_DAMAGE); } } @@ -570,7 +570,7 @@ void func_80A5A184(Actor* thisx, PlayState* play2) { } } - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); CLOSE_DISPS(gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Wdhand/overlay.cfg b/src/overlays/actors/ovl_En_Wdhand/overlay.cfg deleted file mode 100644 index 501a7b6ed..000000000 --- a/src/overlays/actors/ovl_En_Wdhand/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Wdhand -z_en_wdhand.c diff --git a/src/overlays/actors/ovl_En_Weather_Tag/overlay.cfg b/src/overlays/actors/ovl_En_Weather_Tag/overlay.cfg deleted file mode 100644 index 9b7593244..000000000 --- a/src/overlays/actors/ovl_En_Weather_Tag/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Weather_Tag -z_en_weather_tag.c diff --git a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c index ebbc71ca3..7ddd539e7 100644 --- a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c +++ b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c @@ -77,7 +77,7 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) { EnWeatherTag_SetupAction(this, func_80966A08); break; case WEATHERTAG_TYPE_UNK1: - if (gSaveContext.save.weekEventReg[52] & 0x20) { // if cleared STT + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20)) { Actor_Kill(&this->actor); } EnWeatherTag_SetupAction(this, func_80966B08); @@ -486,9 +486,10 @@ void EnWeatherTag_Update(Actor* thisx, PlayState* play) { (play->transitionTrigger == TRANS_TRIGGER_OFF) && (ActorCutscene_GetCurrentIndex() == -1) && (play->csCtx.state == 0)) { - gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)REG(15); - if (REG(15) != 0) { - gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.daySpeed); + gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED; + if (R_TIME_SPEED != 0) { + gSaveContext.save.time = + ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.timeSpeedOffset); } } } diff --git a/src/overlays/actors/ovl_En_Wf/overlay.cfg b/src/overlays/actors/ovl_En_Wf/overlay.cfg deleted file mode 100644 index d24cd8a27..000000000 --- a/src/overlays/actors/ovl_En_Wf/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Wf -z_en_wf.c diff --git a/src/overlays/actors/ovl_En_Wiz/overlay.cfg b/src/overlays/actors/ovl_En_Wiz/overlay.cfg deleted file mode 100644 index a52f236dc..000000000 --- a/src/overlays/actors/ovl_En_Wiz/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Wiz -z_en_wiz.c diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c index b8a623539..ee2f3d158 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -1519,7 +1519,7 @@ void EnWiz_Draw(Actor* thisx, PlayState* play) { if (this->fightState == EN_WIZ_FIGHT_STATE_FIRST_PHASE) { Matrix_Push(); - AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWizrobePlatformLightTexAnim)); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWizrobePlatformLightTexAnim)); Matrix_Translate(this->platformLightPos.x, this->platformLightPos.y, this->platformLightPos.z, MTXMODE_NEW); Matrix_Scale(0.01f, 0.01f, 0.01f, MTXMODE_APPLY); gDPPipeSync(POLY_XLU_DISP++); diff --git a/src/overlays/actors/ovl_En_Wiz_Brock/overlay.cfg b/src/overlays/actors/ovl_En_Wiz_Brock/overlay.cfg deleted file mode 100644 index 8976343c8..000000000 --- a/src/overlays/actors/ovl_En_Wiz_Brock/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Wiz_Brock -z_en_wiz_brock.c diff --git a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c index 857bb5300..f2d88759e 100644 --- a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c +++ b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c @@ -121,7 +121,7 @@ void EnWizBrock_Draw(Actor* thisx, PlayState* play) { if (this->platformType != EN_WIZ_BROCK_PLATFORM_TYPE_INACTIVE) { OPEN_DISPS(play->state.gfxCtx); - AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWizrobePlatformCenterTexAnim)); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWizrobePlatformCenterTexAnim)); gDPPipeSync(POLY_XLU_DISP++); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 255, 255); if (this->platformType == EN_WIZ_BROCK_PLATFORM_TYPE_FIRE) { diff --git a/src/overlays/actors/ovl_En_Wiz_Fire/overlay.cfg b/src/overlays/actors/ovl_En_Wiz_Fire/overlay.cfg deleted file mode 100644 index 47aa9022a..000000000 --- a/src/overlays/actors/ovl_En_Wiz_Fire/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Wiz_Fire -z_en_wiz_fire.c diff --git a/src/overlays/actors/ovl_En_Wood02/overlay.cfg b/src/overlays/actors/ovl_En_Wood02/overlay.cfg deleted file mode 100644 index 52dbc67e4..000000000 --- a/src/overlays/actors/ovl_En_Wood02/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Wood02 -z_en_wood02.c diff --git a/src/overlays/actors/ovl_En_Yb/overlay.cfg b/src/overlays/actors/ovl_En_Yb/overlay.cfg deleted file mode 100644 index 5293ea603..000000000 --- a/src/overlays/actors/ovl_En_Yb/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Yb -z_en_yb.c diff --git a/src/overlays/actors/ovl_En_Yb/z_en_yb.c b/src/overlays/actors/ovl_En_Yb/z_en_yb.c index 106b23926..2310a2eef 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -120,8 +120,7 @@ void EnYb_Init(Actor* thisx, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_1; } - // check if already healed - if (gSaveContext.save.weekEventReg[82] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_82_04)) { Actor_Kill(&this->actor); } } @@ -263,7 +262,7 @@ void EnYb_SetupLeaving(EnYb* this, PlayState* play) { Message_StartTextbox(play, 0x147D, &this->actor); func_80BFA2FC(play); } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } EnYb_EnableProximityMusic(this); } @@ -275,7 +274,7 @@ void EnYb_ReceiveMask(EnYb* this, PlayState* play) { this->actor.parent = NULL; this->actionFunc = EnYb_SetupLeaving; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { Actor_PickUp(&this->actor, play, GI_MASK_KAMARO, 10000.0f, 100.0f); } @@ -292,7 +291,7 @@ void EnYb_Talk(EnYb* this, PlayState* play) { case 0x147D: // I am counting on you func_801477B4(play); this->actionFunc = EnYb_Disappear; - gSaveContext.save.weekEventReg[82] |= 0x4; + SET_WEEKEVENTREG(WEEKEVENTREG_82_04); break; case 0x147C: // Spread my dance across the world if (Player_GetMask(play) == PLAYER_MASK_KAMARO) { @@ -326,7 +325,7 @@ void EnYb_TeachingDanceFinish(EnYb* this, PlayState* play) { Message_StartTextbox(play, 0x147C, &this->actor); this->actor.flags &= ~ACTOR_FLAG_10000; } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } EnYb_EnableProximityMusic(this); } @@ -341,7 +340,7 @@ void EnYb_TeachingDance(EnYb* this, PlayState* play) { EnYb_FinishTeachingCutscene(this); this->actionFunc = EnYb_TeachingDanceFinish; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } EnYb_EnableProximityMusic(this); } diff --git a/src/overlays/actors/ovl_En_Zl1/overlay.cfg b/src/overlays/actors/ovl_En_Zl1/overlay.cfg deleted file mode 100644 index 188c2f1d5..000000000 --- a/src/overlays/actors/ovl_En_Zl1/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Zl1 -z_en_zl1.c diff --git a/src/overlays/actors/ovl_En_Zl4/overlay.cfg b/src/overlays/actors/ovl_En_Zl4/overlay.cfg deleted file mode 100644 index 91cec5610..000000000 --- a/src/overlays/actors/ovl_En_Zl4/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Zl4 -z_en_zl4.c diff --git a/src/overlays/actors/ovl_En_Zo/overlay.cfg b/src/overlays/actors/ovl_En_Zo/overlay.cfg deleted file mode 100644 index eeedbff83..000000000 --- a/src/overlays/actors/ovl_En_Zo/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Zo -z_en_zo.c diff --git a/src/overlays/actors/ovl_En_Zo/z_en_zo.c b/src/overlays/actors/ovl_En_Zo/z_en_zo.c index 74d830be1..a16b828f9 100644 --- a/src/overlays/actors/ovl_En_Zo/z_en_zo.c +++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.c @@ -185,7 +185,7 @@ void EnZo_LookAtPlayer(EnZo* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); if (SubS_AngleDiffLessEqual(this->actor.shape.rot.y, 0x2710, this->actor.yawTowardsPlayer)) { point.x = player->actor.world.pos.x; - point.y = player->bodyPartsPos[7].y + 3.0f; + point.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; point.z = player->actor.world.pos.z; SubS_TrackPoint(&point, &this->actor.focus.pos, &this->actor.shape.rot, &this->trackTarget, &this->headRot, &this->upperBodyRot, &sTrackOptions); diff --git a/src/overlays/actors/ovl_En_Zob/overlay.cfg b/src/overlays/actors/ovl_En_Zob/overlay.cfg deleted file mode 100644 index e8a11666f..000000000 --- a/src/overlays/actors/ovl_En_Zob/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Zob -z_en_zob.c diff --git a/src/overlays/actors/ovl_En_Zob/z_en_zob.c b/src/overlays/actors/ovl_En_Zob/z_en_zob.c index cebdd68cf..fdc6e4789 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c @@ -114,13 +114,13 @@ void EnZob_Init(Actor* thisx, PlayState* play) { switch (ENZOB_GET_F(&this->actor)) { case ENZOB_F_1: - if (gSaveContext.save.weekEventReg[78] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_01)) { this->actionFunc = func_80BA0BB4; } else { this->actionFunc = func_80BA0AD8; } - if (!(gSaveContext.save.weekEventReg[55] & 0x80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { Actor_Kill(&this->actor); return; } @@ -135,7 +135,7 @@ void EnZob_Init(Actor* thisx, PlayState* play) { break; default: - if (gSaveContext.save.weekEventReg[55] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { Actor_Kill(&this->actor); } this->actor.flags |= ACTOR_FLAG_10; @@ -211,7 +211,7 @@ void func_80B9FA3C(EnZob* this, PlayState* play) { this->unk_2F4 |= 1; if (gSaveContext.save.playerForm != PLAYER_FORM_ZORA) { - if (gSaveContext.save.weekEventReg[30] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_30_02)) { textId = 0x11F9; } else { textId = 0x11F8; @@ -222,7 +222,7 @@ void func_80B9FA3C(EnZob* this, PlayState* play) { textId = 0x1210; this->unk_304 = 3; func_80B9F7E4(this, 5, ANIMMODE_ONCE); - } else if (gSaveContext.save.weekEventReg[31] & 8) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_31_08)) { textId = 0x1205; this->unk_304 = 1; func_80B9F7E4(this, 3, ANIMMODE_LOOP); @@ -234,12 +234,12 @@ void func_80B9FA3C(EnZob* this, PlayState* play) { textId = 0x1203; this->unk_304 = 1; func_80B9F7E4(this, 2, ANIMMODE_ONCE); - } else if (gSaveContext.save.weekEventReg[30] & 8) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_30_08)) { textId = 0x11FA; this->unk_304 = 1; func_80B9F7E4(this, 2, ANIMMODE_ONCE); - } else if (!(gSaveContext.save.weekEventReg[30] & 4)) { - gSaveContext.save.weekEventReg[30] |= 4; + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_30_04)) { + SET_WEEKEVENTREG(WEEKEVENTREG_30_04); textId = 0x11FB; this->unk_304 = 1; func_80B9F7E4(this, 2, ANIMMODE_ONCE); @@ -420,7 +420,7 @@ void func_80BA00BC(EnZob* this, PlayState* play) { break; case 0x120F: - gSaveContext.save.weekEventReg[31] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_31_08); this->unk_2F4 |= 0x10; func_80B9FCA0(this, play); break; @@ -473,7 +473,7 @@ void func_80BA0374(EnZob* this, PlayState* play) { if (Message_ShouldAdvance(play)) { switch (play->msgCtx.currentTextId) { case 0x11F8: - gSaveContext.save.weekEventReg[30] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_30_02); func_80151938(play, 0x11F9); break; @@ -565,7 +565,7 @@ void func_80BA0728(EnZob* this, PlayState* play) { if (func_800B8718(&this->actor, &play->state)) { if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { Message_StartTextbox(play, 0x1208, NULL); - gSaveContext.save.weekEventReg[30] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_30_08); } else { Message_StartTextbox(play, 0x1216, NULL); } @@ -595,17 +595,17 @@ void func_80BA08E8(EnZob* this, PlayState* play) { s32 textId; if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { - if (gSaveContext.save.weekEventReg[79] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) { textId = 0x1257; this->unk_304 = 3; func_80B9F7E4(this, 4, ANIMMODE_ONCE); - } else if (gSaveContext.save.weekEventReg[78] & 0x40) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_40)) { textId = 0x1256; this->unk_304 = 1; func_80B9F7E4(this, 2, ANIMMODE_ONCE); } else { textId = 0x1255; - gSaveContext.save.weekEventReg[78] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_78_40); this->unk_304 = 1; func_80B9F7E4(this, 2, ANIMMODE_ONCE); } @@ -664,7 +664,7 @@ void func_80BA0AD8(EnZob* this, PlayState* play) { void func_80BA0BB4(EnZob* this, PlayState* play) { func_80B9F86C(this); - if (gSaveContext.save.weekEventReg[79] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) { this->actionFunc = func_80BA09E0; func_80B9F7E4(this, 0, ANIMMODE_ONCE); this->unk_304 = 5; @@ -769,7 +769,7 @@ void EnZob_Draw(Actor* thisx, PlayState* play) { func_80BA0F64, func_80BA0FAC, &this->actor); if (this->unk_2F4 & 0x20) { - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); } CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Zod/overlay.cfg b/src/overlays/actors/ovl_En_Zod/overlay.cfg deleted file mode 100644 index 8acdefc35..000000000 --- a/src/overlays/actors/ovl_En_Zod/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Zod -z_en_zod.c diff --git a/src/overlays/actors/ovl_En_Zod/z_en_zod.c b/src/overlays/actors/ovl_En_Zod/z_en_zod.c index 83a5dda4b..8d8065ff6 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c @@ -15,8 +15,37 @@ void EnZod_Destroy(Actor* thisx, PlayState* play); void EnZod_Update(Actor* thisx, PlayState* play); void EnZod_Draw(Actor* thisx, PlayState* play); -#if 0 -ActorInit En_Zod_InitVars = { +void EnZod_ChangeAnim(EnZod* this, s16 nextAnimIndex, u8 mode); +void EnZod_PlayDrumsSequence(EnZod* this, PlayState* play); +void func_80BAFB84(EnZod* this, PlayState* play); +void func_80BAFDB4(EnZod* this, PlayState* play); +void func_80BAFF14(EnZod* this, PlayState* play); + +#define TIJO_STATE_1 (1 << 0) +#define TIJO_STATE_2 (1 << 1) + +typedef enum { + /* 0 */ ENZOD_ANIM_PLAYING_VIVACE, + /* 1 */ ENZOD_ANIM_READY_TO_PLAY, + /* 2 */ ENZOD_ANIM_ARMS_FOLDED, + /* 3 */ ENZOD_ANIM_PLAYING_LENTO, + /* 4 */ ENZOD_ANIM_PLAYING_ANDANTINO, + /* 5 */ ENZOD_ANIM_MAX, +} EnZodAnimation; + +typedef enum { + /* 1 */ ENZOD_INSTRUMENT_CYMBAL_1 = 1, + /* 2 */ ENZOD_INSTRUMENT_CYMBAL_2, + /* 3 */ ENZOD_INSTRUMENT_CYMBAL_3, + /* 4 */ ENZOD_INSTRUMENT_DRUM_1, + /* 5 */ ENZOD_INSTRUMENT_DRUM_2, + /* 6 */ ENZOD_INSTRUMENT_DRUM_3, + /* 7 */ ENZOD_INSTRUMENT_DRUM_4, + /* 8 */ ENZOD_INSTRUMENT_DRUM_5, + /* 9 */ ENZOD_INSTRUMENT_BASS_DRUM, +} EnZodInstrument; + +const ActorInit En_Zod_InitVars = { ACTOR_EN_ZOD, ACTORCAT_NPC, FLAGS, @@ -28,62 +57,596 @@ ActorInit En_Zod_InitVars = { (ActorFunc)EnZod_Draw, }; -// static ColliderCylinderInit sCylinderInit = { -static ColliderCylinderInit D_80BB0540 = { - { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_ENEMY, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, }, - { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, }, +static ColliderCylinderInit sCylinderInit = { + { + COLTYPE_NONE, + AT_NONE, + AC_ON | AC_TYPE_ENEMY, + OC1_ON | OC1_TYPE_ALL, + OC2_TYPE_1, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK0, + { 0x00000000, 0x00, 0x00 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_ON, + }, { 60, 40, 0, { 0, 0, 0 } }, }; -#endif +static AnimationHeader* sAnimations[] = { + &gTijoPlayingVivaceAnim, &gTijoReadyToPlayAnim, &gTijoArmsFoldedAnim, + &gTijoPlayingLentoAnim, &gTijoPlayingAndantinoAnim, +}; -extern ColliderCylinderInit D_80BB0540; +static Vec3f D_80BB0580 = { 1300.0f, 1100.0f, 0.0f }; -extern UNK_TYPE D_06000D94; -extern UNK_TYPE D_06007650; +void EnZod_Init(Actor* thisx, PlayState* play) { + s32 i; + EnZod* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/EnZod_Init.s") + ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 60.0f); + this->actor.colChkInfo.mass = MASS_IMMOVABLE; + Actor_SetScale(&this->actor, 0.01f); + SkelAnime_InitFlex(play, &this->skelAnime, &gTijoSkel, &gTijoPlayingLentoAnim, this->morphTable, this->jointTable, + TIJO_LIMB_MAX); + Animation_PlayLoop(&this->skelAnime, &gTijoPlayingLentoAnim); + Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/EnZod_Destroy.s") + this->cymbalRots[0] = this->cymbalRots[1] = this->cymbalRots[2] = 0; + this->actor.gravity = this->actor.terminalVelocity = -4.0f; + this->cymbalRotVels[0] = this->cymbalRotVels[1] = this->cymbalRotVels[2] = 300; + this->stateFlags = 0; + this->nextAnimIndex = -1; + this->curAnimIndex = -1; + this->actor.textId = 0; + this->unk_298 = 0; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAF1EC.s") + for (i = 0; i < ARRAY_COUNT(this->drumScales); i++) { + this->drumScales[i] = 0.0f; + this->drumScaleVels[i] = 0.01; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAF2B4.s") + EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_LENTO, ANIMMODE_ONCE); + this->actionFunc = EnZod_PlayDrumsSequence; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAF338.s") + switch (ENZOD_GET_TYPE(thisx)) { + case ENZOD_TYPE_1: + if (gSaveContext.save.weekEventReg[78] & 1) { + this->actionFunc = func_80BAFDB4; + EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_VIVACE, ANIMMODE_ONCE); + this->actor.flags |= ACTOR_FLAG_10; + ActorCutscene_SetIntentToPlay(this->actor.cutscene); + break; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAF3E0.s") + this->actionFunc = func_80BAFB84; + if (!(gSaveContext.save.weekEventReg[55] & 0x80)) { + Actor_Kill(&this->actor); + break; + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAF4D8.s") + case ENZOD_TYPE_2: + this->actionFunc = func_80BAFF14; + this->fogNear = -1; + this->stateFlags |= TIJO_STATE_2; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAF7CC.s") + default: + if (gSaveContext.save.weekEventReg[55] & 0x80) { + Actor_Kill(&this->actor); + } + this->actor.flags |= ACTOR_FLAG_10; + break; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAF99C.s") +void EnZod_Destroy(Actor* thisx, PlayState* play) { + EnZod* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFA44.s") + Collider_DestroyCylinder(play, &this->collider); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFADC.s") +void EnZod_HandleRoomConversation(EnZod* this, PlayState* play) { + u16 textId; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFB84.s") + if (gSaveContext.save.playerForm != PLAYER_FORM_ZORA) { + textId = 0x1227; + if (gSaveContext.save.weekEventReg[32] & 8) { + textId = 0x1229; + } else { + gSaveContext.save.weekEventReg[32] |= 8; + } + } else if (this->stateFlags & TIJO_STATE_1) { + textId = 0x1225; + } else { + textId = 0x1219; + if (gSaveContext.save.weekEventReg[32] & 0x10) { + textId = 0x1226; + } else { + gSaveContext.save.weekEventReg[32] |= 0x10; + } + this->stateFlags |= TIJO_STATE_1; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFC00.s") + EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_VIVACE, ANIMMODE_ONCE); + Message_StartTextbox(play, textId, &this->actor); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFC10.s") +s32 EnZod_PlayerIsFacingTijo(EnZod* this, PlayState* play) { + if ((this->actor.playerHeightRel < 30.0f) && (this->actor.xzDistToPlayer < 200.0f) && + Player_IsFacingActor(&this->actor, 0x3000, play) && Actor_IsFacingPlayer(&this->actor, 0x3000)) { + return true; + } else { + return false; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFD00.s") +void EnZod_ChangeAnim(EnZod* this, s16 nextAnimIndex, u8 mode) { + if ((nextAnimIndex < ENZOD_ANIM_PLAYING_VIVACE) || (nextAnimIndex >= ENZOD_ANIM_MAX)) { + nextAnimIndex = ENZOD_ANIM_PLAYING_LENTO; + } + Animation_Change(&this->skelAnime, sAnimations[nextAnimIndex], 1.0f, 0.0f, + Animation_GetLastFrame(sAnimations[nextAnimIndex]), mode, -5.0f); + this->curAnimIndex = nextAnimIndex; + this->nextAnimIndex = nextAnimIndex; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFDB4.s") +void EnZod_UpdateAnimation(EnZod* this) { + if (SkelAnime_Update(&this->skelAnime)) { + if (this->nextAnimIndex == this->curAnimIndex) { + EnZod_ChangeAnim(this, this->curAnimIndex, ANIMMODE_ONCE); + switch (this->curAnimIndex) { + case ENZOD_ANIM_PLAYING_LENTO: + if (Rand_ZeroFloat(1.0f) < 0.2f) { + this->nextAnimIndex = ENZOD_ANIM_PLAYING_ANDANTINO; + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFE34.s") + case ENZOD_ANIM_PLAYING_ANDANTINO: + if (Rand_ZeroFloat(1.0f) < 0.8f) { + this->nextAnimIndex = ENZOD_ANIM_PLAYING_LENTO; + } + break; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFF14.s") + } else { + EnZod_ChangeAnim(this, this->nextAnimIndex, ANIMMODE_ONCE); + } + SkelAnime_Update(&this->skelAnime); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/EnZod_Update.s") +void EnZod_UpdateInstruments(EnZod* this) { + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BB0128.s") + for (i = 0; i < ARRAY_COUNT(this->cymbalRots); i++) { + this->cymbalRots[i] += this->cymbalRotVels[i]; + this->cymbalRotVels[i] -= (s16)(this->cymbalRots[i] * 0.1f); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BB0170.s") + if (ABS_ALT(this->cymbalRotVels[i]) > 100) { + this->cymbalRotVels[i] *= 0.9f; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BB01B0.s") + switch (i) { + case 0: + if ((this->curAnimIndex == ENZOD_ANIM_PLAYING_ANDANTINO) && ((s32)this->skelAnime.curFrame == 7)) { + this->cymbalRotVels[i] = -1000; + } + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/EnZod_Draw.s") + case 1: + if ((this->curAnimIndex == ENZOD_ANIM_PLAYING_ANDANTINO) && ((s32)this->skelAnime.curFrame == 19)) { + this->cymbalRotVels[i] = -1000; + } + break; + + default: + break; + } + } + + for (i = 0; i < ARRAY_COUNT(this->drumScales); i++) { + this->drumScales[i] += this->drumScaleVels[i]; + this->drumScaleVels[i] -= (this->drumScales[i] * 0.8f); + + if (fabsf(this->drumScaleVels[i]) > 0.01f) { + this->drumScaleVels[i] *= 0.5f; + } + + switch (i) { + case 0: + if (((this->curAnimIndex == ENZOD_ANIM_PLAYING_LENTO) || + (this->curAnimIndex == ENZOD_ANIM_PLAYING_ANDANTINO)) && + ((s32)this->skelAnime.curFrame == 1)) { + this->drumScaleVels[i] = 0.1f; + } + break; + + case 2: + if (((this->curAnimIndex == ENZOD_ANIM_PLAYING_LENTO) && ((s32)this->skelAnime.curFrame == 19)) || + ((this->curAnimIndex == ENZOD_ANIM_PLAYING_ANDANTINO) && ((s32)this->skelAnime.curFrame == 8))) { + this->drumScaleVels[i] = 0.1f; + } + break; + + case 3: + switch (this->curAnimIndex) { + case 3: + switch ((s32)this->skelAnime.curFrame) { + case 1: + case 7: + case 12: + case 19: + this->drumScaleVels[i] = 0.03f; + break; + } + break; + + case 4: + if ((s32)this->skelAnime.curFrame == 1) { + this->drumScaleVels[i] = 0.1f; + } + break; + } + break; + + case 4: + if ((this->curAnimIndex == ENZOD_ANIM_PLAYING_ANDANTINO) && ((s32)this->skelAnime.curFrame == 19)) { + this->drumScaleVels[i] = 0.15f; + } + + break; + + default: + break; + } + } +} + +void func_80BAF7CC(EnZod* this, PlayState* play) { + EnZod_UpdateAnimation(this); + switch (Message_GetState(&play->msgCtx)) { + case TEXT_STATE_CHOICE: + if (Message_ShouldAdvance(play) && (play->msgCtx.currentTextId == 0x121F)) { + switch (play->msgCtx.choiceIndex) { + case 0: + func_8019F208(); + func_80151938(play, 0x1220); + break; + + case 1: + func_8019F230(); + func_80151938(play, 0x1223); + break; + } + } + break; + + case TEXT_STATE_5: + if (Message_ShouldAdvance(play)) { + switch (play->msgCtx.currentTextId) { + case 0x121A: + case 0x121B: + case 0x121C: + case 0x1220: + case 0x1221: + case 0x1227: + func_80151938(play, play->msgCtx.currentTextId + 1); + break; + + case 0x1219: + func_80151938(play, play->msgCtx.currentTextId + 1); + this->nextAnimIndex = ENZOD_ANIM_ARMS_FOLDED; + break; + + case 0x121D: + func_80151938(play, play->msgCtx.currentTextId + 1); + this->nextAnimIndex = ENZOD_ANIM_READY_TO_PLAY; + break; + + case 0x1223: + func_80151938(play, play->msgCtx.currentTextId + 1); + this->nextAnimIndex = ENZOD_ANIM_PLAYING_VIVACE; + break; + + case 0x121E: + case 0x1226: + func_80151938(play, 0x121F); + this->nextAnimIndex = ENZOD_ANIM_READY_TO_PLAY; + break; + + default: + func_801477B4(play); + this->actionFunc = EnZod_PlayDrumsSequence; + EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_LENTO, ANIMMODE_ONCE); + break; + } + } + } +} + +void EnZod_PlayDrumsSequence(EnZod* this, PlayState* play) { + s32 pad; + Vec3f seqPos; + + EnZod_UpdateAnimation(this); + + if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { + EnZod_HandleRoomConversation(this, play); + this->actionFunc = func_80BAF7CC; + } else if (EnZod_PlayerIsFacingTijo(this, play)) { + func_800B8614(&this->actor, play, 210.0f); + } + + seqPos.x = this->actor.projectedPos.x; + seqPos.y = this->actor.projectedPos.y; + seqPos.z = this->actor.projectedPos.z; + + func_801A1FB4(3, &seqPos, NA_BGM_DRUMS_PLAY, 700.0f); +} + +void func_80BAFA44(EnZod* this, PlayState* play) { + u16 textId; + + if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { + if (gSaveContext.save.weekEventReg[79] & 1) { + textId = 0x1253; + } else { + textId = 0x1251; + if (gSaveContext.save.weekEventReg[78] & 0x20) { + textId = 0x1252; + } else { + gSaveContext.save.weekEventReg[78] |= 0x20; + } + } + } else { + textId = 0x1250; + } + + EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_VIVACE, ANIMMODE_ONCE); + Message_StartTextbox(play, textId, &this->actor); +} + +void func_80BAFADC(EnZod* this, PlayState* play) { + u8 talkState; + + EnZod_UpdateAnimation(this); + talkState = Message_GetState(&play->msgCtx); + if (talkState != TEXT_STATE_CLOSING) { + if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + func_801477B4(play); + this->actionFunc = func_80BAFB84; + EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_LENTO, ANIMMODE_ONCE); + } + } else { + this->actionFunc = func_80BAFB84; + EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_LENTO, ANIMMODE_ONCE); + } +} + +void func_80BAFB84(EnZod* this, PlayState* play) { + EnZod_UpdateAnimation(this); + + if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { + func_80BAFA44(this, play); + this->actionFunc = func_80BAFADC; + } else if (EnZod_PlayerIsFacingTijo(this, play)) { + func_800B8614(&this->actor, play, 210.0f); + } +} + +void EnZod_DoNothing(EnZod* this, PlayState* play) { +} + +void EnZod_Rehearse(EnZod* this, PlayState* play) { + EnZod_UpdateAnimation(this); + if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { + ActorCutscene_Start(this->actor.cutscene, &this->actor); + this->actor.cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); + if (this->actor.cutscene == -1) { + this->actionFunc = EnZod_DoNothing; + play->nextEntrance = play->setupExitList[ENZOD_GET_ENTRANCE_INDEX(&this->actor)]; + play->transitionType = TRANS_TYPE_FADE_WHITE_FAST; + play->transitionTrigger = TRANS_TRIGGER_START; + gSaveContext.save.weekEventReg[78] &= (u8)~1; + } else { + ActorCutscene_SetIntentToPlay(this->actor.cutscene); + } + } else { + ActorCutscene_SetIntentToPlay(this->actor.cutscene); + } +} + +void EnZod_SetupRehearse(EnZod* this, PlayState* play) { + EnZod_UpdateAnimation(this); + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { + func_801477B4(play); + EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_LENTO, ANIMMODE_ONCE); + this->actionFunc = EnZod_Rehearse; + ActorCutscene_Stop(this->actor.cutscene); + this->actor.cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); + ActorCutscene_SetIntentToPlay(this->actor.cutscene); + gSaveContext.save.weekEventReg[79] |= 1; + Audio_QueueSeqCmd(NA_BGM_INDIGO_GO_SESSION | 0x8000); + } +} + +void func_80BAFDB4(EnZod* this, PlayState* play) { + EnZod_UpdateAnimation(this); + if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { + ActorCutscene_Start(this->actor.cutscene, &this->actor); + func_800B7298(play, NULL, 0x44); + Message_StartTextbox(play, 0x103A, &this->actor); + this->actionFunc = EnZod_SetupRehearse; + } else { + ActorCutscene_SetIntentToPlay(this->actor.cutscene); + } +} + +void func_80BAFE34(EnZod* this, PlayState* play) { + EnZod_UpdateAnimation(this); + if (this->fogNear < 799) { + this->fogNear += 200; + } else { + this->fogNear += 30; + } + + if (this->fogNear > 999) { + this->fogNear = 999; + } + + if (Cutscene_CheckActorAction(play, 0x203)) { + if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x203)]->action == 1) { + this->actionFunc = func_80BAFF14; + this->fogNear = -1; + } + } else { + this->actionFunc = func_80BAFF14; + this->fogNear = -1; + } +} + +void func_80BAFF14(EnZod* this, PlayState* play) { + EnZod_UpdateAnimation(this); + if (Cutscene_CheckActorAction(play, 0x203) && + (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x203)]->action == 4)) { + this->actionFunc = func_80BAFE34; + } +} + +void EnZod_Update(Actor* thisx, PlayState* play) { + s32 pad; + EnZod* this = THIS; + Vec3s torsoRot; + + Actor_MoveWithGravity(&this->actor); + Collider_UpdateCylinder(&this->actor, &this->collider); + CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, 4); + this->actionFunc(this, play); + EnZod_UpdateInstruments(this); + + if (DECR(this->blinkTimer) == 0) { + this->blinkTimer = Rand_S16Offset(60, 60); + } + + this->eyeIndex = this->blinkTimer; + + if (this->eyeIndex >= 3) { + this->eyeIndex = 0; + } + + torsoRot.z = 0; + torsoRot.y = 0; + torsoRot.x = 0; + + if (EnZod_PlayerIsFacingTijo(this, play)) { + Actor_TrackPlayer(play, &this->actor, &this->headRot, &torsoRot, this->actor.focus.pos); + if (this->headRot.x > 0xBB8) { + this->headRot.x = 0xBB8; + } else if (this->headRot.x < -0xBB8) { + this->headRot.x = -0xBB8; + } + } else { + Math_SmoothStepToS(&this->headRot.x, 0, 6, 0x1838, 0x64); + Math_SmoothStepToS(&this->headRot.y, 0, 6, 0x1838, 0x64); + } +} + +s32 EnZod_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { + EnZod* this = THIS; + + if (limbIndex == TIJO_LIMB_HEAD) { + rot->x += this->headRot.y; + rot->z += this->headRot.x; + } + + return false; +} + +void EnZod_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { + if (limbIndex == TIJO_LIMB_HEAD) { + Matrix_MultVec3f(&D_80BB0580, &thisx->focus.pos); + } +} + +void EnZod_DrawDrums(EnZod* this, PlayState* play) { + static Gfx* sTijoDrumsDLs[] = { + gTijoDrumFrameDL, gTijoRideCymbalDL, gTijoCrashCymbalDL, gTijoHiHatDL, gTijoDrum1DL, + gTijoDrum2DL, gTijoDrum3DL, gTijoDrum4DL, gTijoDrum5DL, gTijoBassDrumDL, + }; + s32 i; + f32 instrumentPosXs[] = { 0.0f, -2690.0f, 2310.0f, 3888.0f, -4160.0f, -2200.0f, -463.0f, 1397.0f, 3413.0f, 389.0f }; + f32 instrumentPosYs[] = { 0.0f, 6335.0f, 6703.0f, 5735.0f, 3098.0f, 3349.0f, 3748.0f, 3718.0f, 2980.0f, 1530.0f }; + f32 instrumentPosZs[] = { 0.0f, 4350.0f, 3200.0f, 1555.0f, 2874.0f, 3901.0f, 4722.0f, 4344.0f, 3200.0f, 3373.0f }; + f32 scale; + + OPEN_DISPS(play->state.gfxCtx); + + for (i = 0; i < ARRAY_COUNT(sTijoDrumsDLs); i++) { + Matrix_Push(); + Matrix_Translate(instrumentPosXs[i], instrumentPosYs[i], instrumentPosZs[i], MTXMODE_APPLY); + + switch (i) { + case ENZOD_INSTRUMENT_CYMBAL_1: + case ENZOD_INSTRUMENT_CYMBAL_2: + case ENZOD_INSTRUMENT_CYMBAL_3: + Matrix_RotateXS(this->cymbalRots[i - 1], MTXMODE_APPLY); + break; + + case ENZOD_INSTRUMENT_DRUM_1: + case ENZOD_INSTRUMENT_DRUM_2: + case ENZOD_INSTRUMENT_DRUM_3: + case ENZOD_INSTRUMENT_DRUM_4: + case ENZOD_INSTRUMENT_DRUM_5: + case ENZOD_INSTRUMENT_BASS_DRUM: + scale = this->drumScales[9 - i] + 1.0f; + Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); + break; + + default: + break; + } + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, sTijoDrumsDLs[i]); + Matrix_Pop(); + } + + CLOSE_DISPS(play->state.gfxCtx); +} + +void EnZod_Draw(Actor* thisx, PlayState* play) { + static TexturePtr sTijoEyesTextures[] = { &gTijoEyesOpen, &gTijoEyesHalfOpen, &gTijoEyesClosed }; + EnZod* this = THIS; + Gfx* gfx; + + OPEN_DISPS(play->state.gfxCtx); + + func_8012C28C(play->state.gfxCtx); + + if (this->stateFlags & TIJO_STATE_2) { + POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 0, 0, 0, 0, this->fogNear, 1000); + } + + gfx = POLY_OPA_DISP; + + gSPSegment(&gfx[0], 0x08, Lib_SegmentedToVirtual(sTijoEyesTextures[this->eyeIndex])); + gSPSegment(&gfx[1], 0x09, Lib_SegmentedToVirtual(&gTijoMouthClosedTex)); + + POLY_OPA_DISP = &gfx[2]; + + EnZod_DrawDrums(this, play); + SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, + EnZod_OverrideLimbDraw, EnZod_PostLimbDraw, &this->actor); + if (this->stateFlags & TIJO_STATE_2) { + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); + } + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_En_Zod/z_en_zod.h b/src/overlays/actors/ovl_En_Zod/z_en_zod.h index 08cf29f2d..9e6f3f4da 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.h +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.h @@ -2,6 +2,10 @@ #define Z_EN_ZOD_H #include "global.h" +#include "assets/objects/object_zod/object_zod.h" + +#define ENZOD_GET_ENTRANCE_INDEX(thisx) (((thisx)->params & 0xFE00) >> 9) +#define ENZOD_GET_TYPE(thisx) ((thisx)->params & 0xF) struct EnZod; @@ -9,8 +13,29 @@ typedef void (*EnZodActionFunc)(struct EnZod*, PlayState*); typedef struct EnZod { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x158]; + /* 0x144 */ Vec3s morphTable[TIJO_LIMB_MAX]; + /* 0x180 */ Vec3s jointTable[TIJO_LIMB_MAX]; + /* 0x1BC */ SkelAnime skelAnime; + /* 0x200 */ ColliderCylinder collider; + /* 0x24C */ s16 eyeIndex; + /* 0x24E */ s16 blinkTimer; + /* 0x250 */ Vec3s headRot; + /* 0x256 */ u16 stateFlags; + /* 0x258 */ s16 curAnimIndex; + /* 0x25A */ s16 nextAnimIndex; + /* 0x25C */ s16 cymbalRots[3]; + /* 0x262 */ s16 cymbalRotVels[3]; + /* 0x268 */ f32 drumScales[6]; + /* 0x280 */ f32 drumScaleVels[6]; + /* 0x298 */ s16 unk_298; // Set but not used. + /* 0x29A */ s16 fogNear; /* 0x29C */ EnZodActionFunc actionFunc; } EnZod; // size = 0x2A0 +typedef enum { + /* 1 */ ENZOD_TYPE_1 = 1, + /* 2 */ ENZOD_TYPE_2, + /* 0xF */ ENZOD_TYPE_0xF = 0xF, +} EnZodTypes; + #endif // Z_EN_ZOD_H diff --git a/src/overlays/actors/ovl_En_Zog/overlay.cfg b/src/overlays/actors/ovl_En_Zog/overlay.cfg deleted file mode 100644 index fe913a71e..000000000 --- a/src/overlays/actors/ovl_En_Zog/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Zog -z_en_zog.c diff --git a/src/overlays/actors/ovl_En_Zog/z_en_zog.c b/src/overlays/actors/ovl_En_Zog/z_en_zog.c index 4f0a82980..a165d91fe 100644 --- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c +++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c @@ -264,7 +264,7 @@ void EnZog_Init(Actor* thisx, PlayState* play) { } } - if ((ENZOG_GET_F(&this->actor) != ENZOG_F_2) && (gSaveContext.save.weekEventReg[88] & 0x10)) { + if ((ENZOG_GET_F(&this->actor) != ENZOG_F_2) && CHECK_WEEKEVENTREG(WEEKEVENTREG_88_10)) { this->unk_302 = this->unk_300 = 0; this->unk_2FC = this->unk_2FE = 3; this->actor.flags |= ACTOR_FLAG_2000000; @@ -274,7 +274,7 @@ void EnZog_Init(Actor* thisx, PlayState* play) { Animation_PlayLoop(&this->skelAnime, D_80B958DC[0]); this->actor.textId = 0x1009; - if (gSaveContext.save.weekEventReg[91] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_91_02)) { this->actor.textId = 0x103C; this->actionFunc = func_80B9451C; } else { @@ -645,7 +645,7 @@ void func_80B9461C(EnZog* this, PlayState* play) { this->actor.textId = 0x103C; this->actionFunc = func_80B9451C; this->actor.flags |= ACTOR_FLAG_2000000; - gSaveContext.save.weekEventReg[91] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_91_02); } if ((this->unk_304 == 11) && ((s32)this->skelAnime.curFrame >= 55)) { @@ -748,11 +748,11 @@ void func_80B94A00(EnZog* this, PlayState* play) { if (func_80B93BE0(this, play)) { this->actionFunc = func_80B948A8; this->actor.flags |= ACTOR_FLAG_2000000; - if (gSaveContext.save.weekEventReg[29] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_29_20)) { this->actor.textId = 0x1009; } else { this->actor.textId = 0x1008; - gSaveContext.save.weekEventReg[29] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_29_20); } this->unk_300 = 2; this->unk_31C = 2; @@ -876,7 +876,7 @@ void func_80B94E34(EnZog* this, PlayState* play) { if ((player->actor.speedXZ > 3.0f) && (this->unk_324 == 0)) { this->unk_324 = 25; - func_800B8E58(player, player->ageProperties->unk_92 + NA_SE_VO_LI_PUSH); + func_800B8E58(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_PUSH); } } this->actor.speedXZ *= 0.3f; @@ -905,7 +905,7 @@ void func_80B94E34(EnZog* this, PlayState* play) { this->unk_31C = 1; this->unk_31E = 0; func_80B93BA8(this, 0); - gSaveContext.save.weekEventReg[88] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_88_10); } else if ((this->actor.yawTowardsPlayer > 16000) && (this->actor.yawTowardsPlayer < 32000) && (this->unk_302 == 0)) { func_800B8614(&this->actor, play, 150.0f); @@ -939,7 +939,7 @@ void func_80B95128(EnZog* this, PlayState* play) { } this->actor.flags &= ~ACTOR_FLAG_10000; - gSaveContext.save.weekEventReg[91] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_91_01); } else { func_800B8614(&this->actor, play, 150.0f); } diff --git a/src/overlays/actors/ovl_En_Zoraegg/overlay.cfg b/src/overlays/actors/ovl_En_Zoraegg/overlay.cfg deleted file mode 100644 index f7f5fde0b..000000000 --- a/src/overlays/actors/ovl_En_Zoraegg/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Zoraegg -z_en_zoraegg.c diff --git a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c index f882c9711..2f6f0e791 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c @@ -118,7 +118,7 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) { case ENZORAEGG_1F_07: case ENZORAEGG_1F_08: case ENZORAEGG_1F_09: - if (gSaveContext.save.weekEventReg[19] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_40)) { Actor_Kill(&this->actor); return; } @@ -131,7 +131,7 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) { case ENZORAEGG_1F_0E: case ENZORAEGG_1F_0F: case ENZORAEGG_1F_10: - if (!(gSaveContext.save.weekEventReg[19] & 0x40)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_19_40)) { Actor_Kill(&this->actor); return; } @@ -405,7 +405,7 @@ void func_80B32390(EnZoraegg* this, PlayState* play) { if (temp_v0 != NULL) { ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, temp_v0); - gSaveContext.eventInf[3] |= 8; + SET_EVENTINF(EVENTINF_33); Actor_Kill(&this->actor); } } else if ((func_80B319A8(play) >= 7) && @@ -475,7 +475,7 @@ void func_80B326F4(EnZoraegg* this, PlayState* play) { Animation_GetLastFrame(&object_zoraegg_Anim_004D20), ANIMMODE_ONCE, 5.0f); this->unk_1E8 = 0; this->actionFunc = func_80B32644; - gSaveContext.save.weekEventReg[19] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_19_40); this->unk_1EC = 2; this->unk_1EE = 100; Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_2); @@ -556,13 +556,13 @@ void func_80B32A88(EnZoraegg* this, PlayState* play) { } void func_80B32B10(EnZoraegg* this, PlayState* play) { - if (gSaveContext.eventInf[3] & 8) { + if (CHECK_EVENTINF(EVENTINF_33)) { this->actionFunc = func_80B32A88; } } void func_80B32B3C(EnZoraegg* this, PlayState* play) { - if (gSaveContext.eventInf[3] & 8) { + if (CHECK_EVENTINF(EVENTINF_33)) { this->actionFunc = func_80B32A88; this->actor.draw = EnZoraegg_Draw; } diff --git a/src/overlays/actors/ovl_En_Zos/overlay.cfg b/src/overlays/actors/ovl_En_Zos/overlay.cfg deleted file mode 100644 index a83ca1017..000000000 --- a/src/overlays/actors/ovl_En_Zos/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Zos -z_en_zos.c diff --git a/src/overlays/actors/ovl_En_Zos/z_en_zos.c b/src/overlays/actors/ovl_En_Zos/z_en_zos.c index 0570d4c6d..72de2024f 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -100,11 +100,11 @@ void EnZos_Init(Actor* thisx, PlayState* play) { switch (ENZOS_GET_F(&this->actor)) { case ENZOS_F_1: - if (!(gSaveContext.save.weekEventReg[55] & 0x80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { Actor_Kill(&this->actor); } - if (gSaveContext.save.weekEventReg[78] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_01)) { this->actionFunc = func_80BBC24C; } else { this->actionFunc = func_80BBC14C; @@ -120,7 +120,7 @@ void EnZos_Init(Actor* thisx, PlayState* play) { break; default: - if (gSaveContext.save.weekEventReg[55] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { Actor_Kill(&this->actor); } this->actor.flags |= ACTOR_FLAG_10; @@ -131,7 +131,7 @@ void EnZos_Init(Actor* thisx, PlayState* play) { void EnZos_Destroy(Actor* thisx, PlayState* play) { EnZos* this = THIS; - gSaveContext.save.weekEventReg[52] &= (u8)~0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_10); } static AnimationHeader* sAnimations[] = { @@ -223,7 +223,7 @@ void func_80BBB15C(EnZos* this, PlayState* play) { textId = 0x123E; EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP); this->unk_2B6 |= 2; - } else if (gSaveContext.save.weekEventReg[40] & 0x20) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_40_20)) { textId = 0x1236; EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP); this->unk_2B6 |= 0x80; @@ -234,13 +234,13 @@ void func_80BBB15C(EnZos* this, PlayState* play) { } } else { this->unk_2B6 &= ~2; - if (gSaveContext.save.weekEventReg[39] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_10)) { textId = 0x1243; EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP); this->unk_2B6 |= 0x80; } else { textId = 0x1244; - gSaveContext.save.weekEventReg[39] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_39_10); EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_LOOK_DOWN, ANIMMODE_LOOP); this->unk_2B6 |= 0x10; } @@ -254,7 +254,7 @@ void func_80BBB2C4(EnZos* this, PlayState* play) { this->actionFunc = func_80BBB8AC; this->actor.flags &= ~ACTOR_FLAG_10000; } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -264,11 +264,11 @@ void func_80BBB354(EnZos* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; this->actionFunc = func_80BBB2C4; - gSaveContext.save.weekEventReg[39] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_39_20); this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { - if (gSaveContext.save.weekEventReg[39] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_20)) { getItemId = GI_RUPEE_PURPLE; } else { getItemId = GI_HEART_PIECE; @@ -361,36 +361,37 @@ void func_80BBB574(EnZos* this, PlayState* play) { } void func_80BBB718(EnZos* this, PlayState* play) { - s32 sp24; + PlayerItemAction itemAction; Player* player = GET_PLAYER(play); SkelAnime_Update(&this->skelAnime); if (Message_GetState(&play->msgCtx) == TEXT_STATE_16) { - sp24 = func_80123810(play); - if (sp24 > 0) { + itemAction = func_80123810(play); + + if (itemAction > PLAYER_IA_NONE) { func_801477B4(play); - if (sp24 == 25) { + if (itemAction == PLAYER_IA_BOTTLE_ZORA_EGG) { player->actor.textId = 0x1232; EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_ARMS_OUT, ANIMMODE_LOOP); this->unk_2B6 |= 8; - gSaveContext.save.weekEventReg[40] |= 0x20; - } else if (gSaveContext.save.weekEventReg[39] & 8) { + SET_WEEKEVENTREG(WEEKEVENTREG_40_20); + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_08)) { player->actor.textId = 0x1241; } else { player->actor.textId = 0x1237; - gSaveContext.save.weekEventReg[39] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_39_08); EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_LOOK_DOWN, ANIMMODE_LOOP); this->unk_2B6 |= 4; } this->actionFunc = func_80BBB8AC; - } else if (sp24 < 0) { - if (gSaveContext.save.weekEventReg[39] & 8) { + } else if (itemAction <= PLAYER_IA_MINUS1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_08)) { func_80151938(play, 0x1241); } else { func_80151938(play, 0x1237); - gSaveContext.save.weekEventReg[39] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_39_08); EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_LOOK_DOWN, ANIMMODE_LOOP); this->unk_2B6 |= 4; } @@ -502,12 +503,12 @@ void func_80BBBB84(EnZos* this, PlayState* play) { this->actionFunc = func_80BBB8AC; EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP); this->unk_2B6 |= 2; - } else if (gSaveContext.save.weekEventReg[41] & 0x10) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_41_10)) { Message_StartTextbox(play, 0x124A, &this->actor); this->actionFunc = func_80BBB8AC; EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP); } else { - gSaveContext.save.weekEventReg[41] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_41_10); Message_StartTextbox(play, 0x124B, &this->actor); this->actionFunc = func_80BBB574; EnZos_ChangeAnim(this, EN_ZOS_ANIM_INSPIRED, ANIMMODE_ONCE); @@ -525,7 +526,7 @@ void func_80BBBCBC(EnZos* this, PlayState* play) { Message_StartTextbox(play, 0x124D, &this->actor); this->actionFunc = func_80BBB574; } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -534,7 +535,7 @@ void func_80BBBD5C(EnZos* this, PlayState* play) { if (!Cutscene_CheckActorAction(play, 0x1F5)) { this->actionFunc = func_80BBBCBC; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -571,9 +572,9 @@ void func_80BBBDE0(EnZos* this, PlayState* play) { } if (!Actor_IsFacingPlayer(&this->actor, 0x4000) && (this->actor.xzDistToPlayer < 100.0f)) { - gSaveContext.save.weekEventReg[52] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_52_10); } else { - gSaveContext.save.weekEventReg[52] &= (u8)~0x10; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_10); } sp28.x = this->actor.projectedPos.x; @@ -586,13 +587,13 @@ void func_80BBBFBC(EnZos* this, PlayState* play) { u16 textId; if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { - if (gSaveContext.save.weekEventReg[79] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) { textId = 0x125B; - } else if (gSaveContext.save.weekEventReg[78] & 0x80) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_80)) { textId = 0x125A; } else { textId = 0x1259; - gSaveContext.save.weekEventReg[78] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_78_80); } EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_ARMS_OUT, ANIMMODE_LOOP); } else { @@ -653,7 +654,7 @@ void func_80BBC22C(EnZos* this, PlayState* play) { void func_80BBC24C(EnZos* this, PlayState* play) { func_80BBB0D4(this, play); - if (gSaveContext.save.weekEventReg[79] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) { this->actionFunc = func_80BBC22C; EnZos_ChangeAnim(this, EN_ZOS_ANIM_PLAY_RIGHT, ANIMMODE_ONCE); } @@ -761,7 +762,7 @@ void EnZos_Draw(Actor* thisx, PlayState* play) { func_80BBC4E4, func_80BBC500, &this->actor); if (this->unk_2B6 & 0x40) { - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); } CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Zot/overlay.cfg b/src/overlays/actors/ovl_En_Zot/overlay.cfg deleted file mode 100644 index 0d4db225f..000000000 --- a/src/overlays/actors/ovl_En_Zot/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Zot -z_en_zot.c diff --git a/src/overlays/actors/ovl_En_Zot/z_en_zot.c b/src/overlays/actors/ovl_En_Zot/z_en_zot.c index f8a9c0bd2..331a153df 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -185,14 +185,14 @@ void EnZot_Init(Actor* thisx, PlayState* play2) { func_80B96BEC(this, 2, ANIMMODE_LOOP); this->actor.colChkInfo.cylRadius = 0; this->actor.shape.yOffset = -1400.0f; - if (!(gSaveContext.save.weekEventReg[55] & 0x80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { Actor_Kill(&this->actor); } break; case 18: this->actionFunc = func_80B99384; - if (!(gSaveContext.save.weekEventReg[55] & 0x80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { Actor_Kill(&this->actor); } break; @@ -220,7 +220,7 @@ void EnZot_Init(Actor* thisx, PlayState* play2) { break; } - if ((ENZOT_GET_1F(thisx) >= 2) && (ENZOT_GET_1F(thisx) < 11) && (gSaveContext.save.weekEventReg[55] & 0x80)) { + if ((ENZOT_GET_1F(thisx) >= 2) && (ENZOT_GET_1F(thisx) < 11) && CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { Actor_Kill(&this->actor); } } @@ -230,7 +230,7 @@ void EnZot_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); if (ENZOT_GET_1F(&this->actor) == 8) { - gSaveContext.save.weekEventReg[41] &= (u8)~0x20; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_41_20); } } @@ -362,17 +362,17 @@ void func_80B97110(EnZot* this, PlayState* play) { if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { textId = 0x125F; - if (gSaveContext.save.weekEventReg[28] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_28_80)) { textId = 0x1261; } else { - gSaveContext.save.weekEventReg[28] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_28_80); } } else { textId = 0x125C; - if (gSaveContext.save.weekEventReg[28] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_28_40)) { textId = 0x125E; } else { - gSaveContext.save.weekEventReg[28] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_28_40); } } Message_StartTextbox(play, textId, &this->actor); @@ -410,35 +410,35 @@ void func_80B97240(EnZot* this, PlayState* play) { void func_80B972E8(EnZot* this, PlayState* play) { u16 textId; - if (gSaveContext.save.weekEventReg[29] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_29_10)) { if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { textId = 0x126A; - if (gSaveContext.save.weekEventReg[29] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_29_01)) { textId = 0x126D; } else { - gSaveContext.save.weekEventReg[29] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_29_01); } } else { textId = 0x1267; - if (gSaveContext.save.weekEventReg[29] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_29_02)) { textId = 0x1269; } else { - gSaveContext.save.weekEventReg[29] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_29_02); } } } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { textId = 0x1265; - if (gSaveContext.save.weekEventReg[29] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_29_04)) { textId = 0x1266; } else { - gSaveContext.save.weekEventReg[29] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_29_04); } } else { textId = 0x1262; - if (gSaveContext.save.weekEventReg[29] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_29_08)) { textId = 0x1264; } else { - gSaveContext.save.weekEventReg[29] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_29_08); } } Message_StartTextbox(play, textId, &this->actor); @@ -516,7 +516,7 @@ void func_80B975F8(EnZot* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80B973BC; } else { - func_800B8500(&this->actor, play, 10000.0f, 1000.0f, PLAYER_AP_NONE); + func_800B8500(&this->actor, play, 10000.0f, 1000.0f, PLAYER_IA_NONE); } } @@ -560,7 +560,7 @@ void func_80B97708(EnZot* this, PlayState* play) { } if (phi_v1 != 0) { - gSaveContext.save.weekEventReg[29] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_29_10); this->actor.flags |= ACTOR_FLAG_10000; if (phi_v1 == 5) { if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { @@ -588,58 +588,58 @@ void func_80B9787C(EnZot* this, PlayState* play) { if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { switch (ENZOT_GET_1F(&this->actor)) { case 2: - if (gSaveContext.save.weekEventReg[37] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_37_40)) { textId = 0x127E; } else { textId = 0x127C; - gSaveContext.save.weekEventReg[37] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_37_40); } break; case 3: - if (gSaveContext.save.weekEventReg[38] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_38_01)) { textId = 0x1284; } else { textId = 0x1282; - gSaveContext.save.weekEventReg[38] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_38_01); } break; default: - if (gSaveContext.save.weekEventReg[38] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_38_04)) { textId = 0x128A; } else { textId = 0x1288; - gSaveContext.save.weekEventReg[38] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_38_04); } break; } } else { switch (ENZOT_GET_1F(&this->actor)) { case 2: - if (gSaveContext.save.weekEventReg[37] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_37_20)) { textId = 0x127B; } else { textId = 0x1279; - gSaveContext.save.weekEventReg[37] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_37_20); } break; case 3: - if (gSaveContext.save.weekEventReg[37] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_37_80)) { textId = 0x1281; } else { textId = 0x127F; - gSaveContext.save.weekEventReg[37] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_37_80); } break; default: - if (gSaveContext.save.weekEventReg[38] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_38_02)) { textId = 0x1287; } else { textId = 0x1285; - gSaveContext.save.weekEventReg[38] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_38_02); } break; } @@ -786,7 +786,7 @@ void func_80B97E4C(EnZot* this, PlayState* play) { this->actionFunc = func_80B97D6C; this->unk_2F2 |= 4; func_80B96BEC(this, 3, ANIMMODE_LOOP); - gSaveContext.save.weekEventReg[38] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_38_08); break; case 0x128B: @@ -803,7 +803,7 @@ void func_80B97FD0(EnZot* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = func_80B97E4C; func_80B97BF8(this, play); - } else if (gSaveContext.save.weekEventReg[38] & 8) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_38_08)) { if ((this->actor.xzDistToPlayer < 120.0f) && (gSaveContext.save.playerForm == PLAYER_FORM_ZORA)) { this->unk_2F2 |= 4; this->actionFunc = func_80B97E0C; @@ -837,35 +837,35 @@ void func_80B98178(EnZot* this, PlayState* play) { if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { if (CURRENT_DAY == 3) { textId = 0x129D; - } else if (gSaveContext.save.weekEventReg[39] & 1) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_01)) { textId = 0x129C; } else { textId = 0x129B; - gSaveContext.save.weekEventReg[39] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_39_01); } - } else if (gSaveContext.save.weekEventReg[38] & 0x80) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_38_80)) { textId = 0x1293; } else { textId = 0x1291; - gSaveContext.save.weekEventReg[38] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_38_80); } break; case 7: if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { - if (gSaveContext.save.weekEventReg[39] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_04)) { textId = 0x12AA; } else { textId = 0x12A6; - gSaveContext.save.weekEventReg[39] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_39_04); } } else if (Flags_GetSwitch(play, this->actor.home.rot.z & 0x7F)) { textId = 0x12A0; - } else if (gSaveContext.save.weekEventReg[39] & 2) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_02)) { textId = 0x12A5; } else { textId = 0x12A2; - gSaveContext.save.weekEventReg[39] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_39_02); } break; @@ -877,7 +877,7 @@ void func_80B98178(EnZot* this, PlayState* play) { case 16: case 17: phi_v0 = (ENZOT_GET_1F(&this->actor) * 4) - 44; - if (gSaveContext.save.weekEventReg[79] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) { phi_v0 += 2; } @@ -931,7 +931,7 @@ void func_80B9849C(EnZot* this, PlayState* play) { } this->actionFunc = func_80B98728; } else { - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } } @@ -941,24 +941,25 @@ void func_80B9854C(EnZot* this, PlayState* play) { this->actor.parent = NULL; this->actionFunc = func_80B9849C; this->actor.flags |= ACTOR_FLAG_10000; - func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1); + func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { Actor_PickUp(&this->actor, play, this->unk_2D4, 10000.0f, 50.0f); } } void func_80B985EC(EnZot* this, PlayState* play) { - s32 itemActionParam; + PlayerItemAction itemAction; Player* player = GET_PLAYER(play); func_80B98348(this, play); if (Message_GetState(&play->msgCtx) == TEXT_STATE_16) { - itemActionParam = func_80123810(play); - if (itemActionParam > PLAYER_AP_NONE) { + itemAction = func_80123810(play); + + if (itemAction > PLAYER_IA_NONE) { func_801477B4(play); - if ((itemActionParam == PLAYER_AP_PICTO_BOX) && CHECK_QUEST_ITEM(QUEST_PICTOGRAPH) && - Snap_CheckFlag(PICTOGRAPH_LULU_HEAD)) { - if (Snap_CheckFlag(PICTOGRAPH_LULU_RIGHT_ARM) && Snap_CheckFlag(PICTOGRAPH_LULU_LEFT_ARM)) { + if ((itemAction == PLAYER_IA_PICTO_BOX) && CHECK_QUEST_ITEM(QUEST_PICTOGRAPH) && + Snap_CheckFlag(PICTO_VALID_LULU_HEAD)) { + if (Snap_CheckFlag(PICTO_VALID_LULU_RIGHT_ARM) && Snap_CheckFlag(PICTO_VALID_LULU_LEFT_ARM)) { player->actor.textId = 0x12AE; } else { player->actor.textId = 0x12AC; @@ -968,7 +969,7 @@ void func_80B985EC(EnZot* this, PlayState* play) { player->actor.textId = 0x12AB; } this->actionFunc = func_80B98728; - } else if (itemActionParam < PLAYER_AP_NONE) { + } else if (itemAction <= PLAYER_IA_MINUS1) { func_80151938(play, 0x12AB); this->actionFunc = func_80B98728; } @@ -1076,17 +1077,17 @@ void func_80B98A4C(EnZot* this, PlayState* play) { u16 textId; if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { - if (gSaveContext.save.weekEventReg[39] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_80)) { textId = 0x12B6; } else { textId = 0x12B4; - gSaveContext.save.weekEventReg[39] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_39_80); } - } else if (gSaveContext.save.weekEventReg[39] & 0x40) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_40)) { textId = 0x12B3; } else { textId = 0x12B1; - gSaveContext.save.weekEventReg[39] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_39_40); } Message_StartTextbox(play, textId, &this->actor); } @@ -1104,14 +1105,14 @@ void func_80B98AD0(EnZot* this, PlayState* play) { case 0x12B8: func_801477B4(play); this->actionFunc = func_80B98CA8; - gSaveContext.save.weekEventReg[41] &= (u8)~0x20; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_41_20); AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); break; case 0x12BA: func_801477B4(play); this->actionFunc = func_80B98CA8; - gSaveContext.save.weekEventReg[41] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_41_20); AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); break; @@ -1126,7 +1127,7 @@ void func_80B98AD0(EnZot* this, PlayState* play) { void func_80B98BF4(EnZot* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actor.flags &= ~ACTOR_FLAG_10000; - if (gSaveContext.save.weekEventReg[41] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_41_20)) { Message_StartTextbox(play, 0x12B7, &this->actor); this->actionFunc = func_80B98AD0; } else { @@ -1159,7 +1160,7 @@ void func_80B98CA8(EnZot* this, PlayState* play) { } if (this->actor.xzDistToPlayer > 100.0f) { - gSaveContext.save.weekEventReg[41] &= (u8)~0x20; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_41_20); } } @@ -1168,17 +1169,17 @@ void func_80B98E10(EnZot* this, PlayState* play) { if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { if (Flags_GetSwitch(play, this->actor.home.rot.z & 0x7F)) { - if (gSaveContext.save.weekEventReg[40] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_40_04)) { textId = 0x12C5; } else { textId = 0x12C3; - gSaveContext.save.weekEventReg[40] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_40_04); } - } else if (gSaveContext.save.weekEventReg[40] & 2) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_40_02)) { textId = 0x12C2; } else { textId = 0x12C0; - gSaveContext.save.weekEventReg[40] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_40_02); } } else { if (Flags_GetSwitch(play, this->actor.home.rot.z & 0x7F)) { @@ -1188,10 +1189,10 @@ void func_80B98E10(EnZot* this, PlayState* play) { textId = 0x12BE; this->unk_2F2 |= 0x10; } - } else if (gSaveContext.save.weekEventReg[40] & 1) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_40_01)) { textId = 0x12BC; } else { - gSaveContext.save.weekEventReg[40] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_40_01); this->unk_2F2 |= 4; textId = 0x12BB; } @@ -1254,17 +1255,17 @@ void func_80B99160(EnZot* this, PlayState* play) { u16 textId; if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { - if (gSaveContext.save.weekEventReg[40] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_40_10)) { textId = 0x12CD; } else { textId = 0x12CA; - gSaveContext.save.weekEventReg[40] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_40_10); } - } else if (gSaveContext.save.weekEventReg[40] & 8) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_40_08)) { textId = 0x12C9; } else { textId = 0x12C6; - gSaveContext.save.weekEventReg[40] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_40_08); } Message_StartTextbox(play, textId, &this->actor); } @@ -1345,11 +1346,12 @@ void EnZot_Update(Actor* thisx, PlayState* play) { } Gfx* func_80B99580(GraphicsContext* gfxCtx) { - Gfx* dList = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2); + Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, sizeof(Gfx)); + Gfx* gfx = gfxHead; - gSPEndDisplayList(dList); + gSPEndDisplayList(gfx++); - return dList; + return gfxHead; } s32 EnZot_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { diff --git a/src/overlays/actors/ovl_En_Zov/overlay.cfg b/src/overlays/actors/ovl_En_Zov/overlay.cfg deleted file mode 100644 index 6e8d4a17a..000000000 --- a/src/overlays/actors/ovl_En_Zov/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Zov -z_en_zov.c diff --git a/src/overlays/actors/ovl_En_Zov/z_en_zov.c b/src/overlays/actors/ovl_En_Zov/z_en_zov.c index 81f81b052..27d4e04b1 100644 --- a/src/overlays/actors/ovl_En_Zov/z_en_zov.c +++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.c @@ -107,7 +107,7 @@ void EnZov_Init(Actor* thisx, PlayState* play) { case ENZOV_F_1: this->actionFunc = func_80BD1F1C; func_80BD1570(this, 9, ANIMMODE_LOOP); - if (!(gSaveContext.save.weekEventReg[55] & 0x80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { Actor_Kill(&this->picto.actor); return; } @@ -120,7 +120,7 @@ void EnZov_Init(Actor* thisx, PlayState* play) { default: this->unk_320 |= 2; - if ((gSaveContext.save.weekEventReg[55] & 0x80) || (gSaveContext.save.weekEventReg[53] & 0x20)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_53_20)) { Actor_Kill(&this->picto.actor); } break; @@ -185,7 +185,7 @@ s32 func_80BD15A4(EnZov* this, PlayState* play) { void func_80BD160C(EnZov* this, PlayState* play) { s32 textId = 0; - if (gSaveContext.save.weekEventReg[53] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_20)) { this->unk_320 &= ~2; if (gSaveContext.save.playerForm != PLAYER_FORM_ZORA) { textId = 0x1024; @@ -391,7 +391,7 @@ void func_80BD1D30(EnZov* this, PlayState* play) { u16 textId; if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { - if (gSaveContext.save.weekEventReg[79] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) { textId = 0x1032; } else { textId = 0x1033; @@ -424,9 +424,9 @@ void func_80BD1DB8(EnZov* this, PlayState* play) { case 0x1039: play->nextEntrance = play->setupExitList[ENZOV_GET_FE00(&this->picto.actor)]; - play->transitionType = TRANS_TYPE_05; + play->transitionType = TRANS_TYPE_FADE_WHITE_FAST; play->transitionTrigger = TRANS_TRIGGER_START; - gSaveContext.save.weekEventReg[78] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_78_01); this->actionFunc = func_80BD1D94; play->msgCtx.msgLength = 0; Audio_QueueSeqCmd(0x101400FF); @@ -460,11 +460,11 @@ s32 EnZov_ValidatePictograph(PlayState* play, Actor* thisx) { s32 ret; EnZov* this = THIS; - ret = Snap_ValidatePictograph(play, &this->picto.actor, PICTOGRAPH_LULU_HEAD, &this->picto.actor.focus.pos, + ret = Snap_ValidatePictograph(play, &this->picto.actor, PICTO_VALID_LULU_HEAD, &this->picto.actor.focus.pos, &this->picto.actor.shape.rot, 10.0f, 300.0f, -1); - ret |= Snap_ValidatePictograph(play, &this->picto.actor, PICTOGRAPH_LULU_RIGHT_ARM, &this->unk_308, + ret |= Snap_ValidatePictograph(play, &this->picto.actor, PICTO_VALID_LULU_RIGHT_ARM, &this->unk_308, &this->picto.actor.shape.rot, 50.0f, 160.0f, 0x3000); - ret |= Snap_ValidatePictograph(play, &this->picto.actor, PICTOGRAPH_LULU_LEFT_ARM, &this->unk_314, + ret |= Snap_ValidatePictograph(play, &this->picto.actor, PICTO_VALID_LULU_LEFT_ARM, &this->unk_314, &this->picto.actor.shape.rot, 50.0f, 160.0f, 0x3000); return ret; } diff --git a/src/overlays/actors/ovl_En_Zow/overlay.cfg b/src/overlays/actors/ovl_En_Zow/overlay.cfg deleted file mode 100644 index ba17bffc7..000000000 --- a/src/overlays/actors/ovl_En_Zow/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_En_Zow -z_en_zow.c diff --git a/src/overlays/actors/ovl_En_Zow/z_en_zow.c b/src/overlays/actors/ovl_En_Zow/z_en_zow.c index 2d4bf1605..7e3709162 100644 --- a/src/overlays/actors/ovl_En_Zow/z_en_zow.c +++ b/src/overlays/actors/ovl_En_Zow/z_en_zow.c @@ -357,45 +357,45 @@ void func_80BDD1E0(EnZow* this, PlayState* play) { u16 phi_a1; if (ENZOW_GET_F(&this->actor) == ENZOW_F_1) { - if (gSaveContext.save.weekEventReg[55] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { - if (gSaveContext.save.weekEventReg[78] & 4) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_04)) { phi_a1 = 0x12FD; } else { phi_a1 = 0x12FA; - gSaveContext.save.weekEventReg[78] |= 4; + SET_WEEKEVENTREG(WEEKEVENTREG_78_04); } - } else if (gSaveContext.save.weekEventReg[78] & 0x10) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_10)) { phi_a1 = 0x1301; } else { - gSaveContext.save.weekEventReg[78] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_78_10); phi_a1 = 0x12FF; } } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { - if (gSaveContext.save.weekEventReg[78] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_08)) { phi_a1 = 0x12F8; } else { phi_a1 = 0x12F3; - gSaveContext.save.weekEventReg[78] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_78_08); } - } else if (gSaveContext.save.weekEventReg[78] & 0x10) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_10)) { phi_a1 = 0x1301; } else { - gSaveContext.save.weekEventReg[78] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_78_10); phi_a1 = 0x12FF; } - } else if (gSaveContext.save.weekEventReg[55] & 0x80) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { phi_a1 = 0x12EC; } else { phi_a1 = 0x12F1; } } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { - if (gSaveContext.save.weekEventReg[78] & 2) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_02)) { phi_a1 = 0x12EB; } else { phi_a1 = 0x12E8; - gSaveContext.save.weekEventReg[78] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_78_02); } } else { phi_a1 = 0x12EF; @@ -589,11 +589,12 @@ void EnZow_Update(Actor* thisx, PlayState* play) { } Gfx* func_80BDDA7C(GraphicsContext* gfxCtx) { - Gfx* gfx = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2); + Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, sizeof(Gfx)); + Gfx* gfx = gfxHead; - gSPEndDisplayList(gfx); + gSPEndDisplayList(gfx++); - return gfx; + return gfxHead; } Vec3f D_80BDDD4C = { 400.0f, 0.0f, 0.0f }; diff --git a/src/overlays/actors/ovl_Item_B_Heart/overlay.cfg b/src/overlays/actors/ovl_Item_B_Heart/overlay.cfg deleted file mode 100644 index 092976e2b..000000000 --- a/src/overlays/actors/ovl_Item_B_Heart/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Item_B_Heart -z_item_b_heart.c diff --git a/src/overlays/actors/ovl_Item_Etcetera/overlay.cfg b/src/overlays/actors/ovl_Item_Etcetera/overlay.cfg deleted file mode 100644 index bf610d3f6..000000000 --- a/src/overlays/actors/ovl_Item_Etcetera/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Item_Etcetera -z_item_etcetera.c diff --git a/src/overlays/actors/ovl_Item_Inbox/overlay.cfg b/src/overlays/actors/ovl_Item_Inbox/overlay.cfg deleted file mode 100644 index e6d4ee824..000000000 --- a/src/overlays/actors/ovl_Item_Inbox/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Item_Inbox -z_item_inbox.c diff --git a/src/overlays/actors/ovl_Mir_Ray/overlay.cfg b/src/overlays/actors/ovl_Mir_Ray/overlay.cfg deleted file mode 100644 index 9010673e3..000000000 --- a/src/overlays/actors/ovl_Mir_Ray/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Mir_Ray -z_mir_ray.c diff --git a/src/overlays/actors/ovl_Mir_Ray2/overlay.cfg b/src/overlays/actors/ovl_Mir_Ray2/overlay.cfg deleted file mode 100644 index 2a1947005..000000000 --- a/src/overlays/actors/ovl_Mir_Ray2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Mir_Ray2 -z_mir_ray2.c diff --git a/src/overlays/actors/ovl_Mir_Ray3/overlay.cfg b/src/overlays/actors/ovl_Mir_Ray3/overlay.cfg deleted file mode 100644 index b2553ef0f..000000000 --- a/src/overlays/actors/ovl_Mir_Ray3/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Mir_Ray3 -z_mir_ray3.c diff --git a/src/overlays/actors/ovl_Obj_Aqua/overlay.cfg b/src/overlays/actors/ovl_Obj_Aqua/overlay.cfg deleted file mode 100644 index fa2c65abc..000000000 --- a/src/overlays/actors/ovl_Obj_Aqua/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Aqua -z_obj_aqua.c diff --git a/src/overlays/actors/ovl_Obj_Armos/overlay.cfg b/src/overlays/actors/ovl_Obj_Armos/overlay.cfg deleted file mode 100644 index 1b54f7a3e..000000000 --- a/src/overlays/actors/ovl_Obj_Armos/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Armos -z_obj_armos.c diff --git a/src/overlays/actors/ovl_Obj_Bean/overlay.cfg b/src/overlays/actors/ovl_Obj_Bean/overlay.cfg deleted file mode 100644 index 24317cd06..000000000 --- a/src/overlays/actors/ovl_Obj_Bean/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Bean -z_obj_bean.c diff --git a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c index 2a8a63fec..35f37d5d8 100644 --- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c +++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c @@ -546,7 +546,7 @@ void func_80937FC8(ObjBean* this, PlayState* play) { this->unk_1E8(this); if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state)) { - if (Player_GetExchangeItemId(play) == PLAYER_AP_MAGIC_BEANS) { + if (Player_GetExchangeItemId(play) == PLAYER_IA_MAGIC_BEANS) { func_809383B4(this); Flags_SetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 0)); } @@ -591,7 +591,7 @@ void func_809381C4(ObjBean* this, PlayState* play) { if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); if (this->dyna.actor.cutscene >= 0) { - func_800B7298(play, &this->dyna.actor, 1); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_1); } this->unk_1E4 = 2; func_80938284(this); @@ -748,7 +748,7 @@ void func_80938780(ObjBean* this, PlayState* play) { if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); if (this->dyna.actor.cutscene >= 0) { - func_800B7298(play, &this->dyna.actor, 1); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_1); } this->unk_1B4 = 36; func_80937130(this); diff --git a/src/overlays/actors/ovl_Obj_Bell/overlay.cfg b/src/overlays/actors/ovl_Obj_Bell/overlay.cfg deleted file mode 100644 index 40a295642..000000000 --- a/src/overlays/actors/ovl_Obj_Bell/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Bell -z_obj_bell.c diff --git a/src/overlays/actors/ovl_Obj_Bigicicle/overlay.cfg b/src/overlays/actors/ovl_Obj_Bigicicle/overlay.cfg deleted file mode 100644 index 7f70ff350..000000000 --- a/src/overlays/actors/ovl_Obj_Bigicicle/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Bigicicle -z_obj_bigicicle.c diff --git a/src/overlays/actors/ovl_Obj_Blockstop/overlay.cfg b/src/overlays/actors/ovl_Obj_Blockstop/overlay.cfg deleted file mode 100644 index 0c337eb0e..000000000 --- a/src/overlays/actors/ovl_Obj_Blockstop/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Blockstop -z_obj_blockstop.c diff --git a/src/overlays/actors/ovl_Obj_Boat/overlay.cfg b/src/overlays/actors/ovl_Obj_Boat/overlay.cfg deleted file mode 100644 index 8617a8228..000000000 --- a/src/overlays/actors/ovl_Obj_Boat/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Boat -z_obj_boat.c diff --git a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c index 6545b98e5..c48ff332c 100644 --- a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c +++ b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c @@ -124,7 +124,7 @@ void ObjBoat_Update(Actor* thisx, PlayState* play) { sp3C = this->unk_15D * (OBJBOAT_GET_4000(thisx) ? 5.0f : 3.0f); } } - if (player->csMode != 0x1A) { + if (player->csMode != PLAYER_CSMODE_26) { Math_ScaledStepToS(&this->dyna.actor.shape.rot.y, sp3A, (s16)(s32)(fabsf(this->dyna.actor.speedXZ) * 40.0f)); this->dyna.actor.world.rot.y = this->dyna.actor.shape.rot.y; Math_StepToF(&this->dyna.actor.speedXZ, sp3C, 0.05f); diff --git a/src/overlays/actors/ovl_Obj_Bombiwa/overlay.cfg b/src/overlays/actors/ovl_Obj_Bombiwa/overlay.cfg deleted file mode 100644 index d18e4301f..000000000 --- a/src/overlays/actors/ovl_Obj_Bombiwa/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Bombiwa -z_obj_bombiwa.c diff --git a/src/overlays/actors/ovl_Obj_Boyo/overlay.cfg b/src/overlays/actors/ovl_Obj_Boyo/overlay.cfg deleted file mode 100644 index c024ce5ed..000000000 --- a/src/overlays/actors/ovl_Obj_Boyo/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Boyo -z_obj_boyo.c diff --git a/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c b/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c index 387d79616..cfecbdad0 100644 --- a/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c +++ b/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c @@ -82,7 +82,7 @@ void ObjBoyo_UpdatePlayerBumpValues(ObjBoyo* this, Player* target) { void ObjBoyo_UpdatePirateBumpValues(ObjBoyo* src, EnKaizoku* target) { target->unk_2F0 = 30.0f; - target->unk_2F4 = Actor_YawBetweenActors(&src->actor, &target->actor); + target->unk_2F4 = Actor_YawBetweenActors(&src->actor, &target->picto.actor); } void ObjBoyo_UpdateBombBumpValues(ObjBoyo* src, EnBom* target) { diff --git a/src/overlays/actors/ovl_Obj_Chan/overlay.cfg b/src/overlays/actors/ovl_Obj_Chan/overlay.cfg deleted file mode 100644 index 6480f28ff..000000000 --- a/src/overlays/actors/ovl_Obj_Chan/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Chan -z_obj_chan.c diff --git a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c index e77ea9890..27f5cc273 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c @@ -310,8 +310,8 @@ void ObjChan_PotAction(ObjChan* this, PlayState* play) { SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EV_CHANDELIER_BROKEN); func_80BB9A1C((ObjChan*)this->actor.parent, 40.0f); if (this->myPotIndex == 4) { - if (!(((void)0, gSaveContext.save.weekEventReg[0x25]) & 0x10)) { - gSaveContext.save.weekEventReg[0x25] = ((void)0, gSaveContext.save.weekEventReg[0x25]) | 0x10; + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_37_10)) { + SET_WEEKEVENTREG(WEEKEVENTREG_37_10); Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_MM, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0x8000, this->actor.cutscene, this->actor.unk20, NULL); diff --git a/src/overlays/actors/ovl_Obj_Chikuwa/overlay.cfg b/src/overlays/actors/ovl_Obj_Chikuwa/overlay.cfg deleted file mode 100644 index d2599907a..000000000 --- a/src/overlays/actors/ovl_Obj_Chikuwa/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Chikuwa -z_obj_chikuwa.c diff --git a/src/overlays/actors/ovl_Obj_Comb/overlay.cfg b/src/overlays/actors/ovl_Obj_Comb/overlay.cfg deleted file mode 100644 index 69f62abc4..000000000 --- a/src/overlays/actors/ovl_Obj_Comb/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Comb -z_obj_comb.c diff --git a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c index 367bf1619..b03344708 100644 --- a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c +++ b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c @@ -334,7 +334,7 @@ void ObjComb_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->actor, sInitChain); Collider_InitJntSph(play, &this->collider); - if ((sp2C == 1) && OBJCOMB_GET_10(&this->actor) && (gSaveContext.save.weekEventReg[83] & 2)) { + if ((sp2C == 1) && OBJCOMB_GET_10(&this->actor) && CHECK_WEEKEVENTREG(WEEKEVENTREG_83_02)) { Actor_Kill(&this->actor); return; } @@ -495,7 +495,7 @@ void func_8098E0B8(ObjComb* this, PlayState* play) { if ((this->unk_1B4 == 10) && (this->unk_1B6 != 0) && (this->unk_1B5 == 2) && (this->actor.cutscene >= 0)) { if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) { - func_800B7298(play, &this->actor, 4); + func_800B7298(play, &this->actor, PLAYER_CSMODE_4); } } } @@ -529,12 +529,12 @@ void ObjComb_Update(Actor* thisx, PlayState* play) { if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); if (this->actor.cutscene >= 0) { - func_800B7298(play, &this->actor, 1); + func_800B7298(play, &this->actor, PLAYER_CSMODE_1); } if (((OBJCOMB_GET_8000(&this->actor) | OBJCOMB_GET_80(&this->actor)) == 1) && OBJCOMB_GET_10(&this->actor)) { - gSaveContext.save.weekEventReg[83] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_83_02); } this->unk_1B5 = 2; diff --git a/src/overlays/actors/ovl_Obj_Danpeilift/overlay.cfg b/src/overlays/actors/ovl_Obj_Danpeilift/overlay.cfg deleted file mode 100644 index d2836d012..000000000 --- a/src/overlays/actors/ovl_Obj_Danpeilift/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Danpeilift -z_obj_danpeilift.c diff --git a/src/overlays/actors/ovl_Obj_Demo/overlay.cfg b/src/overlays/actors/ovl_Obj_Demo/overlay.cfg deleted file mode 100644 index feba3b348..000000000 --- a/src/overlays/actors/ovl_Obj_Demo/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Demo -z_obj_demo.c diff --git a/src/overlays/actors/ovl_Obj_Dhouse/overlay.cfg b/src/overlays/actors/ovl_Obj_Dhouse/overlay.cfg deleted file mode 100644 index 0e58d0666..000000000 --- a/src/overlays/actors/ovl_Obj_Dhouse/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Dhouse -z_obj_dhouse.c diff --git a/src/overlays/actors/ovl_Obj_Dinner/overlay.cfg b/src/overlays/actors/ovl_Obj_Dinner/overlay.cfg deleted file mode 100644 index 3fc58dccd..000000000 --- a/src/overlays/actors/ovl_Obj_Dinner/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Dinner -z_obj_dinner.c diff --git a/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c b/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c index 0b6a6b988..5a9ef2d05 100644 --- a/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c +++ b/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c @@ -31,7 +31,7 @@ ActorInit Obj_Dinner_InitVars = { void ObjDinner_Init(Actor* thisx, PlayState* play) { ObjDinner* this = THIS; - if (gSaveContext.save.isNight != true || (CURRENT_DAY == 3 && gSaveContext.save.weekEventReg[22] & 1)) { + if ((gSaveContext.save.isNight != true) || ((CURRENT_DAY == 3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01))) { Actor_Kill(&this->actor); } Actor_SetScale(&this->actor, 0.1f); diff --git a/src/overlays/actors/ovl_Obj_Dora/overlay.cfg b/src/overlays/actors/ovl_Obj_Dora/overlay.cfg deleted file mode 100644 index 1bb5f302a..000000000 --- a/src/overlays/actors/ovl_Obj_Dora/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Dora -z_obj_dora.c diff --git a/src/overlays/actors/ovl_Obj_Dowsing/overlay.cfg b/src/overlays/actors/ovl_Obj_Dowsing/overlay.cfg deleted file mode 100644 index e8dbfc20a..000000000 --- a/src/overlays/actors/ovl_Obj_Dowsing/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Dowsing -z_obj_dowsing.c diff --git a/src/overlays/actors/ovl_Obj_Driftice/overlay.cfg b/src/overlays/actors/ovl_Obj_Driftice/overlay.cfg deleted file mode 100644 index 1b85d29a1..000000000 --- a/src/overlays/actors/ovl_Obj_Driftice/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Driftice -z_obj_driftice.c diff --git a/src/overlays/actors/ovl_Obj_Ending/overlay.cfg b/src/overlays/actors/ovl_Obj_Ending/overlay.cfg deleted file mode 100644 index 4930e5226..000000000 --- a/src/overlays/actors/ovl_Obj_Ending/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Ending -z_obj_ending.c diff --git a/src/overlays/actors/ovl_Obj_Entotu/overlay.cfg b/src/overlays/actors/ovl_Obj_Entotu/overlay.cfg deleted file mode 100644 index 55d5ebe5f..000000000 --- a/src/overlays/actors/ovl_Obj_Entotu/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Entotu -z_obj_entotu.c diff --git a/src/overlays/actors/ovl_Obj_Etcetera/overlay.cfg b/src/overlays/actors/ovl_Obj_Etcetera/overlay.cfg deleted file mode 100644 index d8a239068..000000000 --- a/src/overlays/actors/ovl_Obj_Etcetera/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Etcetera -z_obj_etcetera.c diff --git a/src/overlays/actors/ovl_Obj_Fireshield/overlay.cfg b/src/overlays/actors/ovl_Obj_Fireshield/overlay.cfg deleted file mode 100644 index e5006379a..000000000 --- a/src/overlays/actors/ovl_Obj_Fireshield/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Fireshield -z_obj_fireshield.c diff --git a/src/overlays/actors/ovl_Obj_Flowerpot/overlay.cfg b/src/overlays/actors/ovl_Obj_Flowerpot/overlay.cfg deleted file mode 100644 index f6aa9dc16..000000000 --- a/src/overlays/actors/ovl_Obj_Flowerpot/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Flowerpot -z_obj_flowerpot.c diff --git a/src/overlays/actors/ovl_Obj_Funen/overlay.cfg b/src/overlays/actors/ovl_Obj_Funen/overlay.cfg deleted file mode 100644 index e67ba5e19..000000000 --- a/src/overlays/actors/ovl_Obj_Funen/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Funen -z_obj_funen.c diff --git a/src/overlays/actors/ovl_Obj_Ghaka/overlay.cfg b/src/overlays/actors/ovl_Obj_Ghaka/overlay.cfg deleted file mode 100644 index c760e169f..000000000 --- a/src/overlays/actors/ovl_Obj_Ghaka/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Ghaka -z_obj_ghaka.c diff --git a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c index 315c7dc0f..0581706d5 100644 --- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c +++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c @@ -44,7 +44,7 @@ static InitChainEntry D_80B3C96C[] = { }; void func_80B3C260(ObjGhaka* this) { - if (gSaveContext.save.weekEventReg[20] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_20)) { this->dyna.actor.world.pos.z = this->dyna.actor.home.pos.z + 100.0f; } this->actionFunc = func_80B3C39C; @@ -59,7 +59,7 @@ void func_80B3C2B0(ObjGhaka* this) { } void func_80B3C2C4(ObjGhaka* this, PlayState* play) { - if (!(gSaveContext.save.weekEventReg[20] & 0x20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_20_20)) { Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_BG_GORON_OYU, 0.0f, 25.0f, 261.0f, 0, 0, 0, 0, this->dyna.actor.cutscene, this->dyna.actor.unk20, 0); } else { @@ -85,7 +85,7 @@ void func_80B3C39C(ObjGhaka* this, PlayState* play) { } } - if (this->dyna.pushForce < 0.0f && !(gSaveContext.save.weekEventReg[20] & 0x20) && + if (this->dyna.pushForce < 0.0f && !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_20) && player->transformation == PLAYER_FORM_GORON) { func_80B3C2B0(this); } else { @@ -139,7 +139,7 @@ void func_80B3C624(ObjGhaka* this, PlayState* play) { player->stateFlags2 &= ~PLAYER_STATE2_10; this->dyna.pushForce = 0.0f; func_80B3C2C4(this, play); - gSaveContext.save.weekEventReg[20] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_20_20); func_80B3C260(this); Audio_PlaySfxAtPos(&D_80B3C960, NA_SE_EV_BLOCK_BOUND); } else { @@ -161,7 +161,7 @@ void ObjGhaka_Init(Actor* thisx, PlayState* play) { if (this->dyna.actor.floorPoly == 0) { Actor_Kill(&this->dyna.actor); } - if (gSaveContext.save.weekEventReg[20] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_20)) { func_80B3C2C4(this, play); } func_80B3C260(this); diff --git a/src/overlays/actors/ovl_Obj_Grass/overlay.cfg b/src/overlays/actors/ovl_Obj_Grass/overlay.cfg deleted file mode 100644 index 6aec3207d..000000000 --- a/src/overlays/actors/ovl_Obj_Grass/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Grass -z_obj_grass.c diff --git a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c index 3414aaafa..501fb2ee4 100644 --- a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c +++ b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c @@ -73,13 +73,13 @@ s32 func_809A9110(PlayState* play, Vec3f* arg1) { SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, arg1, &sp20, &sp2C); - if ((play->unk_187F0.z * -130.13191f) < sp20.z) { + if ((play->projectionMtxFDiagonal.z * -130.13191f) < sp20.z) { if (sp2C < 1.0f) { sp2C = 1.0f; } - if (((fabsf(sp20.x) - (130.13191f * play->unk_187F0.x)) < sp2C) && - ((fabsf(sp20.y) - (130.13191f * play->unk_187F0.y)) < sp2C)) { + if (((fabsf(sp20.x) - (130.13191f * play->projectionMtxFDiagonal.x)) < sp2C) && + ((fabsf(sp20.y) - (130.13191f * play->projectionMtxFDiagonal.y)) < sp2C)) { return true; } } diff --git a/src/overlays/actors/ovl_Obj_Grass_Carry/overlay.cfg b/src/overlays/actors/ovl_Obj_Grass_Carry/overlay.cfg deleted file mode 100644 index 41ae3cfcd..000000000 --- a/src/overlays/actors/ovl_Obj_Grass_Carry/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Grass_Carry -z_obj_grass_carry.c diff --git a/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c b/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c index 568e10141..9872fb0b7 100644 --- a/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c +++ b/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c @@ -356,5 +356,5 @@ void ObjGrassCarry_Update(Actor* thisx, PlayState* play) { } void func_809ABB7C(Actor* this, PlayState* play) { - Gfx_DrawDListOpa(play, gKusaBushType1); + Gfx_DrawDListOpa(play, gKusaBushType1DL); } diff --git a/src/overlays/actors/ovl_Obj_Grass_Unit/overlay.cfg b/src/overlays/actors/ovl_Obj_Grass_Unit/overlay.cfg deleted file mode 100644 index d67028b99..000000000 --- a/src/overlays/actors/ovl_Obj_Grass_Unit/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Grass_Unit -z_obj_grass_unit.c diff --git a/src/overlays/actors/ovl_Obj_Hakaisi/overlay.cfg b/src/overlays/actors/ovl_Obj_Hakaisi/overlay.cfg deleted file mode 100644 index 5d1fb24ad..000000000 --- a/src/overlays/actors/ovl_Obj_Hakaisi/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Hakaisi -z_obj_hakaisi.c diff --git a/src/overlays/actors/ovl_Obj_Hamishi/overlay.cfg b/src/overlays/actors/ovl_Obj_Hamishi/overlay.cfg deleted file mode 100644 index 902311cdc..000000000 --- a/src/overlays/actors/ovl_Obj_Hamishi/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Hamishi -z_obj_hamishi.c diff --git a/src/overlays/actors/ovl_Obj_Hana/overlay.cfg b/src/overlays/actors/ovl_Obj_Hana/overlay.cfg deleted file mode 100644 index 8d04d632c..000000000 --- a/src/overlays/actors/ovl_Obj_Hana/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Hana -z_obj_hana.c diff --git a/src/overlays/actors/ovl_Obj_Hariko/overlay.cfg b/src/overlays/actors/ovl_Obj_Hariko/overlay.cfg deleted file mode 100644 index 98c352eb4..000000000 --- a/src/overlays/actors/ovl_Obj_Hariko/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Hariko -z_obj_hariko.c diff --git a/src/overlays/actors/ovl_Obj_Hgdoor/overlay.cfg b/src/overlays/actors/ovl_Obj_Hgdoor/overlay.cfg deleted file mode 100644 index 4bd3103fb..000000000 --- a/src/overlays/actors/ovl_Obj_Hgdoor/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Hgdoor -z_obj_hgdoor.c diff --git a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c index 5ecd2a63f..e3972be18 100644 --- a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c +++ b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c @@ -94,7 +94,7 @@ void ObjHgdoor_SetupIdle(ObjHgdoor* this) { } void ObjHgdoor_Idle(ObjHgdoor* this, PlayState* play) { - if (!(gSaveContext.save.weekEventReg[75] & 0x20) && !(gSaveContext.save.weekEventReg[52] & 0x20) && + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20) && (this->dyna.actor.xzDistToPlayer < 100.0f) && (this->dyna.actor.playerHeightRel < 40.0f) && OBJHGDOOR_IS_RIGHT_DOOR(&this->dyna.actor)) { ObjHgdoor_SetChild(this, play); diff --git a/src/overlays/actors/ovl_Obj_HsStump/overlay.cfg b/src/overlays/actors/ovl_Obj_HsStump/overlay.cfg deleted file mode 100644 index ddf618a65..000000000 --- a/src/overlays/actors/ovl_Obj_HsStump/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_HsStump -z_obj_hsstump.c diff --git a/src/overlays/actors/ovl_Obj_Hsblock/overlay.cfg b/src/overlays/actors/ovl_Obj_Hsblock/overlay.cfg deleted file mode 100644 index 19cd6470b..000000000 --- a/src/overlays/actors/ovl_Obj_Hsblock/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Hsblock -z_obj_hsblock.c diff --git a/src/overlays/actors/ovl_Obj_Hugebombiwa/overlay.cfg b/src/overlays/actors/ovl_Obj_Hugebombiwa/overlay.cfg deleted file mode 100644 index baf0417f6..000000000 --- a/src/overlays/actors/ovl_Obj_Hugebombiwa/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Hugebombiwa -z_obj_hugebombiwa.c diff --git a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c index 8210f23d3..cade13522 100644 --- a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c +++ b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c @@ -412,7 +412,7 @@ void func_80A54CEC(ObjHugebombiwa* this, PlayState* play) { Flags_SetSwitch(play, ENHUGEBOMBIWA_GET_7F(&this->actor)); if (!(ENHUGEBOMBIWA_GET_100(&this->actor)) && ((play->sceneId == SCENE_17SETUGEN) || (play->sceneId == SCENE_17SETUGEN2))) { - gSaveContext.save.weekEventReg[19] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_19_02); } if (!(ENHUGEBOMBIWA_GET_100(&this->actor))) { diff --git a/src/overlays/actors/ovl_Obj_Hunsui/overlay.cfg b/src/overlays/actors/ovl_Obj_Hunsui/overlay.cfg deleted file mode 100644 index 939fc3564..000000000 --- a/src/overlays/actors/ovl_Obj_Hunsui/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Hunsui -z_obj_hunsui.c diff --git a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c index f35d270a0..a861e9e63 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c @@ -3,7 +3,7 @@ * Overlay: ovl_Obj_Hunsui * Description: Switch-Activated Geyser */ - +#include "prevent_bss_reordering.h" #include "z_obj_hunsui.h" #include "objects/object_hunsui/object_hunsui.h" diff --git a/src/overlays/actors/ovl_Obj_Ice_Poly/overlay.cfg b/src/overlays/actors/ovl_Obj_Ice_Poly/overlay.cfg deleted file mode 100644 index d77c80fcb..000000000 --- a/src/overlays/actors/ovl_Obj_Ice_Poly/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Ice_Poly -z_obj_ice_poly.c diff --git a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c index cf6588c31..13f49fd1f 100644 --- a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c +++ b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c @@ -116,7 +116,7 @@ void ObjIcePoly_Init(Actor* thisx, PlayState* play) { thisx->shape.rot.z = -0x500; if (((this->unk_149 != OBJICEPOLY_FF_FF) && Flags_GetSwitch(play, this->unk_149)) || - ((play->sceneId == SCENE_KAJIYA) && (gSaveContext.save.weekEventReg[33] & 0x80))) { + ((play->sceneId == SCENE_KAJIYA) && CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80))) { Actor_Kill(thisx); return; } diff --git a/src/overlays/actors/ovl_Obj_Iceblock/overlay.cfg b/src/overlays/actors/ovl_Obj_Iceblock/overlay.cfg deleted file mode 100644 index a72f4e3c8..000000000 --- a/src/overlays/actors/ovl_Obj_Iceblock/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Iceblock -z_obj_iceblock.c diff --git a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c index 8a039c496..8c88c35ee 100644 --- a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c +++ b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c @@ -921,7 +921,7 @@ void ObjIceblock_Init(Actor* thisx, PlayState* play) { } DynaPolyActor_Init(&this->dyna, 1); - DynaPolyActor_LoadMesh(play, &this->dyna, &gIceBlockDynaColHeader); + DynaPolyActor_LoadMesh(play, &this->dyna, &gIceBlockCol); func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit); @@ -1208,7 +1208,7 @@ void func_80A25FD4(ObjIceblock* this, PlayState* play) { func_80A23370(this, sp2C); func_80A260E8(this); sp30 = false; - func_800B7298(play, &this->dyna.actor, 7); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_7); this->unk_1B0 |= 1; } @@ -1254,7 +1254,7 @@ void func_80A26144(ObjIceblock* this, PlayState* play) { if ((this->unk_1B0 & 1) && (isBool || sp28 || (this->dyna.actor.xzDistToPlayer > 400.0f))) { this->unk_1B0 &= ~1; - func_800B7298(play, &this->dyna.actor, 6); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6); } if (isBool) { @@ -1453,7 +1453,7 @@ void ObjIceblock_Update(Actor* thisx, PlayState* play) { this->unk_1B0 &= ~0x100; if (this->unk_1B0 & 1) { this->unk_1B0 &= ~1; - func_800B7298(play, &this->dyna.actor, 6); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6); } func_80A266C4(this); } diff --git a/src/overlays/actors/ovl_Obj_Jg_Gakki/overlay.cfg b/src/overlays/actors/ovl_Obj_Jg_Gakki/overlay.cfg deleted file mode 100644 index f4ae147d7..000000000 --- a/src/overlays/actors/ovl_Obj_Jg_Gakki/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Jg_Gakki -z_obj_jg_gakki.c diff --git a/src/overlays/actors/ovl_Obj_Jgame_Light/overlay.cfg b/src/overlays/actors/ovl_Obj_Jgame_Light/overlay.cfg deleted file mode 100644 index 932e67c12..000000000 --- a/src/overlays/actors/ovl_Obj_Jgame_Light/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Jgame_Light -z_obj_jgame_light.c diff --git a/src/overlays/actors/ovl_Obj_Kendo_Kanban/overlay.cfg b/src/overlays/actors/ovl_Obj_Kendo_Kanban/overlay.cfg deleted file mode 100644 index e1992b42b..000000000 --- a/src/overlays/actors/ovl_Obj_Kendo_Kanban/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Kendo_Kanban -z_obj_kendo_kanban.c diff --git a/src/overlays/actors/ovl_Obj_Kepn_Koya/overlay.cfg b/src/overlays/actors/ovl_Obj_Kepn_Koya/overlay.cfg deleted file mode 100644 index 8a6c7b560..000000000 --- a/src/overlays/actors/ovl_Obj_Kepn_Koya/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Kepn_Koya -z_obj_kepn_koya.c diff --git a/src/overlays/actors/ovl_Obj_Kibako/overlay.cfg b/src/overlays/actors/ovl_Obj_Kibako/overlay.cfg deleted file mode 100644 index d0a8b240a..000000000 --- a/src/overlays/actors/ovl_Obj_Kibako/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Kibako -z_obj_kibako.c diff --git a/src/overlays/actors/ovl_Obj_Kibako2/overlay.cfg b/src/overlays/actors/ovl_Obj_Kibako2/overlay.cfg deleted file mode 100644 index 436504fc8..000000000 --- a/src/overlays/actors/ovl_Obj_Kibako2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Kibako2 -z_obj_kibako2.c diff --git a/src/overlays/actors/ovl_Obj_Kinoko/overlay.cfg b/src/overlays/actors/ovl_Obj_Kinoko/overlay.cfg deleted file mode 100644 index 071ad6a34..000000000 --- a/src/overlays/actors/ovl_Obj_Kinoko/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Kinoko -z_obj_kinoko.c diff --git a/src/overlays/actors/ovl_Obj_Kzsaku/overlay.cfg b/src/overlays/actors/ovl_Obj_Kzsaku/overlay.cfg deleted file mode 100644 index c2a20d705..000000000 --- a/src/overlays/actors/ovl_Obj_Kzsaku/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Kzsaku -z_obj_kzsaku.c diff --git a/src/overlays/actors/ovl_Obj_Lift/overlay.cfg b/src/overlays/actors/ovl_Obj_Lift/overlay.cfg deleted file mode 100644 index fca482174..000000000 --- a/src/overlays/actors/ovl_Obj_Lift/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Lift -z_obj_lift.c diff --git a/src/overlays/actors/ovl_Obj_Lightblock/overlay.cfg b/src/overlays/actors/ovl_Obj_Lightblock/overlay.cfg deleted file mode 100644 index ecf5da6fa..000000000 --- a/src/overlays/actors/ovl_Obj_Lightblock/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Lightblock -z_obj_lightblock.c diff --git a/src/overlays/actors/ovl_Obj_Lightswitch/overlay.cfg b/src/overlays/actors/ovl_Obj_Lightswitch/overlay.cfg deleted file mode 100644 index cafaebb11..000000000 --- a/src/overlays/actors/ovl_Obj_Lightswitch/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Lightswitch -z_obj_lightswitch.c diff --git a/src/overlays/actors/ovl_Obj_Lupygamelift/overlay.cfg b/src/overlays/actors/ovl_Obj_Lupygamelift/overlay.cfg deleted file mode 100644 index ad6243891..000000000 --- a/src/overlays/actors/ovl_Obj_Lupygamelift/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Lupygamelift -z_obj_lupygamelift.c diff --git a/src/overlays/actors/ovl_Obj_Makekinsuta/overlay.cfg b/src/overlays/actors/ovl_Obj_Makekinsuta/overlay.cfg deleted file mode 100644 index d63602969..000000000 --- a/src/overlays/actors/ovl_Obj_Makekinsuta/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Makekinsuta -z_obj_makekinsuta.c diff --git a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c index fefa5797d..c46821ac1 100644 --- a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c +++ b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c @@ -87,7 +87,7 @@ void func_8099FB64(Actor* thisx, PlayState* play) { Matrix_RotateXS(thisx->shape.rot.x, MTXMODE_APPLY); Matrix_RotateZS(thisx->shape.rot.z, MTXMODE_APPLY); Matrix_MultVec3f(&D_8099FE3C, &destVec); - rotY = Math_FAtan2F(destVec.z, destVec.x); + rotY = Math_Atan2S_XY(destVec.z, destVec.x); } actor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_SW, thisx->world.pos.x, thisx->world.pos.y, thisx->world.pos.z, 0, rotY, 0, (OBJMAKEKINSUTA_GET_1F(thisx) << 2) | 0xFF01); @@ -130,7 +130,7 @@ void func_8099FD7C(Actor* thisx, PlayState* play) { if (ActorCutscene_GetCanPlayNext(thisx->cutscene)) { ActorCutscene_StartAndSetUnkLinkFields(thisx->cutscene, thisx); if (thisx->cutscene >= 0) { - func_800B7298(play, thisx, 4); + func_800B7298(play, thisx, PLAYER_CSMODE_4); } func_8099FB64(thisx, play); thisx->update = Actor_Noop; diff --git a/src/overlays/actors/ovl_Obj_Makeoshihiki/overlay.cfg b/src/overlays/actors/ovl_Obj_Makeoshihiki/overlay.cfg deleted file mode 100644 index 7d4fbe22d..000000000 --- a/src/overlays/actors/ovl_Obj_Makeoshihiki/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Makeoshihiki -z_obj_makeoshihiki.c diff --git a/src/overlays/actors/ovl_Obj_Milk_Bin/overlay.cfg b/src/overlays/actors/ovl_Obj_Milk_Bin/overlay.cfg deleted file mode 100644 index a5f995b32..000000000 --- a/src/overlays/actors/ovl_Obj_Milk_Bin/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Milk_Bin -z_obj_milk_bin.c diff --git a/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c b/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c index 358cfde4b..8ff6e8455 100644 --- a/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c +++ b/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c @@ -58,7 +58,7 @@ void ObjMilkBin_Init(Actor* thisx, PlayState* play) { this->disableDraw = 0; this->type = thisx->params; - if ((this->type == OBJ_MILK_BIN_TYPE_2) && !(gSaveContext.save.weekEventReg[52] & 1)) { + if ((this->type == OBJ_MILK_BIN_TYPE_2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { this->disableDraw |= 1; } } @@ -74,14 +74,14 @@ void ObjMilkBin_Update(Actor* thisx, PlayState* play2) { ObjMilkBin* this = THIS; if (this->type == OBJ_MILK_BIN_TYPE_1) { - if (gSaveContext.save.weekEventReg[22] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { if (((gSaveContext.save.day == 2) && (gSaveContext.save.isNight == 1)) || (gSaveContext.save.day >= 3)) { Actor_Kill(&this->actor); return; } } } else if (this->type == OBJ_MILK_BIN_TYPE_2) { - if (gSaveContext.save.weekEventReg[52] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { this->disableDraw &= ~1; } else { this->disableDraw |= 1; diff --git a/src/overlays/actors/ovl_Obj_Mine/overlay.cfg b/src/overlays/actors/ovl_Obj_Mine/overlay.cfg deleted file mode 100644 index 7d0fb28e9..000000000 --- a/src/overlays/actors/ovl_Obj_Mine/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Mine -z_obj_mine.c diff --git a/src/overlays/actors/ovl_Obj_Moon_Stone/overlay.cfg b/src/overlays/actors/ovl_Obj_Moon_Stone/overlay.cfg deleted file mode 100644 index 0b388c672..000000000 --- a/src/overlays/actors/ovl_Obj_Moon_Stone/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Moon_Stone -z_obj_moon_stone.c diff --git a/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c b/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c index e6f9ec496..18c36f87e 100644 --- a/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c +++ b/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c @@ -49,8 +49,8 @@ void ObjMoonStone_Init(Actor* thisx, PlayState* play) { this->actor.colChkInfo.health = 0; this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); func_80C0662C(this); - } else if (!(gSaveContext.save.weekEventReg[74] & 0x40)) { - if ((gSaveContext.save.weekEventReg[74] & 0x80)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_74_40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_74_80)) { Actor_Spawn(&play->actorCtx, play, 1, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, -1); } @@ -97,14 +97,14 @@ void func_80C0670C(ObjMoonStone* this, PlayState* play) { } void func_80C0673C(ObjMoonStone* this) { - if (!(gSaveContext.save.weekEventReg[74] & 0x80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_74_80)) { this->actor.draw = NULL; } this->actionFunc = func_80C06768; } void func_80C06768(ObjMoonStone* this, PlayState* play) { - if ((gSaveContext.save.weekEventReg[74] & 0x80)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_74_80)) { if (this->actor.draw == NULL) { this->actor.draw = ObjMoonStone_Draw; Actor_Spawn(&play->actorCtx, play, 1, this->actor.world.pos.x, this->actor.world.pos.y, @@ -128,7 +128,7 @@ void func_80C0685C(ObjMoonStone* this) { void func_80C06870(ObjMoonStone* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - gSaveContext.save.weekEventReg[74] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_74_40); Actor_Kill(&this->actor); } } diff --git a/src/overlays/actors/ovl_Obj_Mu_Pict/overlay.cfg b/src/overlays/actors/ovl_Obj_Mu_Pict/overlay.cfg deleted file mode 100644 index 77c10a6df..000000000 --- a/src/overlays/actors/ovl_Obj_Mu_Pict/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Mu_Pict -z_obj_mu_pict.c diff --git a/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c b/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c index 2dca46caa..e2750e639 100644 --- a/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c +++ b/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c @@ -40,7 +40,7 @@ ActorInit Obj_Mu_Pict_InitVars = { void ObjMuPict_Init(Actor* thisx, PlayState* play) { ObjMuPict* this = THIS; - if (!(gSaveContext.save.weekEventReg[75] & 0x20) && !(gSaveContext.save.weekEventReg[52] & 0x20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20)) { Actor_Kill(&this->actor); } diff --git a/src/overlays/actors/ovl_Obj_Mure/overlay.cfg b/src/overlays/actors/ovl_Obj_Mure/overlay.cfg deleted file mode 100644 index 99c755b9a..000000000 --- a/src/overlays/actors/ovl_Obj_Mure/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Mure -z_obj_mure.c diff --git a/src/overlays/actors/ovl_Obj_Mure2/overlay.cfg b/src/overlays/actors/ovl_Obj_Mure2/overlay.cfg deleted file mode 100644 index dcb1eb3ac..000000000 --- a/src/overlays/actors/ovl_Obj_Mure2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Mure2 -z_obj_mure2.c diff --git a/src/overlays/actors/ovl_Obj_Mure3/overlay.cfg b/src/overlays/actors/ovl_Obj_Mure3/overlay.cfg deleted file mode 100644 index 7774442db..000000000 --- a/src/overlays/actors/ovl_Obj_Mure3/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Mure3 -z_obj_mure3.c diff --git a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c index 00f0cc5d7..c8f657c13 100644 --- a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c +++ b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c @@ -107,7 +107,7 @@ void func_8098F220(ObjMure3* this, PlayState* play) { } } -void func_8098F364(ObjMure3* this, s32 play) { +void func_8098F364(ObjMure3* this, PlayState* play) { s16 count = sRupeeCounts[OBJMURE3_PARAMS_RUPEEINDEX(&this->actor)]; s32 i; EnItem00** collectible; diff --git a/src/overlays/actors/ovl_Obj_Nozoki/overlay.cfg b/src/overlays/actors/ovl_Obj_Nozoki/overlay.cfg deleted file mode 100644 index 9173a8055..000000000 --- a/src/overlays/actors/ovl_Obj_Nozoki/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Nozoki -z_obj_nozoki.c diff --git a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c index 55d148f4a..933ea06d2 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c @@ -407,17 +407,17 @@ void func_80BA311C(ObjNozoki* this, PlayState* play) { } void func_80BA3230(ObjNozoki* this, PlayState* play) { - if (gSaveContext.save.weekEventReg[64] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_64_20)) { Actor* npc = play->actorCtx.actorLists[ACTORCAT_NPC].first; Actor* test3 = SubS_FindActor(play, npc, ACTORCAT_NPC, ACTOR_EN_TEST3); if ((test3 != NULL) && (test3->draw != NULL)) { - if ((play->curSpawn == 3) && !(gSaveContext.save.weekEventReg[64] & 0x40)) { + if ((play->curSpawn == 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_64_40)) { this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10000); this->dyna.actor.textId = 0x297A; } else { this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); - if (gSaveContext.save.weekEventReg[64] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_64_40)) { this->dyna.actor.textId = 0; } else { this->dyna.actor.textId = 0x2979; @@ -434,9 +434,9 @@ void func_80BA3230(ObjNozoki* this, PlayState* play) { } void func_80BA3344(ObjNozoki* this, PlayState* play) { - if ((play->curSpawn == 3) && !(gSaveContext.save.weekEventReg[64] & 0x40)) { + if ((play->curSpawn == 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_64_40)) { if (Actor_TextboxIsClosing(&this->dyna.actor, play)) { - gSaveContext.save.weekEventReg[64] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_64_40); this->dyna.actor.flags &= ~ACTOR_FLAG_10000; ObjNozoki_SetupAction(this, func_80BA3230); } diff --git a/src/overlays/actors/ovl_Obj_Ocarinalift/overlay.cfg b/src/overlays/actors/ovl_Obj_Ocarinalift/overlay.cfg deleted file mode 100644 index 3d9eef7c4..000000000 --- a/src/overlays/actors/ovl_Obj_Ocarinalift/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Ocarinalift -z_obj_ocarinalift.c diff --git a/src/overlays/actors/ovl_Obj_Oshihiki/overlay.cfg b/src/overlays/actors/ovl_Obj_Oshihiki/overlay.cfg deleted file mode 100644 index 48cf4049f..000000000 --- a/src/overlays/actors/ovl_Obj_Oshihiki/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Oshihiki -z_obj_oshihiki.c diff --git a/src/overlays/actors/ovl_Obj_Purify/overlay.cfg b/src/overlays/actors/ovl_Obj_Purify/overlay.cfg deleted file mode 100644 index 966356722..000000000 --- a/src/overlays/actors/ovl_Obj_Purify/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Purify -z_obj_purify.c diff --git a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c index 29ffa674e..ee26937da 100644 --- a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c +++ b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c @@ -109,14 +109,11 @@ s32 ObjPurify_IsPurified(ObjPurify* this) { ObjPurifyInfo* info = &sObjPurifyInfo[OBJPURIFY_GET_INFO_INDEX(&this->dyna.actor)]; if (!info->isDekuCity) { - // woodfall temple wood flower unraveled - if (gSaveContext.save.weekEventReg[12] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_01)) { return true; } - } - // woodfall temple purification cutscene watched - else { - if (gSaveContext.save.weekEventReg[20] & 2) { + } else { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) { return true; } } diff --git a/src/overlays/actors/ovl_Obj_Pzlblock/overlay.cfg b/src/overlays/actors/ovl_Obj_Pzlblock/overlay.cfg deleted file mode 100644 index d2b05c1ff..000000000 --- a/src/overlays/actors/ovl_Obj_Pzlblock/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Pzlblock -z_obj_pzlblock.c diff --git a/src/overlays/actors/ovl_Obj_Raillift/overlay.cfg b/src/overlays/actors/ovl_Obj_Raillift/overlay.cfg deleted file mode 100644 index 69c3fc70c..000000000 --- a/src/overlays/actors/ovl_Obj_Raillift/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Raillift -z_obj_raillift.c diff --git a/src/overlays/actors/ovl_Obj_Roomtimer/overlay.cfg b/src/overlays/actors/ovl_Obj_Roomtimer/overlay.cfg deleted file mode 100644 index b4eef8427..000000000 --- a/src/overlays/actors/ovl_Obj_Roomtimer/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Roomtimer -z_obj_roomtimer.c diff --git a/src/overlays/actors/ovl_Obj_Rotlift/overlay.cfg b/src/overlays/actors/ovl_Obj_Rotlift/overlay.cfg deleted file mode 100644 index 7c2884ce4..000000000 --- a/src/overlays/actors/ovl_Obj_Rotlift/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Rotlift -z_obj_rotlift.c diff --git a/src/overlays/actors/ovl_Obj_Shutter/overlay.cfg b/src/overlays/actors/ovl_Obj_Shutter/overlay.cfg deleted file mode 100644 index 9b5210eb4..000000000 --- a/src/overlays/actors/ovl_Obj_Shutter/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Shutter -z_obj_shutter.c diff --git a/src/overlays/actors/ovl_Obj_Skateblock/overlay.cfg b/src/overlays/actors/ovl_Obj_Skateblock/overlay.cfg deleted file mode 100644 index bb4e2fec8..000000000 --- a/src/overlays/actors/ovl_Obj_Skateblock/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Skateblock -z_obj_skateblock.c diff --git a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c index 9265c6615..6a469eea0 100644 --- a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c +++ b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c @@ -535,7 +535,7 @@ void func_80A22334(ObjSkateblock* this, PlayState* play) { func_80A21C88(this, sp2C); func_80A2244C(this); sp30 = false; - func_800B7298(play, &this->dyna.actor, 7); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_7); this->unk_1C1 |= 1; } @@ -591,7 +591,7 @@ void func_80A224A4(ObjSkateblock* this, PlayState* play) { if ((this->unk_1C1 & 1) && (sp24 || sp28 || (this->dyna.actor.xzDistToPlayer > 400.0f))) { this->unk_1C1 &= ~1; - func_800B7298(play, &this->dyna.actor, 6); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6); } func_80A21F74(this, play); diff --git a/src/overlays/actors/ovl_Obj_Smork/overlay.cfg b/src/overlays/actors/ovl_Obj_Smork/overlay.cfg deleted file mode 100644 index 35a105b7d..000000000 --- a/src/overlays/actors/ovl_Obj_Smork/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Smork -z_obj_smork.c diff --git a/src/overlays/actors/ovl_Obj_Snowball/overlay.cfg b/src/overlays/actors/ovl_Obj_Snowball/overlay.cfg deleted file mode 100644 index 45a8a39bd..000000000 --- a/src/overlays/actors/ovl_Obj_Snowball/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Snowball -z_obj_snowball.c diff --git a/src/overlays/actors/ovl_Obj_Snowball2/overlay.cfg b/src/overlays/actors/ovl_Obj_Snowball2/overlay.cfg deleted file mode 100644 index 5d740b086..000000000 --- a/src/overlays/actors/ovl_Obj_Snowball2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Snowball2 -z_obj_snowball2.c diff --git a/src/overlays/actors/ovl_Obj_Sound/overlay.cfg b/src/overlays/actors/ovl_Obj_Sound/overlay.cfg deleted file mode 100644 index d1863878b..000000000 --- a/src/overlays/actors/ovl_Obj_Sound/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Sound -z_obj_sound.c diff --git a/src/overlays/actors/ovl_Obj_Spidertent/overlay.cfg b/src/overlays/actors/ovl_Obj_Spidertent/overlay.cfg deleted file mode 100644 index f5f13b8ad..000000000 --- a/src/overlays/actors/ovl_Obj_Spidertent/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Spidertent -z_obj_spidertent.c diff --git a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c index 214c74495..4708062da 100644 --- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c +++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c @@ -529,7 +529,7 @@ s32 func_80B30480(ObjSpidertent* this, PlayState* play, Vec3f* arg2) { Vec3f sp58; f32 sp54; - if (player->itemActionParam == 7) { + if (player->heldItemAction == PLAYER_IA_STICK) { if (player->unk_B28 > 0) { for (i = 0; i < ARRAY_COUNT(this->colliderElements); i++) { triNorm = &this->collider.elements[i].dim; @@ -679,7 +679,7 @@ void func_80B30A4C(ObjSpidertent* this, PlayState* play) { if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); if (this->dyna.actor.cutscene >= 0) { - func_800B7298(play, &this->dyna.actor, 1); + func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_1); } Flags_SetSwitch(play, OBJSPIDERTENT_GET_7F00(&this->dyna.actor)); func_80B30AD4(this); diff --git a/src/overlays/actors/ovl_Obj_Spinyroll/overlay.cfg b/src/overlays/actors/ovl_Obj_Spinyroll/overlay.cfg deleted file mode 100644 index 38ea69b6d..000000000 --- a/src/overlays/actors/ovl_Obj_Spinyroll/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Spinyroll -z_obj_spinyroll.c diff --git a/src/overlays/actors/ovl_Obj_Switch/overlay.cfg b/src/overlays/actors/ovl_Obj_Switch/overlay.cfg deleted file mode 100644 index 683d4ae00..000000000 --- a/src/overlays/actors/ovl_Obj_Switch/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Switch -z_obj_switch.c diff --git a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c index 7270f1a39..ada5eadd3 100644 --- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c +++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c @@ -411,7 +411,7 @@ void ObjSwitch_Init(Actor* thisx, PlayState* play) { } } if (type == OBJSWITCH_TYPE_CRYSTAL) { - sCrystalSwitchAnimatedMat = Lib_SegmentedToVirtual(&gCrystalSwitchTexAnim); + sCrystalSwitchAnimatedMat = Lib_SegmentedToVirtual(gCrystalSwitchTexAnim); } if (OBJ_SWITCH_IS_FROZEN(&this->dyna.actor)) { ObjSwitch_EyeSwitchFrozenInit(this); diff --git a/src/overlays/actors/ovl_Obj_Swprize/overlay.cfg b/src/overlays/actors/ovl_Obj_Swprize/overlay.cfg deleted file mode 100644 index 4b73ca304..000000000 --- a/src/overlays/actors/ovl_Obj_Swprize/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Swprize -z_obj_swprize.c diff --git a/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.c b/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.c index 5eeef1d5e..578244237 100644 --- a/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.c +++ b/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.c @@ -65,7 +65,7 @@ void func_80C253D0(ObjSwprize* this, PlayState* play) { if (sp78.y < 0.98f) { collectible->velocity.y = (sp78.y + 1.0f) * 4.0f; collectible->speedXZ = (2.0f * (1.0f - fabsf(sp78.y))) + 2.0f; - collectible->world.rot.y = Math_FAtan2F(sp78.z, sp78.x) + D_80C257F8[i]; + collectible->world.rot.y = Math_Atan2S_XY(sp78.z, sp78.x) + D_80C257F8[i]; } else { collectible->world.rot.y = i * (0x10000 / 3); } @@ -76,7 +76,7 @@ void func_80C253D0(ObjSwprize* this, PlayState* play) { if ((collectible != NULL) && (sp78.y < 0.98f)) { collectible->velocity.y = (sp78.y + 1.0f) * 4.0f; collectible->speedXZ = (2.0f * (1.0f - fabsf(sp78.y))) + 2.0f; - collectible->world.rot.y = Math_FAtan2F(sp78.z, sp78.x); + collectible->world.rot.y = Math_Atan2S_XY(sp78.z, sp78.x); } } } diff --git a/src/overlays/actors/ovl_Obj_Syokudai/overlay.cfg b/src/overlays/actors/ovl_Obj_Syokudai/overlay.cfg deleted file mode 100644 index e03e132b7..000000000 --- a/src/overlays/actors/ovl_Obj_Syokudai/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Syokudai -z_obj_syokudai.c diff --git a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c index e73892e89..96716d107 100644 --- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c +++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c @@ -196,7 +196,7 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) { if (this->flameCollider.info.acHitInfo->toucher.dmgFlags & 0x820) { interaction = OBJ_SYOKUDAI_INTERACTION_ARROW_FA; } - } else if (player->itemActionParam == PLAYER_AP_STICK) { + } else if (player->heldItemAction == PLAYER_IA_STICK) { Vec3f stickTipSeparationVec; Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, &thisx->world.pos, &stickTipSeparationVec); diff --git a/src/overlays/actors/ovl_Obj_Takaraya_Wall/overlay.cfg b/src/overlays/actors/ovl_Obj_Takaraya_Wall/overlay.cfg deleted file mode 100644 index 71b838a3a..000000000 --- a/src/overlays/actors/ovl_Obj_Takaraya_Wall/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Takaraya_Wall -z_obj_takaraya_wall.c diff --git a/src/overlays/actors/ovl_Obj_Taru/overlay.cfg b/src/overlays/actors/ovl_Obj_Taru/overlay.cfg deleted file mode 100644 index 70ba0b5b3..000000000 --- a/src/overlays/actors/ovl_Obj_Taru/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Taru -z_obj_taru.c diff --git a/src/overlays/actors/ovl_Obj_Toge/overlay.cfg b/src/overlays/actors/ovl_Obj_Toge/overlay.cfg deleted file mode 100644 index 0a249ec38..000000000 --- a/src/overlays/actors/ovl_Obj_Toge/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Toge -z_obj_toge.c diff --git a/src/overlays/actors/ovl_Obj_Tokei_Step/overlay.cfg b/src/overlays/actors/ovl_Obj_Tokei_Step/overlay.cfg deleted file mode 100644 index 1f100873c..000000000 --- a/src/overlays/actors/ovl_Obj_Tokei_Step/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Tokei_Step -z_obj_tokei_step.c diff --git a/src/overlays/actors/ovl_Obj_Tokei_Tobira/overlay.cfg b/src/overlays/actors/ovl_Obj_Tokei_Tobira/overlay.cfg deleted file mode 100644 index 3182fc3f4..000000000 --- a/src/overlays/actors/ovl_Obj_Tokei_Tobira/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Tokei_Tobira -z_obj_tokei_tobira.c diff --git a/src/overlays/actors/ovl_Obj_Tokei_Turret/overlay.cfg b/src/overlays/actors/ovl_Obj_Tokei_Turret/overlay.cfg deleted file mode 100644 index 57bac89fa..000000000 --- a/src/overlays/actors/ovl_Obj_Tokei_Turret/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Tokei_Turret -z_obj_tokei_turret.c diff --git a/src/overlays/actors/ovl_Obj_Tokeidai/overlay.cfg b/src/overlays/actors/ovl_Obj_Tokeidai/overlay.cfg deleted file mode 100644 index 4458dfd69..000000000 --- a/src/overlays/actors/ovl_Obj_Tokeidai/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Tokeidai -z_obj_tokeidai.c diff --git a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c index 0ee951066..7d2ed1999 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c @@ -128,7 +128,7 @@ void ObjTokeidai_ExteriorGear_Init(ObjTokeidai* this, PlayState* play) { this->actionFunc = ObjTokeidai_ExteriorGear_OpenedIdle; this->actor.world.pos.y += this->actor.scale.y * 1900.0f; this->actor.shape.yOffset = 1500.0f; - gSaveContext.save.weekEventReg[8] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_08_40); } else { this->actionFunc = ObjTokeidai_ExteriorGear_Idle; } @@ -441,7 +441,7 @@ void ObjTokeidai_TerminaFieldWalls_Idle(ObjTokeidai* this, PlayState* play) { void ObjTokeidai_TowerOpening_EndCutscene(ObjTokeidai* this, PlayState* play) { if (Cutscene_CheckActorAction(play, 132) != 0 && play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 132)]->action == 5) { - gSaveContext.save.weekEventReg[8] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_08_40); if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.currentCsIndex == 0)) || ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && @@ -452,11 +452,12 @@ void ObjTokeidai_TowerOpening_EndCutscene(ObjTokeidai* this, PlayState* play) { gSaveContext.respawnFlag = 2; play->transitionTrigger = TRANS_TRIGGER_START; play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance; - play->transitionType = TRANS_TYPE_02; - if (gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams == 0xCFF) { - gSaveContext.nextTransitionType = TRANS_TYPE_21; + play->transitionType = TRANS_TYPE_FADE_BLACK; + if (gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams == + PLAYER_PARAMS(0xFF, PLAYER_INITMODE_TELESCOPE)) { + gSaveContext.nextTransitionType = TRANS_TYPE_CIRCLE; } else { - gSaveContext.nextTransitionType = TRANS_TYPE_02; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; } } this->actionFunc = ObjTokeidai_DoNothing; @@ -588,7 +589,7 @@ void ObjTokeidai_TowerOpening_RaiseTower(ObjTokeidai* this, PlayState* play) { void ObjTokeidai_TowerOpening_Start(ObjTokeidai* this, PlayState* play) { if ((Cutscene_CheckActorAction(play, 132) && play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 132)]->action == 4) || - (gSaveContext.save.weekEventReg[8] & 0x40)) { + CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) { this->actionFunc = ObjTokeidai_TowerOpening_RaiseTower; } } @@ -610,8 +611,8 @@ void ObjTokeidai_DoNothing(ObjTokeidai* this, PlayState* play) { } void ObjTokeidai_StaircaseToRooftop_Idle(ObjTokeidai* this, PlayState* play) { - if (((CURRENT_DAY == 3 && gSaveContext.save.time < CLOCK_TIME(6, 0)) || CURRENT_DAY >= 4) || - (gSaveContext.save.weekEventReg[8] & 0x40)) { + if ((((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) || CURRENT_DAY >= 4) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) { this->actor.draw = ObjTokeidai_Draw; } else { this->actor.draw = NULL; @@ -686,7 +687,7 @@ void ObjTokeidai_TowerClock_Idle(ObjTokeidai* this, PlayState* play) { if (CURRENT_DAY == 3 && this->clockHour < 6 && gSaveContext.save.time < CLOCK_TIME(6, 0)) { this->actor.draw = ObjTokeidai_Clock_Draw; ObjTokeidai_SetupTowerOpening(this); - gSaveContext.save.weekEventReg[8] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_08_40); return; } diff --git a/src/overlays/actors/ovl_Obj_Toudai/overlay.cfg b/src/overlays/actors/ovl_Obj_Toudai/overlay.cfg deleted file mode 100644 index fec5d2975..000000000 --- a/src/overlays/actors/ovl_Obj_Toudai/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Toudai -z_obj_toudai.c diff --git a/src/overlays/actors/ovl_Obj_Tree/overlay.cfg b/src/overlays/actors/ovl_Obj_Tree/overlay.cfg deleted file mode 100644 index c3a0007c9..000000000 --- a/src/overlays/actors/ovl_Obj_Tree/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Tree -z_obj_tree.c diff --git a/src/overlays/actors/ovl_Obj_Tsubo/overlay.cfg b/src/overlays/actors/ovl_Obj_Tsubo/overlay.cfg deleted file mode 100644 index 00f17aeb5..000000000 --- a/src/overlays/actors/ovl_Obj_Tsubo/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Tsubo -z_obj_tsubo.c diff --git a/src/overlays/actors/ovl_Obj_Um/overlay.cfg b/src/overlays/actors/ovl_Obj_Um/overlay.cfg deleted file mode 100644 index a8eb50a9b..000000000 --- a/src/overlays/actors/ovl_Obj_Um/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Um -z_obj_um.c diff --git a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c index 687fb78ea..c9ac4899c 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -14,41 +14,41 @@ /** * weekEventReg flags checked by this actor: - * - gSaveContext.save.weekEventReg[22] & 1: Aliens defeated + * - WEEKEVENTREG_22_01: Aliens defeated * If false: The actor doesn't spawn - * - gSaveContext.save.weekEventReg[31] & 0x40 + * - WEEKEVENTREG_31_40 * If true: Cremia doesn't explain again she'll deliever milk to town - * - gSaveContext.save.weekEventReg[31] & 0x80 + * - WEEKEVENTREG_31_80 * If true: Triggers cutscene on Romani's Ranch - * - gSaveContext.save.weekEventReg[34] & 0x80 + * - WEEKEVENTREG_34_80 * If true: Doesn't spawn on Romani's Ranch - * - gSaveContext.save.weekEventReg[52] & 1 + * - WEEKEVENTREG_52_01 * If true: Doesn't spawn on Romani's Ranch or Milk Road - * - gSaveContext.save.weekEventReg[52] & 2 + * - WEEKEVENTREG_52_02 * If true: Doesn't spawn on Romani's Ranch or Milk Road - * - gSaveContext.save.weekEventReg[59] & 2 + * - WEEKEVENTREG_59_02 * If true: Doesn't spawn again on Milk Road * * weekEventReg flags set by this actor: - * - gSaveContext.save.weekEventReg[31] |= 0x40: Cremia offered a ride + * - WEEKEVENTREG_31_40: Cremia offered a ride * Cremia offered a ride accross the Milk Road to Player - * - gSaveContext.save.weekEventReg[31] |= 0x80: Player is in Milk Run - * Player accepts the ride and is with Cremia during the Milk Run. - * - gSaveContext.save.weekEventReg[34] |= 0x80: Cremia does Milk Run alone + * - WEEKEVENTREG_31_80: Player is in Milk Run + * Player accepts the ride and is with Cremia during the Milk Run + * - WEEKEVENTREG_34_80: Cremia does Milk Run alone * Player didn't interact or didn't accept the ride - * - gSaveContext.save.weekEventReg[52] |= 1: Won Milk Run minigame + * - WEEKEVENTREG_52_01: Won Milk Run minigame * At least one pot is safe. Turns off the "Lose Milk Run minigame" - * - gSaveContext.save.weekEventReg[52] |= 2: Lose Milk Run minigame + * - WEEKEVENTREG_52_02: Lose Milk Run minigame * Every pot was broken by bandits. Turns off the "Win Milk Run minigame" - * - gSaveContext.save.weekEventReg[59] |= 2: ? + * - WEEKEVENTREG_59_02: ? * Passed through Milk Road after winning the Milk Run * * weekEventReg flags unset by this actor: - * - gSaveContext.save.weekEventReg[31] &= (u8)~0x80 + * - WEEKEVENTREG_31_80 * Turned off when the Milk Run finishes - * - gSaveContext.save.weekEventReg[52] &= (u8)~1 + * - WEEKEVENTREG_52_01 * Turned off if Player lose the Milk Run - * - gSaveContext.save.weekEventReg[52] &= (u8)~2 + * - WEEKEVENTREG_52_02 * Turned off if Player wins the Milk Run */ @@ -683,7 +683,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { this->initialPathIndex = OBJ_UM_GET_PATH_INDEX(thisx); // if (!AliensDefeated) - if (!(gSaveContext.save.weekEventReg[22] & 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { Actor_Kill(&this->dyna.actor); return; } @@ -692,19 +692,19 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { ObjUm_SetupAction(this, ObjUm_TerminaFieldIdle); } else if (this->type == OBJ_UM_TYPE_RANCH) { this->pathIndex = this->initialPathIndex; - if (gSaveContext.save.weekEventReg[31] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80)) { // In cutscene sp54 = false; this->flags |= OBJ_UM_FLAG_0100; ObjUm_SetupAction(this, func_80B7A144); - func_800FE484(); + Environment_StopTime(); } else { // Waiting for player - if ((gSaveContext.save.weekEventReg[34] & 0x80) || gSaveContext.save.time >= CLOCK_TIME(19, 0) || - gSaveContext.save.time <= CLOCK_TIME(6, 0) || (gSaveContext.save.weekEventReg[52] & 1) || - (gSaveContext.save.weekEventReg[52] & 2)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_80) || (gSaveContext.save.time >= CLOCK_TIME(19, 0)) || + (gSaveContext.save.time <= CLOCK_TIME(6, 0)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) { Actor_Kill(&this->dyna.actor); return; } @@ -714,40 +714,40 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { ObjUm_SetupAction(this, ObjUm_RanchWait); } } else if (this->type == OBJ_UM_TYPE_PRE_MILK_RUN) { - if (!(gSaveContext.save.weekEventReg[31] & 0x80) || (gSaveContext.save.weekEventReg[52] & 1)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { Actor_Kill(&this->dyna.actor); return; } - if (!(gSaveContext.save.weekEventReg[52] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) { this->pathIndex = this->initialPathIndex; sp54 = false; - func_800FE484(); + Environment_StopTime(); ObjUm_SetupAction(this, ObjUm_PreMilkRunStartCs); this->unk_354 = 0; ObjUm_RotatePlayer(this, play, 0); } } else if (this->type == OBJ_UM_TYPE_MILK_RUN_MINIGAME) { - if (!(gSaveContext.save.weekEventReg[31] & 0x80)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80)) { Actor_Kill(&this->dyna.actor); return; } this->pathIndex = this->initialPathIndex; sp54 = false; - func_800FE484(); + Environment_StopTime(); ObjUm_SetupAction(this, ObjUm_StartCs); this->unk_354 = 0; ObjUm_RotatePlayer(this, play, 0); } else if (this->type == OBJ_UM_TYPE_POST_MILK_RUN) { - if (!(gSaveContext.save.weekEventReg[52] & 1) || (gSaveContext.save.weekEventReg[59] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) || CHECK_WEEKEVENTREG(WEEKEVENTREG_59_02)) { Actor_Kill(&this->dyna.actor); return; } this->pathIndex = this->initialPathIndex; sp54 = false; - func_800FE484(); + Environment_StopTime(); ObjUm_SetupAction(this, ObjUm_PostMilkRunStartCs); this->unk_354 = 0; ObjUm_RotatePlayer(this, play, 0); @@ -828,17 +828,17 @@ s32 func_80B795A0(PlayState* play, ObjUm* this, s32 arg2) { case 0x33B4: // "Want a ride?" case 0x33CF: - gSaveContext.save.weekEventReg[31] |= 0x40; + SET_WEEKEVENTREG(WEEKEVENTREG_31_40); if (play->msgCtx.choiceIndex == 0) { player = GET_PLAYER(play); func_8019F208(); - gSaveContext.save.weekEventReg[31] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_31_80); play->nextEntrance = ENTRANCE(ROMANI_RANCH, 11); if (player->stateFlags1 & PLAYER_STATE1_800000) { D_801BDAA0 = 1; } play->transitionType = TRANS_TYPE_64; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; play->transitionTrigger = TRANS_TRIGGER_START; phi_v1 = true; } else { @@ -907,7 +907,7 @@ u16 ObjUm_RanchGetDialogue(PlayState* play, ObjUm* this, s32 arg2) { u16 textId = 0; if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { - if (gSaveContext.save.weekEventReg[31] & 0x40) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_31_40)) { // "Want a ride?" textId = 0x33CF; } else { @@ -999,7 +999,7 @@ void ObjUm_RanchWait(ObjUm* this, PlayState* play) { func_80B7984C(play, this, 0, &this->unk_2B4); } } else if (!func_80B79A24(this->unk_2B4) && (gSaveContext.save.time > CLOCK_TIME(19, 0))) { - gSaveContext.save.weekEventReg[34] |= 0x80; + SET_WEEKEVENTREG(WEEKEVENTREG_34_80); ObjUm_SetupAction(this, ObjUm_RanchWaitPathFinished); } @@ -1138,11 +1138,11 @@ void ObjUm_RanchWaitPathFinished(ObjUm* this, PlayState* play) { switch (ObjUm_UpdatePath(this, play)) { case OBJUM_PATH_STATE_1: case OBJUM_PATH_STATE_FINISH: - if (gSaveContext.save.weekEventReg[31] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80)) { ActorCutscene_Stop(this->dyna.actor.cutscene); play->nextEntrance = ENTRANCE(MILK_ROAD, 5); play->transitionType = TRANS_TYPE_64; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; play->transitionTrigger = TRANS_TRIGGER_START; } else { func_80B79524(this); @@ -1245,7 +1245,7 @@ void func_80B7A2AC(ObjUm* this, PlayState* play) { case OBJUM_PATH_STATE_FINISH: play->nextEntrance = ENTRANCE(GORMAN_TRACK, 4); play->transitionType = TRANS_TYPE_64; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; play->transitionTrigger = TRANS_TRIGGER_START; break; @@ -1296,24 +1296,24 @@ void ObjUm_RunMinigame(ObjUm* this, PlayState* play) { case OBJUM_PATH_STATE_1: case OBJUM_PATH_STATE_FINISH: gSaveContext.seqId = (u8)NA_BGM_DISABLED; - gSaveContext.save.weekEventReg[31] &= (u8)~0x80; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_31_80); gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; - if (!(gSaveContext.save.weekEventReg[52] & 1) && !(gSaveContext.save.weekEventReg[52] & 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) { if (!this->areAllPotsBroken) { play->nextEntrance = ENTRANCE(MILK_ROAD, 6); play->transitionType = TRANS_TYPE_64; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; play->transitionTrigger = TRANS_TRIGGER_START; - gSaveContext.save.weekEventReg[52] |= 1; - gSaveContext.save.weekEventReg[52] &= (u8)~2; + SET_WEEKEVENTREG(WEEKEVENTREG_52_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_02); } else { play->nextEntrance = ENTRANCE(ROMANI_RANCH, 8); play->transitionType = TRANS_TYPE_64; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; play->transitionTrigger = TRANS_TRIGGER_START; - gSaveContext.save.weekEventReg[52] |= 2; - gSaveContext.save.weekEventReg[52] &= (u8)~1; + SET_WEEKEVENTREG(WEEKEVENTREG_52_02); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_01); } } break; @@ -1545,14 +1545,14 @@ void ObjUm_PostMilkRunWaitPathFinished(ObjUm* this, PlayState* play) { this->wheelRot += 0x3E8; ObjUm_ChangeAnim(this, play, OBJ_UM_ANIM_TROT); - if ((ObjUm_UpdatePath(this, play) == OBJUM_PATH_STATE_4) && !(gSaveContext.save.weekEventReg[59] & 2)) { + if ((ObjUm_UpdatePath(this, play) == OBJUM_PATH_STATE_4) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_02)) { ActorCutscene_Stop(this->dyna.actor.cutscene); Audio_SetCutsceneFlag(false); - gSaveContext.save.weekEventReg[59] |= 2; + SET_WEEKEVENTREG(WEEKEVENTREG_59_02); gSaveContext.nextCutsceneIndex = 0xFFF3; play->nextEntrance = ENTRANCE(TERMINA_FIELD, 0); play->transitionType = TRANS_TYPE_64; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; play->transitionTrigger = TRANS_TRIGGER_START; gSaveContext.save.time += CLOCK_TIME(1, 0) + 2; } @@ -1823,7 +1823,7 @@ s32 ObjUm_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p s16 sp3E; Vec3f sp30 = player->actor.world.pos; - sp30.y = player->bodyPartsPos[7].y + 3.0f; + sp30.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; sp3E = Math_Vec3f_Yaw(&this->dyna.actor.focus.pos, &sp30) - this->dyna.actor.shape.rot.y; temp_v0_3 = Math_Atan2S( this->dyna.actor.focus.pos.y - sp30.y, diff --git a/src/overlays/actors/ovl_Obj_Usiyane/overlay.cfg b/src/overlays/actors/ovl_Obj_Usiyane/overlay.cfg deleted file mode 100644 index 82fd486bb..000000000 --- a/src/overlays/actors/ovl_Obj_Usiyane/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Usiyane -z_obj_usiyane.c diff --git a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c index d20f988fd..24e816644 100644 --- a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c +++ b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c @@ -80,7 +80,7 @@ s32 func_80C07CD0(void) { } } - if (gSaveContext.save.weekEventReg[22] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { return false; } return true; diff --git a/src/overlays/actors/ovl_Obj_Visiblock/overlay.cfg b/src/overlays/actors/ovl_Obj_Visiblock/overlay.cfg deleted file mode 100644 index 9436fe9e3..000000000 --- a/src/overlays/actors/ovl_Obj_Visiblock/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Visiblock -z_obj_visiblock.c diff --git a/src/overlays/actors/ovl_Obj_Vspinyroll/overlay.cfg b/src/overlays/actors/ovl_Obj_Vspinyroll/overlay.cfg deleted file mode 100644 index 0b324c966..000000000 --- a/src/overlays/actors/ovl_Obj_Vspinyroll/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Vspinyroll -z_obj_vspinyroll.c diff --git a/src/overlays/actors/ovl_Obj_Warpstone/overlay.cfg b/src/overlays/actors/ovl_Obj_Warpstone/overlay.cfg deleted file mode 100644 index 2f3fe66ea..000000000 --- a/src/overlays/actors/ovl_Obj_Warpstone/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Warpstone -z_obj_warpstone.c diff --git a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c index 7d6ade650..3fa3260fd 100644 --- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c +++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c @@ -181,11 +181,11 @@ void ObjWarpstone_Draw(Actor* thisx, PlayState* play2) { gDPSetEnvColor(POLY_XLU_DISP++, 100, 200, 0, 255); Matrix_RotateZF((((play->gameplayFrames * 1500) & 0xFFFF) * M_PI) / 0x8000, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gOwlStatueWhiteFlashDL); + gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); Matrix_Pop(); Matrix_RotateZF((~((play->gameplayFrames * 1200) & 0xFFFF) * M_PI) / 0x8000, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gOwlStatueWhiteFlashDL); + gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); CLOSE_DISPS(play->state.gfxCtx); } } diff --git a/src/overlays/actors/ovl_Obj_Wind/overlay.cfg b/src/overlays/actors/ovl_Obj_Wind/overlay.cfg deleted file mode 100644 index 7f65da5cf..000000000 --- a/src/overlays/actors/ovl_Obj_Wind/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Wind -z_obj_wind.c diff --git a/src/overlays/actors/ovl_Obj_Wturn/overlay.cfg b/src/overlays/actors/ovl_Obj_Wturn/overlay.cfg deleted file mode 100644 index 07e4b563d..000000000 --- a/src/overlays/actors/ovl_Obj_Wturn/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Wturn -z_obj_wturn.c diff --git a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c index cfeaabcfd..067618491 100644 --- a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c +++ b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c @@ -70,9 +70,9 @@ void func_808A7AAC(ObjWturn* this, PlayState* play) { Vec3f subCamAt; ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); - func_8016566C(140); + Play_EnableMotionBlur(140); this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene); - func_800B7298(play, &this->actor, 21); + func_800B7298(play, &this->actor, PLAYER_CSMODE_21); subCamAt.x = player->actor.focus.pos.x; subCamAt.z = player->actor.focus.pos.z; subCamAt.y = player->actor.focus.pos.y; @@ -96,10 +96,10 @@ void func_808A7C04(ObjWturn* this, PlayState* play) { this->actor.world.pos.y += this->actor.playerHeightRel; player->actor.shape.shadowAlpha = 0; - func_800B7298(play, &this->actor, 0x54); + func_800B7298(play, &this->actor, PLAYER_CSMODE_84); func_800B8E58(player, NA_SE_VO_NAVY_ENEMY); this->unk_14A = 0; - func_80165690(); + Play_DisableMotionBlur(); this->actionFunc = func_808A7C78; } @@ -113,7 +113,7 @@ void func_808A7C78(ObjWturn* this, PlayState* play) { Play_SetCameraAtEyeUp(play, this->subCamId, &player->actor.focus.pos, &subCam->eye, &sSubCamUp); if (this->unk_14A == 1) { play->transitionType = TRANS_TYPE_64; - gSaveContext.nextTransitionType = TRANS_TYPE_03; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; gSaveContext.nextCutsceneIndex = 0; if (play->sceneId == SCENE_F40) { play->nextEntrance = ENTRANCE(STONE_TOWER_INVERTED, 0); diff --git a/src/overlays/actors/ovl_Obj_Y2lift/overlay.cfg b/src/overlays/actors/ovl_Obj_Y2lift/overlay.cfg deleted file mode 100644 index 432bb3e7f..000000000 --- a/src/overlays/actors/ovl_Obj_Y2lift/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Y2lift -z_obj_y2lift.c diff --git a/src/overlays/actors/ovl_Obj_Y2shutter/overlay.cfg b/src/overlays/actors/ovl_Obj_Y2shutter/overlay.cfg deleted file mode 100644 index 913e42405..000000000 --- a/src/overlays/actors/ovl_Obj_Y2shutter/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Y2shutter -z_obj_y2shutter.c diff --git a/src/overlays/actors/ovl_Obj_Yado/overlay.cfg b/src/overlays/actors/ovl_Obj_Yado/overlay.cfg deleted file mode 100644 index 091dbfce7..000000000 --- a/src/overlays/actors/ovl_Obj_Yado/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Yado -z_obj_yado.c diff --git a/src/overlays/actors/ovl_Obj_Yado/z_obj_yado.c b/src/overlays/actors/ovl_Obj_Yado/z_obj_yado.c index 02107b102..b4a78851a 100644 --- a/src/overlays/actors/ovl_Obj_Yado/z_obj_yado.c +++ b/src/overlays/actors/ovl_Obj_Yado/z_obj_yado.c @@ -4,6 +4,7 @@ * Description: Stockpot Inn - 2nd Floor Window */ +#include "prevent_bss_reordering.h" #include "z_obj_yado.h" #include "objects/object_yado_obj/object_yado_obj.h" diff --git a/src/overlays/actors/ovl_Obj_Yasi/overlay.cfg b/src/overlays/actors/ovl_Obj_Yasi/overlay.cfg deleted file mode 100644 index e1d3b9f4e..000000000 --- a/src/overlays/actors/ovl_Obj_Yasi/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Obj_Yasi -z_obj_yasi.c diff --git a/src/overlays/actors/ovl_Object_Kankyo/overlay.cfg b/src/overlays/actors/ovl_Object_Kankyo/overlay.cfg deleted file mode 100644 index 9c4704cae..000000000 --- a/src/overlays/actors/ovl_Object_Kankyo/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Object_Kankyo -z_object_kankyo.c diff --git a/src/overlays/actors/ovl_Oceff_Spot/overlay.cfg b/src/overlays/actors/ovl_Oceff_Spot/overlay.cfg deleted file mode 100644 index e302cce9a..000000000 --- a/src/overlays/actors/ovl_Oceff_Spot/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Oceff_Spot -z_oceff_spot.c diff --git a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c index a19cb276a..731fe6b77 100644 --- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c +++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c @@ -80,7 +80,7 @@ void OceffSpot_End(OceffSpot* this, PlayState* play) { this->unk16C -= 0.05f; } else { Actor_Kill(&this->actor); - if ((REG(15) != 0x190) && (play->msgCtx.unk12046 == 0)) { + if ((R_TIME_SPEED != 400) && (play->msgCtx.unk12046 == 0)) { if ((play->msgCtx.ocarinaAction != 0x39) || (play->msgCtx.ocarinaMode != 0xA)) { gSaveContext.sunsSongState = SUNSSONG_START; } diff --git a/src/overlays/actors/ovl_Oceff_Storm/overlay.cfg b/src/overlays/actors/ovl_Oceff_Storm/overlay.cfg deleted file mode 100644 index 6845a1117..000000000 --- a/src/overlays/actors/ovl_Oceff_Storm/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Oceff_Storm -z_oceff_storm.c diff --git a/src/overlays/actors/ovl_Oceff_Wipe/overlay.cfg b/src/overlays/actors/ovl_Oceff_Wipe/overlay.cfg deleted file mode 100644 index c10e855cf..000000000 --- a/src/overlays/actors/ovl_Oceff_Wipe/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Oceff_Wipe -z_oceff_wipe.c diff --git a/src/overlays/actors/ovl_Oceff_Wipe2/overlay.cfg b/src/overlays/actors/ovl_Oceff_Wipe2/overlay.cfg deleted file mode 100644 index a8d56b9bb..000000000 --- a/src/overlays/actors/ovl_Oceff_Wipe2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Oceff_Wipe2 -z_oceff_wipe2.c diff --git a/src/overlays/actors/ovl_Oceff_Wipe3/overlay.cfg b/src/overlays/actors/ovl_Oceff_Wipe3/overlay.cfg deleted file mode 100644 index 5aca74d99..000000000 --- a/src/overlays/actors/ovl_Oceff_Wipe3/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Oceff_Wipe3 -z_oceff_wipe3.c diff --git a/src/overlays/actors/ovl_Oceff_Wipe4/overlay.cfg b/src/overlays/actors/ovl_Oceff_Wipe4/overlay.cfg deleted file mode 100644 index 64cd25b04..000000000 --- a/src/overlays/actors/ovl_Oceff_Wipe4/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Oceff_Wipe4 -z_oceff_wipe4.c diff --git a/src/overlays/actors/ovl_Oceff_Wipe5/overlay.cfg b/src/overlays/actors/ovl_Oceff_Wipe5/overlay.cfg deleted file mode 100644 index 274c53c0f..000000000 --- a/src/overlays/actors/ovl_Oceff_Wipe5/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Oceff_Wipe5 -z_oceff_wipe5.c diff --git a/src/overlays/actors/ovl_Oceff_Wipe6/overlay.cfg b/src/overlays/actors/ovl_Oceff_Wipe6/overlay.cfg deleted file mode 100644 index 722d51979..000000000 --- a/src/overlays/actors/ovl_Oceff_Wipe6/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Oceff_Wipe6 -z_oceff_wipe6.c diff --git a/src/overlays/actors/ovl_Oceff_Wipe7/overlay.cfg b/src/overlays/actors/ovl_Oceff_Wipe7/overlay.cfg deleted file mode 100644 index 0956cdd61..000000000 --- a/src/overlays/actors/ovl_Oceff_Wipe7/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Oceff_Wipe7 -z_oceff_wipe7.c diff --git a/src/overlays/actors/ovl_Shot_Sun/overlay.cfg b/src/overlays/actors/ovl_Shot_Sun/overlay.cfg deleted file mode 100644 index bd210022d..000000000 --- a/src/overlays/actors/ovl_Shot_Sun/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Shot_Sun -z_shot_sun.c diff --git a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c index d923bdd20..74e711cfa 100644 --- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c +++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c @@ -170,9 +170,10 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play) { if (!(this->actor.xzDistToPlayer > 120.0f)) { if ((gSaveContext.save.time >= CLOCK_TIME(6, 30)) && (gSaveContext.save.time < CLOCK_TIME(7, 30))) { - cylinderPos.x = player->bodyPartsPos[7].x + (play->envCtx.unk_4 * (1.0f / 6.0f)); - cylinderPos.y = (player->bodyPartsPos[7].y - 30.0f) + (play->envCtx.unk_8 * (1.0f / 6.0f)); - cylinderPos.z = player->bodyPartsPos[7].z + (play->envCtx.unk_C * (1.0f / 6.0f)); + cylinderPos.x = player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + (play->envCtx.sunPos.x * (1.0f / 6.0f)); + cylinderPos.y = + (player->bodyPartsPos[PLAYER_BODYPART_HEAD].y - 30.0f) + (play->envCtx.sunPos.y * (1.0f / 6.0f)); + cylinderPos.z = player->bodyPartsPos[PLAYER_BODYPART_HEAD].z + (play->envCtx.sunPos.z * (1.0f / 6.0f)); this->hitboxPos = cylinderPos; diff --git a/src/overlays/actors/ovl_TG_Sw/overlay.cfg b/src/overlays/actors/ovl_TG_Sw/overlay.cfg deleted file mode 100644 index d0341bf09..000000000 --- a/src/overlays/actors/ovl_TG_Sw/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_TG_Sw -z_tg_sw.c diff --git a/src/overlays/actors/ovl_player_actor/overlay.cfg b/src/overlays/actors/ovl_player_actor/overlay.cfg deleted file mode 100644 index 2d4849235..000000000 --- a/src/overlays/actors/ovl_player_actor/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_player_actor -z_player.c diff --git a/src/overlays/effects/ovl_Effect_En_Ice_Block/overlay.cfg b/src/overlays/effects/ovl_Effect_En_Ice_Block/overlay.cfg deleted file mode 100644 index 3035ab72e..000000000 --- a/src/overlays/effects/ovl_Effect_En_Ice_Block/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_En_Ice_Block -z_eff_en_ice_block.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Blast/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Blast/overlay.cfg deleted file mode 100644 index 2bb72beac..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Blast/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Blast -z_eff_ss_blast.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c b/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c index 93353f28c..c903bac6d 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c +++ b/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c @@ -70,7 +70,7 @@ void EffectSsBlast_Draw(PlayState* play, u32 index, EffectSs* this) { func_8012C2DC(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rEnvColorA); - func_801691F0(play, &mf, &this->pos); + Play_GetFloorSurface(play, &mf, &this->pos); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA); Matrix_Put(&mf); Matrix_Scale(radius, radius, radius, MTXMODE_APPLY); diff --git a/src/overlays/effects/ovl_Effect_Ss_Bomb2/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Bomb2/overlay.cfg deleted file mode 100644 index f964deb72..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Bomb2/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Bomb2 -z_eff_ss_bomb2.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Bubble/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Bubble/overlay.cfg deleted file mode 100644 index bdf4b4069..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Bubble/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Bubble -z_eff_ss_bubble.c diff --git a/src/overlays/effects/ovl_Effect_Ss_D_Fire/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_D_Fire/overlay.cfg deleted file mode 100644 index 2c439ec55..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_D_Fire/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_D_Fire -z_eff_ss_d_fire.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Db/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Dead_Db/overlay.cfg deleted file mode 100644 index 61ff41312..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Dead_Db/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Dead_Db -z_eff_ss_dead_db.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/overlay.cfg deleted file mode 100644 index 86355de67..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Dead_Dd -z_eff_ss_dead_dd.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/overlay.cfg deleted file mode 100644 index 40a9f45d1..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Dead_Ds -z_eff_ss_dead_ds.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/overlay.cfg deleted file mode 100644 index f3b368b9e..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Dt_Bubble -z_eff_ss_dt_bubble.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Dust/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Dust/overlay.cfg deleted file mode 100644 index fa47efe59..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Dust/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Dust -z_eff_ss_dust.c diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Fire/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_En_Fire/overlay.cfg deleted file mode 100644 index 0652dd235..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_En_Fire/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_En_Fire -z_eff_ss_en_fire.c diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Ice/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_En_Ice/overlay.cfg deleted file mode 100644 index a761dda6e..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_En_Ice/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_En_Ice -z_eff_ss_en_ice.c diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c index 7d6cf277c..1108e61ce 100644 --- a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c +++ b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c @@ -71,7 +71,7 @@ u32 EffectSsEnIce_Init(PlayState* play, u32 index, EffectSs* this, void* initPar this->update = EffectSsEnIce_Update; this->rLifespan = initParams->life; this->rScale = initParams->scale * 100.0f; - this->rYaw = Math_FAtan2F(initParams->velocity.z, initParams->velocity.x); + this->rYaw = Math_Atan2S_XY(initParams->velocity.z, initParams->velocity.x); this->rPitch = 0; this->rPrimColorR = initParams->primColor.r; this->rPrimColorG = initParams->primColor.g; diff --git a/src/overlays/effects/ovl_Effect_Ss_Extra/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Extra/overlay.cfg deleted file mode 100644 index b83dab7ec..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Extra/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Extra -z_eff_ss_extra.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c index 1ec1ab41d..bf21a8741 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c +++ b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c @@ -92,6 +92,6 @@ void EffectSsExtra_Update(PlayState* play, u32 index, EffectSs* this) { } if (this->rTimer == 1) { - play->interfaceCtx.unk_25C = sScores[this->rScoreIndex]; + play->interfaceCtx.minigamePoints = sScores[this->rScoreIndex]; } } diff --git a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/overlay.cfg deleted file mode 100644 index 3b701b737..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Fhg_Flash -z_eff_ss_fhg_flash.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c index 764828bf4..b81ccf594 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c +++ b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c @@ -89,7 +89,7 @@ void EffectSsFhgFlash_Update(PlayState* play, u32 index, EffectSs* this) { if (this->rParams == FHGFLASH_SHOCK_PLAYER) { Player* player = GET_PLAYER(play); - randBodyPart = Rand_ZeroFloat(18 - 0.1f); + randBodyPart = Rand_ZeroFloat(PLAYER_BODYPART_MAX - 0.1f); this->pos.x = player->bodyPartsPos[randBodyPart].x + randPlusMinusPoint5Scaled(10.0f); this->pos.y = player->bodyPartsPos[randBodyPart].y + randPlusMinusPoint5Scaled(15.0f); this->pos.z = player->bodyPartsPos[randBodyPart].z + randPlusMinusPoint5Scaled(10.0f); diff --git a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/overlay.cfg deleted file mode 100644 index 233962db3..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Fire_Tail -z_eff_ss_fire_tail.c diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Fire/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_G_Fire/overlay.cfg deleted file mode 100644 index 0041d4fac..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_G_Fire/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_G_Fire -z_eff_ss_g_fire.c diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_G_Ripple/overlay.cfg deleted file mode 100644 index f5997e908..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_G_Ripple -z_eff_ss_g_ripple.c diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Spk/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_G_Spk/overlay.cfg deleted file mode 100644 index d49c555de..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_G_Spk/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_G_Spk -z_eff_ss_g_spk.c diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Splash/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_G_Splash/overlay.cfg deleted file mode 100644 index 6f49625f8..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_G_Splash/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_G_Splash -z_eff_ss_g_splash.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Hahen/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Hahen/overlay.cfg deleted file mode 100644 index fd5cb9c8f..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Hahen/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Hahen -z_eff_ss_hahen.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Hitmark/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Hitmark/overlay.cfg deleted file mode 100644 index 3623bfcfc..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Hitmark/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Hitmark -z_eff_ss_hitmark.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/overlay.cfg deleted file mode 100644 index 643644dd7..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Ice_Piece -z_eff_ss_ice_piece.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c b/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c index ebc28b469..52561fea2 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c +++ b/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c @@ -36,7 +36,7 @@ u32 EffectSsIcePiece_Init(PlayState* play, u32 index, EffectSs* this, void* init this->update = EffectSsIcePiece_Update; this->rLifespan = initParams->life; this->rScale = initParams->scale * 100.0f; - this->rYaw = Math_FAtan2F(initParams->velocity.z, initParams->velocity.x); + this->rYaw = Math_Atan2S_XY(initParams->velocity.z, initParams->velocity.x); this->rPitch = 0; this->rRotSpeed = ((fabsf(initParams->velocity.x) + fabsf(initParams->velocity.y)) * 100.0f) * (Rand_ZeroFloat(1.0f) + 0.5f); diff --git a/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/overlay.cfg deleted file mode 100644 index 854b90889..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Ice_Smoke -z_eff_ss_ice_smoke.c diff --git a/src/overlays/effects/ovl_Effect_Ss_K_Fire/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_K_Fire/overlay.cfg deleted file mode 100644 index 0d9080c15..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_K_Fire/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_K_Fire -z_eff_ss_k_fire.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Kakera/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Kakera/overlay.cfg deleted file mode 100644 index 4a7f62d11..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Kakera/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Kakera -z_eff_ss_kakera.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Kirakira/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Kirakira/overlay.cfg deleted file mode 100644 index 02edf776c..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Kirakira/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Kirakira -z_eff_ss_kirakira.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Lightning/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Lightning/overlay.cfg deleted file mode 100644 index b698e915f..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Lightning/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Lightning -z_eff_ss_lightning.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Sbn/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Sbn/overlay.cfg deleted file mode 100644 index c958b3df5..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Sbn/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Sbn -z_eff_ss_sbn.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c b/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c index d1a22473f..c5c058cc3 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c +++ b/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c @@ -111,9 +111,9 @@ u32 EffectSsSbn_Init(PlayState* play, u32 index, EffectSs* this, void* initParam opposite = (SQ(angle) >= 1.0f) ? 0.0f : sqrtf(1.0f - SQ(angle)); if (((mtx.mf[0][0] * colPolyVec.x) + (mtx.mf[0][1] * colPolyVec.y) + (mtx.mf[0][2] * colPolyVec.z)) < 0.0f) { - this->rRotAngle = Math_FAtan2F(angle, opposite); + this->rRotAngle = Math_Atan2S_XY(angle, opposite); } else { - this->rRotAngle = -Math_FAtan2F(angle, opposite); + this->rRotAngle = -Math_Atan2S_XY(angle, opposite); } } diff --git a/src/overlays/effects/ovl_Effect_Ss_Sibuki/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Sibuki/overlay.cfg deleted file mode 100644 index 66dfae07c..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Sibuki/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Sibuki -z_eff_ss_sibuki.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/overlay.cfg deleted file mode 100644 index 82cde4368..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Solder_Srch_Ball -z_eff_ss_solder_srch_ball.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Stick/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Stick/overlay.cfg deleted file mode 100644 index 5f691232a..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Stick/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Stick -z_eff_ss_stick.c diff --git a/src/overlays/effects/ovl_Effect_Ss_Stone1/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Stone1/overlay.cfg deleted file mode 100644 index a6706c014..000000000 --- a/src/overlays/effects/ovl_Effect_Ss_Stone1/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_Effect_Ss_Stone1 -z_eff_ss_stone1.c diff --git a/src/overlays/fbdemos/ovl_fbdemo_triforce/overlay.cfg b/src/overlays/fbdemos/ovl_fbdemo_triforce/overlay.cfg deleted file mode 100644 index d5f678c11..000000000 --- a/src/overlays/fbdemos/ovl_fbdemo_triforce/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_fbdemo_triforce -z_fbdemo_triforce.c diff --git a/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c b/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c index 00e7cfabd..f4f68d230 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c +++ b/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c @@ -4,6 +4,7 @@ * Description: */ +#include "global.h" #include "z_fbdemo_triforce.h" #include "assets/objects/object_fbdemo_triforce/ovl_fbdemo_triforce.c" diff --git a/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.h b/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.h index 06d807a08..cd7f4563e 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.h +++ b/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.h @@ -1,7 +1,8 @@ #ifndef Z_FBDEMO_TRIFORCE_H #define Z_FBDEMO_TRIFORCE_H -#include "global.h" +#include "ultra64.h" +#include "color.h" typedef enum { /* 0 */ STATE_NONE, diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe1/overlay.cfg b/src/overlays/fbdemos/ovl_fbdemo_wipe1/overlay.cfg deleted file mode 100644 index 5b3efc6ad..000000000 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe1/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_fbdemo_wipe1 -z_fbdemo_wipe1.c diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c index ed12d400e..1ce5f0d59 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c @@ -4,6 +4,7 @@ * Description: */ +#include "global.h" #include "z_fbdemo_wipe1.h" void* TransitionWipe1_Init(void* thisx); diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h index 971940bb2..39f881b39 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h @@ -1,10 +1,11 @@ #ifndef Z_FBDEMO_WIPE1_H #define Z_FBDEMO_WIPE1_H -#include "global.h" +#include "ultra64.h" +#include "color.h" typedef struct { - /* 0x0000 */ char unk_0[0x218]; + /* 0x000 */ char unk_0[0x218]; } TransitionWipe1; // size = 0x218 #endif diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe3/overlay.cfg b/src/overlays/fbdemos/ovl_fbdemo_wipe3/overlay.cfg deleted file mode 100644 index 73258114b..000000000 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe3/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_fbdemo_wipe3 -z_fbdemo_wipe3.c diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c index c33f3c8c7..759e1511c 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c @@ -4,6 +4,7 @@ * Description: */ +#include "global.h" #include "z_fbdemo_wipe3.h" void* TransitionWipe3_Init(void* thisx); diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h index 8fed0dcfe..b023ecb8b 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h @@ -1,10 +1,11 @@ #ifndef Z_FBDEMO_WIPE3_H #define Z_FBDEMO_WIPE3_H -#include "global.h" +#include "ultra64.h" +#include "color.h" typedef struct { - /* 0x0000 */ char unk_0[0x120]; + /* 0x000 */ char unk_0[0x120]; } TransitionWipe3; // size = 0x120 #endif diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe4/overlay.cfg b/src/overlays/fbdemos/ovl_fbdemo_wipe4/overlay.cfg deleted file mode 100644 index e18ed9858..000000000 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe4/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_fbdemo_wipe4 -z_fbdemo_wipe4.c diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.c b/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.c index e91d8ab5e..1acb8c07a 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.c +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.c @@ -4,6 +4,7 @@ * Description: */ +#include "global.h" #include "z_fbdemo_wipe4.h" void* TransitionWipe4_Init(void* thisx); diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.h b/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.h index 8a677c2a4..b0aec44be 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.h +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.h @@ -1,10 +1,11 @@ #ifndef Z_FBDEMO_WIPE4_H #define Z_FBDEMO_WIPE4_H -#include "global.h" +#include "ultra64.h" +#include "color.h" typedef struct { - /* 0x0000 */ char unk_0[0x28]; + /* 0x00 */ char unk_0[0x28]; } TransitionWipe4; // size = 0x28 #endif diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe5/overlay.cfg b/src/overlays/fbdemos/ovl_fbdemo_wipe5/overlay.cfg deleted file mode 100644 index 297aa770c..000000000 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe5/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_fbdemo_wipe5 -z_fbdemo_wipe5.c diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c index a3839bc40..0c20dba93 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c @@ -4,6 +4,7 @@ * Description: */ +#include "global.h" #include "z_fbdemo_wipe5.h" #define THIS ((TransitionWipe5*)thisx) @@ -80,7 +81,7 @@ void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) { Gfx* gfx = *gfxP; s32 width = gScreenWidth; s32 height = gScreenHeight; - s32 sp50 = D_801FBB90; + void* sp50 = D_801FBB90; TransitionWipe5* this = THIS; s32 alpha = (1.0f - this->unk_0C) * 255.0f; diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.h b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.h index d5cd9137d..c40c4450a 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.h +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.h @@ -1,7 +1,8 @@ #ifndef Z_FBDEMO_WIPE5_H #define Z_FBDEMO_WIPE5_H -#include "global.h" +#include "ultra64.h" +#include "color.h" typedef struct { /* 0x00 */ Color_RGBA8_u32 primColor; diff --git a/src/overlays/gamestates/ovl_daytelop/overlay.cfg b/src/overlays/gamestates/ovl_daytelop/overlay.cfg deleted file mode 100644 index 3766a9b41..000000000 --- a/src/overlays/gamestates/ovl_daytelop/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_daytelop -z_daytelop.c diff --git a/src/overlays/gamestates/ovl_file_choose/overlay.cfg b/src/overlays/gamestates/ovl_file_choose/overlay.cfg deleted file mode 100644 index b18724161..000000000 --- a/src/overlays/gamestates/ovl_file_choose/overlay.cfg +++ /dev/null @@ -1,4 +0,0 @@ -ovl_file_choose -z_file_nameset_NES.c -z_file_choose_80807940.c -z_file_choose_NES.c diff --git a/src/overlays/gamestates/ovl_opening/overlay.cfg b/src/overlays/gamestates/ovl_opening/overlay.cfg deleted file mode 100644 index 6366c3afd..000000000 --- a/src/overlays/gamestates/ovl_opening/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_opening -z_opening.c diff --git a/src/overlays/gamestates/ovl_opening/z_opening.c b/src/overlays/gamestates/ovl_opening/z_opening.c index fc5d05be2..c56cc4bbb 100644 --- a/src/overlays/gamestates/ovl_opening/z_opening.c +++ b/src/overlays/gamestates/ovl_opening/z_opening.c @@ -12,7 +12,7 @@ void TitleSetup_SetupTitleScreen(TitleSetupState* this) { static s32 sOpeningEntrances[] = { ENTRANCE(CUTSCENE, 0), ENTRANCE(CUTSCENE, 1) }; static s32 sOpeningCutscenes[] = { 0xFFFA, 0xFFFA }; - gSaveContext.eventInf[1] &= (u8)~0x80; + CLEAR_EVENTINF(EVENTINF_17); gSaveContext.gameMode = 1; Sram_InitNewSave(); diff --git a/src/overlays/gamestates/ovl_select/overlay.cfg b/src/overlays/gamestates/ovl_select/overlay.cfg deleted file mode 100644 index 5250bd7fb..000000000 --- a/src/overlays/gamestates/ovl_select/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_select -z_select.c diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c index 2e8bbb802..183f6b069 100644 --- a/src/overlays/gamestates/ovl_select/z_select.c +++ b/src/overlays/gamestates/ovl_select/z_select.c @@ -35,7 +35,7 @@ void MapSelect_LoadGame(MapSelectState* this, u32 entrance, s32 spawn) { if (spawn != 0) { gSaveContext.save.entrance = - Entrance_Create((s32)gSaveContext.save.entrance >> 9, spawn, gSaveContext.save.entrance & 0xF); + Entrance_Create(gSaveContext.save.entrance >> 9, spawn, gSaveContext.save.entrance & 0xF); } if (gSaveContext.save.entrance == ENTRANCE(CLOCK_TOWER_INTERIOR, 0)) { gSaveContext.save.day = 0; @@ -517,7 +517,7 @@ void MapSelect_UpdateMenu(MapSelectState* this) { gSaveContext.timerStopTimes[i] = SECONDS_TO_TIMER(0); gSaveContext.timerPausedOsTimes[i] = 0; } - gSaveContext.minigameState = 0; + gSaveContext.minigameStatus = MINIGAME_STATUS_INACTIVE; if (this->scenes[this->currentScene].loadFunc != NULL) { this->scenes[this->currentScene].loadFunc(this, this->scenes[this->currentScene].entrance, this->opt); @@ -994,7 +994,7 @@ void MapSelect_DrawMenu(MapSelectState* this) { GfxPrint_Open(printer, POLY_OPA_DISP); MapSelect_PrintMenu(this, printer); - MapSelect_PrintAgeSetting(this, printer, ((void)0, gSaveContext.save.playerForm)); + MapSelect_PrintAgeSetting(this, printer, GET_PLAYER_FORM); MapSelect_PrintCutsceneSetting(this, printer, ((void)0, gSaveContext.save.cutscene)); POLY_OPA_DISP = GfxPrint_Close(printer); diff --git a/src/overlays/gamestates/ovl_title/overlay.cfg b/src/overlays/gamestates/ovl_title/overlay.cfg deleted file mode 100644 index 11343031f..000000000 --- a/src/overlays/gamestates/ovl_title/overlay.cfg +++ /dev/null @@ -1,2 +0,0 @@ -ovl_title -z_title.c diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c index 2b23bf565..e31e31c7d 100644 --- a/src/overlays/gamestates/ovl_title/z_title.c +++ b/src/overlays/gamestates/ovl_title/z_title.c @@ -111,7 +111,7 @@ void ConsoleLogo_Draw(GameState* thisx) { 1 << 10, 1 << 10); } - func_800FC444(this->state.gfxCtx, 0, 0, 0, this->coverAlpha, 2); + Environment_FillScreen(this->state.gfxCtx, 0, 0, 0, this->coverAlpha, 2); sTitleRotation += 300; diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/overlay.cfg b/src/overlays/kaleido_scope/ovl_kaleido_scope/overlay.cfg deleted file mode 100644 index c35d94518..000000000 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/overlay.cfg +++ /dev/null @@ -1,7 +0,0 @@ -ovl_kaleido_scope -z_kaleido_collect.c -z_kaleido_debug.c -z_kaleido_item.c -z_kaleido_map.c -z_kaleido_mask.c -z_kaleido_scope_NES.c diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c index 92fe82e76..fe72ee840 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c @@ -64,7 +64,7 @@ s16 sQuestRemainsEnvBlue[] = { #ifdef NON_EQUIVALENT // TODO: is actually NON_MATCHING, update once `z_kaleido_scope_NES.c` is decompiled -// A single small regalloc at the first `func_8010DC58` for the heart piece count (see `gItemIcons`) +// A single small regalloc at the first `Gfx_DrawTexQuadIA8` for the heart piece count (see `gItemIcons`) void KaleidoScope_DrawQuestStatus(PlayState* play) { static s16 sQuestRemainsColorTimer = 20; static s16 sQuestRemainsColorTimerIndex = 0; @@ -337,7 +337,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play) { gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0); - POLY_OPA_DISP = func_8010DC58( + POLY_OPA_DISP = Gfx_DrawTexQuadIA8( POLY_OPA_DISP, gItemIcons[(0x7A + ((GET_SAVE_INVENTORY_QUEST_ITEMS & 0xF0000000) >> QUEST_HEART_PIECE_COUNT))], 48, 48, 0); } @@ -387,8 +387,8 @@ void KaleidoScope_DrawQuestStatus(PlayState* play) { gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0); - POLY_OPA_DISP = func_8010DC58(POLY_OPA_DISP, - sOcarinaButtonTextures[sQuestSongPlayedOcarinaButtons[i]], 16, 16, 0); + POLY_OPA_DISP = Gfx_DrawTexQuadIA8( + POLY_OPA_DISP, sOcarinaButtonTextures[sQuestSongPlayedOcarinaButtons[i]], 16, 16, 0); } } } else if (IS_PAUSE_MAIN_STATE_SAVE_PROMPT || (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) { @@ -421,7 +421,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play) { gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0); - POLY_OPA_DISP = func_8010DC58( + POLY_OPA_DISP = Gfx_DrawTexQuadIA8( POLY_OPA_DISP, sOcarinaButtonTextures[gOcarinaSongButtons[sp1C8].buttonIndex[k]], 16, 16, 0); } @@ -471,8 +471,8 @@ void KaleidoScope_DrawQuestStatus(PlayState* play) { gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0); - POLY_OPA_DISP = func_8010DC58(POLY_OPA_DISP, - sOcarinaButtonTextures[sQuestSongPlayedOcarinaButtons[k]], 16, 16, 0); + POLY_OPA_DISP = Gfx_DrawTexQuadIA8( + POLY_OPA_DISP, sOcarinaButtonTextures[sQuestSongPlayedOcarinaButtons[k]], 16, 16, 0); } if (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT_INIT) { @@ -650,7 +650,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_LEFT); pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE; if (interfaceCtx->unk_212 == 6) { - func_8011552C(play, 0x15); + func_8011552C(play, DO_ACTION_INFO); } return; } else { @@ -834,7 +834,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG; if (interfaceCtx->unk_212 != 6) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); } // Stop receiving input to play a song as mentioned above @@ -847,7 +847,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { } } else { if (interfaceCtx->unk_212 != 6) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); } if (gSaveContext.buttonStatus[EQUIP_SLOT_A] != BTN_DISABLED) { gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_DISABLED; @@ -858,11 +858,11 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { } else { if ((cursor == QUEST_BOMBERS_NOTEBOOK) && (pauseCtx->cursorItem[PAUSE_QUEST] != PAUSE_ITEM_NONE)) { if (interfaceCtx->unk_212 != 6) { - func_8011552C(play, 6); + func_8011552C(play, DO_ACTION_DECIDE); } pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_BLUE; } else if (interfaceCtx->unk_212 == 6) { - func_8011552C(play, 0x15); + func_8011552C(play, DO_ACTION_INFO); } if ((pauseCtx->cursorItem[PAUSE_QUEST] != PAUSE_ITEM_NONE) && (msgCtx->msgLength == 0)) { diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c index 1152db202..b8858b7ca 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c @@ -894,10 +894,10 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { SET_EQUIP_VALUE(EQUIP_TYPE_SWORD, value); if (value != 0) { - BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = value + (ITEM_SWORD_KOKIRI - 1); + CUR_FORM_EQUIP(EQUIP_SLOT_B) = value + (ITEM_SWORD_KOKIRI - 1); gSaveContext.save.playerData.swordHealth = 100; } else { - BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_NONE; + CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_NONE; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN) || @@ -909,7 +909,7 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { SET_EQUIP_VALUE(EQUIP_TYPE_SWORD, value); - BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = value + (ITEM_SWORD_KOKIRI - 1); + CUR_FORM_EQUIP(EQUIP_SLOT_B) = value + (ITEM_SWORD_KOKIRI - 1); gSaveContext.save.playerData.swordHealth = 100; } diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c index 8e69188fb..d1a358e75 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c @@ -223,13 +223,15 @@ void KaleidoScope_DrawAmmoCount(PauseContext* pauseCtx, GraphicsContext* gfxCtx, // Draw upper digit if (ammoUpperDigit != 0) { - POLY_OPA_DISP = func_8010CD98(POLY_OPA_DISP, ((u8*)gAmmoDigit0Tex + (8 * 8 * ammoUpperDigit)), 8, 8, - sAmmoRectLeft[ammoIndex], sAmmoRectHeight[ammoIndex], 8, 8, 1 << 10, 1 << 10); + POLY_OPA_DISP = + Gfx_DrawTexRectIA8(POLY_OPA_DISP, ((u8*)gAmmoDigit0Tex + (8 * 8 * ammoUpperDigit)), 8, 8, + sAmmoRectLeft[ammoIndex], sAmmoRectHeight[ammoIndex], 8, 8, 1 << 10, 1 << 10); } // Draw lower digit - POLY_OPA_DISP = func_8010CD98(POLY_OPA_DISP, ((u8*)gAmmoDigit0Tex + (8 * 8 * ammo)), 8, 8, - sAmmoRectLeft[ammoIndex] + 6, sAmmoRectHeight[ammoIndex], 8, 8, 1 << 10, 1 << 10); + POLY_OPA_DISP = + Gfx_DrawTexRectIA8(POLY_OPA_DISP, ((u8*)gAmmoDigit0Tex + (8 * 8 * ammo)), 8, 8, sAmmoRectLeft[ammoIndex] + 6, + sAmmoRectHeight[ammoIndex], 8, 8, 1 << 10, 1 << 10); CLOSE_DISPS(gfxCtx); } @@ -260,7 +262,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { if (GET_CUR_FORM_BTN_ITEM(i + 1) != ITEM_NONE) { if (GET_CUR_FORM_BTN_SLOT(i + 1) < NUM_ITEM_SLOTS) { gSPVertex(POLY_OPA_DISP++, &pauseCtx->itemVtx[j], 4, 0); - POLY_OPA_DISP = func_8010DC58(POLY_OPA_DISP, gEquippedItemOutlineTex, 32, 32, 0); + POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, gEquippedItemOutlineTex, 32, 32, 0); } } } diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c index e0c82a1bb..87acfaa6c 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c @@ -35,8 +35,8 @@ void KaleidoScope_DrawDungeonStrayFairyCount(PlayState* play) { gDPPipeSync(POLY_OPA_DISP++); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, 255); - POLY_OPA_DISP = func_8010D7D0(POLY_OPA_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[digitIndex]), 8, - 16, rectLeft + 1, 146, 8, 16, 1 << 10, 1 << 10); + POLY_OPA_DISP = Gfx_DrawTexRectI8(POLY_OPA_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[digitIndex]), + 8, 16, rectLeft + 1, 146, 8, 16, 1 << 10, 1 << 10); gDPPipeSync(POLY_OPA_DISP++); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); @@ -50,7 +50,7 @@ void KaleidoScope_DrawDungeonStrayFairyCount(PlayState* play) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, 255); POLY_OPA_DISP = - func_8010D7D0(POLY_OPA_DISP, gStrayFairyMapCounterSlashTex, 8, 16, 107, 146, 8, 16, 1 << 10, 1 << 10); + Gfx_DrawTexRectI8(POLY_OPA_DISP, gStrayFairyMapCounterSlashTex, 8, 16, 107, 146, 8, 16, 1 << 10, 1 << 10); gDPPipeSync(POLY_OPA_DISP++); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); @@ -68,8 +68,8 @@ void KaleidoScope_DrawDungeonStrayFairyCount(PlayState* play) { gDPPipeSync(POLY_OPA_DISP++); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, 255); - POLY_OPA_DISP = func_8010D7D0(POLY_OPA_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[digitIndex]), 8, - 16, rectLeft + 1, 146, 8, 16, 1 << 10, 1 << 10); + POLY_OPA_DISP = Gfx_DrawTexRectI8(POLY_OPA_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[digitIndex]), + 8, 16, rectLeft + 1, 146, 8, 16, 1 << 10, 1 << 10); gDPPipeSync(POLY_OPA_DISP++); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); @@ -159,7 +159,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); POLY_OPA_DISP = - func_8010DC58(POLY_OPA_DISP, sDungeonTitleTextures[((void)0, gSaveContext.dungeonIndex)], 128, 16, 0); + Gfx_DrawTexQuadIA8(POLY_OPA_DISP, sDungeonTitleTextures[((void)0, gSaveContext.dungeonIndex)], 128, 16, 0); gDPPipeSync(POLY_OPA_DISP++); @@ -224,7 +224,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[76], 4, 0); POLY_OPA_DISP = - func_8010DE38(POLY_OPA_DISP, gStrayFairyGlowingCircleIconTex, G_IM_FMT_I, 32, 24, 0); + Gfx_DrawTexQuad4b(POLY_OPA_DISP, gStrayFairyGlowingCircleIconTex, G_IM_FMT_I, 32, 24, 0); KaleidoScope_SetView(pauseCtx, pauseCtx->eye.x, pauseCtx->eye.y, pauseCtx->eye.z); func_8012C628(play->state.gfxCtx); @@ -275,13 +275,14 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); // Draw Player's face next to the dungeon floor icon currently in. - POLY_OPA_DISP = func_8010CB80(POLY_OPA_DISP, &D_09007500, 16, 16, 62, - sDungeonMapFloorIconPosY[R_REVERSE_FLOOR_INDEX], 16, 16, 1 << 10, 1 << 10); + POLY_OPA_DISP = + Gfx_DrawTexRectRGBA16(POLY_OPA_DISP, &D_09007500, 16, 16, 62, + sDungeonMapFloorIconPosY[R_REVERSE_FLOOR_INDEX], 16, 16, 1 << 10, 1 << 10); if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, gSaveContext.dungeonIndex)) { - POLY_OPA_DISP = func_8010CB80(POLY_OPA_DISP, gDungeonMapSkullTex, 16, 16, 108, - sDungeonMapFloorIconPosY[FLOOR_INDEX_MAX - func_80105318()], 16, 16, - 1 << 10, 1 << 10); + POLY_OPA_DISP = Gfx_DrawTexRectRGBA16(POLY_OPA_DISP, gDungeonMapSkullTex, 16, 16, 108, + sDungeonMapFloorIconPosY[FLOOR_INDEX_MAX - func_80105318()], 16, + 16, 1 << 10, 1 << 10); } gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); @@ -645,7 +646,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[60 + n * 4], 4, 0); - POLY_OPA_DISP = func_8010DC58(POLY_OPA_DISP, sCloudTextures[n], D_8082B7F0[n], D_8082B838[n], 0); + POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, sCloudTextures[n], D_8082B7F0[n], D_8082B838[n], 0); } } @@ -798,8 +799,8 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - POLY_OPA_DISP = func_8010CB80(POLY_OPA_DISP, &D_09007500, 16, 16, sWorldMapCursorsRectLeft[n], - sWorldMapCursorsRectTop[n], 16, 16, 1 << 10, 1 << 10); + POLY_OPA_DISP = Gfx_DrawTexRectRGBA16(POLY_OPA_DISP, &D_09007500, 16, 16, sWorldMapCursorsRectLeft[n], + sWorldMapCursorsRectTop[n], 16, 16, 1 << 10, 1 << 10); } } diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c index 6e9f17843..219ecd7a9 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c @@ -208,7 +208,7 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) { if (GET_CUR_FORM_BTN_ITEM(i + 1) != ITEM_NONE) { if (GET_CUR_FORM_BTN_SLOT(i + 1) >= NUM_ITEM_SLOTS) { gSPVertex(POLY_OPA_DISP++, &pauseCtx->maskVtx[j], 4, 0); - POLY_OPA_DISP = func_8010DC58(POLY_OPA_DISP, gEquippedItemOutlineTex, 32, 32, 0); + POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, gEquippedItemOutlineTex, 32, 32, 0); } } } @@ -566,8 +566,8 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { } } - if ((Player_GetEnvTimerType(play) >= PLAYER_ENV_TIMER_UNDERWATER_FLOOR) && - (Player_GetEnvTimerType(play) <= PLAYER_ENV_TIMER_UNDERWATER_FREE) && + if ((Player_GetEnvironmentalHazard(play) >= PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) && + (Player_GetEnvironmentalHazard(play) <= PLAYER_ENV_HAZARD_UNDERWATER_FREE) && ((cursorSlot == (SLOT_MASK_DEKU - NUM_ITEM_SLOTS)) || (cursorSlot == (SLOT_MASK_GORON - NUM_ITEM_SLOTS)))) { play_sound(NA_SE_SY_ERROR); diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h index 7349db241..849c7020e 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h @@ -120,7 +120,7 @@ typedef enum { /* 0 */ PAUSE_BG_PRERENDER_OFF, /* 1 */ PAUSE_BG_PRERENDER_SETUP, // The current frame is only drawn for the purpose of serving as the pause background. /* 2 */ PAUSE_BG_PRERENDER_PROCESS, // The previous frame was PAUSE_BG_PRERENDER_DRAW, now apply prerender filters. - /* 3 */ PAUSE_BG_PRERENDER_DONE, // The pause background is ready to be used. + /* 3 */ PAUSE_BG_PRERENDER_READY, // The pause background is ready to be used. /* 4 */ PAUSE_BG_PRERENDER_UNK4, /* 5 */ PAUSE_BG_PRERENDER_MAX } PauseBgPreRenderState; diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c index 77f0a37c4..d1c42dd73 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c @@ -461,15 +461,15 @@ f32 D_8082BE28[] = { s16 D_8082BE84 = 0; void func_80821900(void* segment, u32 texIndex) { - func_80178E3C(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0x400); + CmpDma_LoadFile(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0x400); } void func_8082192C(void* segment, u32 texIndex) { - func_80178E3C(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0xA00); + CmpDma_LoadFile(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0xA00); } void func_80821958(void* segment, u32 texIndex) { - func_80178E3C(SEGMENT_ROM_START(item_name_static), texIndex, segment, 0x400); + CmpDma_LoadFile(SEGMENT_ROM_START(item_name_static), texIndex, segment, 0x400); } #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_MoveCursorToSpecialPos.s") @@ -548,7 +548,7 @@ void KaleidoScope_UpdateOpening(PlayState* play) { pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE; pauseCtx->state++; // PAUSE_STATE_MAIN pauseCtx->alpha = 255; - func_80115844(play, 3); + func_80115844(play, DO_ACTION_RETURN); } else if (pauseCtx->switchPageTimer == 64) { pauseCtx->pageIndex = sPageSwitchNextPageIndex[pauseCtx->nextPageMode]; pauseCtx->nextPageMode = (pauseCtx->pageIndex * 2) + 1; @@ -611,7 +611,7 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->iconItemSegment = (void*)ALIGN16((uintptr_t)play->objectCtx.spaceStart); size0 = SEGMENT_ROM_SIZE(icon_item_static_old); - func_80178E7C((uintptr_t)SEGMENT_ROM_START(icon_item_static_test), pauseCtx->iconItemSegment, size0); + CmpDma_LoadAllFiles((uintptr_t)SEGMENT_ROM_START(icon_item_static_test), pauseCtx->iconItemSegment, size0); gSegments[0x08] = PHYSICAL_TO_VIRTUAL(pauseCtx->iconItemSegment); @@ -623,7 +623,8 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->iconItem24Segment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemSegment + size0); size1 = SEGMENT_ROM_SIZE(icon_item_24_static_old); - func_80178E7C((uintptr_t)SEGMENT_ROM_START(icon_item_24_static_test), pauseCtx->iconItem24Segment, size1); + CmpDma_LoadAllFiles((uintptr_t)SEGMENT_ROM_START(icon_item_24_static_test), pauseCtx->iconItem24Segment, + size1); pauseCtx->iconItemAltSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItem24Segment + size1); if (func_8010A0A4(play)) { @@ -647,7 +648,7 @@ void KaleidoScope_Update(PlayState* play) { DmaMgr_SendRequest0(pauseCtx->iconItemLangSegment, SEGMENT_ROM_START(icon_item_jpn_static), size2); pauseCtx->nameSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemLangSegment + size2); - func_8011552C(play, 0x15); + func_8011552C(play, DO_ACTION_INFO); if (((void)0, gSaveContext.worldMapArea) < 0x16) { func_8082192C(pauseCtx->nameSegment + 0x400, ((void)0, gSaveContext.worldMapArea)); } @@ -693,7 +694,7 @@ void KaleidoScope_Update(PlayState* play) { case PAUSE_MAIN_STATE_IDLE: if (!pauseCtx->itemDescriptionOn && (CHECK_BTN_ALL(input->press.button, BTN_START) || CHECK_BTN_ALL(input->press.button, BTN_B))) { - func_8011552C(play, 0xA); + func_8011552C(play, DO_ACTION_NONE); pauseCtx->state = PAUSE_STATE_UNPAUSE_SETUP; sPauseMenuVerticalOffset = -6240.0f; func_801A3AEC(0); @@ -727,7 +728,7 @@ void KaleidoScope_Update(PlayState* play) { if (CHECK_BTN_ALL(input->press.button, BTN_START) || CHECK_BTN_ALL(input->press.button, BTN_B)) { // Abort having the player play the song and close the pause menu AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); - func_8011552C(play, 0xA); + func_8011552C(play, DO_ACTION_NONE); pauseCtx->state = PAUSE_STATE_UNPAUSE_SETUP; sPauseMenuVerticalOffset = -6240.0f; func_801A3AEC(0); @@ -763,7 +764,7 @@ void KaleidoScope_Update(PlayState* play) { case PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG: if (CHECK_BTN_ALL(input->press.button, BTN_START) || CHECK_BTN_ALL(input->press.button, BTN_B)) { AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); - func_8011552C(play, 0xA); + func_8011552C(play, DO_ACTION_NONE); pauseCtx->state = PAUSE_STATE_UNPAUSE_SETUP; sPauseMenuVerticalOffset = -6240.0f; func_801A3AEC(0); @@ -805,7 +806,7 @@ void KaleidoScope_Update(PlayState* play) { case PAUSE_SAVEPROMPT_STATE_1: if (CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_CUP)) { if (pauseCtx->promptChoice != PAUSE_PROMPT_YES) { - func_8011552C(play, 0xA); + func_8011552C(play, DO_ACTION_NONE); pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_2; } else { play_sound(NA_SE_SY_PIECE_OF_HEART); @@ -823,13 +824,13 @@ void KaleidoScope_Update(PlayState* play) { sDelayTimer = 90; } } else if (CHECK_BTN_ALL(input->press.button, BTN_START)) { - func_8011552C(play, 0xA); + func_8011552C(play, DO_ACTION_NONE); pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_3; sPauseMenuVerticalOffset = -6240.0f; D_8082B90C = pauseCtx->roll; func_801A3AEC(0); } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { - func_8011552C(play, 0xA); + func_8011552C(play, DO_ACTION_NONE); pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_2; D_8082B90C = pauseCtx->roll; } @@ -844,7 +845,7 @@ void KaleidoScope_Update(PlayState* play) { case PAUSE_SAVEPROMPT_STATE_5: if (CHECK_BTN_ALL(input->press.button, BTN_B) || CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_START) || (--sDelayTimer == 0)) { - func_8011552C(play, 0xA); + func_8011552C(play, DO_ACTION_NONE); pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_3; sPauseMenuVerticalOffset = -6240.0f; D_8082B90C = pauseCtx->roll; @@ -886,7 +887,7 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->roll = -314.0f; pauseCtx->itemPageRoll = pauseCtx->mapPageRoll = pauseCtx->questPageRoll = pauseCtx->maskPageRoll = 0.0f; - func_8011552C(play, 0x15); + func_8011552C(play, DO_ACTION_INFO); gSaveContext.buttonStatus[EQUIP_SLOT_B] = D_801C6A98[pauseCtx->pageIndex + 1][0]; gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = D_801C6A98[pauseCtx->pageIndex + 1][1]; gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = D_801C6A98[pauseCtx->pageIndex + 1][1]; @@ -901,10 +902,10 @@ void KaleidoScope_Update(PlayState* play) { break; case PAUSE_SAVEPROMPT_STATE_6: - if (interfaceCtx->unk_264 != 255) { - interfaceCtx->unk_264 += 10; - if (interfaceCtx->unk_264 >= 255) { - interfaceCtx->unk_264 = 255; + if (interfaceCtx->screenFillAlpha != 255) { + interfaceCtx->screenFillAlpha += 10; + if (interfaceCtx->screenFillAlpha >= 255) { + interfaceCtx->screenFillAlpha = 255; pauseCtx->state = PAUSE_STATE_OFF; Game_SetFramerateDivisor(&play->state, 3); R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_UNK4; @@ -932,11 +933,11 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->iconItemSegment = (void*)(((uintptr_t)play->objectCtx.spaceStart + 0x30) & ~0x3F); // Messed up ALIGN64 size0 = SEGMENT_ROM_SIZE(icon_item_static_old); - func_80178E7C(SEGMENT_ROM_START(icon_item_static_test), pauseCtx->iconItemSegment, size0); + CmpDma_LoadAllFiles(SEGMENT_ROM_START(icon_item_static_test), pauseCtx->iconItemSegment, size0); pauseCtx->iconItem24Segment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemSegment + size0); size1 = SEGMENT_ROM_SIZE(icon_item_24_static_old); - func_80178E7C(SEGMENT_ROM_START(icon_item_24_static_test), pauseCtx->iconItem24Segment, size1); + CmpDma_LoadAllFiles(SEGMENT_ROM_START(icon_item_24_static_test), pauseCtx->iconItem24Segment, size1); pauseCtx->iconItemAltSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItem24Segment + size1); size2 = SEGMENT_ROM_SIZE(icon_item_gameover_static); @@ -1129,10 +1130,10 @@ void KaleidoScope_Update(PlayState* play) { break; case PAUSE_STATE_GAMEOVER_10: - if (interfaceCtx->unk_264 != 255) { - interfaceCtx->unk_264 += 10; - if (interfaceCtx->unk_264 >= 255) { - interfaceCtx->unk_264 = 255; + if (interfaceCtx->screenFillAlpha != 255) { + interfaceCtx->screenFillAlpha += 10; + if (interfaceCtx->screenFillAlpha >= 255) { + interfaceCtx->screenFillAlpha = 255; pauseCtx->state = PAUSE_STATE_OFF; Game_SetFramerateDivisor(&play->state, 3); @@ -1143,7 +1144,7 @@ void KaleidoScope_Update(PlayState* play) { if (pauseCtx->promptChoice == PAUSE_PROMPT_YES) { func_80169FDC(&play->state); gSaveContext.respawnFlag = -2; - gSaveContext.nextTransitionType = TRANS_TYPE_02; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; gSaveContext.save.playerData.health = 0x30; Audio_SetSpec(0xA); gSaveContext.healthAccumulator = 0; @@ -1179,7 +1180,7 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->iconItemSegment = (void*)ALIGN16((uintptr_t)play->objectCtx.spaceStart); size0 = SEGMENT_ROM_SIZE(icon_item_static_old); - func_80178E7C(SEGMENT_ROM_START(icon_item_static_test), pauseCtx->iconItemSegment, size0); + CmpDma_LoadAllFiles(SEGMENT_ROM_START(icon_item_static_test), pauseCtx->iconItemSegment, size0); pauseCtx->iconItemAltSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemSegment + size0); sInDungeonScene = false; @@ -1191,7 +1192,7 @@ void KaleidoScope_Update(PlayState* play) { DmaMgr_SendRequest0(pauseCtx->iconItemLangSegment, SEGMENT_ROM_START(icon_item_jpn_static), size2); pauseCtx->nameSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemLangSegment + size2); - func_8011552C(play, 0x16); + func_8011552C(play, DO_ACTION_WARP); worldMapCursorPoint = pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; func_80821900(pauseCtx->nameSegment, worldMapCursorPoint); @@ -1227,7 +1228,7 @@ void KaleidoScope_Update(PlayState* play) { case PAUSE_STATE_OWLWARP_SELECT: if (CHECK_BTN_ALL(input->press.button, BTN_START) || CHECK_BTN_ALL(input->press.button, BTN_B)) { - func_8011552C(play, 0xA); + func_8011552C(play, DO_ACTION_NONE); pauseCtx->state = PAUSE_STATE_OWLWARP_6; sPauseMenuVerticalOffset = -6240.0f; func_801A3AEC(0); @@ -1247,7 +1248,7 @@ void KaleidoScope_Update(PlayState* play) { msgCtx->msgLength = 0; msgCtx->msgMode = 0; if (msgCtx->choiceIndex == 0) { - func_8011552C(play, 0xA); + func_8011552C(play, DO_ACTION_NONE); pauseCtx->state = PAUSE_STATE_OWLWARP_6; sPauseMenuVerticalOffset = -6240.0f; func_801A3AEC(0); @@ -1255,7 +1256,7 @@ void KaleidoScope_Update(PlayState* play) { play_sound(NA_SE_SY_DECIDE); } else { pauseCtx->state = PAUSE_STATE_OWLWARP_SELECT; - func_8011552C(play, 0x16); + func_8011552C(play, DO_ACTION_WARP); play_sound(NA_SE_SY_MESSAGE_PASS); } } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { @@ -1266,7 +1267,7 @@ void KaleidoScope_Update(PlayState* play) { } else if (CHECK_BTN_ALL(input->press.button, BTN_START)) { msgCtx->msgLength = 0; msgCtx->msgMode = 0; - func_8011552C(play, 0xA); + func_8011552C(play, DO_ACTION_NONE); pauseCtx->state = PAUSE_STATE_OWLWARP_6; sPauseMenuVerticalOffset = -6240.0f; func_801A3AEC(0); @@ -1346,8 +1347,8 @@ void KaleidoScope_Update(PlayState* play) { func_80143324(play, &play->skyboxCtx, play->skyboxId); if ((msgCtx->msgMode != 0) && (msgCtx->currentTextId == 0xFF)) { - func_80115844(play, 0x12); - func_8011552C(play, 0x12); + func_80115844(play, DO_ACTION_STOP); + func_8011552C(play, DO_ACTION_STOP); Interface_SetHudVisibility(HUD_VISIBILITY_A_B_C); } else { interfaceCtx->unk_222 = interfaceCtx->unk_224 = 0; @@ -1431,7 +1432,7 @@ void KaleidoScope_Update(PlayState* play) { } // Process the Cursor input - if ((R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_DONE) && (pauseCtx->debugEditor == DEBUG_EDITOR_NONE) && + if ((R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_READY) && (pauseCtx->debugEditor == DEBUG_EDITOR_NONE) && !IS_PAUSE_STATE_OWLWARP && (((pauseCtx->state >= PAUSE_STATE_OPENING_3) && (pauseCtx->state <= PAUSE_STATE_SAVEPROMPT)) || ((pauseCtx->state >= PAUSE_STATE_GAMEOVER_2) && (pauseCtx->state <= PAUSE_STATE_UNPAUSE_SETUP)))) { diff --git a/tools/ZAPD/.gitrepo b/tools/ZAPD/.gitrepo index ddbb4547d..3144cab20 100644 --- a/tools/ZAPD/.gitrepo +++ b/tools/ZAPD/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/zeldaret/ZAPD.git branch = master - commit = 87cb648b4311d20673452111edaf4d38a5290c28 - parent = 06412c070f0240eacfaa860eee99b9c723245b7f + commit = 5786abbdd2d0fd14907e03575a0bd972c1fe9b28 + parent = e451a103ba5d14af3dd14acfa54a6b4999fd951f method = merge - cmdver = 0.4.3 + cmdver = 0.4.5 diff --git a/tools/ZAPD/ExporterTest/CollisionExporter.cpp b/tools/ZAPD/ExporterTest/CollisionExporter.cpp index 87b9a05a2..db5ad1a79 100644 --- a/tools/ZAPD/ExporterTest/CollisionExporter.cpp +++ b/tools/ZAPD/ExporterTest/CollisionExporter.cpp @@ -58,9 +58,11 @@ void ExporterExample_Collision::Save(ZResource* res, [[maybe_unused]] fs::path o writer->Seek(col->polyTypeDefSegmentOffset, SeekOffsetType::Start); - for (uint16_t i = 0; i < col->polygonTypes.size(); i++) - writer->Write(col->polygonTypes[i]); - + for (const auto& poly : col->polygonTypes) + { + writer->Write(poly.data[0]); + writer->Write(poly.data[1]); + } writer->Seek(col->camDataSegmentOffset, SeekOffsetType::Start); for (auto entry : col->camData->entries) diff --git a/tools/ZAPD/ExporterTest/ExporterTest.vcxproj b/tools/ZAPD/ExporterTest/ExporterTest.vcxproj index 5bdfc7aa6..341f72ceb 100644 --- a/tools/ZAPD/ExporterTest/ExporterTest.vcxproj +++ b/tools/ZAPD/ExporterTest/ExporterTest.vcxproj @@ -30,7 +30,7 @@ Application true - v143 + v142 Unicode @@ -43,7 +43,7 @@ StaticLibrary true - v143 + v142 Unicode diff --git a/tools/ZAPD/ExporterTest/RoomExporter.cpp b/tools/ZAPD/ExporterTest/RoomExporter.cpp index 6c5552d8f..9a5ea19d1 100644 --- a/tools/ZAPD/ExporterTest/RoomExporter.cpp +++ b/tools/ZAPD/ExporterTest/RoomExporter.cpp @@ -334,7 +334,7 @@ void ExporterExample_Room::Save(ZResource* res, fs::path outPath, BinaryWriter* writer->Write(entry.rotX); writer->Write(entry.rotY); writer->Write(entry.rotZ); - writer->Write(entry.initVar); + writer->Write(entry.params); } writer->Seek(oldOffset, SeekOffsetType::Start); diff --git a/tools/ZAPD/Jenkinsfile b/tools/ZAPD/Jenkinsfile index 9c4dde712..48535a51c 100644 --- a/tools/ZAPD/Jenkinsfile +++ b/tools/ZAPD/Jenkinsfile @@ -68,6 +68,15 @@ pipeline { } } + // INSTALL PYTHON DEPENDENCIES, currently MM only + stage('Install Python dependencies') { + steps { + dir('mm') { + sh 'python3 -m pip install -r requirements.txt' + } + } + } + // BUILD THE REPOS stage('Build repos') { parallel { @@ -82,7 +91,7 @@ pipeline { steps { dir('mm') { sh 'make -j disasm' - sh 'make -j all' + sh 'make -j' } } } diff --git a/tools/ZAPD/Makefile b/tools/ZAPD/Makefile index 2b47a8039..e725f94f8 100644 --- a/tools/ZAPD/Makefile +++ b/tools/ZAPD/Makefile @@ -15,7 +15,7 @@ else CXX := g++ endif -INC := -I ZAPD -I lib/elfio -I lib/libgfxd -I lib/tinyxml2 -I ZAPDUtils +INC := -I ZAPD -I lib/libgfxd -I lib/tinyxml2 -I ZAPDUtils CXXFLAGS := -fpic -std=c++17 -Wall -Wextra -fno-omit-frame-pointer OPTFLAGS := diff --git a/tools/ZAPD/README.md b/tools/ZAPD/README.md index 448aea033..bb96bab1b 100644 --- a/tools/ZAPD/README.md +++ b/tools/ZAPD/README.md @@ -71,9 +71,6 @@ ZAPD needs a _File parsing mode_ to be passed as first parameter. The options ar - `blb`: "Build blob" mode. - In this mode, ZAPD expects a BIN file as input and a filename as ouput. - ZAPD will try to convert the given BIN into the contents of a `uint8_t` C array. -- `bovl`: "Build overlay" mode. - - In this mode, ZAPD expects an overlay C file as input, a filename as ouput and an overlay configuration path (`-cfg`). - - ZAPD will generate a reloc `.s` file. ZAPD also accepts the following list of extra parameters: @@ -102,8 +99,6 @@ ZAPD also accepts the following list of extra parameters: - `ia16` - `ci4` - `ci8` -- `-cfg PATH`: Set cfg path (for overlays). - - Can be used only in `bovl` mode. - `-rconf PATH` Read Config File. - `-eh`: Enable error handler. - Only available in non-Windows environments. diff --git a/tools/ZAPD/ZAPD/CrashHandler.cpp b/tools/ZAPD/ZAPD/CrashHandler.cpp new file mode 100644 index 000000000..356866536 --- /dev/null +++ b/tools/ZAPD/ZAPD/CrashHandler.cpp @@ -0,0 +1,205 @@ +#include "CrashHandler.h" +#include "Utils/StringHelper.h" + +#if __has_include() +#define HAS_POSIX 1 +#else +#define HAS_POSIX 0 +#endif + +#include +#include +#include +#include + +#if HAS_POSIX == 1 +#include +#include // for __cxa_demangle +#include // for dladdr +#include +#include +#elif defined(_MSC_VER) +#include +#include + +#include + +#pragma comment(lib, "Dbghelp.lib") +#endif + +// Feel free to add more crash messages. +static std::array crashEasterEgg = { + "\tYou've met with a terrible fate, haven't you?", + "\tSEA BEARS FOAM. SLEEP BEARS DREAMS. \n\tBOTH END IN THE SAME WAY: CRASSSH!", + "\tZAPD has fallen and cannot get up.", + "\tIT'S A SECRET TO EVERYBODY. \n\tBut it shouldn't be, you'd better ask about it!", + "\tI AM ERROR.", + "\tGRUMBLE,GRUMBLE...", + "\tDODONGO DISLIKES SMOKE \n\tAnd ZAPD dislikes whatever you fed it.", + "\tMay the way of the Hero lead \n\tto the debugger.", + "\tTHE WIND FISH SLUMBERS LONG... \n\tTHE HERO'S LIFE GONE... ", + "\tSEA BEARS FOAM, SLEEP BEARS DREAMS. \n\tBOTH END IN THE SAME WAY CRASSSH!", + "\tYou've met with a terrible fate, haven't you?", + "\tMaster, I calculate a 100% probability that ZAPD has crashed. \n\tAdditionally, the " + "batteries in your Wii Remote are nearly depleted.", + "\t CONGRATURATIONS! \n" + "\tAll Pages are displayed.\n" + "\t THANK YOU! \n" + "\t You are great debugger!", + "\tRCP is HUNG UP!!\n" + "\tOh! MY GOD!!", +}; + +#if HAS_POSIX == 1 +void ErrorHandler(int sig) +{ + std::array arr; + constexpr size_t nMaxFrames = arr.size(); + size_t size = backtrace(arr.data(), nMaxFrames); + char** symbols = backtrace_symbols(arr.data(), nMaxFrames); + + fprintf(stderr, "\nZAPD crashed. (Signal: %i)\n", sig); + + srand(time(nullptr)); + auto easterIndex = rand() % crashEasterEgg.size(); + + fprintf(stderr, "\n%s\n\n", crashEasterEgg[easterIndex]); + + fprintf(stderr, "Traceback:\n"); + for (size_t i = 1; i < size; i++) + { + Dl_info info; + uint32_t gotAddress = dladdr(arr[i], &info); + std::string functionName(symbols[i]); + + if (gotAddress != 0 && info.dli_sname != nullptr) + { + int32_t status; + char* demangled = abi::__cxa_demangle(info.dli_sname, nullptr, nullptr, &status); + const char* nameFound = info.dli_sname; + + if (status == 0) + { + nameFound = demangled; + } + + functionName = StringHelper::Sprintf("%s (+0x%X)", nameFound, + (char*)arr[i] - (char*)info.dli_saddr); + free(demangled); + } + + fprintf(stderr, "%-3zd %s\n", i, functionName.c_str()); + } + + fprintf(stderr, "\n"); + + free(symbols); + exit(1); +} +#elif defined(_MSC_VER) + +void printStack(CONTEXT* ctx) +{ + BOOL result; + HANDLE process; + HANDLE thread; + HMODULE hModule; + ULONG frame; + DWORD64 displacement; + DWORD disp; + + srand(time(nullptr)); + auto easterIndex = rand() % crashEasterEgg.size(); + + fprintf(stderr, "\n%s\n\n", crashEasterEgg[easterIndex]); + +#if defined(_M_AMD64) + STACKFRAME64 stack; + memset(&stack, 0, sizeof(STACKFRAME64)); +#else + STACKFRAME stack; + memset(&stack, 0, sizeof(STACKFRAME)); +#endif + + char buffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME + sizeof(TCHAR)]; + char module[512]; + + PSYMBOL_INFO symbol = (PSYMBOL_INFO)buffer; + + CONTEXT ctx2; + memcpy(&ctx2, ctx, sizeof(CONTEXT)); + + process = GetCurrentProcess(); + thread = GetCurrentThread(); + SymInitialize(process, nullptr, TRUE); + + constexpr DWORD machineType = +#if defined(_M_AMD64) + IMAGE_FILE_MACHINE_AMD64; +#else + IMAGE_FILE_MACHINE_I386; +#endif + + displacement = 0; + + for (frame = 0;; frame++) + { + result = StackWalk(machineType, process, thread, &stack, &ctx2, nullptr, + SymFunctionTableAccess, SymGetModuleBase, nullptr); + if (!result) + { + break; + } + symbol->SizeOfStruct = sizeof(SYMBOL_INFO); + symbol->MaxNameLen = MAX_SYM_NAME; + SymFromAddr(process, (ULONG64)stack.AddrPC.Offset, &displacement, symbol); +#if defined(_M_AMD64) + IMAGEHLP_LINE64 line; + line.SizeOfStruct = sizeof(IMAGEHLP_LINE64); +#else + IMAGEHLP_LINE line; + line.SizeOfStruct = sizeof(IMAGEHLP_LINE); +#endif + if (SymGetLineFromAddr(process, stack.AddrPC.Offset, &disp, &line)) + { + fprintf(stderr, "%u\t %s in %s: line: %lu: \n", frame, symbol->Name, line.FileName, + line.LineNumber); + } + + else + { + fprintf(stderr, "%u\tat % s\n", frame, symbol->Name); + hModule = nullptr; + GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | + GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, + (LPCTSTR)(stack.AddrPC.Offset), &hModule); + + if (hModule != nullptr) + { + GetModuleFileNameA(hModule, module, 512 - 1); + } + fprintf(stderr, "%u\tIn %s\n", frame, module); + } + } +} + +LONG seh_filter(_EXCEPTION_POINTERS* ex) +{ + fprintf(stderr, "EXCEPTION 0x%x occured\n", ex->ExceptionRecord->ExceptionCode); + printStack(ex->ContextRecord); + return EXCEPTION_EXECUTE_HANDLER; +} +#endif + +void CrashHandler_Init() +{ +#if HAS_POSIX == 1 + signal(SIGSEGV, ErrorHandler); + signal(SIGABRT, ErrorHandler); +#elif defined(_MSC_VER) + SetUnhandledExceptionFilter(seh_filter); +#else + HANDLE_WARNING(WarningType::Always, + "tried to set error handler, but this ZAPD build lacks support for one", ""); +#endif +} diff --git a/tools/ZAPD/ZAPD/CrashHandler.h b/tools/ZAPD/ZAPD/CrashHandler.h new file mode 100644 index 000000000..102778bec --- /dev/null +++ b/tools/ZAPD/ZAPD/CrashHandler.h @@ -0,0 +1,6 @@ +#ifndef CRASH_HANDLER_H +#define CRASH_HANDLER_H + +void CrashHandler_Init(); + +#endif diff --git a/tools/ZAPD/ZAPD/GameConfig.cpp b/tools/ZAPD/ZAPD/GameConfig.cpp index ae29ba28f..777cf9d49 100644 --- a/tools/ZAPD/ZAPD/GameConfig.cpp +++ b/tools/ZAPD/ZAPD/GameConfig.cpp @@ -94,6 +94,26 @@ void GameConfig::ConfigFunc_ObjectList(const tinyxml2::XMLElement& element) objectList.emplace_back(std::move(line)); } +void GameConfig::ConfigFunc_EntranceList(const tinyxml2::XMLElement& element) +{ + std::string fileName = element.Attribute("File"); + std::vector lines = + File::ReadAllLines(Path::GetDirectoryName(configFilePath) / fileName); + + for (auto& line : lines) + entranceList.emplace_back(std::move(line)); +} + +void GameConfig::ConfigFunc_specialEntranceList(const tinyxml2::XMLElement& element) +{ + std::string fileName = element.Attribute("File"); + std::vector lines = + File::ReadAllLines(Path::GetDirectoryName(configFilePath) / fileName); + + for (auto& line : lines) + specialEntranceList.emplace_back(std::move(line)); +} + void GameConfig::ConfigFunc_TexturePool(const tinyxml2::XMLElement& element) { std::string fileName = element.Attribute("File"); @@ -145,10 +165,12 @@ void GameConfig::ConfigFunc_ExternalFile(const tinyxml2::XMLElement& element) void GameConfig::ReadConfigFile(const fs::path& argConfigFilePath) { - static const std::map ConfigFuncDictionary = { + static const std::unordered_map ConfigFuncDictionary = { {"SymbolMap", &GameConfig::ConfigFunc_SymbolMap}, {"ActorList", &GameConfig::ConfigFunc_ActorList}, {"ObjectList", &GameConfig::ConfigFunc_ObjectList}, + {"EntranceList", &GameConfig::ConfigFunc_EntranceList}, + {"SpecialEntranceList", &GameConfig::ConfigFunc_specialEntranceList}, {"TexturePool", &GameConfig::ConfigFunc_TexturePool}, {"BGConfig", &GameConfig::ConfigFunc_BGConfig}, {"ExternalXMLFolder", &GameConfig::ConfigFunc_ExternalXMLFolder}, diff --git a/tools/ZAPD/ZAPD/GameConfig.h b/tools/ZAPD/ZAPD/GameConfig.h index c478d16ce..2a783d10a 100644 --- a/tools/ZAPD/ZAPD/GameConfig.h +++ b/tools/ZAPD/ZAPD/GameConfig.h @@ -31,6 +31,8 @@ public: std::map symbolMap; std::vector actorList; std::vector objectList; + std::vector entranceList; + std::vector specialEntranceList; std::map texturePool; // Key = CRC // ZBackground @@ -49,6 +51,8 @@ public: void ConfigFunc_SymbolMap(const tinyxml2::XMLElement& element); void ConfigFunc_ActorList(const tinyxml2::XMLElement& element); void ConfigFunc_ObjectList(const tinyxml2::XMLElement& element); + void ConfigFunc_EntranceList(const tinyxml2::XMLElement& element); + void ConfigFunc_specialEntranceList(const tinyxml2::XMLElement& element); void ConfigFunc_TexturePool(const tinyxml2::XMLElement& element); void ConfigFunc_BGConfig(const tinyxml2::XMLElement& element); void ConfigFunc_ExternalXMLFolder(const tinyxml2::XMLElement& element); diff --git a/tools/ZAPD/ZAPD/ImageBackend.cpp b/tools/ZAPD/ZAPD/ImageBackend.cpp index 8accb6b4e..307945b40 100644 --- a/tools/ZAPD/ZAPD/ImageBackend.cpp +++ b/tools/ZAPD/ZAPD/ImageBackend.cpp @@ -398,7 +398,7 @@ void ImageBackend::SetPaletteIndex(size_t index, uint8_t nR, uint8_t nG, uint8_t alphaPalette[index] = nA; } -void ImageBackend::SetPalette(const ImageBackend& pal) +void ImageBackend::SetPalette(const ImageBackend& pal, uint32_t offset) { assert(isColorIndexed); size_t bytePerPixel = pal.GetBytesPerPixel(); @@ -422,7 +422,7 @@ void ImageBackend::SetPalette(const ImageBackend& pal) uint8_t g = pal.pixelMatrix[y][x * bytePerPixel + 1]; uint8_t b = pal.pixelMatrix[y][x * bytePerPixel + 2]; uint8_t a = pal.pixelMatrix[y][x * bytePerPixel + 3]; - SetPaletteIndex(index, r, g, b, a); + SetPaletteIndex(index + offset, r, g, b, a); } } } diff --git a/tools/ZAPD/ZAPD/ImageBackend.h b/tools/ZAPD/ZAPD/ImageBackend.h index 9e05a2eed..0b1f4806c 100644 --- a/tools/ZAPD/ZAPD/ImageBackend.h +++ b/tools/ZAPD/ZAPD/ImageBackend.h @@ -42,8 +42,9 @@ public: void SetGrayscalePixel(size_t y, size_t x, uint8_t grayscale, uint8_t alpha = 0); void SetIndexedPixel(size_t y, size_t x, uint8_t index, uint8_t grayscale); + void SetIndexedPixel(size_t y, size_t x, uint8_t index, RGBAPixel pixel); void SetPaletteIndex(size_t index, uint8_t nR, uint8_t nG, uint8_t nB, uint8_t nA); - void SetPalette(const ImageBackend& pal); + void SetPalette(const ImageBackend& pal, uint32_t offset = 0); uint32_t GetWidth() const; uint32_t GetHeight() const; diff --git a/tools/ZAPD/ZAPD/Main.cpp b/tools/ZAPD/ZAPD/Main.cpp index 531edc094..2563154e5 100644 --- a/tools/ZAPD/ZAPD/Main.cpp +++ b/tools/ZAPD/ZAPD/Main.cpp @@ -1,5 +1,4 @@ #include "Globals.h" -#include "Overlays/ZOverlay.h" #include "Utils/Directory.h" #include "Utils/File.h" #include "Utils/Path.h" @@ -10,22 +9,12 @@ #include "ZFile.h" #include "ZTexture.h" -#if !defined(_MSC_VER) && !defined(__CYGWIN__) -#include -#include -#include -#include // for __cxa_demangle -#include // for dladdr -#include -#include -#endif +#include "CrashHandler.h" #include #include #include "tinyxml2.h" -extern const char gBuildHash[]; - bool Parse(const fs::path& xmlFilePath, const fs::path& basePath, const fs::path& outPath, ZFileMode fileMode); @@ -33,61 +22,7 @@ void BuildAssetTexture(const fs::path& pngFilePath, TextureType texType, const f void BuildAssetBackground(const fs::path& imageFilePath, const fs::path& outPath); void BuildAssetBlob(const fs::path& blobFilePath, const fs::path& outPath); -#if !defined(_MSC_VER) && !defined(__CYGWIN__) -#define ARRAY_COUNT(arr) (sizeof(arr) / sizeof(arr[0])) -void ErrorHandler(int sig) -{ - void* array[4096]; - const size_t nMaxFrames = sizeof(array) / sizeof(array[0]); - size_t size = backtrace(array, nMaxFrames); - char** symbols = backtrace_symbols(array, nMaxFrames); - - fprintf(stderr, "\nZAPD crashed. (Signal: %i)\n", sig); - - // Feel free to add more crash messages. - const char* crashEasterEgg[] = { - "\tYou've met with a terrible fate, haven't you?", - "\tSEA BEARS FOAM. SLEEP BEARS DREAMS. \n\tBOTH END IN THE SAME WAY: CRASSSH!", - "\tZAPD has fallen and cannot get up.", - }; - - srand(time(nullptr)); - auto easterIndex = rand() % ARRAY_COUNT(crashEasterEgg); - - fprintf(stderr, "\n%s\n\n", crashEasterEgg[easterIndex]); - - fprintf(stderr, "Traceback:\n"); - for (size_t i = 1; i < size; i++) - { - Dl_info info; - uint32_t gotAddress = dladdr(array[i], &info); - std::string functionName(symbols[i]); - - if (gotAddress != 0 && info.dli_sname != nullptr) - { - int32_t status; - char* demangled = abi::__cxa_demangle(info.dli_sname, nullptr, nullptr, &status); - const char* nameFound = info.dli_sname; - - if (status == 0) - { - nameFound = demangled; - } - - functionName = StringHelper::Sprintf("%s (+0x%X)", nameFound, - (char*)array[i] - (char*)info.dli_saddr); - free(demangled); - } - - fprintf(stderr, "%-3zd %s\n", i, functionName.c_str()); - } - - fprintf(stderr, "\n"); - - free(symbols); - exit(1); -} -#endif +extern const char gBuildHash[]; int main(int argc, char* argv[]) { @@ -175,26 +110,13 @@ int main(int argc, char* argv[]) { Globals::Instance->texType = ZTexture::GetTextureTypeFromString(argv[++i]); } - else if (arg == "-cfg") // Set cfg path (for overlays) - // TODO: Change the name of this to something else so it doesn't - // get confused with XML config files. - { - Globals::Instance->cfgPath = argv[++i]; - } else if (arg == "-rconf") // Read Config File { Globals::Instance->cfg.ReadConfigFile(argv[++i]); } else if (arg == "-eh") // Enable Error Handler { -#if !defined(_MSC_VER) && !defined(__CYGWIN__) - signal(SIGSEGV, ErrorHandler); - signal(SIGABRT, ErrorHandler); -#else - HANDLE_WARNING(WarningType::Always, - "tried to set error handler, but this ZAPD build lacks support for one", - ""); -#endif + CrashHandler_Init(); } else if (arg == "-v") // Verbose { @@ -231,8 +153,6 @@ int main(int argc, char* argv[]) fileMode = ZFileMode::BuildTexture; else if (buildMode == "bren") fileMode = ZFileMode::BuildBackground; - else if (buildMode == "bovl") - fileMode = ZFileMode::BuildOverlay; else if (buildMode == "bsf") fileMode = ZFileMode::BuildSourceFile; else if (buildMode == "bblb") @@ -314,16 +234,6 @@ int main(int argc, char* argv[]) { BuildAssetBlob(Globals::Instance->inputPath, Globals::Instance->outputPath); } - else if (fileMode == ZFileMode::BuildOverlay) - { - ZOverlay* overlay = - ZOverlay::FromBuild(Path::GetDirectoryName(Globals::Instance->inputPath), - Path::GetDirectoryName(Globals::Instance->cfgPath)); - - if (overlay != nullptr) - File::WriteAllText(Globals::Instance->outputPath.string(), - overlay->GetSourceOutputCode("")); - } delete g; return 0; diff --git a/tools/ZAPD/ZAPD/OtherStructs/CutsceneMM_Commands.cpp b/tools/ZAPD/ZAPD/OtherStructs/CutsceneMM_Commands.cpp index b69f47321..edefbc051 100644 --- a/tools/ZAPD/ZAPD/OtherStructs/CutsceneMM_Commands.cpp +++ b/tools/ZAPD/ZAPD/OtherStructs/CutsceneMM_Commands.cpp @@ -54,6 +54,7 @@ CutsceneMMCommand_GenericCmd::CutsceneMMCommand_GenericCmd(const std::vector(cmdId); + entries.reserve(numEntries); for (size_t i = 0; i < numEntries; i++) { auto* entry = new CutsceneSubCommandEntry_GenericMMCmd(rawData, rawDataIndex, cmdId); @@ -96,6 +97,7 @@ CutsceneMMCommand_Camera::CutsceneMMCommand_Camera(const std::vector& r { rawDataIndex += 4; + entries.reserve(numEntries); for (size_t i = 0; i < numEntries / 4; i++) { auto* entry = new CutsceneSubCommandEntry_Camera(rawData, rawDataIndex); @@ -138,6 +140,7 @@ CutsceneMMCommand_FadeScreen::CutsceneMMCommand_FadeScreen(const std::vector& { rawDataIndex += 4; + entries.reserve(numEntries); for (size_t i = 0; i < numEntries; i++) { auto* entry = new CutsceneSubCommandEntry_FadeSeq(rawData, rawDataIndex); @@ -199,6 +203,7 @@ CutsceneMMCommand_NonImplemented::CutsceneMMCommand_NonImplemented( { rawDataIndex += 4; + entries.reserve(numEntries); for (size_t i = 0; i < numEntries; i++) { auto* entry = new CutsceneSubCommandEntry_NonImplemented(rawData, rawDataIndex); diff --git a/tools/ZAPD/ZAPD/OtherStructs/Cutscene_Commands.cpp b/tools/ZAPD/ZAPD/OtherStructs/Cutscene_Commands.cpp index a716176b9..8ae4c69d7 100644 --- a/tools/ZAPD/ZAPD/OtherStructs/Cutscene_Commands.cpp +++ b/tools/ZAPD/ZAPD/OtherStructs/Cutscene_Commands.cpp @@ -154,6 +154,7 @@ CutsceneCommand_GenericCmd::CutsceneCommand_GenericCmd(const std::vector(cmdId); + entries.reserve(numEntries); for (size_t i = 0; i < numEntries; i++) { @@ -320,6 +321,7 @@ CutsceneCommand_Rumble::CutsceneCommand_Rumble(const std::vector& rawDa { rawDataIndex += 4; + entries.reserve(numEntries); for (size_t i = 0; i < numEntries; i++) { auto* entry = new CutsceneSubCommandEntry_Rumble(rawData, rawDataIndex); @@ -363,6 +365,7 @@ CutsceneCommand_SetTime::CutsceneCommand_SetTime(const std::vector& raw { rawDataIndex += 4; + entries.reserve(numEntries); for (size_t i = 0; i < numEntries; i++) { auto* entry = new CutsceneSubCommandEntry_SetTime(rawData, rawDataIndex); @@ -438,6 +441,7 @@ CutsceneCommand_TextBox::CutsceneCommand_TextBox(const std::vector& raw { rawDataIndex += 4; + entries.reserve(numEntries); for (size_t i = 0; i < numEntries; i++) { auto* entry = new CutsceneSubCommandEntry_TextBox(rawData, rawDataIndex); @@ -516,6 +520,7 @@ CutsceneCommand_ActorAction::CutsceneCommand_ActorAction(const std::vectorsegment) { uint32_t unk_8_Offset = Seg2Filespace(unk_8, parent->baseAddress); + + unk_8_arr.reserve(unk_0); for (size_t i = 0; i < unk_0; i++) { Struct_800A57C0 unk8_data(parent); @@ -117,6 +119,8 @@ void Struct_800A598C::ParseRawData() if (unk_C != 0 && GETSEGNUM(unk_8) == parent->segment) { uint32_t unk_C_Offset = Seg2Filespace(unk_C, parent->baseAddress); + + unk_C_arr.reserve(unk_2); for (size_t i = 0; i < unk_2; i++) { Struct_800A598C_2 unkC_data(parent); @@ -244,6 +248,8 @@ void Struct_800A5E28::ParseRawData() if (unk_4 != 0 && GETSEGNUM(unk_4) == parent->segment) { uint32_t unk_4_Offset = Seg2Filespace(unk_4, parent->baseAddress); + + unk_4_arr.reserve(unk_2); for (size_t i = 0; i < unk_2; i++) { Struct_800A598C unk_4_data(parent); diff --git a/tools/ZAPD/ZAPD/Overlays/ZOverlay.cpp b/tools/ZAPD/ZAPD/Overlays/ZOverlay.cpp deleted file mode 100644 index 113c4ef33..000000000 --- a/tools/ZAPD/ZAPD/Overlays/ZOverlay.cpp +++ /dev/null @@ -1,352 +0,0 @@ -#include "ZOverlay.h" - -#include -#include -#include "Globals.h" -#include "Utils/Directory.h" -#include "Utils/File.h" -#include "Utils/Path.h" -#include "Utils/StringHelper.h" -#include "WarningHandler.h" - -using namespace ELFIO; - -const char* RelocationEntry::GetSectionName() const -{ - switch (sectionType) - { - case SectionType::Text: - return ".text"; - case SectionType::Data: - return ".data"; - case SectionType::RoData: - return ".rodata"; - case SectionType::Bss: - return ".bss"; - case SectionType::ERROR: - return ".ERROR"; - } - assert(!"Oh no :c"); -} - -const char* RelocationEntry::GetRelocTypeName() const -{ - switch (relocationType) - { - case RelocationType::R_MIPS_32: - return "R_MIPS_32"; - case RelocationType::R_MIPS_26: - return "R_MIPS_26"; - case RelocationType::R_MIPS_HI16: - return "R_MIPS_HI16"; - case RelocationType::R_MIPS_LO16: - return "R_MIPS_LO16"; - } - assert(!"Oh no :c"); -} - -ZOverlay::ZOverlay() -{ - name = ""; - entries = std::vector(); -} - -ZOverlay::ZOverlay(const std::string& nName) : ZOverlay() -{ - name = nName; -} - -ZOverlay::~ZOverlay() -{ - for (auto entry : entries) - if (entry) - delete entry; - entries.clear(); -} - -static const std::unordered_set sRelSections = { - ".rel.text", - ".rel.data", - ".rel.rodata", -}; -static const std::unordered_set sSections = { - ".text", ".data", ".symtab", ".rodata", ".rodata.str1.4", ".rodata.cst4", ".rodata.cst8", -}; - -ZOverlay* ZOverlay::FromBuild(fs::path buildPath, fs::path cfgFolderPath) -{ - std::string cfgText = File::ReadAllText(cfgFolderPath / "overlay.cfg"); - std::vector cfgLines = StringHelper::Split(cfgText, "\n"); - - ZOverlay* ovl = new ZOverlay(StringHelper::Strip(cfgLines[0], "\r")); - ovl->cfgLines = cfgLines; - - int32_t sectionOffs[5] = {0}; - std::vector textRelocs; - std::vector dataRelocs; - std::vector rodataRelocs; - - // get the elf files - std::vector readers; - for (size_t i = 1; i < cfgLines.size(); i++) - { - std::string elfPath = - (buildPath / (cfgLines[i].substr(0, cfgLines[i].size() - 2) + ".o")).string(); - elfio* reader = new elfio(); - - if (!reader->load(elfPath)) - { - // not all files were compiled - for (auto r : readers) - delete r; - readers.clear(); - - delete ovl; - return nullptr; - } - - readers.push_back(reader); - } - - for (size_t curReaderId = 0; curReaderId < readers.size(); curReaderId++) - { - auto& curReader = readers[curReaderId]; - - Elf_Half sec_num = curReader->sections.size(); - for (int32_t i = 0; i < sec_num; i++) - { - section* pSec = curReader->sections[i]; - - if (pSec->get_type() != SHT_REL || - sRelSections.find(pSec->get_name()) == sRelSections.end()) - { - continue; - } - - symbol_section_accessor currentSymbols(*curReader, - curReader->sections[(Elf_Half)pSec->get_link()]); - - SectionType sectionType = GetSectionTypeFromStr(pSec->get_name()); - - if (sectionType == SectionType::ERROR) - { - HANDLE_WARNING(WarningType::Always, "one of the section types returned ERROR", ""); - } - - relocation_section_accessor relocs(*curReader, pSec); - for (Elf_Xword j = 0; j < relocs.get_entries_num(); j++) - { - Elf64_Addr offset = 0; - Elf_Word symbol = 0; - Elf_Word type = 0; - { - Elf_Sxword addend = 0; - relocs.get_entry(j, offset, symbol, type, addend); - } - - std::string curSymName; - Elf_Half curSymShndx = SHN_UNDEF; - { - Elf64_Addr value; - Elf_Xword size; - unsigned char bind; - unsigned char type; - unsigned char other; - currentSymbols.get_symbol(symbol, curSymName, value, size, bind, type, - curSymShndx, other); - } - - // check symbols outside the elf but within the overlay - if (curSymShndx == SHN_UNDEF) - { - if (Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_DEBUG) - { - printf("Symbol '%s' doesn't exist in current .o file (%s). Searching...\n", - curSymName.c_str(), cfgLines[curReaderId + 1].c_str()); - } - - for (size_t readerId = 0; readerId < readers.size(); readerId++) - { - auto& reader = readers[readerId]; - - if (curSymShndx != SHN_UNDEF) - break; - - if (reader == curReader) - continue; - - auto sectionData = reader->sections[(Elf_Half)pSec->get_link()]; - curSymShndx = - ovl->FindSymbolInSection(curSymName, sectionData, *reader, readerId); - if (curSymShndx != SHN_UNDEF) - break; - - if (Globals::Instance->gccCompat) - { - // Symbol wasn't found, try checking every section - Elf_Half sec_num = reader->sections.size(); - for (int32_t otherSectionIdx = 0; otherSectionIdx < sec_num; - otherSectionIdx++) - { - if (curSymShndx != SHN_UNDEF) - { - break; - } - - auto sectionDataIter = reader->sections[otherSectionIdx]; - - curSymShndx = ovl->FindSymbolInSection(curSymName, sectionDataIter, - *reader, readerId); - } - } - } - } - - if (curSymShndx != SHN_UNDEF) - { - RelocationType typeConverted = (RelocationType)type; - offset += sectionOffs[static_cast(sectionType)]; - - RelocationEntry* reloc = - new RelocationEntry(sectionType, typeConverted, offset); - - if (Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_DEBUG) - { - printf(".word 0x%08X # %s %s 0x%04X\n", reloc->CalcRelocationWord(), - reloc->GetSectionName(), reloc->GetRelocTypeName(), reloc->offset); - } - - // this is to keep the correct reloc entry order - if (sectionType == SectionType::Text) - textRelocs.push_back(reloc); - if (sectionType == SectionType::Data) - dataRelocs.push_back(reloc); - if (sectionType == SectionType::RoData) - rodataRelocs.push_back(reloc); - } - } - } - - // increase section offsets - for (int32_t i = 0; i < sec_num; i++) - { - section* pSec = curReader->sections[i]; - if (pSec->get_type() == SHT_PROGBITS && - sSections.find(pSec->get_name()) != sSections.end()) - { - SectionType sectionType = GetSectionTypeFromStr(pSec->get_name()); - sectionOffs[static_cast(sectionType)] += pSec->get_size(); - } - } - } - - ovl->entries.reserve(textRelocs.size() + dataRelocs.size() + rodataRelocs.size()); - ovl->entries.insert(ovl->entries.end(), textRelocs.begin(), textRelocs.end()); - ovl->entries.insert(ovl->entries.end(), dataRelocs.begin(), dataRelocs.end()); - ovl->entries.insert(ovl->entries.end(), rodataRelocs.begin(), rodataRelocs.end()); - - for (auto r : readers) - delete r; - readers.clear(); - - return ovl; -} - -std::string ZOverlay::GetSourceOutputCode([[maybe_unused]] const std::string& prefix) -{ - std::string output; - - output += ".section .ovl\n"; - - output += StringHelper::Sprintf("# %sOverlayInfo\n", name.c_str()); - output += StringHelper::Sprintf(".word _%sSegmentTextSize\n", name.c_str()); - output += StringHelper::Sprintf(".word _%sSegmentDataSize\n", name.c_str()); - output += StringHelper::Sprintf(".word _%sSegmentRoDataSize\n", name.c_str()); - output += StringHelper::Sprintf(".word _%sSegmentBssSize\n", name.c_str()); - output += "\n"; - - output += StringHelper::Sprintf(".word %i # reloc_count\n", entries.size()); - - for (size_t i = 0; i < entries.size(); i++) - { - RelocationEntry* reloc = entries[i]; - output += StringHelper::Sprintf(".word 0x%08X # %s %s 0x%04X\n", - reloc->CalcRelocationWord(), reloc->GetSectionName(), - reloc->GetRelocTypeName(), reloc->offset); - } - - size_t offset = (entries.size() * 4) + 20; - - while (offset % 16 != 12) - { - output += ".word 0\n"; - offset += 4; - } - - output += "\n"; - output += - StringHelper::Sprintf(".word 0x%08X # %sOverlayInfoOffset\n", offset + 4, name.c_str()); - return output; -} - -SectionType ZOverlay::GetSectionTypeFromStr(const std::string& sectionName) -{ - if (sectionName == ".rel.text" || sectionName == ".text") - return SectionType::Text; - else if (sectionName == ".rel.data" || sectionName == ".data") - return SectionType::Data; - else if (sectionName == ".rel.rodata" || sectionName == ".rodata" || - sectionName == ".rodata.str1.4" || sectionName == ".rodata.cst4") - return SectionType::RoData; - else if (sectionName == ".rel.bss" || sectionName == ".bss") - return SectionType::Bss; - - return SectionType::ERROR; -} - -ELFIO::Elf_Half ZOverlay::FindSymbolInSection(const std::string& curSymName, - ELFIO::section* sectionData, ELFIO::elfio& reader, - size_t readerId) -{ - if (sectionData == nullptr) - return SHN_UNDEF; - - auto sectionDataName = sectionData->get_name(); - if (sSections.find(sectionDataName) == sSections.end()) - return SHN_UNDEF; - -#ifdef DEVELOPMENT - if (Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_DEBUG) - { - printf("\t File '%s' section: %s \n", cfgLines[readerId + 1].c_str(), - sectionDataName.c_str()); - } -#endif - - symbol_section_accessor symbols(reader, sectionData); - - Elf_Xword symbolNum = symbols.get_symbols_num(); - for (Elf_Xword symIdx = 0; symIdx < symbolNum; symIdx++) - { - Elf_Half shndx = SHN_UNDEF; - Elf64_Addr value; - std::string name; - Elf_Xword size; - unsigned char bind; - unsigned char type; - unsigned char other; - - symbols.get_symbol(symIdx, name, value, size, bind, type, shndx, other); - - if (name == curSymName) - { - if (Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_DEBUG) - { - printf("\t Symbol '%s' found in '%s' '%s' \n", curSymName.c_str(), - cfgLines[readerId + 1].c_str(), sectionDataName.c_str()); - } - return shndx; - } - } - return SHN_UNDEF; -} diff --git a/tools/ZAPD/ZAPD/Overlays/ZOverlay.h b/tools/ZAPD/ZAPD/Overlays/ZOverlay.h deleted file mode 100644 index 98ead9013..000000000 --- a/tools/ZAPD/ZAPD/Overlays/ZOverlay.h +++ /dev/null @@ -1,75 +0,0 @@ -#pragma once - -#include "Utils/Directory.h" -#include "ZResource.h" -#include "elfio/elfio.hpp" -#include "tinyxml2.h" - -enum class SectionType -{ - Text = 1, - Data = 2, - RoData = 3, - Bss = 4, - ERROR = 255 -}; - -enum class RelocationType -{ - R_MIPS_32 = 2, - R_MIPS_26 = 4, - R_MIPS_HI16 = 5, - R_MIPS_LO16 = 6, -}; - -class RelocationEntry -{ -public: - SectionType sectionType; - RelocationType relocationType; - int32_t offset; - - RelocationEntry(SectionType nSecType, RelocationType nRelType, int32_t nOffset) - { - sectionType = nSecType; - relocationType = nRelType; - offset = nOffset; - } - - uint32_t CalcRelocationWord() - { - uint32_t relocationWord = 0; - - relocationWord |= static_cast(sectionType) << 30; - relocationWord |= static_cast(relocationType) << 24; - relocationWord |= offset; - - return relocationWord; - } - - const char* GetSectionName() const; - const char* GetRelocTypeName() const; -}; - -class ZOverlay -{ -public: - std::string name; - - ZOverlay(const std::string& nName); - ~ZOverlay(); - static ZOverlay* FromBuild(fs::path buildPath, fs::path cfgFolderPath); - std::string GetSourceOutputCode(const std::string& prefix); - -private: - std::vector entries; - std::vector cfgLines; - - ZOverlay(); - - static SectionType GetSectionTypeFromStr(const std::string& sectionName); - // static std::string GetOverlayNameFromElf(ELFIO::elfio& reader); - - ELFIO::Elf_Half FindSymbolInSection(const std::string& curSymName, ELFIO::section* sectionData, - ELFIO::elfio& reader, size_t readerId); -}; diff --git a/tools/ZAPD/ZAPD/ZAPD.vcxproj b/tools/ZAPD/ZAPD/ZAPD.vcxproj index f3bb35a3f..505e41100 100644 --- a/tools/ZAPD/ZAPD/ZAPD.vcxproj +++ b/tools/ZAPD/ZAPD/ZAPD.vcxproj @@ -30,26 +30,26 @@ Application true - v143 + v142 MultiByte Application false - v143 + v142 true MultiByte Application true - v143 + v142 MultiByte Application false - v143 + v142 true MultiByte @@ -91,13 +91,15 @@ stdcpp17 stdc11 _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true true + Console - cd .. -mkdir build\ZAPD + cd .. +mkdir build\ZAPD python ZAPD/genbuildinfo.py @@ -112,15 +114,17 @@ mkdir build\ZAPD EnableFastChecks stdc11 MultiThreadedDebug + true true ZAPDUtils.lib;/WHOLEARCHIVE:ExporterExample.lib;%(AdditionalDependencies) false + Console - cd .. -mkdir build\ZAPD + cd .. +mkdir build\ZAPD python ZAPD/genbuildinfo.py @@ -132,14 +136,15 @@ mkdir build\ZAPD true true true + true true true - cd .. -mkdir build\ZAPD + cd .. +mkdir build\ZAPD python ZAPD/genbuildinfo.py @@ -153,14 +158,15 @@ mkdir build\ZAPD true stdcpplatest _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true true true - cd .. -mkdir build\ZAPD + cd .. +mkdir build\ZAPD python ZAPD/genbuildinfo.py @@ -173,6 +179,7 @@ mkdir build\ZAPD + @@ -182,8 +189,8 @@ mkdir build\ZAPD - + @@ -236,6 +243,7 @@ mkdir build\ZAPD + @@ -261,6 +269,7 @@ mkdir build\ZAPD + @@ -270,8 +279,8 @@ mkdir build\ZAPD - + @@ -324,6 +333,7 @@ mkdir build\ZAPD + diff --git a/tools/ZAPD/ZAPD/ZAPD.vcxproj.filters b/tools/ZAPD/ZAPD/ZAPD.vcxproj.filters index 4de236fad..ce89882fe 100644 --- a/tools/ZAPD/ZAPD/ZAPD.vcxproj.filters +++ b/tools/ZAPD/ZAPD/ZAPD.vcxproj.filters @@ -165,9 +165,6 @@ Source Files\Z64 - - Source Files\Z64 - Source Files\Z64 @@ -288,6 +285,12 @@ Source Files\Z64 + + Source Files + + + Source Files\Z64 + @@ -413,9 +416,6 @@ Header Files\Libraries - - Header Files\Z64 - Header Files\Z64 @@ -548,6 +548,12 @@ Header Files\Z64 + + Header Files + + + Header Files\Z64 + diff --git a/tools/ZAPD/ZAPD/ZActorList.cpp b/tools/ZAPD/ZAPD/ZActorList.cpp new file mode 100644 index 000000000..ee5cb4d44 --- /dev/null +++ b/tools/ZAPD/ZAPD/ZActorList.cpp @@ -0,0 +1,194 @@ +#include "ZActorList.h" + +#include "Globals.h" +#include "Utils/BitConverter.h" +#include "WarningHandler.h" +#include "ZFile.h" +#include "ZRoom/ZNames.h" + +REGISTER_ZFILENODE(ActorList, ZActorList); + +ZActorList::ZActorList(ZFile* nParent) : ZResource(nParent) +{ + RegisterRequiredAttribute("Count"); +} + +void ZActorList::ExtractFromBinary(uint32_t nRawDataIndex, uint8_t nNumActors) +{ + rawDataIndex = nRawDataIndex; + numActors = nNumActors; + + // Don't parse raw data of external files + if (parent->GetMode() == ZFileMode::ExternalFile) + return; + + ParseRawData(); +} + +void ZActorList::ParseXML(tinyxml2::XMLElement* reader) +{ + ZResource::ParseXML(reader); + + numActors = StringHelper::StrToL(registeredAttributes.at("Count").value); + + if (numActors < 1) + { + HANDLE_ERROR_RESOURCE( + WarningType::InvalidAttributeValue, parent, this, rawDataIndex, + StringHelper::Sprintf("invalid value '%d' found for 'NumPaths' attribute", numActors), + "Should be at least '1'"); + } +} + +void ZActorList::ParseRawData() +{ + ZResource::ParseRawData(); + + offset_t currentPtr = rawDataIndex; + size_t largestlength = 0; + + for (size_t i = 0; i < numActors; i++) + { + ActorSpawnEntry entry(parent->GetRawData(), currentPtr); + + currentPtr += entry.GetRawDataSize(); + actors.push_back(entry); + + size_t actorNameLength = ZNames::GetActorName(entry.GetActorId()).size(); + if (actorNameLength > largestlength) + largestlength = actorNameLength; + } + + for (auto& entry : actors) + { + entry.SetLargestActorName(largestlength); + } +} + +Declaration* ZActorList::DeclareVar(const std::string& prefix, const std::string& bodyStr) +{ + std::string auxName = name; + + if (name == "") + auxName = GetDefaultName(prefix); + + Declaration* decl = + parent->AddDeclarationArray(rawDataIndex, GetDeclarationAlignment(), GetRawDataSize(), + GetSourceTypeName(), name, GetActorListArraySize(), bodyStr); + decl->staticConf = staticConf; + + return decl; +} + +std::string ZActorList::GetBodySourceCode() const +{ + std::string declaration; + + size_t index = 0; + for (auto& entry : actors) + { + declaration += StringHelper::Sprintf("\t{ %s },", entry.GetBodySourceCode().c_str()); + + if (index < actors.size() - 1) + declaration += "\n"; + + index++; + } + + return declaration; +} + +std::string ZActorList::GetSourceTypeName() const +{ + return actors.front().GetSourceTypeName(); +} + +ZResourceType ZActorList::GetResourceType() const +{ + return ZResourceType::ActorList; +} + +size_t ZActorList::GetRawDataSize() const +{ + return actors.size() * actors.front().GetRawDataSize(); +} + +size_t ZActorList::GetActorListArraySize() const +{ + size_t actorCount = 0; + + // Doing an else-if here so we only do the loop when the game is SW97. + // Actor 0x22 is removed from SW97, so we need to ensure that we don't increment the actor count + // for it. + if (Globals::Instance->game == ZGame::OOT_SW97) + { + actorCount = 0; + + for (const auto& entry : actors) + if (entry.GetActorId() != 0x22) + actorCount++; + } + else + { + actorCount = actors.size(); + } + + return actorCount; +} + +/* ActorSpawnEntry */ + +ActorSpawnEntry::ActorSpawnEntry(const std::vector& rawData, uint32_t rawDataIndex) +{ + actorNum = BitConverter::ToInt16BE(rawData, rawDataIndex + 0); + posX = BitConverter::ToInt16BE(rawData, rawDataIndex + 2); + posY = BitConverter::ToInt16BE(rawData, rawDataIndex + 4); + posZ = BitConverter::ToInt16BE(rawData, rawDataIndex + 6); + rotX = BitConverter::ToUInt16BE(rawData, rawDataIndex + 8); + rotY = BitConverter::ToUInt16BE(rawData, rawDataIndex + 10); + rotZ = BitConverter::ToUInt16BE(rawData, rawDataIndex + 12); + params = BitConverter::ToInt16BE(rawData, rawDataIndex + 14); +} + +std::string ActorSpawnEntry::GetBodySourceCode() const +{ + std::string body; + + std::string actorNameFmt = StringHelper::Sprintf("%%-%zus ", largestActorName + 1); + body = + StringHelper::Sprintf(actorNameFmt.c_str(), (ZNames::GetActorName(actorNum) + ",").c_str()); + + body += StringHelper::Sprintf("{ %6i, %6i, %6i }, ", posX, posY, posZ); + if (Globals::Instance->game == ZGame::MM_RETAIL) + body += StringHelper::Sprintf("{ SPAWN_ROT_FLAGS(%#5hX, 0x%04X)" + ", SPAWN_ROT_FLAGS(%#5hX, 0x%04X)" + ", SPAWN_ROT_FLAGS(%#5hX, 0x%04X) }, ", + (rotX >> 7) & 0b111111111, rotX & 0b1111111, + (rotY >> 7) & 0b111111111, rotY & 0b1111111, + (rotZ >> 7) & 0b111111111, rotZ & 0b1111111); + else + body += StringHelper::Sprintf("{ %#6hX, %#6hX, %#6hX }, ", rotX, rotY, rotZ); + body += StringHelper::Sprintf("0x%04X", params); + + return body; +} + +std::string ActorSpawnEntry::GetSourceTypeName() const +{ + return "ActorEntry"; +} + +size_t ActorSpawnEntry::GetRawDataSize() const +{ + return 16; +} + +uint16_t ActorSpawnEntry::GetActorId() const +{ + return actorNum; +} + +void ActorSpawnEntry::SetLargestActorName(size_t nameSize) +{ + largestActorName = nameSize; +} diff --git a/tools/ZAPD/ZAPD/ZActorList.h b/tools/ZAPD/ZAPD/ZActorList.h new file mode 100644 index 000000000..7cc63da2f --- /dev/null +++ b/tools/ZAPD/ZAPD/ZActorList.h @@ -0,0 +1,52 @@ +#pragma once + +#include "ZResource.h" + +class ActorSpawnEntry +{ +public: + uint16_t actorNum; + int16_t posX; + int16_t posY; + int16_t posZ; + uint16_t rotX; + uint16_t rotY; + uint16_t rotZ; + uint16_t params; + size_t largestActorName = 16; + + ActorSpawnEntry(const std::vector& rawData, uint32_t rawDataIndex); + + std::string GetBodySourceCode() const; + + std::string GetSourceTypeName() const; + size_t GetRawDataSize() const; + + uint16_t GetActorId() const; + void SetLargestActorName(size_t nameSize); +}; + +class ZActorList : public ZResource +{ +public: + std::vector actors; + uint32_t numActors = 0; + + ZActorList(ZFile* nParent); + + void ExtractFromBinary(offset_t nRawDataIndex, uint8_t nNumActors); + + void ParseXML(tinyxml2::XMLElement* reader) override; + void ParseRawData() override; + + Declaration* DeclareVar(const std::string& prefix, const std::string& bodyStr) override; + std::string GetBodySourceCode() const override; + + std::string GetSourceTypeName() const override; + ZResourceType GetResourceType() const override; + + size_t GetRawDataSize() const override; + +protected: + size_t GetActorListArraySize() const; +}; diff --git a/tools/ZAPD/ZAPD/ZArray.cpp b/tools/ZAPD/ZAPD/ZArray.cpp index d4f55d6c8..0a9797ba0 100644 --- a/tools/ZAPD/ZAPD/ZArray.cpp +++ b/tools/ZAPD/ZAPD/ZArray.cpp @@ -43,6 +43,7 @@ void ZArray::ParseXML(tinyxml2::XMLElement* reader) auto nodeMap = ZFile::GetNodeMap(); size_t childIndex = rawDataIndex; + resList.reserve(arrayCnt); for (size_t i = 0; i < arrayCnt; i++) { ZResource* res = nodeMap->at(childName)(parent); @@ -94,7 +95,7 @@ Declaration* ZArray::DeclareVar(const std::string& prefix, const std::string& bo std::string ZArray::GetBodySourceCode() const { - std::string output = ""; + std::string output; for (size_t i = 0; i < arrayCnt; i++) { @@ -107,6 +108,7 @@ std::string ZArray::GetBodySourceCode() const case ZResourceType::Scalar: case ZResourceType::Vertex: case ZResourceType::CollisionPoly: + case ZResourceType::SurfaceType: output += resList.at(i)->GetBodySourceCode(); break; @@ -125,7 +127,7 @@ std::string ZArray::GetBodySourceCode() const size_t ZArray::GetRawDataSize() const { size_t size = 0; - for (auto res : resList) + for (const auto res : resList) size += res->GetRawDataSize(); return size; } diff --git a/tools/ZAPD/ZAPD/ZCollision.cpp b/tools/ZAPD/ZAPD/ZCollision.cpp index 992332db7..5bd3d93a6 100644 --- a/tools/ZAPD/ZAPD/ZCollision.cpp +++ b/tools/ZAPD/ZAPD/ZCollision.cpp @@ -51,7 +51,7 @@ void ZCollisionHeader::ParseRawData() vertices.reserve(numVerts); polygons.reserve(numPolygons); - uint32_t currentPtr = vtxSegmentOffset; + offset_t currentPtr = vtxSegmentOffset; for (uint16_t i = 0; i < numVerts; i++) { @@ -61,7 +61,7 @@ void ZCollisionHeader::ParseRawData() currentPtr += vec.GetRawDataSize(); vertices.push_back(vec); } - + for (uint16_t i = 0; i < numPolygons; i++) { ZCollisionPoly poly(parent); @@ -72,14 +72,21 @@ void ZCollisionHeader::ParseRawData() uint16_t highestPolyType = 0; - for (ZCollisionPoly poly : polygons) + for (const ZCollisionPoly& poly : polygons) { if (poly.type > highestPolyType) highestPolyType = poly.type; } + for (uint16_t i = 0; i < highestPolyType + 1; i++) - polygonTypes.push_back( - BitConverter::ToUInt64BE(rawData, polyTypeDefSegmentOffset + (i * 8))); + { + ZSurfaceType surfaceType(parent); + surfaceType.SetRawDataIndex(polyTypeDefSegmentOffset + (i * 8)); + surfaceType.ParseRawData(); + polygonTypes.push_back(surfaceType); + } + // polygonTypes.push_back( + // BitConverter::ToUInt64BE(rawData, polyTypeDefSegmentOffset + (i * 8))); if (camDataAddress != SEGMENTED_NULL) { @@ -158,24 +165,22 @@ void ZCollisionHeader::DeclareReferences(const std::string& prefix) declaration += "\n"; } - parent->AddDeclarationArray( - polySegmentOffset, DeclarationAlignment::Align4, polygons.size() * 16, polygons[0].GetSourceTypeName().c_str(), - StringHelper::Sprintf("%sPolygons", auxName.c_str()), polygons.size(), declaration); + parent->AddDeclarationArray(polySegmentOffset, DeclarationAlignment::Align4, + polygons.size() * 16, polygons[0].GetSourceTypeName().c_str(), + StringHelper::Sprintf("%sPolygons", auxName.c_str()), + polygons.size(), declaration); } declaration.clear(); - for (size_t i = 0; i < polygonTypes.size(); i++) + for (const auto& polyType : polygonTypes) { - declaration += StringHelper::Sprintf("\t{ 0x%08lX, 0x%08lX },", polygonTypes[i] >> 32, - polygonTypes[i] & 0xFFFFFFFF); - - if (i < polygonTypes.size() - 1) - declaration += "\n"; + declaration += StringHelper::Sprintf("\t%s,", polyType.GetBodySourceCode().c_str()); } - if (polyTypeDefAddress != 0) + if (polyTypeDefAddress != SEGMENTED_NULL) parent->AddDeclarationArray(polyTypeDefSegmentOffset, DeclarationAlignment::Align4, - polygonTypes.size() * 8, "SurfaceType", + polygonTypes.size() * 8, + polygonTypes[0].GetSourceTypeName().c_str(), StringHelper::Sprintf("%sSurfaceType", auxName.c_str()), polygonTypes.size(), declaration); diff --git a/tools/ZAPD/ZAPD/ZCollision.h b/tools/ZAPD/ZAPD/ZCollision.h index 7481a8526..35c632144 100644 --- a/tools/ZAPD/ZAPD/ZCollision.h +++ b/tools/ZAPD/ZAPD/ZCollision.h @@ -1,22 +1,11 @@ #pragma once +#include "ZCollisionPoly.h" #include "ZFile.h" #include "ZResource.h" #include "ZRoom/ZRoom.h" +#include "ZSurfaceType.h" #include "ZVector.h" -#include "ZCollisionPoly.h" - -#if 0 -class PolygonEntry -{ -public: - uint16_t type; - uint16_t vtxA, vtxB, vtxC; - uint16_t a, b, c, d; - - PolygonEntry(const std::vector& rawData, uint32_t rawDataIndex); -}; -#endif class WaterBoxHeader { @@ -82,7 +71,7 @@ public: std::vector vertices; std::vector polygons; - std::vector polygonTypes; + std::vector polygonTypes; std::vector waterBoxes; CameraDataList* camData = nullptr; diff --git a/tools/ZAPD/ZAPD/ZCollisionPoly.cpp b/tools/ZAPD/ZAPD/ZCollisionPoly.cpp index eb2c14ab9..c4eb2d461 100644 --- a/tools/ZAPD/ZAPD/ZCollisionPoly.cpp +++ b/tools/ZAPD/ZAPD/ZCollisionPoly.cpp @@ -16,61 +16,63 @@ ZCollisionPoly::~ZCollisionPoly() void ZCollisionPoly::ParseRawData() { - const auto& rawData = parent->GetRawData(); - type = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0); - - vtxA = BitConverter::ToUInt16BE(rawData, rawDataIndex + 2); - vtxB = BitConverter::ToUInt16BE(rawData, rawDataIndex + 4); - vtxC = BitConverter::ToUInt16BE(rawData, rawDataIndex + 6); + const auto& rawData = parent->GetRawData(); + type = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0); - normX = BitConverter::ToUInt16BE(rawData, rawDataIndex + 8); - normY = BitConverter::ToUInt16BE(rawData, rawDataIndex + 10); - normZ = BitConverter::ToUInt16BE(rawData, rawDataIndex + 12); + vtxA = BitConverter::ToUInt16BE(rawData, rawDataIndex + 2); + vtxB = BitConverter::ToUInt16BE(rawData, rawDataIndex + 4); + vtxC = BitConverter::ToUInt16BE(rawData, rawDataIndex + 6); - dist = BitConverter::ToUInt16BE(rawData, rawDataIndex + 14); + normX = BitConverter::ToUInt16BE(rawData, rawDataIndex + 8); + normY = BitConverter::ToUInt16BE(rawData, rawDataIndex + 10); + normZ = BitConverter::ToUInt16BE(rawData, rawDataIndex + 12); + + dist = BitConverter::ToUInt16BE(rawData, rawDataIndex + 14); } void ZCollisionPoly::DeclareReferences(const std::string& prefix) { - std::string declaration; - std::string auxName = name; + std::string declaration; + std::string auxName = name; - if (name == "") - auxName = GetDefaultName(prefix); + if (name == "") + auxName = GetDefaultName(prefix); - parent->AddDeclaration(rawDataIndex, DeclarationAlignment::Align4,GetRawDataSize(), GetSourceTypeName(), name.c_str(),GetBodySourceCode()); + parent->AddDeclaration(rawDataIndex, DeclarationAlignment::Align4, GetRawDataSize(), + GetSourceTypeName(), name.c_str(), GetBodySourceCode()); } std::string ZCollisionPoly::GetBodySourceCode() const { - std::string declaration; + std::string declaration; - declaration += StringHelper::Sprintf("{0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X}", type, vtxA, vtxB, vtxC, normX, normY, normZ, dist); - return declaration; + declaration += + StringHelper::Sprintf("{0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X}", + type, vtxA, vtxB, vtxC, normX, normY, normZ, dist); + return declaration; } std::string ZCollisionPoly::GetDefaultName(const std::string& prefix) const { - return StringHelper::Sprintf("%sCollisionPoly_%06X", prefix.c_str(), rawDataIndex); + return StringHelper::Sprintf("%sCollisionPoly_%06X", prefix.c_str(), rawDataIndex); } - ZResourceType ZCollisionPoly::GetResourceType() const { - return ZResourceType::CollisionPoly; + return ZResourceType::CollisionPoly; } size_t ZCollisionPoly::GetRawDataSize() const { - return 16; + return 16; } std::string ZCollisionPoly::GetSourceTypeName() const { - return "CollisionPoly"; + return "CollisionPoly"; } bool ZCollisionPoly::DoesSupportArray() const { - return true; + return true; } \ No newline at end of file diff --git a/tools/ZAPD/ZAPD/ZCollisionPoly.h b/tools/ZAPD/ZAPD/ZCollisionPoly.h index 9596d2253..64b98ba1d 100644 --- a/tools/ZAPD/ZAPD/ZCollisionPoly.h +++ b/tools/ZAPD/ZAPD/ZCollisionPoly.h @@ -3,28 +3,27 @@ #include "ZFile.h" #include "ZResource.h" - class ZCollisionPoly : public ZResource { -public: - uint16_t type; +public: + uint16_t type; uint16_t vtxA, vtxB, vtxC; uint16_t normX, normY, normZ; - uint16_t dist; + uint16_t dist; - ZCollisionPoly(ZFile* nParent); - ~ZCollisionPoly(); + ZCollisionPoly(ZFile* nParent); + ~ZCollisionPoly(); - void ParseRawData() override; - void DeclareReferences(const std::string& prefix) override; + void ParseRawData() override; + void DeclareReferences(const std::string& prefix) override; - std::string GetBodySourceCode() const override; - std::string GetDefaultName(const std::string& prefix) const override; + std::string GetBodySourceCode() const override; + std::string GetDefaultName(const std::string& prefix) const override; - std::string GetSourceTypeName() const override; - ZResourceType GetResourceType() const override; + std::string GetSourceTypeName() const override; + ZResourceType GetResourceType() const override; - bool DoesSupportArray() const override; + bool DoesSupportArray() const override; - size_t GetRawDataSize() const override; + size_t GetRawDataSize() const override; }; \ No newline at end of file diff --git a/tools/ZAPD/ZAPD/ZCutscene.cpp b/tools/ZAPD/ZAPD/ZCutscene.cpp index 62f814b13..a3bfe0e07 100644 --- a/tools/ZAPD/ZAPD/ZCutscene.cpp +++ b/tools/ZAPD/ZAPD/ZCutscene.cpp @@ -76,7 +76,7 @@ void ZCutscene::ParseRawData() endFrame = BitConverter::ToInt32BE(rawData, rawDataIndex + 4); offset_t currentPtr = rawDataIndex + 8; - + commands.reserve(numCommands); for (int32_t i = 0; i < numCommands; i++) { uint32_t id = BitConverter::ToUInt32BE(rawData, currentPtr); diff --git a/tools/ZAPD/ZAPD/ZDisplayList.cpp b/tools/ZAPD/ZAPD/ZDisplayList.cpp index 5e9b1b205..3b50c1fd3 100644 --- a/tools/ZAPD/ZAPD/ZDisplayList.cpp +++ b/tools/ZAPD/ZAPD/ZDisplayList.cpp @@ -94,6 +94,7 @@ void ZDisplayList::ParseRawData() instructions.reserve(numInstructions); uint32_t ptr = rawDataIndex; + instructions.reserve(numInstructions); for (size_t i = 0; i < numInstructions; i++) { instructions.push_back(BitConverter::ToUInt64BE(rawData, ptr)); @@ -1839,7 +1840,7 @@ void ZDisplayList::DeclareReferences(const std::string& prefix) // Generate Vertex Declarations std::vector vtxKeys; - + vtxKeys.reserve(vertices.size()); for (auto& item : vertices) vtxKeys.push_back(item.first); diff --git a/tools/ZAPD/ZAPD/ZFile.cpp b/tools/ZAPD/ZAPD/ZFile.cpp index b81399e2a..09776505d 100644 --- a/tools/ZAPD/ZAPD/ZFile.cpp +++ b/tools/ZAPD/ZAPD/ZFile.cpp @@ -213,7 +213,14 @@ void ZFile::ParseXML(tinyxml2::XMLElement* reader, const std::string& filename) // Check for repeated attributes. if (offsetXml != nullptr) { - rawDataIndex = strtol(StringHelper::Split(offsetXml, "0x")[1].c_str(), NULL, 16); + std::string offsetStr = StringHelper::Split(offsetXml, "0x")[1]; + if (!StringHelper::HasOnlyHexDigits(offsetStr)) + { + HANDLE_ERROR(WarningType::InvalidXML, + StringHelper::Sprintf("Invalid offset %s entered", offsetStr.c_str()), + ""); + } + rawDataIndex = strtol(offsetStr.c_str(), NULL, 16); if (offsetSet.find(offsetXml) != offsetSet.end()) { @@ -420,6 +427,7 @@ ZResource* ZFile::FindResource(offset_t rawDataIndex) std::vector ZFile::GetResourcesOfType(ZResourceType resType) { std::vector resList; + resList.reserve(resources.size()); for (ZResource* res : resources) { @@ -776,10 +784,10 @@ void ZFile::GenerateSourceHeaderFiles() { OutputFormatter formatter; - std::string objectNameUpper = StringHelper::ToUpper(GetName()); + std::string guard = StringHelper::ToUpper(outName.stem().string()); - formatter.Write(StringHelper::Sprintf("#ifndef %s_H\n#define %s_H 1\n\n", - objectNameUpper.c_str(), objectNameUpper.c_str())); + formatter.Write( + StringHelper::Sprintf("#ifndef %s_H\n#define %s_H 1\n\n", guard.c_str(), guard.c_str())); for (ZResource* res : resources) { @@ -1169,6 +1177,7 @@ void ZFile::HandleUnaccountedData() uint32_t lastSize = 0; std::vector declsAddresses; + declsAddresses.reserve(declarations.size()); for (const auto& item : declarations) { declsAddresses.push_back(item.first); diff --git a/tools/ZAPD/ZAPD/ZFile.h b/tools/ZAPD/ZAPD/ZFile.h index 275e27f1b..e4980eb68 100644 --- a/tools/ZAPD/ZAPD/ZFile.h +++ b/tools/ZAPD/ZAPD/ZFile.h @@ -31,8 +31,8 @@ class ZFile { public: std::map declarations; - std::string defines; std::vector resources; + std::string defines; // Default to using virtual addresses uint32_t segment = 0x80; diff --git a/tools/ZAPD/ZAPD/ZPath.cpp b/tools/ZAPD/ZAPD/ZPath.cpp index e19513db3..0dac87a1b 100644 --- a/tools/ZAPD/ZAPD/ZPath.cpp +++ b/tools/ZAPD/ZAPD/ZPath.cpp @@ -35,6 +35,7 @@ void ZPath::ParseRawData() uint32_t currentPtr = rawDataIndex; + pathways.reserve(numPaths); for (size_t pathIndex = 0; pathIndex < numPaths; pathIndex++) { PathwayEntry path(parent); @@ -125,6 +126,7 @@ void PathwayEntry::ParseRawData() uint32_t currentPtr = GETSEGOFFSET(listSegmentAddress); + points.reserve(numPoints); for (int32_t i = 0; i < numPoints; i++) { ZVector vec(parent); diff --git a/tools/ZAPD/ZAPD/ZResource.h b/tools/ZAPD/ZAPD/ZResource.h index 35984679c..f97b259c6 100644 --- a/tools/ZAPD/ZAPD/ZResource.h +++ b/tools/ZAPD/ZAPD/ZResource.h @@ -25,6 +25,7 @@ class ZFile; enum class ZResourceType { Error, + ActorList, Animation, Array, AltHeader, @@ -46,6 +47,7 @@ enum class ZResourceType Scene, Skeleton, String, + SurfaceType, Symbol, Texture, TextureAnimation, diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorCutsceneList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorCutsceneList.cpp index 60391a9d1..15f2c6b45 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorCutsceneList.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorCutsceneList.cpp @@ -14,8 +14,9 @@ void SetActorCutsceneList::ParseRawData() { ZRoomCommand::ParseRawData(); int numCutscenes = cmdArg1; - int32_t currentPtr = segmentOffset; + offset_t currentPtr = segmentOffset; + cutscenes.reserve(numCutscenes); for (int32_t i = 0; i < numCutscenes; i++) { ActorCutsceneEntry entry(parent->GetRawData(), currentPtr); diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorList.cpp index 919d86f57..4d16f9377 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorList.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorList.cpp @@ -1,10 +1,10 @@ #include "SetActorList.h" +#include + #include "Globals.h" #include "Utils/BitConverter.h" #include "Utils/StringHelper.h" -#include "ZFile.h" -#include "ZRoom/ZNames.h" #include "ZRoom/ZRoom.h" SetActorList::SetActorList(ZFile* nParent) : ZRoomCommand(nParent) @@ -15,104 +15,38 @@ void SetActorList::ParseRawData() { ZRoomCommand::ParseRawData(); numActors = cmdArg1; + + actorList = new ZActorList(parent); + actorList->ExtractFromBinary(segmentOffset, numActors); } void SetActorList::DeclareReferences(const std::string& prefix) { - if (numActors != 0 && cmdArg2 != 0) + if (parent->HasDeclaration(segmentOffset)) { - std::string varName = - StringHelper::Sprintf("%sActorList_%06X", prefix.c_str(), segmentOffset); - parent->AddDeclarationPlaceholder(segmentOffset, varName); - } -} - -void SetActorList::ParseRawDataLate() -{ - ZRoomCommand::ParseRawDataLate(); - size_t actorsAmount = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 0x10; - - uint32_t currentPtr = segmentOffset; - - for (size_t i = 0; i < actorsAmount; i++) - { - ActorSpawnEntry entry(parent->GetRawData(), currentPtr); - - currentPtr += entry.GetRawDataSize(); - actors.push_back(entry); - } -} - -void SetActorList::DeclareReferencesLate(const std::string& prefix) -{ - if (actors.empty()) + delete actorList; + actorList = static_cast(parent->FindResource(segmentOffset)); + assert(actorList != nullptr); + assert(actorList->GetResourceType() == ZResourceType::ActorList); return; - - std::string declaration; - - size_t largestlength = 0; - for (const auto& entry : actors) - { - size_t actorNameLength = ZNames::GetActorName(entry.GetActorId()).size(); - if (actorNameLength > largestlength) - largestlength = actorNameLength; } - size_t index = 0; - for (auto& entry : actors) + if (actorList->GetName() == "") { - entry.SetLargestActorName(largestlength); - declaration += StringHelper::Sprintf("\t{ %s },", entry.GetBodySourceCode().c_str()); - - if (index < actors.size() - 1) - declaration += "\n"; - - index++; + actorList->SetName(actorList->GetDefaultName(prefix)); } - - const auto& entry = actors.front(); - - std::string varName = StringHelper::Sprintf("%sActorList_%06X", prefix.c_str(), segmentOffset); - parent->AddDeclarationArray(segmentOffset, DeclarationAlignment::Align4, - actors.size() * entry.GetRawDataSize(), entry.GetSourceTypeName(), - varName, GetActorListArraySize(), declaration); + actorList->DeclareVar(prefix, ""); + parent->AddResource(actorList); } std::string SetActorList::GetBodySourceCode() const { std::string listName; Globals::Instance->GetSegmentedPtrName(cmdArg2, parent, "ActorEntry", listName); - if (numActors != actors.size()) - { - printf("%s: numActors(%i) ~ actors(%li)\n", parent->GetName().c_str(), numActors, - actors.size()); - } + return StringHelper::Sprintf("SCENE_CMD_ACTOR_LIST(%i, %s)", numActors, listName.c_str()); } -size_t SetActorList::GetActorListArraySize() const -{ - size_t actorCount = 0; - - // Doing an else-if here so we only do the loop when the game is SW97. - // Actor 0x22 is removed from SW97, so we need to ensure that we don't increment the actor count - // for it. - if (Globals::Instance->game == ZGame::OOT_SW97) - { - actorCount = 0; - - for (const auto& entry : actors) - if (entry.GetActorId() != 0x22) - actorCount++; - } - else - { - actorCount = actors.size(); - } - - return actorCount; -} - std::string SetActorList::GetCommandCName() const { return "SCmdActorList"; @@ -122,58 +56,3 @@ RoomCommand SetActorList::GetRoomCommand() const { return RoomCommand::SetActorList; } - -ActorSpawnEntry::ActorSpawnEntry(const std::vector& rawData, uint32_t rawDataIndex) -{ - actorNum = BitConverter::ToInt16BE(rawData, rawDataIndex + 0); - posX = BitConverter::ToInt16BE(rawData, rawDataIndex + 2); - posY = BitConverter::ToInt16BE(rawData, rawDataIndex + 4); - posZ = BitConverter::ToInt16BE(rawData, rawDataIndex + 6); - rotX = BitConverter::ToUInt16BE(rawData, rawDataIndex + 8); - rotY = BitConverter::ToUInt16BE(rawData, rawDataIndex + 10); - rotZ = BitConverter::ToUInt16BE(rawData, rawDataIndex + 12); - initVar = BitConverter::ToInt16BE(rawData, rawDataIndex + 14); -} - -std::string ActorSpawnEntry::GetBodySourceCode() const -{ - std::string body; - - std::string actorNameFmt = StringHelper::Sprintf("%%-%zus ", largestActorName + 1); - body = - StringHelper::Sprintf(actorNameFmt.c_str(), (ZNames::GetActorName(actorNum) + ",").c_str()); - - body += StringHelper::Sprintf("{ %6i, %6i, %6i }, ", posX, posY, posZ); - if (Globals::Instance->game == ZGame::MM_RETAIL) - body += StringHelper::Sprintf("{ SPAWN_ROT_FLAGS(%#5hX, 0x%04X)" - ", SPAWN_ROT_FLAGS(%#5hX, 0x%04X)" - ", SPAWN_ROT_FLAGS(%#5hX, 0x%04X) }, ", - (rotX >> 7) & 0b111111111, rotX & 0b1111111, - (rotY >> 7) & 0b111111111, rotY & 0b1111111, - (rotZ >> 7) & 0b111111111, rotZ & 0b1111111); - else - body += StringHelper::Sprintf("{ %#6hX, %#6hX, %#6hX }, ", rotX, rotY, rotZ); - body += StringHelper::Sprintf("0x%04X", initVar); - - return body; -} - -std::string ActorSpawnEntry::GetSourceTypeName() const -{ - return "ActorEntry"; -} - -int32_t ActorSpawnEntry::GetRawDataSize() const -{ - return 16; -} - -uint16_t ActorSpawnEntry::GetActorId() const -{ - return actorNum; -} - -void ActorSpawnEntry::SetLargestActorName(size_t nameSize) -{ - largestActorName = nameSize; -} diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorList.h b/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorList.h index 7b341256c..9122c15bb 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorList.h +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorList.h @@ -1,45 +1,19 @@ #pragma once +#include "ZActorList.h" #include "ZRoom/ZRoomCommand.h" -class ActorSpawnEntry -{ -public: - uint16_t actorNum; - int16_t posX; - int16_t posY; - int16_t posZ; - uint16_t rotX; - uint16_t rotY; - uint16_t rotZ; - uint16_t initVar; - size_t largestActorName = 16; - - ActorSpawnEntry(const std::vector& rawData, uint32_t rawDataIndex); - - std::string GetBodySourceCode() const; - - std::string GetSourceTypeName() const; - int32_t GetRawDataSize() const; - - uint16_t GetActorId() const; - void SetLargestActorName(size_t nameSize); -}; - class SetActorList : public ZRoomCommand { public: - uint8_t numActors; - std::vector actors; + uint32_t numActors; + ZActorList* actorList = nullptr; SetActorList(ZFile* nParent); void ParseRawData() override; void DeclareReferences(const std::string& prefix) override; - void ParseRawDataLate() override; - void DeclareReferencesLate(const std::string& prefix) override; - std::string GetBodySourceCode() const override; RoomCommand GetRoomCommand() const override; diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetAlternateHeaders.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetAlternateHeaders.cpp index 629d4a0b0..1687b5462 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetAlternateHeaders.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetAlternateHeaders.cpp @@ -21,9 +21,10 @@ void SetAlternateHeaders::DeclareReferences([[maybe_unused]] const std::string& void SetAlternateHeaders::ParseRawDataLate() { - int numHeaders = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 4; + size_t numHeaders = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 4; - for (int32_t i = 0; i < numHeaders; i++) + headers.reserve(numHeaders); + for (uint32_t i = 0; i < numHeaders; i++) { int32_t address = BitConverter::ToInt32BE(parent->GetRawData(), segmentOffset + (i * 4)); headers.push_back(address); diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetCsCamera.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetCsCamera.cpp index 5cf0a3d03..ada1a1038 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetCsCamera.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetCsCamera.cpp @@ -18,6 +18,7 @@ void SetCsCamera::ParseRawData() uint32_t currentPtr = segmentOffset; int32_t numPoints = 0; + cameras.reserve(numCameras); for (int32_t i = 0; i < numCameras; i++) { CsCameraEntry entry(parent->GetRawData(), currentPtr); @@ -31,6 +32,7 @@ void SetCsCamera::ParseRawData() { uint32_t currentPtr = cameras.at(0).GetSegmentOffset(); + points.reserve(numPoints); for (int32_t i = 0; i < numPoints; i++) { ZVector vec(parent); diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetCutscenes.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetCutscenes.cpp index 3820203ef..51df68ca1 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetCutscenes.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetCutscenes.cpp @@ -20,6 +20,7 @@ void SetCutscenes::ParseRawData() { int32_t currentPtr = segmentOffset; + cutsceneEntries.reserve(numCutscenes); for (uint8_t i = 0; i < numCutscenes; i++) { CutsceneEntry entry(parent->GetRawData(), currentPtr); diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetEntranceList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetEntranceList.cpp index 8099bacf1..c92f56c4e 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetEntranceList.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetEntranceList.cpp @@ -24,10 +24,11 @@ void SetEntranceList::DeclareReferences([[maybe_unused]] const std::string& pref void SetEntranceList::ParseRawDataLate() { // Parse Entrances and Generate Declaration - int numEntrances = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 2; + uint32_t numEntrances = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 2; uint32_t currentPtr = segmentOffset; - for (int32_t i = 0; i < numEntrances; i++) + entrances.reserve(numEntrances); + for (uint32_t i = 0; i < numEntrances; i++) { EntranceEntry entry(parent->GetRawData(), currentPtr); entrances.push_back(entry); diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetExitList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetExitList.cpp index ddc4c5d43..80ccc6b05 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetExitList.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetExitList.cpp @@ -4,6 +4,7 @@ #include "Utils/BitConverter.h" #include "Utils/StringHelper.h" #include "ZFile.h" +#include "ZRoom/ZNames.h" #include "ZRoom/ZRoom.h" SetExitList::SetExitList(ZFile* nParent) : ZRoomCommand(nParent) @@ -23,10 +24,11 @@ void SetExitList::DeclareReferences([[maybe_unused]] const std::string& prefix) void SetExitList::ParseRawDataLate() { // Parse Entrances and Generate Declaration - int numEntrances = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 2; + uint32_t numEntrances = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 2; uint32_t currentPtr = segmentOffset; - for (int32_t i = 0; i < numEntrances; i++) + exits.reserve(numEntrances); + for (uint32_t i = 0; i < numEntrances; i++) { uint16_t exit = BitConverter::ToUInt16BE(parent->GetRawData(), currentPtr); exits.push_back(exit); @@ -43,7 +45,8 @@ void SetExitList::DeclareReferencesLate([[maybe_unused]] const std::string& pref for (size_t i = 0; i < exits.size(); i++) { - declaration += StringHelper::Sprintf(" 0x%04X,", exits.at(i)); + declaration += + StringHelper::Sprintf(" %s,", ZNames::GetEntranceName(exits[i]).c_str()); if (i + 1 < exits.size()) declaration += "\n"; } diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetLightList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetLightList.cpp index 2e023ff20..0d0f0ff79 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetLightList.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetLightList.cpp @@ -15,6 +15,8 @@ void SetLightList::ParseRawData() numLights = cmdArg1; int32_t currentPtr = segmentOffset; + + lights.reserve(this->numLights); for (int i = 0; i < this->numLights; i++) { LightInfo light(parent->GetRawData(), currentPtr); diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetLightingSettings.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetLightingSettings.cpp index 08cd83d14..ba5785cfc 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetLightingSettings.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetLightingSettings.cpp @@ -15,6 +15,7 @@ void SetLightingSettings::ParseRawData() ZRoomCommand::ParseRawData(); uint8_t numLights = cmdArg1; + settings.reserve(numLights); for (int i = 0; i < numLights; i++) settings.push_back(LightingSettings(parent->GetRawData(), segmentOffset + (i * 22))); } diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMesh.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMesh.cpp index ba0bbe2c2..89c8c8c88 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMesh.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMesh.cpp @@ -442,6 +442,8 @@ void PolygonType1::DeclareReferences(const std::string& prefix) { listAddress = Seg2Filespace(list, parent->baseAddress); uint32_t auxPtr = listAddress; + + multiList.reserve(count); for (size_t i = 0; i < count; ++i) { BgImage bg(false, prefix, auxPtr, parent); @@ -545,6 +547,8 @@ void PolygonType2::ParseRawData() end = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0x08); uint32_t currentPtr = GETSEGOFFSET(start); + + polyDLists.reserve(num); for (size_t i = 0; i < num; i++) { PolygonDlist entry(parent); diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapChests.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapChests.cpp index ec432b7d9..b1985f890 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapChests.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapChests.cpp @@ -15,8 +15,9 @@ void SetMinimapChests::ParseRawData() ZRoomCommand::ParseRawData(); int numChests = cmdArg1; - int32_t currentPtr = segmentOffset; + offset_t currentPtr = segmentOffset; + chests.reserve(numChests); for (int32_t i = 0; i < numChests; i++) { MinimapChest chest(parent->GetRawData(), currentPtr); diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapList.cpp index be5d8f15d..a5aac2a54 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapList.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapList.cpp @@ -15,10 +15,11 @@ void SetMinimapList::ParseRawData() ZRoomCommand::ParseRawData(); listSegmentAddr = BitConverter::ToInt32BE(parent->GetRawData(), segmentOffset); listSegmentOffset = GETSEGOFFSET(listSegmentAddr); - unk4 = BitConverter::ToInt32BE(parent->GetRawData(), segmentOffset + 4); + scale = BitConverter::ToInt16BE(parent->GetRawData(), segmentOffset + 4); - int32_t currentPtr = listSegmentOffset; + uint32_t currentPtr = listSegmentOffset; + minimaps.reserve(zRoom->roomCount); for (int32_t i = 0; i < zRoom->roomCount; i++) { MinimapEntry entry(parent->GetRawData(), currentPtr); @@ -53,7 +54,7 @@ void SetMinimapList::DeclareReferences(const std::string& prefix) { std::string listName; Globals::Instance->GetSegmentedPtrName(listSegmentAddr, parent, "MinimapEntry", listName); - std::string declaration = StringHelper::Sprintf("\n\t%s, 0x%08X\n", listName.c_str(), unk4); + std::string declaration = StringHelper::Sprintf("\n\t%s, %d\n", listName.c_str(), scale); parent->AddDeclaration( segmentOffset, DeclarationAlignment::Align4, 8, "MinimapList", diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapList.h b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapList.h index 5b18b3dd7..fcf7ad7a6 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapList.h +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapList.h @@ -35,5 +35,5 @@ public: private: segptr_t listSegmentAddr; uint32_t listSegmentOffset; - uint32_t unk4; + int16_t scale; }; diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetObjectList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetObjectList.cpp index fdd41e6cb..3048aa2d4 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetObjectList.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetObjectList.cpp @@ -17,6 +17,7 @@ void SetObjectList::ParseRawData() uint8_t objectCnt = parent->GetRawData().at(rawDataIndex + 1); uint32_t currentPtr = segmentOffset; + objects.reserve(objectCnt); for (uint8_t i = 0; i < objectCnt; i++) { uint16_t objectIndex = BitConverter::ToInt16BE(parent->GetRawData(), currentPtr); diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetRoomList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetRoomList.cpp index 20138dd4d..24969a14d 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetRoomList.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetRoomList.cpp @@ -69,6 +69,7 @@ void RomFile::ParseRawData() uint32_t currentPtr = rawDataIndex; + rooms.reserve(numRooms); for (int32_t i = 0; i < numRooms; i++) { RoomEntry entry(parent->GetRawData(), currentPtr); @@ -104,8 +105,9 @@ std::string RomFile::GetBodySourceCode() const if (!isFirst) declaration += "\n"; - declaration += StringHelper::Sprintf("\t{ _%sSegmentRomStart, _%sSegmentRomEnd },", - roomName.c_str(), roomName.c_str()); + declaration += StringHelper::Sprintf( + "\t{ (uintptr_t)_%sSegmentRomStart, (uintptr_t)_%sSegmentRomEnd },", + roomName.c_str(), roomName.c_str()); isFirst = false; } } diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetStartPositionList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetStartPositionList.cpp index f75b5e0d5..14ca16a96 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetStartPositionList.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetStartPositionList.cpp @@ -16,9 +16,10 @@ void SetStartPositionList::ParseRawData() ZRoomCommand::ParseRawData(); uint8_t numActors = cmdArg1; - uint32_t currentPtr = segmentOffset; + offset_t currentPtr = segmentOffset; - for (int32_t i = 0; i < numActors; i++) + actors.reserve(numActors); + for (uint32_t i = 0; i < numActors; i++) { actors.push_back(ActorSpawnEntry(parent->GetRawData(), currentPtr)); currentPtr += 16; diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetTransitionActorList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetTransitionActorList.cpp index a33d1c6e1..67e3e4e18 100644 --- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetTransitionActorList.cpp +++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetTransitionActorList.cpp @@ -17,6 +17,7 @@ void SetTransitionActorList::ParseRawData() int numActors = cmdArg1; uint32_t currentPtr = segmentOffset; + transitionActors.reserve(numActors); for (int32_t i = 0; i < numActors; i++) { TransitionActorEntry entry(parent->GetRawData(), currentPtr); diff --git a/tools/ZAPD/ZAPD/ZRoom/ZNames.h b/tools/ZAPD/ZAPD/ZRoom/ZNames.h index 94e08de0d..667407c36 100644 --- a/tools/ZAPD/ZAPD/ZRoom/ZNames.h +++ b/tools/ZAPD/ZAPD/ZRoom/ZNames.h @@ -12,17 +12,17 @@ public: { if (id >= Globals::Instance->cfg.objectList.size()) return StringHelper::Sprintf("0x%04X", id); - return Globals::Instance->cfg.objectList.at(id); + return Globals::Instance->cfg.objectList[id]; } - static std::string GetActorName(int32_t id) + static std::string GetActorName(uint16_t id) { switch (Globals::Instance->game) { case ZGame::OOT_RETAIL: case ZGame::OOT_SW97: if (id < ZNames::GetNumActors()) - return Globals::Instance->cfg.actorList.at(id); + return Globals::Instance->cfg.actorList[id]; else return StringHelper::Sprintf("0x%04X", id); case ZGame::MM_RETAIL: @@ -31,7 +31,7 @@ public: id &= 0xFFF; std::string name; if (id < ZNames::GetNumActors()) - name = Globals::Instance->cfg.actorList.at(id); + name = Globals::Instance->cfg.actorList[id]; else name = StringHelper::Sprintf("0x%04X", id); @@ -45,5 +45,20 @@ public: return ""; } - static int32_t GetNumActors() { return Globals::Instance->cfg.actorList.size(); } + static std::string GetEntranceName(uint16_t id) + { + if (ZNames::GetNumEntrances() == 0 || ZNames::GetNumSpecialEntrances() == 0) + return StringHelper::Sprintf("0x%04X", id); + + if (id < ZNames::GetNumEntrances()) + return Globals::Instance->cfg.entranceList[id]; + else if ((id >= 0x7FF9 && id <= 0x7FFF) && !((id - 0x7FF9U) > GetNumSpecialEntrances())) // Special entrances + return Globals::Instance->cfg.specialEntranceList[id - 0x7FF9]; + else + return StringHelper::Sprintf("0x%04X", id); + } + + static size_t GetNumActors() { return Globals::Instance->cfg.actorList.size(); } + static size_t GetNumEntrances() { return Globals::Instance->cfg.entranceList.size(); } + static size_t GetNumSpecialEntrances() { return Globals::Instance->cfg.specialEntranceList.size(); } }; diff --git a/tools/ZAPD/ZAPD/ZSkeleton.cpp b/tools/ZAPD/ZAPD/ZSkeleton.cpp index b3f7ce8c0..ca680c5f5 100644 --- a/tools/ZAPD/ZAPD/ZSkeleton.cpp +++ b/tools/ZAPD/ZAPD/ZSkeleton.cpp @@ -287,6 +287,8 @@ void ZLimbTable::ParseRawData() const auto& rawData = parent->GetRawData(); uint32_t ptr = rawDataIndex; + + limbsAddresses.reserve(count); for (size_t i = 0; i < count; i++) { limbsAddresses.push_back(BitConverter::ToUInt32BE(rawData, ptr)); @@ -301,7 +303,7 @@ void ZLimbTable::DeclareReferences(const std::string& prefix) varPrefix = prefix; ZResource::DeclareReferences(varPrefix); - + limbsReferences.reserve(count); for (size_t i = 0; i < count; i++) { segptr_t limbAddress = limbsAddresses[i]; diff --git a/tools/ZAPD/ZAPD/ZSurfaceType.cpp b/tools/ZAPD/ZAPD/ZSurfaceType.cpp new file mode 100644 index 000000000..27e73accc --- /dev/null +++ b/tools/ZAPD/ZAPD/ZSurfaceType.cpp @@ -0,0 +1,65 @@ +#include "ZSurfaceType.h" + +#include "Globals.h" +#include "Utils/BitConverter.h" +#include "Utils/StringHelper.h" + +REGISTER_ZFILENODE(SurfaceType, ZSurfaceType); + +ZSurfaceType::ZSurfaceType(ZFile* nParent) : ZResource(nParent) +{ +} + +ZSurfaceType::~ZSurfaceType() +{ +} + +void ZSurfaceType::ParseRawData() +{ + const auto& rawData = parent->GetRawData(); + + data[0] = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0); + data[1] = BitConverter::ToUInt32BE(rawData, rawDataIndex + 4); +} + +void ZSurfaceType::DeclareReferences(const std::string& prefix) +{ + std::string declaration; + std::string auxName = name; + + if (name == "") + auxName = GetDefaultName(prefix); + + parent->AddDeclaration(rawDataIndex, DeclarationAlignment::Align4, GetRawDataSize(), + GetSourceTypeName(), name.c_str(), GetBodySourceCode()); +} + +std::string ZSurfaceType::GetBodySourceCode() const +{ + return StringHelper::Sprintf("{0x%08X, 0x%08X}", data[0], data[1]); +} + +std::string ZSurfaceType::GetDefaultName(const std::string& prefix) const +{ + return StringHelper::Sprintf("%sSurfaceType_%06X", prefix.c_str(), rawDataIndex); +} + +ZResourceType ZSurfaceType::GetResourceType() const +{ + return ZResourceType::SurfaceType; +} + +size_t ZSurfaceType::GetRawDataSize() const +{ + return 8; +} + +std::string ZSurfaceType::GetSourceTypeName() const +{ + return "SurfaceType"; +} + +bool ZSurfaceType::DoesSupportArray() const +{ + return true; +} diff --git a/tools/ZAPD/ZAPD/ZSurfaceType.h b/tools/ZAPD/ZAPD/ZSurfaceType.h new file mode 100644 index 000000000..3bbddee8c --- /dev/null +++ b/tools/ZAPD/ZAPD/ZSurfaceType.h @@ -0,0 +1,27 @@ +#pragma once + +#include +#include "ZFile.h" +#include "ZResource.h" + +class ZSurfaceType : public ZResource +{ +public: + std::array data; + + ZSurfaceType(ZFile* nParent); + ~ZSurfaceType(); + + void ParseRawData() override; + void DeclareReferences(const std::string& prefix) override; + + std::string GetBodySourceCode() const override; + std::string GetDefaultName(const std::string& prefix) const override; + + std::string GetSourceTypeName() const override; + ZResourceType GetResourceType() const override; + + bool DoesSupportArray() const override; + + size_t GetRawDataSize() const override; +}; diff --git a/tools/ZAPD/ZAPD/ZTexture.cpp b/tools/ZAPD/ZAPD/ZTexture.cpp index a9cb53941..74b7c7d10 100644 --- a/tools/ZAPD/ZAPD/ZTexture.cpp +++ b/tools/ZAPD/ZAPD/ZTexture.cpp @@ -17,11 +17,15 @@ ZTexture::ZTexture(ZFile* nParent) : ZResource(nParent) width = 0; height = 0; dWordAligned = true; + splitTlut = false; RegisterRequiredAttribute("Width"); RegisterRequiredAttribute("Height"); RegisterRequiredAttribute("Format"); RegisterOptionalAttribute("TlutOffset"); + RegisterOptionalAttribute("ExternalTlut"); + RegisterOptionalAttribute("ExternalTlutOffset"); + RegisterOptionalAttribute("SplitTlut"); } void ZTexture::ExtractFromBinary(uint32_t nRawDataIndex, int32_t nWidth, int32_t nHeight, @@ -56,6 +60,7 @@ void ZTexture::ParseXML(tinyxml2::XMLElement* reader) std::string widthXml = registeredAttributes.at("Width").value; std::string heightXml = registeredAttributes.at("Height").value; + std::string SplitTlutXml = registeredAttributes.at("SplitTlut").value; if (!StringHelper::HasOnlyDigits(widthXml)) { @@ -72,6 +77,27 @@ void ZTexture::ParseXML(tinyxml2::XMLElement* reader) errorHeader, ""); } + if (!registeredAttributes.at("ExternalTlut").wasSet && + registeredAttributes.at("SplitTlut").wasSet) + { + std::string errorHeader = + StringHelper::Sprintf("SplitTlut set without using an external tlut"); + HANDLE_WARNING_RESOURCE(WarningType::InvalidAttributeValue, parent, this, rawDataIndex, + errorHeader, ""); + } + + if (!SplitTlutXml.empty()) + { + if (!tinyxml2::XMLUtil::ToBool(SplitTlutXml.c_str(), &splitTlut)) + { + std::string errorHeader = StringHelper::Sprintf( + "Invalid value passed to SplitTlut: '%s'. Valid values are true, false, 1, 0", + SplitTlutXml.c_str()); + HANDLE_ERROR_RESOURCE(WarningType::InvalidAttributeValue, parent, this, rawDataIndex, + errorHeader, ""); + } + } + width = StringHelper::StrToL(widthXml); height = StringHelper::StrToL(heightXml); @@ -145,6 +171,47 @@ void ZTexture::ParseRawData() } } +void ZTexture::ParseRawDataLate() +{ + if (registeredAttributes["ExternalTlut"].wasSet) + { + const std::string externPalette = registeredAttributes["ExternalTlut"].value; + for (const auto& file : Globals::Instance->files) + { + if (file->GetName() == externPalette) + { + offset_t palOffset = 0; + if (registeredAttributes["ExternalTlutOffset"].wasSet) + { + palOffset = + StringHelper::StrToL(registeredAttributes["ExternalTlutOffset"].value, 16); + } + else + { + HANDLE_WARNING_RESOURCE( + WarningType::MissingOffsets, parent, this, rawDataIndex, + StringHelper::Sprintf( + "No ExternalTlutOffset Given. Assuming offset of 0x0"), + ""); + } + for (const auto& res : file->resources) + { + if (res->GetRawDataIndex() == palOffset) + { + ZTexture* palette = (ZTexture*)res; + ZTexture tlutTemp(file); + + tlut = &tlutTemp; + tlut->ExtractFromBinary(palOffset, palette->width, palette->height, + TextureType::RGBA16bpp, true); + SetTlut(tlut); + } + } + } + } + } +} + void ZTexture::PrepareBitmapRGBA16() { textureData.InitEmptyRGBImage(width, height, true); @@ -871,7 +938,7 @@ void ZTexture::SetTlut(ZTexture* nTlut) assert(nTlut->isPalette); tlut = nTlut; - textureData.SetPalette(tlut->textureData); + textureData.SetPalette(tlut->textureData, splitTlut ? 128 : 0); } bool ZTexture::HasTlut() const diff --git a/tools/ZAPD/ZAPD/ZTexture.h b/tools/ZAPD/ZAPD/ZTexture.h index 6f2c49935..8cece3ff2 100644 --- a/tools/ZAPD/ZAPD/ZTexture.h +++ b/tools/ZAPD/ZAPD/ZTexture.h @@ -28,6 +28,7 @@ protected: std::vector textureDataRaw; // When reading from a PNG file. uint32_t tlutOffset = static_cast(-1); ZTexture* tlut = nullptr; + bool splitTlut; void PrepareBitmapRGBA16(); void PrepareBitmapRGBA32(); @@ -88,4 +89,5 @@ public: bool IsColorIndexed() const; void SetTlut(ZTexture* nTlut); bool HasTlut() const; + void ParseRawDataLate() override; }; diff --git a/tools/ZAPD/ZAPD/ZVector.cpp b/tools/ZAPD/ZAPD/ZVector.cpp index a5a059e35..607aac86d 100644 --- a/tools/ZAPD/ZAPD/ZVector.cpp +++ b/tools/ZAPD/ZAPD/ZVector.cpp @@ -48,7 +48,7 @@ void ZVector::ParseRawData() int32_t currentRawDataIndex = rawDataIndex; // TODO: this shouldn't be necessary. scalars.clear(); - + scalars.reserve(dimensions); for (uint32_t i = 0; i < dimensions; i++) { ZScalar scalar(parent); diff --git a/tools/ZAPD/ZAPDUtils/Utils/File.h b/tools/ZAPD/ZAPDUtils/Utils/File.h index 084152f79..7bc5d2950 100644 --- a/tools/ZAPD/ZAPDUtils/Utils/File.h +++ b/tools/ZAPD/ZAPDUtils/Utils/File.h @@ -33,6 +33,8 @@ public: static std::string ReadAllText(const fs::path& filePath) { std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); + if (!file.is_open()) + return ""; int32_t fileSize = (int32_t)file.tellg(); file.seekg(0); char* data = new char[fileSize + 1]; diff --git a/tools/ZAPD/ZAPDUtils/Utils/StringHelper.h b/tools/ZAPD/ZAPDUtils/Utils/StringHelper.h index 2289927d8..8560d6b09 100644 --- a/tools/ZAPD/ZAPDUtils/Utils/StringHelper.h +++ b/tools/ZAPD/ZAPDUtils/Utils/StringHelper.h @@ -106,6 +106,11 @@ public: return std::all_of(str.begin(), str.end(), ::isdigit); } + static bool HasOnlyHexDigits(const std::string& str) + { + return std::all_of(str.begin(), str.end(), ::isxdigit); + } + static std::string ToUpper(const std::string& str) { std::string buff = str; diff --git a/tools/ZAPD/ZAPDUtils/ZAPDUtils.vcxproj b/tools/ZAPD/ZAPDUtils/ZAPDUtils.vcxproj index c0ef260dd..4b91c2aeb 100644 --- a/tools/ZAPD/ZAPDUtils/ZAPDUtils.vcxproj +++ b/tools/ZAPD/ZAPDUtils/ZAPDUtils.vcxproj @@ -29,7 +29,7 @@ Application true - v143 + v142 Unicode @@ -42,7 +42,7 @@ StaticLibrary true - v143 + v142 MultiByte diff --git a/tools/ZAPD/docs/zapd_extraction_xml_reference.md b/tools/ZAPD/docs/zapd_extraction_xml_reference.md index 89ce33a6e..edbdf857f 100644 --- a/tools/ZAPD/docs/zapd_extraction_xml_reference.md +++ b/tools/ZAPD/docs/zapd_extraction_xml_reference.md @@ -149,12 +149,15 @@ u64 gCraterSmokeConeTex[] = { - Attributes: - - `Name`: Required. Suxffixed by `Tex`, unless it is a palette, in that case it is suffixed by `TLUT`. + - `Name`: Required. Suffixed by `Tex`, unless it is a palette, in that case it is suffixed by `TLUT`. - `OutName`: Required. The filename of the extracted `.png` file. - `Format`: Required. The format of the image. Valid values: `rgba32`, `rgba16`, `i4`, `i8`, `ia4`, `ia8`, `ia16`, `ci4` and `ci8`. - `Width`: Required. Width in pixels of the image. - `Height`: Required. Height in pixels of the image. - `TlutOffset`: Optional. Specifies the tlut's offset used by this texture. This attribute is only valid if `Format` is either `ci4` or `ci8`, otherwise an exception would be thrown. + - `ExternalTlut`: Optional. Specifies that the texture's tlut is in a different file. Takes the filename of the file that contains the tlut. + - `ExternalTlutOffset`: Optional. Specifies the offset in the `ExternalTlut` of the tlut for the given texture. + - `SplitTlut`: Optional. Specifies that the given texture should take from the upper half of the tlut. Takes a bool, i.e. one of `true`, `false`, `1`, `0`. The following is a list of the texture formats the Nintendo 64 supports, with their gfxdis names and ZAPD format names. @@ -185,7 +188,7 @@ If you want to know more about this formats, you can check [`gsDPLoadTextureBloc - Attributes: - - `Name`: Required. Suxffixed by `Background`. + - `Name`: Required. Suffixed by `Background`. - `OutName`: Required. The filename of the extracted `.jpg` file. ※ Explicit use of this tag isn't often necesary because it would probably be extracted automatically by another extracted element. You can use this to name them if you don't like the autogenerated name. @@ -213,7 +216,7 @@ u8 gFireTempleBlob_00CCC0[] = { - Attributes: - - `Name`: Required. Suxffixed by `Blob`. + - `Name`: Required. Suffixed by `Blob`. - `Size`: Required. Amount of bytes to extract. Hex. ※ We usually use blobs when we can't figure out the content's type of chunk of data. @@ -232,7 +235,7 @@ A.k.a. Display list, or Gfx. - Attributes: - - `Name`: Required. Suxffixed by `DL`. + - `Name`: Required. Suffixed by `DL`. ------------------------- @@ -246,7 +249,7 @@ A data type exclusive to Majora's Mask, that has scrolling, color changing, and - Attributes: - - `Name`: Required. Suxffixed by `TexAnim`. + - `Name`: Required. Suffixed by `TexAnim`. ------------------------- @@ -306,7 +309,7 @@ Like `Scene`s and `Room`s, `AltHeader`s is special too. It should always be decl - Attributes: - - `Name`: Required. Suxffixed by `AltHeader`. + - `Name`: Required. Suffixed by `AltHeader`. ------------------------- @@ -320,7 +323,7 @@ Like `Scene`s and `Room`s, `AltHeader`s is special too. It should always be decl - Attributes: - - `Name`: Required. Suxffixed by `Anim`. + - `Name`: Required. Suffixed by `Anim`. ------------------------- @@ -334,7 +337,7 @@ Like `Scene`s and `Room`s, `AltHeader`s is special too. It should always be decl - Attributes: - - `Name`: Required. Suxffixed by `Anim`. + - `Name`: Required. Suffixed by `Anim`. ------------------------- @@ -348,7 +351,7 @@ Like `Scene`s and `Room`s, `AltHeader`s is special too. It should always be decl - Attributes: - - `Name`: Required. Suxffixed by `Anim`. + - `Name`: Required. Suffixed by `Anim`. - `SkelOffset`: Required. Offset of the `CurveSkeleton` (I.e. a [`Skeleton`](#skeleton) resource with `Type="Curve"`) related to this animation. ------------------------- @@ -365,7 +368,7 @@ Useful only for the unused `object_human`'s animation data. - Attributes: - - `Name`: Required. Suxffixed by `Anim`. + - `Name`: Required. Suffixed by `Anim`. ------------------------- @@ -379,7 +382,7 @@ Useful only for the unused `object_human`'s animation data. - Attributes: - - `Name`: Required. Suxffixed by `Skel`. + - `Name`: Required. Suffixed by `Skel`. - `Type`: Required. Valid values: `Normal`, `Flex` and `Curve`. - `LimbType`: Required. Valid values: `Standard`, `LOD`, `Skin`, `Curve` and `Legacy`. - `EnumName`: Optional. The name of `typedef`'d limb enum. @@ -404,7 +407,7 @@ The required data is providing the `EnumName`, `LimbNone` and `LimbMax` attribut - Attributes: - - `Name`: Required. Suxffixed by `Skel`. + - `Name`: Required. Suffixed by `Skel`. - `LimbType`: Required. Valid values: `Standard`, `LOD`, `Skin`, `Curve` and `Legacy`. - `Count`: Required. Amount of limbs. Integer. - `EnumName`: Optional. The name of `typedef`'d limb enum. @@ -425,7 +428,7 @@ See [Skeleton](#skeleton) for info on the limb enum generation. - Attributes: - - `Name`: Required. Suxffixed by `Limb`. + - `Name`: Required. Suffixed by `Limb`. - `LimbType`: Required. Valid values: `Standard`, `LOD`, `Skin`, `Curve` and `Legacy`. - `EnumName`: Optional. The name used for this limb in the limbs enum. It must be either present in every limb or in none. @@ -468,7 +471,7 @@ extern u8 gJsjutanShadowTex[2048]; - Attributes: - - `Name`: Required. Suxffixed by `Col`. + - `Name`: Required. Suffixed by `Col`. ------------------------- @@ -490,7 +493,7 @@ u64 pad34F8 = { 0 }; - Attributes: - - `Name`: Required. Suxffixed by ~~`TBD`~~. + - `Name`: Required. Suffixed by ~~`TBD`~~. - `Type`: Required. Valid values: `s8`, `u8`, `x8`, `s16`, `u16`, `x16`, `s32`, `u32`, `x32`, `s64`, `u64`, `x64`, `f32` and `f64`. ※ Can be wrapped in an [`Array`](#array) tag. @@ -544,7 +547,7 @@ Vec3s D_04002040[24] = { - Attributes: - - `Name`: Required. Suxffixed by ~~`TBD`~~. + - `Name`: Required. Suffixed by ~~`TBD`~~. - `Type`: Required. Specifies the vector's type (`Vec3s`, `Vec3i` and `Vec3f`). Valid values: `s16`, `s32` and `f32`. - `Dimensions`: Required. The amount of dimensions of the vector. Valid values: `3`. @@ -564,7 +567,7 @@ Vec3s D_04002040[24] = { - Attributes: - - `Name`: Required. Suxffixed by `Vtx`. + - `Name`: Required. Suffixed by `Vtx`. ※ Can be wrapped in an [`Array`](#array) tag. @@ -580,7 +583,7 @@ Vec3s D_04002040[24] = { - Attributes: - - `Name`: Required. Suxffixed by `Mtx`. + - `Name`: Required. Suffixed by `Mtx`. ※ Explicit use of this tag isn't often necesary because it would probably be extracted automatically by another extracted element. @@ -596,7 +599,7 @@ Vec3s D_04002040[24] = { - Attributes: - - `Name`: Required. Suxffixed by `Cs`. + - `Name`: Required. Suffixed by `Cs`. ※ Explicit use of this tag isn't often necesary because it would probably be extracted automatically by another extracted element. @@ -633,7 +636,7 @@ Currently, only [`Pointer`](#pointer), [`Scalar`](#scalar), [`Vector`](#vector) - Attributes: - - `Name`: Required. Suxffixed by `Path`. + - `Name`: Required. Suffixed by `Path`. - `NumPaths`: Optional. The amount of paths contained in the array. It must be a positive integer. ------------------------- @@ -650,7 +653,7 @@ Allows the extraction of the specific data of the player animations which are fo - Attributes: - - `Name`: Required. Suxffixed by `AnimData`. + - `Name`: Required. Suffixed by `AnimData`. - `FrameCount`: Required. The length of the animation in frames. It must be a positive integer. ------------------------- diff --git a/tools/ZAPD/lib/elfio/elfio/elf_types.hpp b/tools/ZAPD/lib/elfio/elfio/elf_types.hpp deleted file mode 100644 index 63d025a58..000000000 --- a/tools/ZAPD/lib/elfio/elfio/elf_types.hpp +++ /dev/null @@ -1,851 +0,0 @@ -/* -Copyright (C) 2001-2015 by Serge Lamikhov-Center - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef ELFTYPES_H -#define ELFTYPES_H - -#ifndef ELFIO_NO_OWN_TYPES - #if !defined(ELFIO_NO_CSTDINT) && !defined(ELFIO_NO_INTTYPES) - #include - #else - typedef unsigned char uint8_t; - typedef signed char int8_t; - typedef unsigned short uint16_t; - typedef signed short int16_t; - #ifdef _MSC_VER - typedef unsigned __int32 uint32_t; - typedef signed __int32 int32_t; - typedef unsigned __int64 uint64_t; - typedef signed __int64 int64_t; - #else - typedef unsigned int uint32_t; - typedef signed int int32_t; - typedef unsigned long long uint64_t; - typedef signed long long int64_t; - #endif // _MSC_VER - #endif // ELFIO_NO_CSTDINT -#endif // ELFIO_NO_OWN_TYPES - -namespace ELFIO { - -// Attention! Platform depended definitions. -typedef uint16_t Elf_Half; -typedef uint32_t Elf_Word; -typedef int32_t Elf_Sword; -typedef uint64_t Elf_Xword; -typedef int64_t Elf_Sxword; - -typedef uint32_t Elf32_Addr; -typedef uint32_t Elf32_Off; -typedef uint64_t Elf64_Addr; -typedef uint64_t Elf64_Off; - -#define Elf32_Half Elf_Half -#define Elf64_Half Elf_Half -#define Elf32_Word Elf_Word -#define Elf64_Word Elf_Word -#define Elf32_Sword Elf_Sword -#define Elf64_Sword Elf_Sword - -/////////////////////// -// ELF Header Constants - -// File type -#define ET_NONE 0 -#define ET_REL 1 -#define ET_EXEC 2 -#define ET_DYN 3 -#define ET_CORE 4 -#define ET_LOOS 0xFE00 -#define ET_HIOS 0xFEFF -#define ET_LOPROC 0xFF00 -#define ET_HIPROC 0xFFFF - - -#define EM_NONE 0 // No machine -#define EM_M32 1 // AT&T WE 32100 -#define EM_SPARC 2 // SUN SPARC -#define EM_386 3 // Intel 80386 -#define EM_68K 4 // Motorola m68k family -#define EM_88K 5 // Motorola m88k family -#define EM_486 6 // Intel 80486// Reserved for future use -#define EM_860 7 // Intel 80860 -#define EM_MIPS 8 // MIPS R3000 (officially, big-endian only) -#define EM_S370 9 // IBM System/370 -#define EM_MIPS_RS3_LE 10 // MIPS R3000 little-endian (Oct 4 1999 Draft) Deprecated -#define EM_res011 11 // Reserved -#define EM_res012 12 // Reserved -#define EM_res013 13 // Reserved -#define EM_res014 14 // Reserved -#define EM_PARISC 15 // HPPA -#define EM_res016 16 // Reserved -#define EM_VPP550 17 // Fujitsu VPP500 -#define EM_SPARC32PLUS 18 // Sun's "v8plus" -#define EM_960 19 // Intel 80960 -#define EM_PPC 20 // PowerPC -#define EM_PPC64 21 // 64-bit PowerPC -#define EM_S390 22 // IBM S/390 -#define EM_SPU 23 // Sony/Toshiba/IBM SPU -#define EM_res024 24 // Reserved -#define EM_res025 25 // Reserved -#define EM_res026 26 // Reserved -#define EM_res027 27 // Reserved -#define EM_res028 28 // Reserved -#define EM_res029 29 // Reserved -#define EM_res030 30 // Reserved -#define EM_res031 31 // Reserved -#define EM_res032 32 // Reserved -#define EM_res033 33 // Reserved -#define EM_res034 34 // Reserved -#define EM_res035 35 // Reserved -#define EM_V800 36 // NEC V800 series -#define EM_FR20 37 // Fujitsu FR20 -#define EM_RH32 38 // TRW RH32 -#define EM_MCORE 39 // Motorola M*Core // May also be taken by Fujitsu MMA -#define EM_RCE 39 // Old name for MCore -#define EM_ARM 40 // ARM -#define EM_OLD_ALPHA 41 // Digital Alpha -#define EM_SH 42 // Renesas (formerly Hitachi) / SuperH SH -#define EM_SPARCV9 43 // SPARC v9 64-bit -#define EM_TRICORE 44 // Siemens Tricore embedded processor -#define EM_ARC 45 // ARC Cores -#define EM_H8_300 46 // Renesas (formerly Hitachi) H8/300 -#define EM_H8_300H 47 // Renesas (formerly Hitachi) H8/300H -#define EM_H8S 48 // Renesas (formerly Hitachi) H8S -#define EM_H8_500 49 // Renesas (formerly Hitachi) H8/500 -#define EM_IA_64 50 // Intel IA-64 Processor -#define EM_MIPS_X 51 // Stanford MIPS-X -#define EM_COLDFIRE 52 // Motorola Coldfire -#define EM_68HC12 53 // Motorola M68HC12 -#define EM_MMA 54 // Fujitsu Multimedia Accelerator -#define EM_PCP 55 // Siemens PCP -#define EM_NCPU 56 // Sony nCPU embedded RISC processor -#define EM_NDR1 57 // Denso NDR1 microprocesspr -#define EM_STARCORE 58 // Motorola Star*Core processor -#define EM_ME16 59 // Toyota ME16 processor -#define EM_ST100 60 // STMicroelectronics ST100 processor -#define EM_TINYJ 61 // Advanced Logic Corp. TinyJ embedded processor -#define EM_X86_64 62 // Advanced Micro Devices X86-64 processor -#define EM_PDSP 63 // Sony DSP Processor -#define EM_PDP10 64 // Digital Equipment Corp. PDP-10 -#define EM_PDP11 65 // Digital Equipment Corp. PDP-11 -#define EM_FX66 66 // Siemens FX66 microcontroller -#define EM_ST9PLUS 67 // STMicroelectronics ST9+ 8/16 bit microcontroller -#define EM_ST7 68 // STMicroelectronics ST7 8-bit microcontroller -#define EM_68HC16 69 // Motorola MC68HC16 Microcontroller -#define EM_68HC11 70 // Motorola MC68HC11 Microcontroller -#define EM_68HC08 71 // Motorola MC68HC08 Microcontroller -#define EM_68HC05 72 // Motorola MC68HC05 Microcontroller -#define EM_SVX 73 // Silicon Graphics SVx -#define EM_ST19 74 // STMicroelectronics ST19 8-bit cpu -#define EM_VAX 75 // Digital VAX -#define EM_CRIS 76 // Axis Communications 32-bit embedded processor -#define EM_JAVELIN 77 // Infineon Technologies 32-bit embedded cpu -#define EM_FIREPATH 78 // Element 14 64-bit DSP processor -#define EM_ZSP 79 // LSI Logic's 16-bit DSP processor -#define EM_MMIX 80 // Donald Knuth's educational 64-bit processor -#define EM_HUANY 81 // Harvard's machine-independent format -#define EM_PRISM 82 // SiTera Prism -#define EM_AVR 83 // Atmel AVR 8-bit microcontroller -#define EM_FR30 84 // Fujitsu FR30 -#define EM_D10V 85 // Mitsubishi D10V -#define EM_D30V 86 // Mitsubishi D30V -#define EM_V850 87 // NEC v850 -#define EM_M32R 88 // Renesas M32R (formerly Mitsubishi M32R) -#define EM_MN10300 89 // Matsushita MN10300 -#define EM_MN10200 90 // Matsushita MN10200 -#define EM_PJ 91 // picoJava -#define EM_OPENRISC 92 // OpenRISC 32-bit embedded processor -#define EM_ARC_A5 93 // ARC Cores Tangent-A5 -#define EM_XTENSA 94 // Tensilica Xtensa Architecture -#define EM_VIDEOCORE 95 // Alphamosaic VideoCore processor -#define EM_TMM_GPP 96 // Thompson Multimedia General Purpose Processor -#define EM_NS32K 97 // National Semiconductor 32000 series -#define EM_TPC 98 // Tenor Network TPC processor -#define EM_SNP1K 99 // Trebia SNP 1000 processor -#define EM_ST200 100 // STMicroelectronics ST200 microcontroller -#define EM_IP2K 101 // Ubicom IP2022 micro controller -#define EM_MAX 102 // MAX Processor -#define EM_CR 103 // National Semiconductor CompactRISC -#define EM_F2MC16 104 // Fujitsu F2MC16 -#define EM_MSP430 105 // TI msp430 micro controller -#define EM_BLACKFIN 106 // ADI Blackfin -#define EM_SE_C33 107 // S1C33 Family of Seiko Epson processors -#define EM_SEP 108 // Sharp embedded microprocessor -#define EM_ARCA 109 // Arca RISC Microprocessor -#define EM_UNICORE 110 // Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University -#define EM_EXCESS 111 // eXcess: 16/32/64-bit configurable embedded CPU -#define EM_DXP 112 // Icera Semiconductor Inc. Deep Execution Processor -#define EM_ALTERA_NIOS2 113 // Altera Nios II soft-core processor -#define EM_CRX 114 // National Semiconductor CRX -#define EM_XGATE 115 // Motorola XGATE embedded processor -#define EM_C166 116 // Infineon C16x/XC16x processor -#define EM_M16C 117 // Renesas M16C series microprocessors -#define EM_DSPIC30F 118 // Microchip Technology dsPIC30F Digital Signal Controller -#define EM_CE 119 // Freescale Communication Engine RISC core -#define EM_M32C 120 // Renesas M32C series microprocessors -#define EM_res121 121 // Reserved -#define EM_res122 122 // Reserved -#define EM_res123 123 // Reserved -#define EM_res124 124 // Reserved -#define EM_res125 125 // Reserved -#define EM_res126 126 // Reserved -#define EM_res127 127 // Reserved -#define EM_res128 128 // Reserved -#define EM_res129 129 // Reserved -#define EM_res130 130 // Reserved -#define EM_TSK3000 131 // Altium TSK3000 core -#define EM_RS08 132 // Freescale RS08 embedded processor -#define EM_res133 133 // Reserved -#define EM_ECOG2 134 // Cyan Technology eCOG2 microprocessor -#define EM_SCORE 135 // Sunplus Score -#define EM_SCORE7 135 // Sunplus S+core7 RISC processor -#define EM_DSP24 136 // New Japan Radio (NJR) 24-bit DSP Processor -#define EM_VIDEOCORE3 137 // Broadcom VideoCore III processor -#define EM_LATTICEMICO32 138 // RISC processor for Lattice FPGA architecture -#define EM_SE_C17 139 // Seiko Epson C17 family -#define EM_TI_C6000 140 // Texas Instruments TMS320C6000 DSP family -#define EM_TI_C2000 141 // Texas Instruments TMS320C2000 DSP family -#define EM_TI_C5500 142 // Texas Instruments TMS320C55x DSP family -#define EM_res143 143 // Reserved -#define EM_res144 144 // Reserved -#define EM_res145 145 // Reserved -#define EM_res146 146 // Reserved -#define EM_res147 147 // Reserved -#define EM_res148 148 // Reserved -#define EM_res149 149 // Reserved -#define EM_res150 150 // Reserved -#define EM_res151 151 // Reserved -#define EM_res152 152 // Reserved -#define EM_res153 153 // Reserved -#define EM_res154 154 // Reserved -#define EM_res155 155 // Reserved -#define EM_res156 156 // Reserved -#define EM_res157 157 // Reserved -#define EM_res158 158 // Reserved -#define EM_res159 159 // Reserved -#define EM_MMDSP_PLUS 160 // STMicroelectronics 64bit VLIW Data Signal Processor -#define EM_CYPRESS_M8C 161 // Cypress M8C microprocessor -#define EM_R32C 162 // Renesas R32C series microprocessors -#define EM_TRIMEDIA 163 // NXP Semiconductors TriMedia architecture family -#define EM_QDSP6 164 // QUALCOMM DSP6 Processor -#define EM_8051 165 // Intel 8051 and variants -#define EM_STXP7X 166 // STMicroelectronics STxP7x family -#define EM_NDS32 167 // Andes Technology compact code size embedded RISC processor family -#define EM_ECOG1 168 // Cyan Technology eCOG1X family -#define EM_ECOG1X 168 // Cyan Technology eCOG1X family -#define EM_MAXQ30 169 // Dallas Semiconductor MAXQ30 Core Micro-controllers -#define EM_XIMO16 170 // New Japan Radio (NJR) 16-bit DSP Processor -#define EM_MANIK 171 // M2000 Reconfigurable RISC Microprocessor -#define EM_CRAYNV2 172 // Cray Inc. NV2 vector architecture -#define EM_RX 173 // Renesas RX family -#define EM_METAG 174 // Imagination Technologies META processor architecture -#define EM_MCST_ELBRUS 175 // MCST Elbrus general purpose hardware architecture -#define EM_ECOG16 176 // Cyan Technology eCOG16 family -#define EM_CR16 177 // National Semiconductor CompactRISC 16-bit processor -#define EM_ETPU 178 // Freescale Extended Time Processing Unit -#define EM_SLE9X 179 // Infineon Technologies SLE9X core -#define EM_L1OM 180 // Intel L1OM -#define EM_INTEL181 181 // Reserved by Intel -#define EM_INTEL182 182 // Reserved by Intel -#define EM_res183 183 // Reserved by ARM -#define EM_res184 184 // Reserved by ARM -#define EM_AVR32 185 // Atmel Corporation 32-bit microprocessor family -#define EM_STM8 186 // STMicroeletronics STM8 8-bit microcontroller -#define EM_TILE64 187 // Tilera TILE64 multicore architecture family -#define EM_TILEPRO 188 // Tilera TILEPro multicore architecture family -#define EM_MICROBLAZE 189 // Xilinx MicroBlaze 32-bit RISC soft processor core -#define EM_CUDA 190 // NVIDIA CUDA architecture -#define EM_TILEGX 191 // Tilera TILE-Gx multicore architecture family -#define EM_CLOUDSHIELD 192 // CloudShield architecture family -#define EM_COREA_1ST 193 // KIPO-KAIST Core-A 1st generation processor family -#define EM_COREA_2ND 194 // KIPO-KAIST Core-A 2nd generation processor family -#define EM_ARC_COMPACT2 195 // Synopsys ARCompact V2 -#define EM_OPEN8 196 // Open8 8-bit RISC soft processor core -#define EM_RL78 197 // Renesas RL78 family -#define EM_VIDEOCORE5 198 // Broadcom VideoCore V processor -#define EM_78KOR 199 // Renesas 78KOR family -#define EM_56800EX 200 // Freescale 56800EX Digital Signal Controller (DSC) -#define EM_BA1 201 // Beyond BA1 CPU architecture -#define EM_BA2 202 // Beyond BA2 CPU architecture -#define EM_XCORE 203 // XMOS xCORE processor family -#define EM_MCHP_PIC 204 // Microchip 8-bit PIC(r) family -#define EM_INTEL205 205 // Reserved by Intel -#define EM_INTEL206 206 // Reserved by Intel -#define EM_INTEL207 207 // Reserved by Intel -#define EM_INTEL208 208 // Reserved by Intel -#define EM_INTEL209 209 // Reserved by Intel -#define EM_KM32 210 // KM211 KM32 32-bit processor -#define EM_KMX32 211 // KM211 KMX32 32-bit processor -#define EM_KMX16 212 // KM211 KMX16 16-bit processor -#define EM_KMX8 213 // KM211 KMX8 8-bit processor -#define EM_KVARC 214 // KM211 KVARC processor -#define EM_CDP 215 // Paneve CDP architecture family -#define EM_COGE 216 // Cognitive Smart Memory Processor -#define EM_COOL 217 // iCelero CoolEngine -#define EM_NORC 218 // Nanoradio Optimized RISC -#define EM_CSR_KALIMBA 219 // CSR Kalimba architecture family -#define EM_Z80 220 // Zilog Z80 -#define EM_VISIUM 221 // Controls and Data Services VISIUMcore processor -#define EM_FT32 222 // FTDI Chip FT32 high performance 32-bit RISC architecture -#define EM_MOXIE 223 // Moxie processor family -#define EM_AMDGPU 224 // AMD GPU architecture -#define EM_RISCV 243 // RISC-V -#define EM_LANAI 244 // Lanai processor -#define EM_CEVA 245 // CEVA Processor Architecture Family -#define EM_CEVA_X2 246 // CEVA X2 Processor Family -#define EM_BPF 247 // Linux BPF – in-kernel virtual machine - -// File version -#define EV_NONE 0 -#define EV_CURRENT 1 - -// Identification index -#define EI_MAG0 0 -#define EI_MAG1 1 -#define EI_MAG2 2 -#define EI_MAG3 3 -#define EI_CLASS 4 -#define EI_DATA 5 -#define EI_VERSION 6 -#define EI_OSABI 7 -#define EI_ABIVERSION 8 -#define EI_PAD 9 -#define EI_NIDENT 16 - -// Magic number -#define ELFMAG0 0x7F -#define ELFMAG1 'E' -#define ELFMAG2 'L' -#define ELFMAG3 'F' - -// File class -#define ELFCLASSNONE 0 -#define ELFCLASS32 1 -#define ELFCLASS64 2 - -// Encoding -#define ELFDATANONE 0 -#define ELFDATA2LSB 1 -#define ELFDATA2MSB 2 - -// OS extensions -#define ELFOSABI_NONE 0 // No extensions or unspecified -#define ELFOSABI_HPUX 1 // Hewlett-Packard HP-UX -#define ELFOSABI_NETBSD 2 // NetBSD -#define ELFOSABI_LINUX 3 // Linux -#define ELFOSABI_SOLARIS 6 // Sun Solaris -#define ELFOSABI_AIX 7 // AIX -#define ELFOSABI_IRIX 8 // IRIX -#define ELFOSABI_FREEBSD 9 // FreeBSD -#define ELFOSABI_TRU64 10 // Compaq TRU64 UNIX -#define ELFOSABI_MODESTO 11 // Novell Modesto -#define ELFOSABI_OPENBSD 12 // Open BSD -#define ELFOSABI_OPENVMS 13 // Open VMS -#define ELFOSABI_NSK 14 // Hewlett-Packard Non-Stop Kernel -#define ELFOSABI_AROS 15 // Amiga Research OS -#define ELFOSABI_FENIXOS 16 // The FenixOS highly scalable multi-core OS -// 64-255 Architecture-specific value range -#define ELFOSABI_AMDGPU_HSA 64 // AMDGPU OS for HSA compatible compute - // kernels. -#define ELFOSABI_AMDGPU_PAL 65 // AMDGPU OS for AMD PAL compatible graphics - // shaders and compute kernels. -#define ELFOSABI_AMDGPU_MESA3D 66 // AMDGPU OS for Mesa3D compatible graphics - // shaders and compute kernels. - - -// AMDGPU specific e_flags -#define EF_AMDGPU_MACH 0x0ff // AMDGPU processor selection mask. -#define EF_AMDGPU_XNACK 0x100 // Indicates if the XNACK target feature is - // enabled for all code contained in the ELF. -// AMDGPU processors -#define EF_AMDGPU_MACH_NONE 0x000 // Unspecified processor. -#define EF_AMDGPU_MACH_R600_R600 0x001 -#define EF_AMDGPU_MACH_R600_R630 0x002 -#define EF_AMDGPU_MACH_R600_RS880 0x003 -#define EF_AMDGPU_MACH_R600_RV670 0x004 -#define EF_AMDGPU_MACH_R600_RV710 0x005 -#define EF_AMDGPU_MACH_R600_RV730 0x006 -#define EF_AMDGPU_MACH_R600_RV770 0x007 -#define EF_AMDGPU_MACH_R600_CEDAR 0x008 -#define EF_AMDGPU_MACH_R600_CYPRESS 0x009 -#define EF_AMDGPU_MACH_R600_JUNIPER 0x00a -#define EF_AMDGPU_MACH_R600_REDWOOD 0x00b -#define EF_AMDGPU_MACH_R600_SUMO 0x00c -#define EF_AMDGPU_MACH_R600_BARTS 0x00d -#define EF_AMDGPU_MACH_R600_CAICOS 0x00e -#define EF_AMDGPU_MACH_R600_CAYMAN 0x00f -#define EF_AMDGPU_MACH_R600_TURKS 0x010 -#define EF_AMDGPU_MACH_R600_RESERVED_FIRST 0x011 -#define EF_AMDGPU_MACH_R600_RESERVED_LAST 0x01f -#define EF_AMDGPU_MACH_R600_FIRST EF_AMDGPU_MACH_R600_R600 -#define EF_AMDGPU_MACH_R600_LAST EF_AMDGPU_MACH_R600_TURKS -#define EF_AMDGPU_MACH_AMDGCN_GFX600 0x020 -#define EF_AMDGPU_MACH_AMDGCN_GFX601 0x021 -#define EF_AMDGPU_MACH_AMDGCN_GFX700 0x022 -#define EF_AMDGPU_MACH_AMDGCN_GFX701 0x023 -#define EF_AMDGPU_MACH_AMDGCN_GFX702 0x024 -#define EF_AMDGPU_MACH_AMDGCN_GFX703 0x025 -#define EF_AMDGPU_MACH_AMDGCN_GFX704 0x026 -#define EF_AMDGPU_MACH_AMDGCN_GFX801 0x028 -#define EF_AMDGPU_MACH_AMDGCN_GFX802 0x029 -#define EF_AMDGPU_MACH_AMDGCN_GFX803 0x02a -#define EF_AMDGPU_MACH_AMDGCN_GFX810 0x02b -#define EF_AMDGPU_MACH_AMDGCN_GFX900 0x02c -#define EF_AMDGPU_MACH_AMDGCN_GFX902 0x02d -#define EF_AMDGPU_MACH_AMDGCN_GFX904 0x02e -#define EF_AMDGPU_MACH_AMDGCN_GFX906 0x02f -#define EF_AMDGPU_MACH_AMDGCN_RESERVED0 0x027 -#define EF_AMDGPU_MACH_AMDGCN_RESERVED1 0x030 -#define EF_AMDGPU_MACH_AMDGCN_FIRST EF_AMDGPU_MACH_AMDGCN_GFX600 -#define EF_AMDGPU_MACH_AMDGCN_LAST EF_AMDGPU_MACH_AMDGCN_GFX906 - -///////////////////// -// Sections constants - -// Section indexes -#define SHN_UNDEF 0 -#define SHN_LORESERVE 0xFF00 -#define SHN_LOPROC 0xFF00 -#define SHN_HIPROC 0xFF1F -#define SHN_LOOS 0xFF20 -#define SHN_HIOS 0xFF3F -#define SHN_ABS 0xFFF1 -#define SHN_COMMON 0xFFF2 -#define SHN_XINDEX 0xFFFF -#define SHN_HIRESERVE 0xFFFF - -// Section types -#define SHT_NULL 0 -#define SHT_PROGBITS 1 -#define SHT_SYMTAB 2 -#define SHT_STRTAB 3 -#define SHT_RELA 4 -#define SHT_HASH 5 -#define SHT_DYNAMIC 6 -#define SHT_NOTE 7 -#define SHT_NOBITS 8 -#define SHT_REL 9 -#define SHT_SHLIB 10 -#define SHT_DYNSYM 11 -#define SHT_INIT_ARRAY 14 -#define SHT_FINI_ARRAY 15 -#define SHT_PREINIT_ARRAY 16 -#define SHT_GROUP 17 -#define SHT_SYMTAB_SHNDX 18 -#define SHT_LOOS 0x60000000 -#define SHT_HIOS 0x6fffffff -#define SHT_LOPROC 0x70000000 -#define SHT_HIPROC 0x7FFFFFFF -#define SHT_LOUSER 0x80000000 -#define SHT_HIUSER 0xFFFFFFFF - -// Section attribute flags -#define SHF_WRITE 0x1 -#define SHF_ALLOC 0x2 -#define SHF_EXECINSTR 0x4 -#define SHF_MERGE 0x10 -#define SHF_STRINGS 0x20 -#define SHF_INFO_LINK 0x40 -#define SHF_LINK_ORDER 0x80 -#define SHF_OS_NONCONFORMING 0x100 -#define SHF_GROUP 0x200 -#define SHF_TLS 0x400 -#define SHF_MASKOS 0x0ff00000 -#define SHF_MASKPROC 0xF0000000 - -// Section group flags -#define GRP_COMDAT 0x1 -#define GRP_MASKOS 0x0ff00000 -#define GRP_MASKPROC 0xf0000000 - -// Symbol binding -#define STB_LOCAL 0 -#define STB_GLOBAL 1 -#define STB_WEAK 2 -#define STB_LOOS 10 -#define STB_HIOS 12 -#define STB_MULTIDEF 13 -#define STB_LOPROC 13 -#define STB_HIPROC 15 - -// Note types -#define NT_AMDGPU_METADATA 1 -#define NT_AMD_AMDGPU_HSA_METADATA 10 -#define NT_AMD_AMDGPU_ISA 11 -#define NT_AMD_AMDGPU_PAL_METADATA 12 - -// Symbol types -#define STT_NOTYPE 0 -#define STT_OBJECT 1 -#define STT_FUNC 2 -#define STT_SECTION 3 -#define STT_FILE 4 -#define STT_COMMON 5 -#define STT_TLS 6 -#define STT_LOOS 10 -#define STT_AMDGPU_HSA_KERNEL 10 -#define STT_HIOS 12 -#define STT_LOPROC 13 -#define STT_HIPROC 15 - -// Symbol visibility -#define STV_DEFAULT 0 -#define STV_INTERNAL 1 -#define STV_HIDDEN 2 -#define STV_PROTECTED 3 - -// Undefined name -#define STN_UNDEF 0 - -// Relocation types -#define R_386_NONE 0 -#define R_X86_64_NONE 0 -#define R_AMDGPU_NONE 0 -#define R_386_32 1 -#define R_X86_64_64 1 -#define R_AMDGPU_ABS32_LO 1 -#define R_386_PC32 2 -#define R_X86_64_PC32 2 -#define R_AMDGPU_ABS32_HI 2 -#define R_386_GOT32 3 -#define R_X86_64_GOT32 3 -#define R_AMDGPU_ABS64 3 -#define R_386_PLT32 4 -#define R_X86_64_PLT32 4 -#define R_AMDGPU_REL32 4 -#define R_386_COPY 5 -#define R_X86_64_COPY 5 -#define R_AMDGPU_REL64 5 -#define R_386_GLOB_DAT 6 -#define R_X86_64_GLOB_DAT 6 -#define R_AMDGPU_ABS32 6 -#define R_386_JMP_SLOT 7 -#define R_X86_64_JUMP_SLOT 7 -#define R_AMDGPU_GOTPCREL 7 -#define R_386_RELATIVE 8 -#define R_X86_64_RELATIVE 8 -#define R_AMDGPU_GOTPCREL32_LO 8 -#define R_386_GOTOFF 9 -#define R_X86_64_GOTPCREL 9 -#define R_AMDGPU_GOTPCREL32_HI 9 -#define R_386_GOTPC 10 -#define R_X86_64_32 10 -#define R_AMDGPU_REL32_LO 10 -#define R_386_32PLT 11 -#define R_X86_64_32S 11 -#define R_AMDGPU_REL32_HI 11 -#define R_X86_64_16 12 -#define R_X86_64_PC16 13 -#define R_AMDGPU_RELATIVE64 13 -#define R_386_TLS_TPOFF 14 -#define R_X86_64_8 14 -#define R_386_TLS_IE 15 -#define R_X86_64_PC8 15 -#define R_386_TLS_GOTIE 16 -#define R_X86_64_DTPMOD64 16 -#define R_386_TLS_LE 17 -#define R_X86_64_DTPOFF64 17 -#define R_386_TLS_GD 18 -#define R_X86_64_TPOFF64 18 -#define R_386_TLS_LDM 19 -#define R_X86_64_TLSGD 19 -#define R_386_16 20 -#define R_X86_64_TLSLD 20 -#define R_386_PC16 21 -#define R_X86_64_DTPOFF32 21 -#define R_386_8 22 -#define R_X86_64_GOTTPOFF 22 -#define R_386_PC8 23 -#define R_X86_64_TPOFF32 23 -#define R_386_TLS_GD_32 24 -#define R_X86_64_PC64 24 -#define R_386_TLS_GD_PUSH 25 -#define R_X86_64_GOTOFF64 25 -#define R_386_TLS_GD_CALL 26 -#define R_X86_64_GOTPC32 26 -#define R_386_TLS_GD_POP 27 -#define R_X86_64_GOT64 27 -#define R_386_TLS_LDM_32 28 -#define R_X86_64_GOTPCREL64 28 -#define R_386_TLS_LDM_PUSH 29 -#define R_X86_64_GOTPC64 29 -#define R_386_TLS_LDM_CALL 30 -#define R_X86_64_GOTPLT64 30 -#define R_386_TLS_LDM_POP 31 -#define R_X86_64_PLTOFF64 31 -#define R_386_TLS_LDO_32 32 -#define R_386_TLS_IE_32 33 -#define R_386_TLS_LE_32 34 -#define R_X86_64_GOTPC32_TLSDESC 34 -#define R_386_TLS_DTPMOD32 35 -#define R_X86_64_TLSDESC_CALL 35 -#define R_386_TLS_DTPOFF32 36 -#define R_X86_64_TLSDESC 36 -#define R_386_TLS_TPOFF32 37 -#define R_X86_64_IRELATIVE 37 -#define R_386_SIZE32 38 -#define R_386_TLS_GOTDESC 39 -#define R_386_TLS_DESC_CALL 40 -#define R_386_TLS_DESC 41 -#define R_386_IRELATIVE 42 -#define R_386_GOT32X 43 -#define R_X86_64_GNU_VTINHERIT 250 -#define R_X86_64_GNU_VTENTRY 251 - -// Segment types -#define PT_NULL 0 -#define PT_LOAD 1 -#define PT_DYNAMIC 2 -#define PT_INTERP 3 -#define PT_NOTE 4 -#define PT_SHLIB 5 -#define PT_PHDR 6 -#define PT_TLS 7 -#define PT_LOOS 0x60000000 -#define PT_HIOS 0x6fffffff -#define PT_LOPROC 0x70000000 -#define PT_HIPROC 0x7FFFFFFF - -// Segment flags -#define PF_X 1 // Execute -#define PF_W 2 // Write -#define PF_R 4 // Read -#define PF_MASKOS 0x0ff00000 // Unspecified -#define PF_MASKPROC 0xf0000000 // Unspecified - -// Dynamic Array Tags -#define DT_NULL 0 -#define DT_NEEDED 1 -#define DT_PLTRELSZ 2 -#define DT_PLTGOT 3 -#define DT_HASH 4 -#define DT_STRTAB 5 -#define DT_SYMTAB 6 -#define DT_RELA 7 -#define DT_RELASZ 8 -#define DT_RELAENT 9 -#define DT_STRSZ 10 -#define DT_SYMENT 11 -#define DT_INIT 12 -#define DT_FINI 13 -#define DT_SONAME 14 -#define DT_RPATH 15 -#define DT_SYMBOLIC 16 -#define DT_REL 17 -#define DT_RELSZ 18 -#define DT_RELENT 19 -#define DT_PLTREL 20 -#define DT_DEBUG 21 -#define DT_TEXTREL 22 -#define DT_JMPREL 23 -#define DT_BIND_NOW 24 -#define DT_INIT_ARRAY 25 -#define DT_FINI_ARRAY 26 -#define DT_INIT_ARRAYSZ 27 -#define DT_FINI_ARRAYSZ 28 -#define DT_RUNPATH 29 -#define DT_FLAGS 30 -#define DT_ENCODING 32 -#define DT_PREINIT_ARRAY 32 -#define DT_PREINIT_ARRAYSZ 33 -#define DT_MAXPOSTAGS 34 -#define DT_LOOS 0x6000000D -#define DT_HIOS 0x6ffff000 -#define DT_LOPROC 0x70000000 -#define DT_HIPROC 0x7FFFFFFF - -// DT_FLAGS values -#define DF_ORIGIN 0x1 -#define DF_SYMBOLIC 0x2 -#define DF_TEXTREL 0x4 -#define DF_BIND_NOW 0x8 -#define DF_STATIC_TLS 0x10 - - -// ELF file header -struct Elf32_Ehdr { - unsigned char e_ident[EI_NIDENT]; - Elf_Half e_type; - Elf_Half e_machine; - Elf_Word e_version; - Elf32_Addr e_entry; - Elf32_Off e_phoff; - Elf32_Off e_shoff; - Elf_Word e_flags; - Elf_Half e_ehsize; - Elf_Half e_phentsize; - Elf_Half e_phnum; - Elf_Half e_shentsize; - Elf_Half e_shnum; - Elf_Half e_shstrndx; -}; - -struct Elf64_Ehdr { - unsigned char e_ident[EI_NIDENT]; - Elf_Half e_type; - Elf_Half e_machine; - Elf_Word e_version; - Elf64_Addr e_entry; - Elf64_Off e_phoff; - Elf64_Off e_shoff; - Elf_Word e_flags; - Elf_Half e_ehsize; - Elf_Half e_phentsize; - Elf_Half e_phnum; - Elf_Half e_shentsize; - Elf_Half e_shnum; - Elf_Half e_shstrndx; -}; - - -// Section header -struct Elf32_Shdr { - Elf_Word sh_name; - Elf_Word sh_type; - Elf_Word sh_flags; - Elf32_Addr sh_addr; - Elf32_Off sh_offset; - Elf_Word sh_size; - Elf_Word sh_link; - Elf_Word sh_info; - Elf_Word sh_addralign; - Elf_Word sh_entsize; -}; - -struct Elf64_Shdr { - Elf_Word sh_name; - Elf_Word sh_type; - Elf_Xword sh_flags; - Elf64_Addr sh_addr; - Elf64_Off sh_offset; - Elf_Xword sh_size; - Elf_Word sh_link; - Elf_Word sh_info; - Elf_Xword sh_addralign; - Elf_Xword sh_entsize; -}; - - -// Segment header -struct Elf32_Phdr { - Elf_Word p_type; - Elf32_Off p_offset; - Elf32_Addr p_vaddr; - Elf32_Addr p_paddr; - Elf_Word p_filesz; - Elf_Word p_memsz; - Elf_Word p_flags; - Elf_Word p_align; -}; - -struct Elf64_Phdr { - Elf_Word p_type; - Elf_Word p_flags; - Elf64_Off p_offset; - Elf64_Addr p_vaddr; - Elf64_Addr p_paddr; - Elf_Xword p_filesz; - Elf_Xword p_memsz; - Elf_Xword p_align; -}; - - -// Symbol table entry -struct Elf32_Sym { - Elf_Word st_name; - Elf32_Addr st_value; - Elf_Word st_size; - unsigned char st_info; - unsigned char st_other; - Elf_Half st_shndx; -}; - -struct Elf64_Sym { - Elf_Word st_name; - unsigned char st_info; - unsigned char st_other; - Elf_Half st_shndx; - Elf64_Addr st_value; - Elf_Xword st_size; -}; - - -#define ELF_ST_BIND(i) ((i)>>4) -#define ELF_ST_TYPE(i) ((i)&0xf) -#define ELF_ST_INFO(b,t) (((b)<<4)+((t)&0xf)) - -#define ELF_ST_VISIBILITY(o) ((o)&0x3) - - -// Relocation entries -struct Elf32_Rel { - Elf32_Addr r_offset; - Elf_Word r_info; -}; - -struct Elf32_Rela { - Elf32_Addr r_offset; - Elf_Word r_info; - Elf_Sword r_addend; -}; - -struct Elf64_Rel { - Elf64_Addr r_offset; - Elf_Xword r_info; -}; - -struct Elf64_Rela { - Elf64_Addr r_offset; - Elf_Xword r_info; - Elf_Sxword r_addend; -}; - - -#define ELF32_R_SYM(i) ((i)>>8) -#define ELF32_R_TYPE(i) ((unsigned char)(i)) -#define ELF32_R_INFO(s,t) (((s)<<8 )+(unsigned char)(t)) - -#define ELF64_R_SYM(i) ((i)>>32) -#define ELF64_R_TYPE(i) ((i)&0xffffffffL) -#define ELF64_R_INFO(s,t) ((((int64_t)(s))<<32)+((t)&0xffffffffL)) - -// Dynamic structure -struct Elf32_Dyn { - Elf_Sword d_tag; - union { - Elf_Word d_val; - Elf32_Addr d_ptr; - } d_un; -}; - -struct Elf64_Dyn { - Elf_Sxword d_tag; - union { - Elf_Xword d_val; - Elf64_Addr d_ptr; - } d_un; -}; - -} // namespace ELFIO - -#endif // ELFTYPES_H diff --git a/tools/ZAPD/lib/elfio/elfio/elfio.hpp b/tools/ZAPD/lib/elfio/elfio/elfio.hpp deleted file mode 100644 index f997b5dfc..000000000 --- a/tools/ZAPD/lib/elfio/elfio/elfio.hpp +++ /dev/null @@ -1,955 +0,0 @@ -/* -Copyright (C) 2001-2015 by Serge Lamikhov-Center - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef ELFIO_HPP -#define ELFIO_HPP - -#ifdef _MSC_VER -#pragma warning ( push ) -#pragma warning(disable:4996) -#pragma warning(disable:4355) -#pragma warning(disable:4244) -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#define ELFIO_HEADER_ACCESS_GET( TYPE, FNAME ) \ -TYPE \ -get_##FNAME() const \ -{ \ - return header? header->get_##FNAME() : 0; \ -} - -#define ELFIO_HEADER_ACCESS_GET_SET( TYPE, FNAME ) \ -TYPE \ -get_##FNAME() const \ -{ \ - return header? header->get_##FNAME() : 0; \ -} \ -void \ -set_##FNAME( TYPE val ) \ -{ \ - if (header) { \ - header->set_##FNAME( val ); \ - } \ -} \ - -namespace ELFIO { - -//------------------------------------------------------------------------------ -class elfio -{ - public: -//------------------------------------------------------------------------------ - elfio() : sections( this ), segments( this ) - { - header = 0; - current_file_pos = 0; - create( ELFCLASS32, ELFDATA2LSB ); - } - -//------------------------------------------------------------------------------ - ~elfio() - { - clean(); - } - -//------------------------------------------------------------------------------ - void create( unsigned char file_class, unsigned char encoding ) - { - clean(); - convertor.setup( encoding ); - header = create_header( file_class, encoding ); - create_mandatory_sections(); - } - -//------------------------------------------------------------------------------ - bool load( const std::string& file_name ) - { - std::ifstream stream; - stream.open( file_name.c_str(), std::ios::in | std::ios::binary ); - if ( !stream ) { - return false; - } - - return load(stream); - } - -//------------------------------------------------------------------------------ - bool load( std::istream &stream ) - { - clean(); - - unsigned char e_ident[EI_NIDENT]; - // Read ELF file signature - stream.read( reinterpret_cast( &e_ident ), sizeof( e_ident ) ); - - // Is it ELF file? - if ( stream.gcount() != sizeof( e_ident ) || - e_ident[EI_MAG0] != ELFMAG0 || - e_ident[EI_MAG1] != ELFMAG1 || - e_ident[EI_MAG2] != ELFMAG2 || - e_ident[EI_MAG3] != ELFMAG3 ) { - return false; - } - - if ( ( e_ident[EI_CLASS] != ELFCLASS64 ) && - ( e_ident[EI_CLASS] != ELFCLASS32 )) { - return false; - } - - convertor.setup( e_ident[EI_DATA] ); - header = create_header( e_ident[EI_CLASS], e_ident[EI_DATA] ); - if ( 0 == header ) { - return false; - } - if ( !header->load( stream ) ) { - return false; - } - - load_sections( stream ); - bool is_still_good = load_segments( stream ); - return is_still_good; - } - -//------------------------------------------------------------------------------ - bool save( const std::string& file_name ) - { - std::ofstream stream; - stream.open( file_name.c_str(), std::ios::out | std::ios::binary ); - if ( !stream ) { - return false; - } - - return save(stream); - } - -//------------------------------------------------------------------------------ - bool save( std::ostream &stream ) - { - if ( !stream || !header) { - return false; - } - - bool is_still_good = true; - // Define layout specific header fields - // The position of the segment table is fixed after the header. - // The position of the section table is variable and needs to be fixed - // before saving. - header->set_segments_num( segments.size() ); - header->set_segments_offset( segments.size() ? header->get_header_size() : 0 ); - header->set_sections_num( sections.size() ); - header->set_sections_offset( 0 ); - - // Layout the first section right after the segment table - current_file_pos = header->get_header_size() + - header->get_segment_entry_size() * header->get_segments_num(); - - calc_segment_alignment(); - - is_still_good = layout_segments_and_their_sections(); - is_still_good = is_still_good && layout_sections_without_segments(); - is_still_good = is_still_good && layout_section_table(); - - is_still_good = is_still_good && save_header( stream ); - is_still_good = is_still_good && save_sections( stream ); - is_still_good = is_still_good && save_segments( stream ); - - return is_still_good; - } - -//------------------------------------------------------------------------------ - // ELF header access functions - ELFIO_HEADER_ACCESS_GET( unsigned char, class ); - ELFIO_HEADER_ACCESS_GET( unsigned char, elf_version ); - ELFIO_HEADER_ACCESS_GET( unsigned char, encoding ); - ELFIO_HEADER_ACCESS_GET( Elf_Word, version ); - ELFIO_HEADER_ACCESS_GET( Elf_Half, header_size ); - ELFIO_HEADER_ACCESS_GET( Elf_Half, section_entry_size ); - ELFIO_HEADER_ACCESS_GET( Elf_Half, segment_entry_size ); - - ELFIO_HEADER_ACCESS_GET_SET( unsigned char, os_abi ); - ELFIO_HEADER_ACCESS_GET_SET( unsigned char, abi_version ); - ELFIO_HEADER_ACCESS_GET_SET( Elf_Half, type ); - ELFIO_HEADER_ACCESS_GET_SET( Elf_Half, machine ); - ELFIO_HEADER_ACCESS_GET_SET( Elf_Word, flags ); - ELFIO_HEADER_ACCESS_GET_SET( Elf64_Addr, entry ); - ELFIO_HEADER_ACCESS_GET_SET( Elf64_Off, sections_offset ); - ELFIO_HEADER_ACCESS_GET_SET( Elf64_Off, segments_offset ); - ELFIO_HEADER_ACCESS_GET_SET( Elf_Half, section_name_str_index ); - -//------------------------------------------------------------------------------ - const endianess_convertor& get_convertor() const - { - return convertor; - } - -//------------------------------------------------------------------------------ - Elf_Xword get_default_entry_size( Elf_Word section_type ) const - { - switch( section_type ) { - case SHT_RELA: - if ( header->get_class() == ELFCLASS64 ) { - return sizeof( Elf64_Rela ); - } - else { - return sizeof( Elf32_Rela ); - } - case SHT_REL: - if ( header->get_class() == ELFCLASS64 ) { - return sizeof( Elf64_Rel ); - } - else { - return sizeof( Elf32_Rel ); - } - case SHT_SYMTAB: - if ( header->get_class() == ELFCLASS64 ) { - return sizeof( Elf64_Sym ); - } - else { - return sizeof( Elf32_Sym ); - } - case SHT_DYNAMIC: - if ( header->get_class() == ELFCLASS64 ) { - return sizeof( Elf64_Dyn ); - } - else { - return sizeof( Elf32_Dyn ); - } - default: - return 0; - } - } - -//------------------------------------------------------------------------------ - private: - bool is_offset_in_section( Elf64_Off offset, const section* sec ) const { - return offset >= sec->get_offset() && offset < sec->get_offset()+sec->get_size(); - } - -//------------------------------------------------------------------------------ - public: - - //! returns an empty string if no problems are detected, - //! or a string containing an error message if problems are found - std::string validate() const { - - // check for overlapping sections in the file - for ( int i = 0; i < sections.size(); ++i) { - for ( int j = i+1; j < sections.size(); ++j ) { - const section* a = sections[i]; - const section* b = sections[j]; - if ( !(a->get_type() & SHT_NOBITS) - && !(b->get_type() & SHT_NOBITS) - && (a->get_size() > 0) - && (b->get_size() > 0) - && (a->get_offset() > 0) - && (b->get_offset() > 0)) { - if ( is_offset_in_section( a->get_offset(), b ) - || is_offset_in_section( a->get_offset()+a->get_size()-1, b ) - || is_offset_in_section( b->get_offset(), a ) - || is_offset_in_section( b->get_offset()+b->get_size()-1, a )) { - return "Sections " + a->get_name() + " and " + b->get_name() + " overlap in file"; - } - } - } - } - - // more checks to be added here... - - return ""; - } - -//------------------------------------------------------------------------------ - private: -//------------------------------------------------------------------------------ - void clean() - { - delete header; - header = 0; - - std::vector::const_iterator it; - for ( it = sections_.begin(); it != sections_.end(); ++it ) { - delete *it; - } - sections_.clear(); - - std::vector::const_iterator it1; - for ( it1 = segments_.begin(); it1 != segments_.end(); ++it1 ) { - delete *it1; - } - segments_.clear(); - } - -//------------------------------------------------------------------------------ - elf_header* create_header( unsigned char file_class, unsigned char encoding ) - { - elf_header* new_header = 0; - - if ( file_class == ELFCLASS64 ) { - new_header = new elf_header_impl< Elf64_Ehdr >( &convertor, - encoding ); - } - else if ( file_class == ELFCLASS32 ) { - new_header = new elf_header_impl< Elf32_Ehdr >( &convertor, - encoding ); - } - else { - return 0; - } - - return new_header; - } - -//------------------------------------------------------------------------------ - section* create_section() - { - section* new_section; - unsigned char file_class = get_class(); - - if ( file_class == ELFCLASS64 ) { - new_section = new section_impl( &convertor ); - } - else if ( file_class == ELFCLASS32 ) { - new_section = new section_impl( &convertor ); - } - else { - return 0; - } - - new_section->set_index( (Elf_Half)sections_.size() ); - sections_.push_back( new_section ); - - return new_section; - } - - -//------------------------------------------------------------------------------ - segment* create_segment() - { - segment* new_segment; - unsigned char file_class = header->get_class(); - - if ( file_class == ELFCLASS64 ) { - new_segment = new segment_impl( &convertor ); - } - else if ( file_class == ELFCLASS32 ) { - new_segment = new segment_impl( &convertor ); - } - else { - return 0; - } - - new_segment->set_index( (Elf_Half)segments_.size() ); - segments_.push_back( new_segment ); - - return new_segment; - } - -//------------------------------------------------------------------------------ - void create_mandatory_sections() - { - // Create null section without calling to 'add_section' as no string - // section containing section names exists yet - section* sec0 = create_section(); - sec0->set_index( 0 ); - sec0->set_name( "" ); - sec0->set_name_string_offset( 0 ); - - set_section_name_str_index( 1 ); - section* shstrtab = sections.add( ".shstrtab" ); - shstrtab->set_type( SHT_STRTAB ); - shstrtab->set_addr_align( 1 ); - } - -//------------------------------------------------------------------------------ - Elf_Half load_sections( std::istream& stream ) - { - Elf_Half entry_size = header->get_section_entry_size(); - Elf_Half num = header->get_sections_num(); - Elf64_Off offset = header->get_sections_offset(); - - for ( Elf_Half i = 0; i < num; ++i ) { - section* sec = create_section(); - sec->load( stream, (std::streamoff)offset + i * entry_size ); - sec->set_index( i ); - // To mark that the section is not permitted to reassign address - // during layout calculation - sec->set_address( sec->get_address() ); - } - - Elf_Half shstrndx = get_section_name_str_index(); - - if ( SHN_UNDEF != shstrndx ) { - string_section_accessor str_reader( sections[shstrndx] ); - for ( Elf_Half i = 0; i < num; ++i ) { - Elf_Word section_offset = sections[i]->get_name_string_offset(); - const char* p = str_reader.get_string( section_offset ); - if ( p != 0 ) { - sections[i]->set_name( p ); - } - } - } - - return num; - } - -//------------------------------------------------------------------------------ - //! Checks whether the addresses of the section entirely fall within the given segment. - //! It doesn't matter if the addresses are memory addresses, or file offsets, - //! they just need to be in the same address space - bool is_sect_in_seg ( Elf64_Off sect_begin, Elf_Xword sect_size, Elf64_Off seg_begin, Elf64_Off seg_end ) { - return seg_begin <= sect_begin - && sect_begin + sect_size <= seg_end - && sect_begin < seg_end; // this is important criteria when sect_size == 0 - // Example: seg_begin=10, seg_end=12 (-> covering the bytes 10 and 11) - // sect_begin=12, sect_size=0 -> shall return false! - } - -//------------------------------------------------------------------------------ - bool load_segments( std::istream& stream ) - { - Elf_Half entry_size = header->get_segment_entry_size(); - Elf_Half num = header->get_segments_num(); - Elf64_Off offset = header->get_segments_offset(); - - for ( Elf_Half i = 0; i < num; ++i ) { - segment* seg; - unsigned char file_class = header->get_class(); - - if ( file_class == ELFCLASS64 ) { - seg = new segment_impl( &convertor ); - } - else if ( file_class == ELFCLASS32 ) { - seg = new segment_impl( &convertor ); - } - else { - return false; - } - - seg->load( stream, (std::streamoff)offset + i * entry_size ); - seg->set_index( i ); - - // Add sections to the segments (similar to readelfs algorithm) - Elf64_Off segBaseOffset = seg->get_offset(); - Elf64_Off segEndOffset = segBaseOffset + seg->get_file_size(); - Elf64_Off segVBaseAddr = seg->get_virtual_address(); - Elf64_Off segVEndAddr = segVBaseAddr + seg->get_memory_size(); - for( Elf_Half j = 0; j < sections.size(); ++j ) { - const section* psec = sections[j]; - - // SHF_ALLOC sections are matched based on the virtual address - // otherwise the file offset is matched - if( psec->get_flags() & SHF_ALLOC - ? is_sect_in_seg( psec->get_address(), psec->get_size(), segVBaseAddr, segVEndAddr ) - : is_sect_in_seg( psec->get_offset(), psec->get_size(), segBaseOffset, segEndOffset )) { - // Alignment of segment shall not be updated, to preserve original value - // It will be re-calculated on saving. - seg->add_section_index( psec->get_index(), 0 ); - } - } - - // Add section into the segments' container - segments_.push_back( seg ); - } - - return true; - } - -//------------------------------------------------------------------------------ - bool save_header( std::ostream& stream ) - { - return header->save( stream ); - } - -//------------------------------------------------------------------------------ - bool save_sections( std::ostream& stream ) - { - for ( unsigned int i = 0; i < sections_.size(); ++i ) { - section *sec = sections_.at(i); - - std::streampos headerPosition = - (std::streamoff)header->get_sections_offset() + - header->get_section_entry_size() * sec->get_index(); - - sec->save(stream,headerPosition,sec->get_offset()); - } - return true; - } - -//------------------------------------------------------------------------------ - bool save_segments( std::ostream& stream ) - { - for ( unsigned int i = 0; i < segments_.size(); ++i ) { - segment *seg = segments_.at(i); - - std::streampos headerPosition = header->get_segments_offset() + - header->get_segment_entry_size()*seg->get_index(); - - seg->save( stream, headerPosition, seg->get_offset() ); - } - return true; - } - -//------------------------------------------------------------------------------ - bool is_section_without_segment( unsigned int section_index ) - { - bool found = false; - - for ( unsigned int j = 0; !found && ( j < segments.size() ); ++j ) { - for ( unsigned int k = 0; - !found && ( k < segments[j]->get_sections_num() ); - ++k ) { - found = segments[j]->get_section_index_at( k ) == section_index; - } - } - - return !found; - } - -//------------------------------------------------------------------------------ - bool is_subsequence_of( segment* seg1, segment* seg2 ) - { - // Return 'true' if sections of seg1 are a subset of sections in seg2 - const std::vector& sections1 = seg1->get_sections(); - const std::vector& sections2 = seg2->get_sections(); - - bool found = false; - if ( sections1.size() < sections2.size() ) { - found = std::includes( sections2.begin(), sections2.end(), - sections1.begin(), sections1.end() ); - } - - return found; - } - -//------------------------------------------------------------------------------ - std::vector get_ordered_segments( ) - { - std::vector res; - std::deque worklist; - - res.reserve(segments.size()); - std::copy( segments_.begin(), segments_.end(), - std::back_inserter( worklist )) ; - - // Bring the segments which start at address 0 to the front - size_t nextSlot = 0; - for( size_t i = 0; i < worklist.size(); ++i ) { - if( i != nextSlot && worklist[i]->is_offset_initialized() - && worklist[i]->get_offset() == 0 ) { - if (worklist[nextSlot]->get_offset() == 0) { - ++nextSlot; - } - std::swap(worklist[i],worklist[nextSlot]); - ++nextSlot; - } - } - - while ( !worklist.empty() ) { - segment *seg = worklist.front(); - worklist.pop_front(); - - size_t i = 0; - for ( ; i < worklist.size(); ++i ) { - if ( is_subsequence_of( seg, worklist[i] ) ) { - break; - } - } - - if ( i < worklist.size() ) - worklist.push_back(seg); - else - res.push_back(seg); - } - - return res; - } - - -//------------------------------------------------------------------------------ - bool layout_sections_without_segments( ) - { - for ( unsigned int i = 0; i < sections_.size(); ++i ) { - if ( is_section_without_segment( i ) ) { - section *sec = sections_[i]; - - Elf_Xword section_align = sec->get_addr_align(); - if ( section_align > 1 && current_file_pos % section_align != 0 ) { - current_file_pos += section_align - - current_file_pos % section_align; - } - - if ( 0 != sec->get_index() ) - sec->set_offset(current_file_pos); - - if ( SHT_NOBITS != sec->get_type() && - SHT_NULL != sec->get_type() ) { - current_file_pos += sec->get_size(); - } - } - } - - return true; - } - - -//------------------------------------------------------------------------------ - void calc_segment_alignment( ) - { - for( std::vector::iterator s = segments_.begin(); s != segments_.end(); ++s ) { - segment* seg = *s; - for ( int i = 0; i < seg->get_sections_num(); ++i ) { - section* sect = sections_[ seg->get_section_index_at(i) ]; - if ( sect->get_addr_align() > seg->get_align() ) { - seg->set_align( sect->get_addr_align() ); - } - } - } - } - -//------------------------------------------------------------------------------ - bool layout_segments_and_their_sections( ) - { - std::vector worklist; - std::vector section_generated(sections.size(),false); - - // Get segments in a order in where segments which contain a - // sub sequence of other segments are located at the end - worklist = get_ordered_segments(); - - for ( unsigned int i = 0; i < worklist.size(); ++i ) { - Elf_Xword segment_memory = 0; - Elf_Xword segment_filesize = 0; - Elf_Xword seg_start_pos = current_file_pos; - segment* seg = worklist[i]; - - // Special case: PHDR segment - // This segment contains the program headers but no sections - if ( seg->get_type() == PT_PHDR && seg->get_sections_num() == 0 ) { - seg_start_pos = header->get_segments_offset(); - segment_memory = segment_filesize = - header->get_segment_entry_size() * header->get_segments_num(); - } - // Special case: - // Segments which start with the NULL section and have further sections - else if ( seg->get_sections_num() > 1 - && sections[seg->get_section_index_at( 0 )]->get_type() == SHT_NULL ) { - seg_start_pos = 0; - if ( seg->get_sections_num() ) { - segment_memory = segment_filesize = current_file_pos; - } - } - // New segments with not generated sections - // have to be aligned - else if ( seg->get_sections_num() - && !section_generated[seg->get_section_index_at( 0 )] ) { - Elf_Xword align = seg->get_align() > 0 ? seg->get_align() : 1; - Elf64_Off cur_page_alignment = current_file_pos % align; - Elf64_Off req_page_alignment = seg->get_virtual_address() % align; - Elf64_Off error = req_page_alignment - cur_page_alignment; - - current_file_pos += ( seg->get_align() + error ) % align; - seg_start_pos = current_file_pos; - } - else if ( seg->get_sections_num() ) { - seg_start_pos = sections[seg->get_section_index_at( 0 )]->get_offset(); - } - - // Write segment's data - for ( unsigned int j = 0; j < seg->get_sections_num(); ++j ) { - Elf_Half index = seg->get_section_index_at( j ); - - section* sec = sections[ index ]; - - // The NULL section is always generated - if ( SHT_NULL == sec->get_type()) { - section_generated[index] = true; - continue; - } - - Elf_Xword secAlign = 0; - // Fix up the alignment - if ( !section_generated[index] && sec->is_address_initialized() - && SHT_NOBITS != sec->get_type() - && SHT_NULL != sec->get_type() - && 0 != sec->get_size() ) { - // Align the sections based on the virtual addresses - // when possible (this is what matters for execution) - Elf64_Off req_offset = sec->get_address() - seg->get_virtual_address(); - Elf64_Off cur_offset = current_file_pos - seg_start_pos; - if ( req_offset < cur_offset) { - // something has gone awfully wrong, abort! - // secAlign would turn out negative, seeking backwards and overwriting previous data - return false; - } - secAlign = req_offset - cur_offset; - } - else if (!section_generated[index] && !sec->is_address_initialized() ) { - // If no address has been specified then only the section - // alignment constraint has to be matched - Elf_Xword align = sec->get_addr_align(); - if (align == 0) { - align = 1; - } - Elf64_Off error = current_file_pos % align; - secAlign = ( align - error ) % align; - } - else if (section_generated[index] ) { - // Alignment for already generated sections - secAlign = sec->get_offset() - seg_start_pos - segment_filesize; - } - - // Determine the segment file and memory sizes - // Special case .tbss section (NOBITS) in non TLS segment - if ( (sec->get_flags() & SHF_ALLOC) - && !( (sec->get_flags() & SHF_TLS) && (seg->get_type() != PT_TLS) - && ( SHT_NOBITS == sec->get_type())) ) - segment_memory += sec->get_size() + secAlign; - if ( SHT_NOBITS != sec->get_type() && SHT_NULL != sec->get_type() ) - segment_filesize += sec->get_size() + secAlign; - - // Nothing to be done when generating nested segments - if(section_generated[index]) { - continue; - } - - current_file_pos += secAlign; - - // Set the section addresses when missing - if ( !sec->is_address_initialized() ) - sec->set_address( seg->get_virtual_address() - + current_file_pos - seg_start_pos); - - if ( 0 != sec->get_index() ) - sec->set_offset(current_file_pos); - - if ( SHT_NOBITS != sec->get_type() && SHT_NULL != sec->get_type() ) - current_file_pos += sec->get_size(); - section_generated[index] = true; - } - - seg->set_file_size( segment_filesize ); - - // If we already have a memory size from loading an elf file (value > 0), - // it must not shrink! - // Memory size may be bigger than file size and it is the loader's job to do something - // with the surplus bytes in memory, like initializing them with a defined value. - if ( seg->get_memory_size() < segment_memory ) { - seg->set_memory_size( segment_memory ); - } - - seg->set_offset(seg_start_pos); - } - - return true; - } - -//------------------------------------------------------------------------------ - bool layout_section_table() - { - // Simply place the section table at the end for now - Elf64_Off alignmentError = current_file_pos % 4; - current_file_pos += ( 4 - alignmentError ) % 4; - header->set_sections_offset(current_file_pos); - return true; - } - - -//------------------------------------------------------------------------------ - public: - friend class Sections; - class Sections { - public: -//------------------------------------------------------------------------------ - Sections( elfio* parent_ ) : - parent( parent_ ) - { - } - -//------------------------------------------------------------------------------ - Elf_Half size() const - { - return (Elf_Half)parent->sections_.size(); - } - -//------------------------------------------------------------------------------ - section* operator[]( unsigned int index ) const - { - section* sec = 0; - - if ( index < parent->sections_.size() ) { - sec = parent->sections_[index]; - } - - return sec; - } - -//------------------------------------------------------------------------------ - section* operator[]( const std::string& name ) const - { - section* sec = 0; - - std::vector::const_iterator it; - for ( it = parent->sections_.begin(); - it != parent->sections_.end(); - ++it ) { - if ( (*it)->get_name() == name ) { - sec = *it; - break; - } - } - - return sec; - } - -//------------------------------------------------------------------------------ - section* add( const std::string& name ) - { - section* new_section = parent->create_section(); - new_section->set_name( name ); - - Elf_Half str_index = parent->get_section_name_str_index(); - section* string_table( parent->sections_[str_index] ); - string_section_accessor str_writer( string_table ); - Elf_Word pos = str_writer.add_string( name ); - new_section->set_name_string_offset( pos ); - - return new_section; - } - -//------------------------------------------------------------------------------ - std::vector::iterator begin() { - return parent->sections_.begin(); - } - -//------------------------------------------------------------------------------ - std::vector::iterator end() { - return parent->sections_.end(); - } - -//------------------------------------------------------------------------------ - std::vector::const_iterator begin() const { - return parent->sections_.cbegin(); - } - -//------------------------------------------------------------------------------ - std::vector::const_iterator end() const { - return parent->sections_.cend(); - } - -//------------------------------------------------------------------------------ - private: - elfio* parent; - } sections; - -//------------------------------------------------------------------------------ - public: - friend class Segments; - class Segments { - public: -//------------------------------------------------------------------------------ - Segments( elfio* parent_ ) : - parent( parent_ ) - { - } - -//------------------------------------------------------------------------------ - Elf_Half size() const - { - return (Elf_Half)parent->segments_.size(); - } - -//------------------------------------------------------------------------------ - segment* operator[]( unsigned int index ) const - { - return parent->segments_[index]; - } - - -//------------------------------------------------------------------------------ - segment* add() - { - return parent->create_segment(); - } - -//------------------------------------------------------------------------------ - std::vector::iterator begin() { - return parent->segments_.begin(); - } - -//------------------------------------------------------------------------------ - std::vector::iterator end() { - return parent->segments_.end(); - } - -//------------------------------------------------------------------------------ - std::vector::const_iterator begin() const { - return parent->segments_.cbegin(); - } - -//------------------------------------------------------------------------------ - std::vector::const_iterator end() const { - return parent->segments_.cend(); - } - -//------------------------------------------------------------------------------ - private: - elfio* parent; - } segments; - -//------------------------------------------------------------------------------ - private: - elf_header* header; - std::vector sections_; - std::vector segments_; - endianess_convertor convertor; - - Elf_Xword current_file_pos; -}; - -} // namespace ELFIO - -#include -#include -#include -#include - -#ifdef _MSC_VER -#pragma warning ( pop ) -#endif - -#endif // ELFIO_HPP diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_dump.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_dump.hpp deleted file mode 100644 index 4ace66514..000000000 --- a/tools/ZAPD/lib/elfio/elfio/elfio_dump.hpp +++ /dev/null @@ -1,976 +0,0 @@ -/* -Copyright (C) 2001-2015 by Serge Lamikhov-Center - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef ELFIO_DUMP_HPP -#define ELFIO_DUMP_HPP - -#include -#include -#include -#include -#include -#include - -namespace ELFIO { - - -static struct class_table_t { - const char key; - const char* str; -} class_table [] = -{ - { ELFCLASS32, "ELF32" }, - { ELFCLASS64, "ELF64" }, -}; - - -static struct endian_table_t { - const char key; - const char* str; -} endian_table [] = -{ - { ELFDATANONE, "None" }, - { ELFDATA2LSB, "Little endian" }, - { ELFDATA2MSB, "Big endian" }, -}; - - -static struct version_table_t { - const Elf64_Word key; - const char* str; -} version_table [] = -{ - { EV_NONE , "None" }, - { EV_CURRENT, "Current" }, -}; - - -static struct type_table_t { - const Elf32_Half key; - const char* str; -} type_table [] = -{ - { ET_NONE, "No file type" }, - { ET_REL , "Relocatable file" }, - { ET_EXEC, "Executable file" }, - { ET_DYN , "Shared object file" }, - { ET_CORE, "Core file" }, -}; - - -static struct machine_table_t { - const Elf64_Half key; - const char* str; -} machine_table [] = -{ - { EM_NONE , "No machine" }, - { EM_M32 , "AT&T WE 32100" }, - { EM_SPARC , "SUN SPARC" }, - { EM_386 , "Intel 80386" }, - { EM_68K , "Motorola m68k family" }, - { EM_88K , "Motorola m88k family" }, - { EM_486 , "Intel 80486// Reserved for future use" }, - { EM_860 , "Intel 80860" }, - { EM_MIPS , "MIPS R3000 (officially, big-endian only)" }, - { EM_S370 , "IBM System/370" }, - { EM_MIPS_RS3_LE , "MIPS R3000 little-endian (Oct 4 1999 Draft) Deprecated" }, - { EM_res011 , "Reserved" }, - { EM_res012 , "Reserved" }, - { EM_res013 , "Reserved" }, - { EM_res014 , "Reserved" }, - { EM_PARISC , "HPPA" }, - { EM_res016 , "Reserved" }, - { EM_VPP550 , "Fujitsu VPP500" }, - { EM_SPARC32PLUS , "Sun's v8plus" }, - { EM_960 , "Intel 80960" }, - { EM_PPC , "PowerPC" }, - { EM_PPC64 , "64-bit PowerPC" }, - { EM_S390 , "IBM S/390" }, - { EM_SPU , "Sony/Toshiba/IBM SPU" }, - { EM_res024 , "Reserved" }, - { EM_res025 , "Reserved" }, - { EM_res026 , "Reserved" }, - { EM_res027 , "Reserved" }, - { EM_res028 , "Reserved" }, - { EM_res029 , "Reserved" }, - { EM_res030 , "Reserved" }, - { EM_res031 , "Reserved" }, - { EM_res032 , "Reserved" }, - { EM_res033 , "Reserved" }, - { EM_res034 , "Reserved" }, - { EM_res035 , "Reserved" }, - { EM_V800 , "NEC V800 series" }, - { EM_FR20 , "Fujitsu FR20" }, - { EM_RH32 , "TRW RH32" }, - { EM_MCORE , "Motorola M*Core // May also be taken by Fujitsu MMA" }, - { EM_RCE , "Old name for MCore" }, - { EM_ARM , "ARM" }, - { EM_OLD_ALPHA , "Digital Alpha" }, - { EM_SH , "Renesas (formerly Hitachi) / SuperH SH" }, - { EM_SPARCV9 , "SPARC v9 64-bit" }, - { EM_TRICORE , "Siemens Tricore embedded processor" }, - { EM_ARC , "ARC Cores" }, - { EM_H8_300 , "Renesas (formerly Hitachi) H8/300" }, - { EM_H8_300H , "Renesas (formerly Hitachi) H8/300H" }, - { EM_H8S , "Renesas (formerly Hitachi) H8S" }, - { EM_H8_500 , "Renesas (formerly Hitachi) H8/500" }, - { EM_IA_64 , "Intel IA-64 Processor" }, - { EM_MIPS_X , "Stanford MIPS-X" }, - { EM_COLDFIRE , "Motorola Coldfire" }, - { EM_68HC12 , "Motorola M68HC12" }, - { EM_MMA , "Fujitsu Multimedia Accelerator" }, - { EM_PCP , "Siemens PCP" }, - { EM_NCPU , "Sony nCPU embedded RISC processor" }, - { EM_NDR1 , "Denso NDR1 microprocesspr" }, - { EM_STARCORE , "Motorola Star*Core processor" }, - { EM_ME16 , "Toyota ME16 processor" }, - { EM_ST100 , "STMicroelectronics ST100 processor" }, - { EM_TINYJ , "Advanced Logic Corp. TinyJ embedded processor" }, - { EM_X86_64 , "Advanced Micro Devices X86-64 processor" }, - { EM_PDSP , "Sony DSP Processor" }, - { EM_PDP10 , "Digital Equipment Corp. PDP-10" }, - { EM_PDP11 , "Digital Equipment Corp. PDP-11" }, - { EM_FX66 , "Siemens FX66 microcontroller" }, - { EM_ST9PLUS , "STMicroelectronics ST9+ 8/16 bit microcontroller" }, - { EM_ST7 , "STMicroelectronics ST7 8-bit microcontroller" }, - { EM_68HC16 , "Motorola MC68HC16 Microcontroller" }, - { EM_68HC11 , "Motorola MC68HC11 Microcontroller" }, - { EM_68HC08 , "Motorola MC68HC08 Microcontroller" }, - { EM_68HC05 , "Motorola MC68HC05 Microcontroller" }, - { EM_SVX , "Silicon Graphics SVx" }, - { EM_ST19 , "STMicroelectronics ST19 8-bit cpu" }, - { EM_VAX , "Digital VAX" }, - { EM_CRIS , "Axis Communications 32-bit embedded processor" }, - { EM_JAVELIN , "Infineon Technologies 32-bit embedded cpu" }, - { EM_FIREPATH , "Element 14 64-bit DSP processor" }, - { EM_ZSP , "LSI Logic's 16-bit DSP processor" }, - { EM_MMIX , "Donald Knuth's educational 64-bit processor" }, - { EM_HUANY , "Harvard's machine-independent format" }, - { EM_PRISM , "SiTera Prism" }, - { EM_AVR , "Atmel AVR 8-bit microcontroller" }, - { EM_FR30 , "Fujitsu FR30" }, - { EM_D10V , "Mitsubishi D10V" }, - { EM_D30V , "Mitsubishi D30V" }, - { EM_V850 , "NEC v850" }, - { EM_M32R , "Renesas M32R (formerly Mitsubishi M32R)" }, - { EM_MN10300 , "Matsushita MN10300" }, - { EM_MN10200 , "Matsushita MN10200" }, - { EM_PJ , "picoJava" }, - { EM_OPENRISC , "OpenRISC 32-bit embedded processor" }, - { EM_ARC_A5 , "ARC Cores Tangent-A5" }, - { EM_XTENSA , "Tensilica Xtensa Architecture" }, - { EM_VIDEOCORE , "Alphamosaic VideoCore processor" }, - { EM_TMM_GPP , "Thompson Multimedia General Purpose Processor" }, - { EM_NS32K , "National Semiconductor 32000 series" }, - { EM_TPC , "Tenor Network TPC processor" }, - { EM_SNP1K , "Trebia SNP 1000 processor" }, - { EM_ST200 , "STMicroelectronics ST200 microcontroller" }, - { EM_IP2K , "Ubicom IP2022 micro controller" }, - { EM_MAX , "MAX Processor" }, - { EM_CR , "National Semiconductor CompactRISC" }, - { EM_F2MC16 , "Fujitsu F2MC16" }, - { EM_MSP430 , "TI msp430 micro controller" }, - { EM_BLACKFIN , "ADI Blackfin" }, - { EM_SE_C33 , "S1C33 Family of Seiko Epson processors" }, - { EM_SEP , "Sharp embedded microprocessor" }, - { EM_ARCA , "Arca RISC Microprocessor" }, - { EM_UNICORE , "Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University" }, - { EM_EXCESS , "eXcess: 16/32/64-bit configurable embedded CPU" }, - { EM_DXP , "Icera Semiconductor Inc. Deep Execution Processor" }, - { EM_ALTERA_NIOS2 , "Altera Nios II soft-core processor" }, - { EM_CRX , "National Semiconductor CRX" }, - { EM_XGATE , "Motorola XGATE embedded processor" }, - { EM_C166 , "Infineon C16x/XC16x processor" }, - { EM_M16C , "Renesas M16C series microprocessors" }, - { EM_DSPIC30F , "Microchip Technology dsPIC30F Digital Signal Controller" }, - { EM_CE , "Freescale Communication Engine RISC core" }, - { EM_M32C , "Renesas M32C series microprocessors" }, - { EM_res121 , "Reserved" }, - { EM_res122 , "Reserved" }, - { EM_res123 , "Reserved" }, - { EM_res124 , "Reserved" }, - { EM_res125 , "Reserved" }, - { EM_res126 , "Reserved" }, - { EM_res127 , "Reserved" }, - { EM_res128 , "Reserved" }, - { EM_res129 , "Reserved" }, - { EM_res130 , "Reserved" }, - { EM_TSK3000 , "Altium TSK3000 core" }, - { EM_RS08 , "Freescale RS08 embedded processor" }, - { EM_res133 , "Reserved" }, - { EM_ECOG2 , "Cyan Technology eCOG2 microprocessor" }, - { EM_SCORE , "Sunplus Score" }, - { EM_SCORE7 , "Sunplus S+core7 RISC processor" }, - { EM_DSP24 , "New Japan Radio (NJR) 24-bit DSP Processor" }, - { EM_VIDEOCORE3 , "Broadcom VideoCore III processor" }, - { EM_LATTICEMICO32, "RISC processor for Lattice FPGA architecture" }, - { EM_SE_C17 , "Seiko Epson C17 family" }, - { EM_TI_C6000 , "Texas Instruments TMS320C6000 DSP family" }, - { EM_TI_C2000 , "Texas Instruments TMS320C2000 DSP family" }, - { EM_TI_C5500 , "Texas Instruments TMS320C55x DSP family" }, - { EM_res143 , "Reserved" }, - { EM_res144 , "Reserved" }, - { EM_res145 , "Reserved" }, - { EM_res146 , "Reserved" }, - { EM_res147 , "Reserved" }, - { EM_res148 , "Reserved" }, - { EM_res149 , "Reserved" }, - { EM_res150 , "Reserved" }, - { EM_res151 , "Reserved" }, - { EM_res152 , "Reserved" }, - { EM_res153 , "Reserved" }, - { EM_res154 , "Reserved" }, - { EM_res155 , "Reserved" }, - { EM_res156 , "Reserved" }, - { EM_res157 , "Reserved" }, - { EM_res158 , "Reserved" }, - { EM_res159 , "Reserved" }, - { EM_MMDSP_PLUS , "STMicroelectronics 64bit VLIW Data Signal Processor" }, - { EM_CYPRESS_M8C , "Cypress M8C microprocessor" }, - { EM_R32C , "Renesas R32C series microprocessors" }, - { EM_TRIMEDIA , "NXP Semiconductors TriMedia architecture family" }, - { EM_QDSP6 , "QUALCOMM DSP6 Processor" }, - { EM_8051 , "Intel 8051 and variants" }, - { EM_STXP7X , "STMicroelectronics STxP7x family" }, - { EM_NDS32 , "Andes Technology compact code size embedded RISC processor family" }, - { EM_ECOG1 , "Cyan Technology eCOG1X family" }, - { EM_ECOG1X , "Cyan Technology eCOG1X family" }, - { EM_MAXQ30 , "Dallas Semiconductor MAXQ30 Core Micro-controllers" }, - { EM_XIMO16 , "New Japan Radio (NJR) 16-bit DSP Processor" }, - { EM_MANIK , "M2000 Reconfigurable RISC Microprocessor" }, - { EM_CRAYNV2 , "Cray Inc. NV2 vector architecture" }, - { EM_RX , "Renesas RX family" }, - { EM_METAG , "Imagination Technologies META processor architecture" }, - { EM_MCST_ELBRUS , "MCST Elbrus general purpose hardware architecture" }, - { EM_ECOG16 , "Cyan Technology eCOG16 family" }, - { EM_CR16 , "National Semiconductor CompactRISC 16-bit processor" }, - { EM_ETPU , "Freescale Extended Time Processing Unit" }, - { EM_SLE9X , "Infineon Technologies SLE9X core" }, - { EM_L1OM , "Intel L1OM" }, - { EM_INTEL181 , "Reserved by Intel" }, - { EM_INTEL182 , "Reserved by Intel" }, - { EM_res183 , "Reserved by ARM" }, - { EM_res184 , "Reserved by ARM" }, - { EM_AVR32 , "Atmel Corporation 32-bit microprocessor family" }, - { EM_STM8 , "STMicroeletronics STM8 8-bit microcontroller" }, - { EM_TILE64 , "Tilera TILE64 multicore architecture family" }, - { EM_TILEPRO , "Tilera TILEPro multicore architecture family" }, - { EM_MICROBLAZE , "Xilinx MicroBlaze 32-bit RISC soft processor core" }, - { EM_CUDA , "NVIDIA CUDA architecture " }, -}; - - -static struct section_type_table_t { - const Elf64_Half key; - const char* str; -} section_type_table [] = -{ - { SHT_NULL , "NULL" }, - { SHT_PROGBITS , "PROGBITS" }, - { SHT_SYMTAB , "SYMTAB" }, - { SHT_STRTAB , "STRTAB" }, - { SHT_RELA , "RELA" }, - { SHT_HASH , "HASH" }, - { SHT_DYNAMIC , "DYNAMIC" }, - { SHT_NOTE , "NOTE" }, - { SHT_NOBITS , "NOBITS" }, - { SHT_REL , "REL" }, - { SHT_SHLIB , "SHLIB" }, - { SHT_DYNSYM , "DYNSYM" }, - { SHT_INIT_ARRAY , "INIT_ARRAY" }, - { SHT_FINI_ARRAY , "FINI_ARRAY" }, - { SHT_PREINIT_ARRAY, "PREINIT_ARRAY" }, - { SHT_GROUP , "GROUP" }, - { SHT_SYMTAB_SHNDX , "SYMTAB_SHNDX " }, -}; - - -static struct segment_type_table_t { - const Elf_Word key; - const char* str; -} segment_type_table [] = -{ - { PT_NULL , "NULL" }, - { PT_LOAD , "LOAD" }, - { PT_DYNAMIC, "DYNAMIC" }, - { PT_INTERP , "INTERP" }, - { PT_NOTE , "NOTE" }, - { PT_SHLIB , "SHLIB" }, - { PT_PHDR , "PHDR" }, - { PT_TLS , "TLS" }, -}; - - -static struct segment_flag_table_t { - const Elf_Word key; - const char* str; -} segment_flag_table [] = -{ - { 0, "" }, - { 1, "X" }, - { 2, "W" }, - { 3, "WX" }, - { 4, "R" }, - { 5, "RX" }, - { 6, "RW" }, - { 7, "RWX" }, -}; - - -static struct symbol_bind_t { - const Elf_Word key; - const char* str; -} symbol_bind_table [] = -{ - { STB_LOCAL , "LOCAL" }, - { STB_GLOBAL , "GLOBAL" }, - { STB_WEAK , "WEAK" }, - { STB_LOOS , "LOOS" }, - { STB_HIOS , "HIOS" }, - { STB_MULTIDEF, "MULTIDEF" }, - { STB_LOPROC , "LOPROC" }, - { STB_HIPROC , "HIPROC" }, -}; - - -static struct symbol_type_t { - const Elf_Word key; - const char* str; -} symbol_type_table [] = -{ - { STT_NOTYPE , "NOTYPE" }, - { STT_OBJECT , "OBJECT" }, - { STT_FUNC , "FUNC" }, - { STT_SECTION, "SECTION" }, - { STT_FILE , "FILE" }, - { STT_COMMON , "COMMON" }, - { STT_TLS , "TLS" }, - { STT_LOOS , "LOOS" }, - { STT_HIOS , "HIOS" }, - { STT_LOPROC , "LOPROC" }, - { STT_HIPROC , "HIPROC" }, -}; - - -static struct dynamic_tag_t { - const Elf_Word key; - const char* str; -} dynamic_tag_table [] = -{ - { DT_NULL , "NULL" }, - { DT_NEEDED , "NEEDED" }, - { DT_PLTRELSZ , "PLTRELSZ" }, - { DT_PLTGOT , "PLTGOT" }, - { DT_HASH , "HASH" }, - { DT_STRTAB , "STRTAB" }, - { DT_SYMTAB , "SYMTAB" }, - { DT_RELA , "RELA" }, - { DT_RELASZ , "RELASZ" }, - { DT_RELAENT , "RELAENT" }, - { DT_STRSZ , "STRSZ" }, - { DT_SYMENT , "SYMENT" }, - { DT_INIT , "INIT" }, - { DT_FINI , "FINI" }, - { DT_SONAME , "SONAME" }, - { DT_RPATH , "RPATH" }, - { DT_SYMBOLIC , "SYMBOLIC" }, - { DT_REL , "REL" }, - { DT_RELSZ , "RELSZ" }, - { DT_RELENT , "RELENT" }, - { DT_PLTREL , "PLTREL" }, - { DT_DEBUG , "DEBUG" }, - { DT_TEXTREL , "TEXTREL" }, - { DT_JMPREL , "JMPREL" }, - { DT_BIND_NOW , "BIND_NOW" }, - { DT_INIT_ARRAY , "INIT_ARRAY" }, - { DT_FINI_ARRAY , "FINI_ARRAY" }, - { DT_INIT_ARRAYSZ , "INIT_ARRAYSZ" }, - { DT_FINI_ARRAYSZ , "FINI_ARRAYSZ" }, - { DT_RUNPATH , "RUNPATH" }, - { DT_FLAGS , "FLAGS" }, - { DT_ENCODING , "ENCODING" }, - { DT_PREINIT_ARRAY , "PREINIT_ARRAY" }, - { DT_PREINIT_ARRAYSZ, "PREINIT_ARRAYSZ" }, - { DT_MAXPOSTAGS , "MAXPOSTAGS" }, -}; - -static const ELFIO::Elf_Xword MAX_DATA_ENTRIES = 64; - -//------------------------------------------------------------------------------ -class dump -{ -#define DUMP_DEC_FORMAT( width ) std::setw(width) << std::setfill( ' ' ) << \ - std::dec << std::right -#define DUMP_HEX_FORMAT( width ) std::setw(width) << std::setfill( '0' ) << \ - std::hex << std::right -#define DUMP_STR_FORMAT( width ) std::setw(width) << std::setfill( ' ' ) << \ - std::hex << std::left - - public: -//------------------------------------------------------------------------------ - static void - header( std::ostream& out, const elfio& reader ) - { - if (!reader.get_header_size()) - { - return; - } - out << "ELF Header" << std::endl << std::endl - << " Class: " << str_class( reader.get_class() ) << std::endl - << " Encoding: " << str_endian( reader.get_encoding() ) << std::endl - << " ELFVersion: " << str_version( reader.get_elf_version() ) << std::endl - << " Type: " << str_type( reader.get_type() ) << std::endl - << " Machine: " << str_machine( reader.get_machine() ) << std::endl - << " Version: " << str_version( reader.get_version() ) << std::endl - << " Entry: " << "0x" << std::hex << reader.get_entry() << std::endl - << " Flags: " << "0x" << std::hex << reader.get_flags() << std::endl - << std::endl; - } - -//------------------------------------------------------------------------------ - static void - section_headers( std::ostream& out, const elfio& reader ) - { - Elf_Half n = reader.sections.size(); - - if ( n == 0 ) { - return; - } - - out << "Section Headers:" << std::endl; - if ( reader.get_class() == ELFCLASS32 ) { // Output for 32-bit - out << "[ Nr ] Type Addr Size ES Flg Lk Inf Al Name" << std::endl; - } - else { // Output for 64-bit - out << "[ Nr ] Type Addr Size ES Flg" << std::endl - << " Lk Inf Al Name" << std::endl; - } - - for ( Elf_Half i = 0; i < n; ++i ) { // For all sections - section* sec = reader.sections[i]; - section_header( out, i, sec, reader.get_class() ); - } - - out << "Key to Flags: W (write), A (alloc), X (execute)\n\n" - << std::endl; - } - -//------------------------------------------------------------------------------ - static void - section_header( std::ostream& out, Elf_Half no, const section* sec, - unsigned char elf_class ) - { - std::ios_base::fmtflags original_flags = out.flags(); - - if ( elf_class == ELFCLASS32 ) { // Output for 32-bit - out << "[" - << DUMP_DEC_FORMAT( 5 ) << no - << "] " - << DUMP_STR_FORMAT( 17 ) << str_section_type( sec->get_type() ) << " " - << DUMP_HEX_FORMAT( 8 ) << sec->get_address() << " " - << DUMP_HEX_FORMAT( 8 ) << sec->get_size() << " " - << DUMP_HEX_FORMAT( 2 ) << sec->get_entry_size() << " " - << DUMP_STR_FORMAT( 3 ) << section_flags( sec->get_flags() ) << " " - << DUMP_HEX_FORMAT( 2 ) << sec->get_link() << " " - << DUMP_HEX_FORMAT( 3 ) << sec->get_info() << " " - << DUMP_HEX_FORMAT( 2 ) << sec->get_addr_align() << " " - << DUMP_STR_FORMAT( 17 ) << sec->get_name() << " " - << std::endl; - } - else { // Output for 64-bit - out << "[" - << DUMP_DEC_FORMAT( 5 ) << no - << "] " - << DUMP_STR_FORMAT( 17 ) << str_section_type( sec->get_type() ) << " " - << DUMP_HEX_FORMAT( 16 ) << sec->get_address() << " " - << DUMP_HEX_FORMAT( 16 ) << sec->get_size() << " " - << DUMP_HEX_FORMAT( 4 ) << sec->get_entry_size() << " " - << DUMP_STR_FORMAT( 3 ) << section_flags( sec->get_flags() ) << " " - << std::endl - << " " - << DUMP_HEX_FORMAT( 4 ) << sec->get_link() << " " - << DUMP_HEX_FORMAT( 4 ) << sec->get_info() << " " - << DUMP_HEX_FORMAT( 4 ) << sec->get_addr_align() << " " - << DUMP_STR_FORMAT( 17 ) << sec->get_name() << " " - << std::endl; - } - - out.flags(original_flags); - - return; - } - -//------------------------------------------------------------------------------ - static void - segment_headers( std::ostream& out, const elfio& reader ) - { - Elf_Half n = reader.segments.size(); - if ( n == 0 ) { - return; - } - - out << "Segment headers:" << std::endl; - if ( reader.get_class() == ELFCLASS32 ) { // Output for 32-bit - out << "[ Nr ] Type VirtAddr PhysAddr FileSize Mem.Size Flags Align" - << std::endl; - } - else { // Output for 64-bit - out << "[ Nr ] Type VirtAddr PhysAddr Flags" << std::endl - << " FileSize Mem.Size Align" - << std::endl; - } - - for ( Elf_Half i = 0; i < n; ++i ) { - segment* seg = reader.segments[i]; - segment_header( out, i, seg, reader.get_class() ); - } - - out << std::endl; - } - -//------------------------------------------------------------------------------ - static void - segment_header( std::ostream& out, Elf_Half no, const segment* seg, - unsigned int elf_class ) - { - std::ios_base::fmtflags original_flags = out.flags(); - - if ( elf_class == ELFCLASS32 ) { // Output for 32-bit - out << "[" - << DUMP_DEC_FORMAT( 5 ) << no - << "] " - << DUMP_STR_FORMAT( 14 ) << str_segment_type( seg->get_type() ) << " " - << DUMP_HEX_FORMAT( 8 ) << seg->get_virtual_address() << " " - << DUMP_HEX_FORMAT( 8 ) << seg->get_physical_address() << " " - << DUMP_HEX_FORMAT( 8 ) << seg->get_file_size() << " " - << DUMP_HEX_FORMAT( 8 ) << seg->get_memory_size() << " " - << DUMP_STR_FORMAT( 8 ) << str_segment_flag( seg->get_flags() ) << " " - << DUMP_HEX_FORMAT( 8 ) << seg->get_align() << " " - << std::endl; - } - else { // Output for 64-bit - out << "[" - << DUMP_DEC_FORMAT( 5 ) << no - << "] " - << DUMP_STR_FORMAT( 14 ) << str_segment_type( seg->get_type() ) << " " - << DUMP_HEX_FORMAT( 16 ) << seg->get_virtual_address() << " " - << DUMP_HEX_FORMAT( 16 ) << seg->get_physical_address() << " " - << DUMP_STR_FORMAT( 16 ) << str_segment_flag( seg->get_flags() ) << " " - << std::endl - << " " - << DUMP_HEX_FORMAT( 16 ) << seg->get_file_size() << " " - << DUMP_HEX_FORMAT( 16 ) << seg->get_memory_size() << " " - << DUMP_HEX_FORMAT( 16 ) << seg->get_align() << " " - << std::endl; - } - - out.flags(original_flags); - } - -//------------------------------------------------------------------------------ - static void - symbol_tables( std::ostream& out, const elfio& reader ) - { - Elf_Half n = reader.sections.size(); - for ( Elf_Half i = 0; i < n; ++i ) { // For all sections - section* sec = reader.sections[i]; - if ( SHT_SYMTAB == sec->get_type() || SHT_DYNSYM == sec->get_type() ) { - symbol_section_accessor symbols( reader, sec ); - - Elf_Xword sym_no = symbols.get_symbols_num(); - if ( sym_no > 0 ) { - out << "Symbol table (" << sec->get_name() << ")" << std::endl; - if ( reader.get_class() == ELFCLASS32 ) { // Output for 32-bit - out << "[ Nr ] Value Size Type Bind Sect Name" - << std::endl; - } - else { // Output for 64-bit - out << "[ Nr ] Value Size Type Bind Sect" << std::endl - << " Name" - << std::endl; - } - for ( Elf_Half i = 0; i < sym_no; ++i ) { - std::string name; - Elf64_Addr value = 0; - Elf_Xword size = 0; - unsigned char bind = 0; - unsigned char type = 0; - Elf_Half section = 0; - unsigned char other = 0; - symbols.get_symbol( i, name, value, size, bind, type, section, other ); - symbol_table( out, i, name, value, size, bind, type, section, reader.get_class() ); - } - - out << std::endl; - } - } - } - } - -//------------------------------------------------------------------------------ - static void - symbol_table( std::ostream& out, - Elf_Half no, - std::string& name, - Elf64_Addr value, - Elf_Xword size, - unsigned char bind, - unsigned char type, - Elf_Half section, - unsigned int elf_class ) - { - std::ios_base::fmtflags original_flags = out.flags(); - - if ( elf_class == ELFCLASS32 ) { // Output for 32-bit - out << "[" - << DUMP_DEC_FORMAT( 5 ) << no - << "] " - << DUMP_HEX_FORMAT( 8 ) << value << " " - << DUMP_HEX_FORMAT( 8 ) << size << " " - << DUMP_STR_FORMAT( 7 ) << str_symbol_type( type ) << " " - << DUMP_STR_FORMAT( 8 ) << str_symbol_bind( bind ) << " " - << DUMP_DEC_FORMAT( 5 ) << section << " " - << DUMP_STR_FORMAT( 1 ) << name << " " - << std::endl; - } - else { // Output for 64-bit - out << "[" - << DUMP_DEC_FORMAT( 5 ) << no - << "] " - << DUMP_HEX_FORMAT( 16 ) << value << " " - << DUMP_HEX_FORMAT( 16 ) << size << " " - << DUMP_STR_FORMAT( 7 ) << str_symbol_type( type ) << " " - << DUMP_STR_FORMAT( 8 ) << str_symbol_bind( bind ) << " " - << DUMP_DEC_FORMAT( 5 ) << section << " " - << std::endl - << " " - << DUMP_STR_FORMAT( 1 ) << name << " " - << std::endl; - } - - out.flags(original_flags); - } - -//------------------------------------------------------------------------------ - static void - notes( std::ostream& out, const elfio& reader ) - { - Elf_Half no = reader.sections.size(); - for ( Elf_Half i = 0; i < no; ++i ) { // For all sections - section* sec = reader.sections[i]; - if ( SHT_NOTE == sec->get_type() ) { // Look at notes - note_section_accessor notes( reader, sec ); - int no_notes = notes.get_notes_num(); - if ( no > 0 ) { - out << "Note section (" << sec->get_name() << ")" << std::endl - << " No Type Name" - << std::endl; - for ( int j = 0; j < no_notes; ++j ) { // For all notes - Elf_Word type; - std::string name; - void* desc; - Elf_Word descsz; - - if ( notes.get_note(j, type, name, desc, descsz) ) { - // 'name' usually contains \0 at the end. Try to fix it - name = name.c_str(); - note( out, j, type, name ); - } - } - - out << std::endl; - } - } - } - } - -//------------------------------------------------------------------------------ - static void - note( std::ostream& out, - int no, - Elf_Word type, - const std::string& name ) - { - out << " [" - << DUMP_DEC_FORMAT( 2 ) << no - << "] " - << DUMP_HEX_FORMAT( 8 ) << type << " " - << DUMP_STR_FORMAT( 1 ) << name - << std::endl; - } - -//------------------------------------------------------------------------------ - static void - dynamic_tags( std::ostream& out, const elfio& reader ) - { - Elf_Half n = reader.sections.size(); - for ( Elf_Half i = 0; i < n; ++i ) { // For all sections - section* sec = reader.sections[i]; - if ( SHT_DYNAMIC == sec->get_type() ) { - dynamic_section_accessor dynamic( reader, sec ); - - Elf_Xword dyn_no = dynamic.get_entries_num(); - if ( dyn_no > 0 ) { - out << "Dynamic section (" << sec->get_name() << ")" << std::endl; - out << "[ Nr ] Tag Name/Value" << std::endl; - for ( Elf_Xword i = 0; i < dyn_no; ++i ) { - Elf_Xword tag = 0; - Elf_Xword value = 0; - std::string str; - dynamic.get_entry( i, tag, value, str ); - dynamic_tag( out, i, tag, value, str, reader.get_class() ); - if ( DT_NULL == tag ) { - break; - } - } - - out << std::endl; - } - } - } - } - -//------------------------------------------------------------------------------ - static void - dynamic_tag( std::ostream& out, - Elf_Xword no, - Elf_Xword tag, - Elf_Xword value, - std::string str, - unsigned int /*elf_class*/ ) - { - out << "[" - << DUMP_DEC_FORMAT( 5 ) << no - << "] " - << DUMP_STR_FORMAT( 16 ) << str_dynamic_tag( tag ) << " "; - if ( str.empty() ) { - out << DUMP_HEX_FORMAT( 16 ) << value << " "; - } - else { - out << DUMP_STR_FORMAT( 32 ) << str << " "; - } - out << std::endl; - } - -//------------------------------------------------------------------------------ - static void - section_data( std::ostream& out, const section* sec ) - { - std::ios_base::fmtflags original_flags = out.flags(); - - out << sec->get_name() << std::endl; - const char* pdata = sec->get_data(); - if ( pdata ){ - ELFIO::Elf_Xword i; - for ( i = 0; i < std::min( sec->get_size(), MAX_DATA_ENTRIES ); ++i ) { - if ( i % 16 == 0 ) { - out << "[" << DUMP_HEX_FORMAT( 8 ) << i << "]"; - } - - out << " " << DUMP_HEX_FORMAT( 2 ) << ( pdata[i] & 0x000000FF ); - - if ( i % 16 == 15 ) { - out << std::endl; - } - } - if ( i % 16 != 0 ) { - out << std::endl; - } - - out.flags(original_flags); - } - - return; - } - -//------------------------------------------------------------------------------ - static void - section_datas( std::ostream& out, const elfio& reader ) - { - Elf_Half n = reader.sections.size(); - - if ( n == 0 ) { - return; - } - - out << "Section Data:" << std::endl; - - for ( Elf_Half i = 1; i < n; ++i ) { // For all sections - section* sec = reader.sections[i]; - if ( sec->get_type() == SHT_NOBITS ) { - continue; - } - section_data( out, sec ); - } - - out << std::endl; - } - -//------------------------------------------------------------------------------ - static void - segment_data( std::ostream& out, Elf_Half no, const segment* seg ) - { - std::ios_base::fmtflags original_flags = out.flags(); - - out << "Segment # " << no << std::endl; - const char* pdata = seg->get_data(); - if ( pdata ) { - ELFIO::Elf_Xword i; - for ( i = 0; i < std::min( seg->get_file_size(), MAX_DATA_ENTRIES ); ++i ) { - if ( i % 16 == 0 ) { - out << "[" << DUMP_HEX_FORMAT( 8 ) << i << "]"; - } - - out << " " << DUMP_HEX_FORMAT( 2 ) << ( pdata[i] & 0x000000FF ); - - if ( i % 16 == 15 ) { - out << std::endl; - } - } - if ( i % 16 != 0 ) { - out << std::endl; - } - - out.flags(original_flags); - } - - return; - } - -//------------------------------------------------------------------------------ - static void - segment_datas( std::ostream& out, const elfio& reader ) - { - Elf_Half n = reader.segments.size(); - - if ( n == 0 ) { - return; - } - - out << "Segment Data:" << std::endl; - - for ( Elf_Half i = 0; i < n; ++i ) { // For all sections - segment* seg = reader.segments[i]; - segment_data( out, i, seg ); - } - - out << std::endl; - } - - private: -//------------------------------------------------------------------------------ - template< typename T, typename K > - std::string - static - find_value_in_table( const T& table, const K& key ) - { - std::string res = "?"; - for ( unsigned int i = 0; i < sizeof( table )/sizeof( table[0] ); ++i ) { - if ( table[i].key == key ) { - res = table[i].str; - break; - } - } - - return res; - } - - -//------------------------------------------------------------------------------ - template< typename T, typename K > - static - std::string - format_assoc( const T& table, const K& key ) - { - std::string str = find_value_in_table( table, key ); - if ( str == "?" ) { - std::ostringstream oss; - oss << str << " (0x" << std::hex << key << ")"; - str = oss.str(); - } - - return str; - } - - -//------------------------------------------------------------------------------ - template< typename T > - static - std::string - format_assoc( const T& table, const char key ) - { - return format_assoc( table, (const int)key ); - } - - -//------------------------------------------------------------------------------ - static - std::string - section_flags( Elf_Xword flags ) - { - std::string ret = ""; - if ( flags & SHF_WRITE ) { - ret += "W"; - } - if ( flags & SHF_ALLOC ) { - ret += "A"; - } - if ( flags & SHF_EXECINSTR ) { - ret += "X"; - } - - return ret; - } - - -//------------------------------------------------------------------------------ -#define STR_FUNC_TABLE( name ) \ - template< typename T > \ - static \ - std::string \ - str_##name( const T key ) \ - { \ - return format_assoc( name##_table, key ); \ - } - - STR_FUNC_TABLE( class ) - STR_FUNC_TABLE( endian ) - STR_FUNC_TABLE( version ) - STR_FUNC_TABLE( type ) - STR_FUNC_TABLE( machine ) - STR_FUNC_TABLE( section_type ) - STR_FUNC_TABLE( segment_type ) - STR_FUNC_TABLE( segment_flag ) - STR_FUNC_TABLE( symbol_bind ) - STR_FUNC_TABLE( symbol_type ) - STR_FUNC_TABLE( dynamic_tag ) - -#undef STR_FUNC_TABLE -#undef DUMP_DEC_FORMAT -#undef DUMP_HEX_FORMAT -#undef DUMP_STR_FORMAT -}; // class dump - - -}; // namespace ELFIO - -#endif // ELFIO_DUMP_HPP diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_dynamic.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_dynamic.hpp deleted file mode 100644 index 42f26805b..000000000 --- a/tools/ZAPD/lib/elfio/elfio/elfio_dynamic.hpp +++ /dev/null @@ -1,257 +0,0 @@ -/* -Copyright (C) 2001-2015 by Serge Lamikhov-Center - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef ELFIO_DYNAMIC_HPP -#define ELFIO_DYNAMIC_HPP - -namespace ELFIO { - -//------------------------------------------------------------------------------ -template< class S > -class dynamic_section_accessor_template -{ - public: -//------------------------------------------------------------------------------ - dynamic_section_accessor_template( const elfio& elf_file_, S* section_ ) : - elf_file( elf_file_ ), - dynamic_section( section_ ) - { - } - -//------------------------------------------------------------------------------ - Elf_Xword - get_entries_num() const - { - Elf_Xword nRet = 0; - - if ( 0 != dynamic_section->get_entry_size() ) { - nRet = dynamic_section->get_size() / dynamic_section->get_entry_size(); - } - - return nRet; - } - -//------------------------------------------------------------------------------ - bool - get_entry( Elf_Xword index, - Elf_Xword& tag, - Elf_Xword& value, - std::string& str ) const - { - if ( index >= get_entries_num() ) { // Is index valid - return false; - } - - if ( elf_file.get_class() == ELFCLASS32 ) { - generic_get_entry_dyn< Elf32_Dyn >( index, tag, value ); - } - else { - generic_get_entry_dyn< Elf64_Dyn >( index, tag, value ); - } - - // If the tag may have a string table reference, prepare the string - if ( tag == DT_NEEDED || - tag == DT_SONAME || - tag == DT_RPATH || - tag == DT_RUNPATH ) { - string_section_accessor strsec = - elf_file.sections[ get_string_table_index() ]; - const char* result = strsec.get_string( value ); - if ( 0 == result ) { - str.clear(); - return false; - } - str = result; - } - else { - str.clear(); - } - - return true; - } - -//------------------------------------------------------------------------------ - void - add_entry( Elf_Xword tag, - Elf_Xword value ) - { - if ( elf_file.get_class() == ELFCLASS32 ) { - generic_add_entry< Elf32_Dyn >( tag, value ); - } - else { - generic_add_entry< Elf64_Dyn >( tag, value ); - } - } - -//------------------------------------------------------------------------------ - void - add_entry( Elf_Xword tag, - const std::string& str ) - { - string_section_accessor strsec = - elf_file.sections[ get_string_table_index() ]; - Elf_Xword value = strsec.add_string( str ); - add_entry( tag, value ); - } - -//------------------------------------------------------------------------------ - private: -//------------------------------------------------------------------------------ - Elf_Half - get_string_table_index() const - { - return (Elf_Half)dynamic_section->get_link(); - } - -//------------------------------------------------------------------------------ - template< class T > - void - generic_get_entry_dyn( Elf_Xword index, - Elf_Xword& tag, - Elf_Xword& value ) const - { - const endianess_convertor& convertor = elf_file.get_convertor(); - - // Check unusual case when dynamic section has no data - if( dynamic_section->get_data() == 0 || - ( index + 1 ) * dynamic_section->get_entry_size() > dynamic_section->get_size() ) { - tag = DT_NULL; - value = 0; - return; - } - - const T* pEntry = reinterpret_cast( - dynamic_section->get_data() + - index * dynamic_section->get_entry_size() ); - tag = convertor( pEntry->d_tag ); - switch ( tag ) { - case DT_NULL: - case DT_SYMBOLIC: - case DT_TEXTREL: - case DT_BIND_NOW: - value = 0; - break; - case DT_NEEDED: - case DT_PLTRELSZ: - case DT_RELASZ: - case DT_RELAENT: - case DT_STRSZ: - case DT_SYMENT: - case DT_SONAME: - case DT_RPATH: - case DT_RELSZ: - case DT_RELENT: - case DT_PLTREL: - case DT_INIT_ARRAYSZ: - case DT_FINI_ARRAYSZ: - case DT_RUNPATH: - case DT_FLAGS: - case DT_PREINIT_ARRAYSZ: - value = convertor( pEntry->d_un.d_val ); - break; - case DT_PLTGOT: - case DT_HASH: - case DT_STRTAB: - case DT_SYMTAB: - case DT_RELA: - case DT_INIT: - case DT_FINI: - case DT_REL: - case DT_DEBUG: - case DT_JMPREL: - case DT_INIT_ARRAY: - case DT_FINI_ARRAY: - case DT_PREINIT_ARRAY: - default: - value = convertor( pEntry->d_un.d_ptr ); - break; - } - } - -//------------------------------------------------------------------------------ - template< class T > - void - generic_add_entry( Elf_Xword tag, Elf_Xword value ) - { - const endianess_convertor& convertor = elf_file.get_convertor(); - - T entry; - - switch ( tag ) { - case DT_NULL: - case DT_SYMBOLIC: - case DT_TEXTREL: - case DT_BIND_NOW: - value = 0; - case DT_NEEDED: - case DT_PLTRELSZ: - case DT_RELASZ: - case DT_RELAENT: - case DT_STRSZ: - case DT_SYMENT: - case DT_SONAME: - case DT_RPATH: - case DT_RELSZ: - case DT_RELENT: - case DT_PLTREL: - case DT_INIT_ARRAYSZ: - case DT_FINI_ARRAYSZ: - case DT_RUNPATH: - case DT_FLAGS: - case DT_PREINIT_ARRAYSZ: - entry.d_un.d_val = convertor( value ); - break; - case DT_PLTGOT: - case DT_HASH: - case DT_STRTAB: - case DT_SYMTAB: - case DT_RELA: - case DT_INIT: - case DT_FINI: - case DT_REL: - case DT_DEBUG: - case DT_JMPREL: - case DT_INIT_ARRAY: - case DT_FINI_ARRAY: - case DT_PREINIT_ARRAY: - default: - entry.d_un.d_ptr = convertor( value ); - break; - } - - entry.d_tag = convertor( tag ); - - dynamic_section->append_data( reinterpret_cast( &entry ), sizeof( entry ) ); - } - -//------------------------------------------------------------------------------ - private: - const elfio& elf_file; - S* dynamic_section; -}; - -using dynamic_section_accessor = dynamic_section_accessor_template
; -using const_dynamic_section_accessor = dynamic_section_accessor_template; - -} // namespace ELFIO - -#endif // ELFIO_DYNAMIC_HPP diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_header.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_header.hpp deleted file mode 100644 index 6f8da0285..000000000 --- a/tools/ZAPD/lib/elfio/elfio/elfio_header.hpp +++ /dev/null @@ -1,145 +0,0 @@ -/* -Copyright (C) 2001-2015 by Serge Lamikhov-Center - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef ELF_HEADER_HPP -#define ELF_HEADER_HPP - -#include - -namespace ELFIO { - -class elf_header -{ - public: - virtual ~elf_header() {}; - virtual bool load( std::istream& stream ) = 0; - virtual bool save( std::ostream& stream ) const = 0; - - // ELF header functions - ELFIO_GET_ACCESS_DECL( unsigned char, class ); - ELFIO_GET_ACCESS_DECL( unsigned char, elf_version ); - ELFIO_GET_ACCESS_DECL( unsigned char, encoding ); - ELFIO_GET_ACCESS_DECL( Elf_Half, header_size ); - ELFIO_GET_ACCESS_DECL( Elf_Half, section_entry_size ); - ELFIO_GET_ACCESS_DECL( Elf_Half, segment_entry_size ); - - ELFIO_GET_SET_ACCESS_DECL( Elf_Word, version ); - ELFIO_GET_SET_ACCESS_DECL( unsigned char, os_abi ); - ELFIO_GET_SET_ACCESS_DECL( unsigned char, abi_version ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Half, type ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Half, machine ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Word, flags ); - ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, entry ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Half, sections_num ); - ELFIO_GET_SET_ACCESS_DECL( Elf64_Off, sections_offset ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Half, segments_num ); - ELFIO_GET_SET_ACCESS_DECL( Elf64_Off, segments_offset ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Half, section_name_str_index ); -}; - - -template< class T > struct elf_header_impl_types; -template<> struct elf_header_impl_types { - typedef Elf32_Phdr Phdr_type; - typedef Elf32_Shdr Shdr_type; - static const unsigned char file_class = ELFCLASS32; -}; -template<> struct elf_header_impl_types { - typedef Elf64_Phdr Phdr_type; - typedef Elf64_Shdr Shdr_type; - static const unsigned char file_class = ELFCLASS64; -}; - -template< class T > class elf_header_impl : public elf_header -{ - public: - elf_header_impl( endianess_convertor* convertor_, - unsigned char encoding ) - { - convertor = convertor_; - - std::fill_n( reinterpret_cast( &header ), sizeof( header ), '\0' ); - - header.e_ident[EI_MAG0] = ELFMAG0; - header.e_ident[EI_MAG1] = ELFMAG1; - header.e_ident[EI_MAG2] = ELFMAG2; - header.e_ident[EI_MAG3] = ELFMAG3; - header.e_ident[EI_CLASS] = elf_header_impl_types::file_class; - header.e_ident[EI_DATA] = encoding; - header.e_ident[EI_VERSION] = EV_CURRENT; - header.e_version = (*convertor)( (Elf_Word)EV_CURRENT ); - header.e_ehsize = ( sizeof( header ) ); - header.e_ehsize = (*convertor)( header.e_ehsize ); - header.e_shstrndx = (*convertor)( (Elf_Half)1 ); - header.e_phentsize = sizeof( typename elf_header_impl_types::Phdr_type ); - header.e_shentsize = sizeof( typename elf_header_impl_types::Shdr_type ); - header.e_phentsize = (*convertor)( header.e_phentsize ); - header.e_shentsize = (*convertor)( header.e_shentsize ); - } - - bool - load( std::istream& stream ) - { - stream.seekg( 0 ); - stream.read( reinterpret_cast( &header ), sizeof( header ) ); - - return (stream.gcount() == sizeof( header ) ); - } - - bool - save( std::ostream& stream ) const - { - stream.seekp( 0 ); - stream.write( reinterpret_cast( &header ), sizeof( header ) ); - - return stream.good(); - } - - // ELF header functions - ELFIO_GET_ACCESS( unsigned char, class, header.e_ident[EI_CLASS] ); - ELFIO_GET_ACCESS( unsigned char, elf_version, header.e_ident[EI_VERSION] ); - ELFIO_GET_ACCESS( unsigned char, encoding, header.e_ident[EI_DATA] ); - ELFIO_GET_ACCESS( Elf_Half, header_size, header.e_ehsize ); - ELFIO_GET_ACCESS( Elf_Half, section_entry_size, header.e_shentsize ); - ELFIO_GET_ACCESS( Elf_Half, segment_entry_size, header.e_phentsize ); - - ELFIO_GET_SET_ACCESS( Elf_Word, version, header.e_version); - ELFIO_GET_SET_ACCESS( unsigned char, os_abi, header.e_ident[EI_OSABI] ); - ELFIO_GET_SET_ACCESS( unsigned char, abi_version, header.e_ident[EI_ABIVERSION] ); - ELFIO_GET_SET_ACCESS( Elf_Half, type, header.e_type ); - ELFIO_GET_SET_ACCESS( Elf_Half, machine, header.e_machine ); - ELFIO_GET_SET_ACCESS( Elf_Word, flags, header.e_flags ); - ELFIO_GET_SET_ACCESS( Elf_Half, section_name_str_index, header.e_shstrndx ); - ELFIO_GET_SET_ACCESS( Elf64_Addr, entry, header.e_entry ); - ELFIO_GET_SET_ACCESS( Elf_Half, sections_num, header.e_shnum ); - ELFIO_GET_SET_ACCESS( Elf64_Off, sections_offset, header.e_shoff ); - ELFIO_GET_SET_ACCESS( Elf_Half, segments_num, header.e_phnum ); - ELFIO_GET_SET_ACCESS( Elf64_Off, segments_offset, header.e_phoff ); - - private: - T header; - endianess_convertor* convertor; -}; - -} // namespace ELFIO - -#endif // ELF_HEADER_HPP diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_note.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_note.hpp deleted file mode 100644 index 8619c7385..000000000 --- a/tools/ZAPD/lib/elfio/elfio/elfio_note.hpp +++ /dev/null @@ -1,170 +0,0 @@ -/* -Copyright (C) 2001-2015 by Serge Lamikhov-Center - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef ELFIO_NOTE_HPP -#define ELFIO_NOTE_HPP - -namespace ELFIO { - -//------------------------------------------------------------------------------ -// There are discrepancies in documentations. SCO documentation -// (http://www.sco.com/developers/gabi/latest/ch5.pheader.html#note_section) -// requires 8 byte entries alignment for 64-bit ELF file, -// but Oracle's definition uses the same structure -// for 32-bit and 64-bit formats. -// (https://docs.oracle.com/cd/E23824_01/html/819-0690/chapter6-18048.html) -// -// It looks like EM_X86_64 Linux implementation is similar to Oracle's -// definition. Therefore, the same alignment works for both formats -//------------------------------------------------------------------------------ - -//------------------------------------------------------------------------------ -template< class S > -class note_section_accessor_template -{ - public: -//------------------------------------------------------------------------------ - note_section_accessor_template( const elfio& elf_file_, S* section_ ) : - elf_file( elf_file_ ), note_section( section_ ) - { - process_section(); - } - -//------------------------------------------------------------------------------ - Elf_Word - get_notes_num() const - { - return (Elf_Word)note_start_positions.size(); - } - -//------------------------------------------------------------------------------ - bool - get_note( Elf_Word index, - Elf_Word& type, - std::string& name, - void*& desc, - Elf_Word& descSize ) const - { - if ( index >= note_section->get_size() ) { - return false; - } - - const char* pData = note_section->get_data() + note_start_positions[index]; - int align = sizeof( Elf_Word ); - - const endianess_convertor& convertor = elf_file.get_convertor(); - type = convertor( *(const Elf_Word*)( pData + 2*align ) ); - Elf_Word namesz = convertor( *(const Elf_Word*)( pData ) ); - descSize = convertor( *(const Elf_Word*)( pData + sizeof( namesz ) ) ); - Elf_Xword max_name_size = note_section->get_size() - note_start_positions[index]; - if ( namesz > max_name_size || - namesz + descSize > max_name_size ) { - return false; - } - name.assign( pData + 3*align, namesz - 1); - if ( 0 == descSize ) { - desc = 0; - } - else { - desc = const_cast ( pData + 3*align + - ( ( namesz + align - 1 )/align )*align ); - } - - return true; - } - -//------------------------------------------------------------------------------ - void add_note( Elf_Word type, - const std::string& name, - const void* desc, - Elf_Word descSize ) - { - const endianess_convertor& convertor = elf_file.get_convertor(); - - int align = sizeof( Elf_Word ); - Elf_Word nameLen = (Elf_Word)name.size() + 1; - Elf_Word nameLenConv = convertor( nameLen ); - std::string buffer( reinterpret_cast( &nameLenConv ), align ); - Elf_Word descSizeConv = convertor( descSize ); - buffer.append( reinterpret_cast( &descSizeConv ), align ); - type = convertor( type ); - buffer.append( reinterpret_cast( &type ), align ); - buffer.append( name ); - buffer.append( 1, '\x00' ); - const char pad[] = { '\0', '\0', '\0', '\0' }; - if ( nameLen % align != 0 ) { - buffer.append( pad, align - nameLen % align ); - } - if ( desc != 0 && descSize != 0 ) { - buffer.append( reinterpret_cast( desc ), descSize ); - if ( descSize % align != 0 ) { - buffer.append( pad, align - descSize % align ); - } - } - - note_start_positions.push_back( note_section->get_size() ); - note_section->append_data( buffer ); - } - - private: -//------------------------------------------------------------------------------ - void process_section() - { - const endianess_convertor& convertor = elf_file.get_convertor(); - const char* data = note_section->get_data(); - Elf_Xword size = note_section->get_size(); - Elf_Xword current = 0; - - note_start_positions.clear(); - - // Is it empty? - if ( 0 == data || 0 == size ) { - return; - } - - int align = sizeof( Elf_Word ); - while ( current + 3*align <= size ) { - note_start_positions.push_back( current ); - Elf_Word namesz = convertor( - *(const Elf_Word*)( data + current ) ); - Elf_Word descsz = convertor( - *(const Elf_Word*)( data + current + sizeof( namesz ) ) ); - - current += 3*sizeof( Elf_Word ) + - ( ( namesz + align - 1 ) / align ) * align + - ( ( descsz + align - 1 ) / align ) * align; - } - } - -//------------------------------------------------------------------------------ - private: - const elfio& elf_file; - S* note_section; - std::vector note_start_positions; -}; - -using note_section_accessor = note_section_accessor_template
; -using const_note_section_accessor = note_section_accessor_template; - -} // namespace ELFIO - -#endif // ELFIO_NOTE_HPP diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_relocation.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_relocation.hpp deleted file mode 100644 index 238598e97..000000000 --- a/tools/ZAPD/lib/elfio/elfio/elfio_relocation.hpp +++ /dev/null @@ -1,373 +0,0 @@ -/* -Copyright (C) 2001-2015 by Serge Lamikhov-Center - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef ELFIO_RELOCATION_HPP -#define ELFIO_RELOCATION_HPP - -namespace ELFIO { - -template struct get_sym_and_type; -template<> struct get_sym_and_type< Elf32_Rel > -{ - static int get_r_sym( Elf_Xword info ) - { - return ELF32_R_SYM( (Elf_Word)info ); - } - static int get_r_type( Elf_Xword info ) - { - return ELF32_R_TYPE( (Elf_Word)info ); - } -}; -template<> struct get_sym_and_type< Elf32_Rela > -{ - static int get_r_sym( Elf_Xword info ) - { - return ELF32_R_SYM( (Elf_Word)info ); - } - static int get_r_type( Elf_Xword info ) - { - return ELF32_R_TYPE( (Elf_Word)info ); - } -}; -template<> struct get_sym_and_type< Elf64_Rel > -{ - static int get_r_sym( Elf_Xword info ) - { - return ELF64_R_SYM( info ); - } - static int get_r_type( Elf_Xword info ) - { - return ELF64_R_TYPE( info ); - } -}; -template<> struct get_sym_and_type< Elf64_Rela > -{ - static int get_r_sym( Elf_Xword info ) - { - return ELF64_R_SYM( info ); - } - static int get_r_type( Elf_Xword info ) - { - return ELF64_R_TYPE( info ); - } -}; - - -//------------------------------------------------------------------------------ -template< class S > -class relocation_section_accessor_template -{ - public: -//------------------------------------------------------------------------------ - relocation_section_accessor_template( const elfio& elf_file_, S* section_ ) : - elf_file( elf_file_ ), - relocation_section( section_ ) - { - } - -//------------------------------------------------------------------------------ - Elf_Xword - get_entries_num() const - { - Elf_Xword nRet = 0; - - if ( 0 != relocation_section->get_entry_size() ) { - nRet = relocation_section->get_size() / relocation_section->get_entry_size(); - } - - return nRet; - } - -//------------------------------------------------------------------------------ - bool - get_entry( Elf_Xword index, - Elf64_Addr& offset, - Elf_Word& symbol, - Elf_Word& type, - Elf_Sxword& addend ) const - { - if ( index >= get_entries_num() ) { // Is index valid - return false; - } - - if ( elf_file.get_class() == ELFCLASS32 ) { - if ( SHT_REL == relocation_section->get_type() ) { - generic_get_entry_rel< Elf32_Rel >( index, offset, symbol, - type, addend ); - } - else if ( SHT_RELA == relocation_section->get_type() ) { - generic_get_entry_rela< Elf32_Rela >( index, offset, symbol, - type, addend ); - } - } - else { - if ( SHT_REL == relocation_section->get_type() ) { - generic_get_entry_rel< Elf64_Rel >( index, offset, symbol, - type, addend ); - } - else if ( SHT_RELA == relocation_section->get_type() ) { - generic_get_entry_rela< Elf64_Rela >( index, offset, symbol, - type, addend ); - } - } - - return true; - } - -//------------------------------------------------------------------------------ - bool - get_entry( Elf_Xword index, - Elf64_Addr& offset, - Elf64_Addr& symbolValue, - std::string& symbolName, - Elf_Word& type, - Elf_Sxword& addend, - Elf_Sxword& calcValue ) const - { - // Do regular job - Elf_Word symbol; - bool ret = get_entry( index, offset, symbol, type, addend ); - - // Find the symbol - Elf_Xword size; - unsigned char bind; - unsigned char symbolType; - Elf_Half section; - unsigned char other; - - symbol_section_accessor symbols( elf_file, elf_file.sections[get_symbol_table_index()] ); - ret = ret && symbols.get_symbol( symbol, symbolName, symbolValue, - size, bind, symbolType, section, other ); - - if ( ret ) { // Was it successful? - switch ( type ) { - case R_386_NONE: // none - calcValue = 0; - break; - case R_386_32: // S + A - calcValue = symbolValue + addend; - break; - case R_386_PC32: // S + A - P - calcValue = symbolValue + addend - offset; - break; - case R_386_GOT32: // G + A - P - calcValue = 0; - break; - case R_386_PLT32: // L + A - P - calcValue = 0; - break; - case R_386_COPY: // none - calcValue = 0; - break; - case R_386_GLOB_DAT: // S - case R_386_JMP_SLOT: // S - calcValue = symbolValue; - break; - case R_386_RELATIVE: // B + A - calcValue = addend; - break; - case R_386_GOTOFF: // S + A - GOT - calcValue = 0; - break; - case R_386_GOTPC: // GOT + A - P - calcValue = 0; - break; - default: // Not recognized symbol! - calcValue = 0; - break; - } - } - - return ret; - } - -//------------------------------------------------------------------------------ - void - add_entry( Elf64_Addr offset, Elf_Xword info ) - { - if ( elf_file.get_class() == ELFCLASS32 ) { - generic_add_entry< Elf32_Rel >( offset, info ); - } - else { - generic_add_entry< Elf64_Rel >( offset, info ); - } - } - -//------------------------------------------------------------------------------ - void - add_entry( Elf64_Addr offset, Elf_Word symbol, unsigned char type ) - { - Elf_Xword info; - if ( elf_file.get_class() == ELFCLASS32 ) { - info = ELF32_R_INFO( (Elf_Xword)symbol, type ); - } - else { - info = ELF64_R_INFO((Elf_Xword)symbol, type ); - } - - add_entry( offset, info ); - } - -//------------------------------------------------------------------------------ - void - add_entry( Elf64_Addr offset, Elf_Xword info, Elf_Sxword addend ) - { - if ( elf_file.get_class() == ELFCLASS32 ) { - generic_add_entry< Elf32_Rela >( offset, info, addend ); - } - else { - generic_add_entry< Elf64_Rela >( offset, info, addend ); - } - } - -//------------------------------------------------------------------------------ - void - add_entry( Elf64_Addr offset, Elf_Word symbol, unsigned char type, - Elf_Sxword addend ) - { - Elf_Xword info; - if ( elf_file.get_class() == ELFCLASS32 ) { - info = ELF32_R_INFO( (Elf_Xword)symbol, type ); - } - else { - info = ELF64_R_INFO( (Elf_Xword)symbol, type ); - } - - add_entry( offset, info, addend ); - } - -//------------------------------------------------------------------------------ - void - add_entry( string_section_accessor str_writer, - const char* str, - symbol_section_accessor sym_writer, - Elf64_Addr value, - Elf_Word size, - unsigned char sym_info, - unsigned char other, - Elf_Half shndx, - Elf64_Addr offset, - unsigned char type ) - { - Elf_Word str_index = str_writer.add_string( str ); - Elf_Word sym_index = sym_writer.add_symbol( str_index, value, size, - sym_info, other, shndx ); - add_entry( offset, sym_index, type ); - } - -//------------------------------------------------------------------------------ - private: -//------------------------------------------------------------------------------ - Elf_Half - get_symbol_table_index() const - { - return (Elf_Half)relocation_section->get_link(); - } - -//------------------------------------------------------------------------------ - template< class T > - void - generic_get_entry_rel( Elf_Xword index, - Elf64_Addr& offset, - Elf_Word& symbol, - Elf_Word& type, - Elf_Sxword& addend ) const - { - const endianess_convertor& convertor = elf_file.get_convertor(); - - const T* pEntry = reinterpret_cast( - relocation_section->get_data() + - index * relocation_section->get_entry_size() ); - offset = convertor( pEntry->r_offset ); - Elf_Xword tmp = convertor( pEntry->r_info ); - symbol = get_sym_and_type::get_r_sym( tmp ); - type = get_sym_and_type::get_r_type( tmp ); - addend = 0; - } - -//------------------------------------------------------------------------------ - template< class T > - void - generic_get_entry_rela( Elf_Xword index, - Elf64_Addr& offset, - Elf_Word& symbol, - Elf_Word& type, - Elf_Sxword& addend ) const - { - const endianess_convertor& convertor = elf_file.get_convertor(); - - const T* pEntry = reinterpret_cast( - relocation_section->get_data() + - index * relocation_section->get_entry_size() ); - offset = convertor( pEntry->r_offset ); - Elf_Xword tmp = convertor( pEntry->r_info ); - symbol = get_sym_and_type::get_r_sym( tmp ); - type = get_sym_and_type::get_r_type( tmp ); - addend = convertor( pEntry->r_addend ); - } - -//------------------------------------------------------------------------------ - template< class T > - void - generic_add_entry( Elf64_Addr offset, Elf_Xword info ) - { - const endianess_convertor& convertor = elf_file.get_convertor(); - - T entry; - entry.r_offset = offset; - entry.r_info = info; - entry.r_offset = convertor( entry.r_offset ); - entry.r_info = convertor( entry.r_info ); - - relocation_section->append_data( reinterpret_cast( &entry ), sizeof( entry ) ); - } - -//------------------------------------------------------------------------------ - template< class T > - void - generic_add_entry( Elf64_Addr offset, Elf_Xword info, Elf_Sxword addend ) - { - const endianess_convertor& convertor = elf_file.get_convertor(); - - T entry; - entry.r_offset = offset; - entry.r_info = info; - entry.r_addend = addend; - entry.r_offset = convertor( entry.r_offset ); - entry.r_info = convertor( entry.r_info ); - entry.r_addend = convertor( entry.r_addend ); - - relocation_section->append_data( reinterpret_cast( &entry ), sizeof( entry ) ); - } - -//------------------------------------------------------------------------------ - private: - const elfio& elf_file; - S* relocation_section; -}; - -using relocation_section_accessor = relocation_section_accessor_template
; -using const_relocation_section_accessor = relocation_section_accessor_template; - -} // namespace ELFIO - -#endif // ELFIO_RELOCATION_HPP diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_section.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_section.hpp deleted file mode 100644 index 3bfc2333c..000000000 --- a/tools/ZAPD/lib/elfio/elfio/elfio_section.hpp +++ /dev/null @@ -1,314 +0,0 @@ -/* -Copyright (C) 2001-2015 by Serge Lamikhov-Center - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef ELFIO_SECTION_HPP -#define ELFIO_SECTION_HPP - -#include -#include - -namespace ELFIO { - -class section -{ - friend class elfio; - public: - virtual ~section() {}; - - ELFIO_GET_ACCESS_DECL ( Elf_Half, index ); - ELFIO_GET_SET_ACCESS_DECL( std::string, name ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Word, type ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, flags ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Word, info ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Word, link ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, addr_align ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, entry_size ); - ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, address ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, size ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Word, name_string_offset ); - ELFIO_GET_ACCESS_DECL ( Elf64_Off, offset ); - size_t stream_size; - size_t get_stream_size() const - { - return stream_size; - } - - void set_stream_size(size_t value) - { - stream_size = value; - } - - virtual const char* get_data() const = 0; - virtual void set_data( const char* pData, Elf_Word size ) = 0; - virtual void set_data( const std::string& data ) = 0; - virtual void append_data( const char* pData, Elf_Word size ) = 0; - virtual void append_data( const std::string& data ) = 0; - - protected: - ELFIO_SET_ACCESS_DECL( Elf64_Off, offset ); - ELFIO_SET_ACCESS_DECL( Elf_Half, index ); - - virtual void load( std::istream& stream, - std::streampos header_offset ) = 0; - virtual void save( std::ostream& stream, - std::streampos header_offset, - std::streampos data_offset ) = 0; - virtual bool is_address_initialized() const = 0; -}; - - -template< class T > -class section_impl : public section -{ - public: -//------------------------------------------------------------------------------ - section_impl( const endianess_convertor* convertor_ ) : convertor( convertor_ ) - { - std::fill_n( reinterpret_cast( &header ), sizeof( header ), '\0' ); - is_address_set = false; - data = 0; - data_size = 0; - } - -//------------------------------------------------------------------------------ - ~section_impl() - { - delete [] data; - } - -//------------------------------------------------------------------------------ - // Section info functions - ELFIO_GET_SET_ACCESS( Elf_Word, type, header.sh_type ); - ELFIO_GET_SET_ACCESS( Elf_Xword, flags, header.sh_flags ); - ELFIO_GET_SET_ACCESS( Elf_Xword, size, header.sh_size ); - ELFIO_GET_SET_ACCESS( Elf_Word, link, header.sh_link ); - ELFIO_GET_SET_ACCESS( Elf_Word, info, header.sh_info ); - ELFIO_GET_SET_ACCESS( Elf_Xword, addr_align, header.sh_addralign ); - ELFIO_GET_SET_ACCESS( Elf_Xword, entry_size, header.sh_entsize ); - ELFIO_GET_SET_ACCESS( Elf_Word, name_string_offset, header.sh_name ); - ELFIO_GET_ACCESS ( Elf64_Addr, address, header.sh_addr ); - -//------------------------------------------------------------------------------ - Elf_Half - get_index() const - { - return index; - } - - -//------------------------------------------------------------------------------ - std::string - get_name() const - { - return name; - } - -//------------------------------------------------------------------------------ - void - set_name( std::string name_ ) - { - name = name_; - } - -//------------------------------------------------------------------------------ - void - set_address( Elf64_Addr value ) - { - header.sh_addr = value; - header.sh_addr = (*convertor)( header.sh_addr ); - is_address_set = true; - } - -//------------------------------------------------------------------------------ - bool - is_address_initialized() const - { - return is_address_set; - } - -//------------------------------------------------------------------------------ - const char* - get_data() const - { - return data; - } - -//------------------------------------------------------------------------------ - void - set_data( const char* raw_data, Elf_Word size ) - { - if ( get_type() != SHT_NOBITS ) { - delete [] data; - try { - data = new char[size]; - } catch (const std::bad_alloc&) { - data = 0; - data_size = 0; - size = 0; - } - if ( 0 != data && 0 != raw_data ) { - data_size = size; - std::copy( raw_data, raw_data + size, data ); - } - } - - set_size( size ); - } - -//------------------------------------------------------------------------------ - void - set_data( const std::string& str_data ) - { - return set_data( str_data.c_str(), (Elf_Word)str_data.size() ); - } - -//------------------------------------------------------------------------------ - void - append_data( const char* raw_data, Elf_Word size ) - { - if ( get_type() != SHT_NOBITS ) { - if ( get_size() + size < data_size ) { - std::copy( raw_data, raw_data + size, data + get_size() ); - } - else { - data_size = 2*( data_size + size); - char* new_data; - try { - new_data = new char[data_size]; - } catch (const std::bad_alloc&) { - new_data = 0; - size = 0; - } - if ( 0 != new_data ) { - std::copy( data, data + get_size(), new_data ); - std::copy( raw_data, raw_data + size, new_data + get_size() ); - delete [] data; - data = new_data; - } - } - set_size( get_size() + size ); - } - } - -//------------------------------------------------------------------------------ - void - append_data( const std::string& str_data ) - { - return append_data( str_data.c_str(), (Elf_Word)str_data.size() ); - } - -//------------------------------------------------------------------------------ - protected: -//------------------------------------------------------------------------------ - ELFIO_GET_SET_ACCESS( Elf64_Off, offset, header.sh_offset ); - -//------------------------------------------------------------------------------ - void - set_index( Elf_Half value ) - { - index = value; - } - -//------------------------------------------------------------------------------ - void - load( std::istream& stream, - std::streampos header_offset ) - { - std::fill_n( reinterpret_cast( &header ), sizeof( header ), '\0' ); - - stream.seekg ( 0, stream.end ); - set_stream_size ( stream.tellg() ); - - stream.seekg( header_offset ); - stream.read( reinterpret_cast( &header ), sizeof( header ) ); - - - Elf_Xword size = get_size(); - if ( 0 == data && SHT_NULL != get_type() && SHT_NOBITS != get_type() && size < get_stream_size()) { - try { - data = new char[size + 1]; - } catch (const std::bad_alloc&) { - data = 0; - data_size = 0; - } - - if ( ( 0 != size ) && ( 0 != data ) ) { - stream.seekg( (*convertor)( header.sh_offset ) ); - stream.read( data, size ); - data[size] = 0; // Ensure data is ended with 0 to avoid oob read - data_size = size; - } - } - } - -//------------------------------------------------------------------------------ - void - save( std::ostream& stream, - std::streampos header_offset, - std::streampos data_offset ) - { - if ( 0 != get_index() ) { - header.sh_offset = data_offset; - header.sh_offset = (*convertor)( header.sh_offset ); - } - - save_header( stream, header_offset ); - if ( get_type() != SHT_NOBITS && get_type() != SHT_NULL && - get_size() != 0 && data != 0 ) { - save_data( stream, data_offset ); - } - } - -//------------------------------------------------------------------------------ - private: -//------------------------------------------------------------------------------ - void - save_header( std::ostream& stream, - std::streampos header_offset ) const - { - stream.seekp( header_offset ); - stream.write( reinterpret_cast( &header ), sizeof( header ) ); - } - -//------------------------------------------------------------------------------ - void - save_data( std::ostream& stream, - std::streampos data_offset ) const - { - stream.seekp( data_offset ); - stream.write( get_data(), get_size() ); - } - -//------------------------------------------------------------------------------ - private: - T header; - Elf_Half index; - std::string name; - char* data; - Elf_Word data_size; - const endianess_convertor* convertor; - bool is_address_set; -}; - -} // namespace ELFIO - -#endif // ELFIO_SECTION_HPP diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_segment.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_segment.hpp deleted file mode 100644 index 642fd2907..000000000 --- a/tools/ZAPD/lib/elfio/elfio/elfio_segment.hpp +++ /dev/null @@ -1,246 +0,0 @@ -/* -Copyright (C) 2001-2015 by Serge Lamikhov-Center - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef ELFIO_SEGMENT_HPP -#define ELFIO_SEGMENT_HPP - -#include -#include - -namespace ELFIO { - -class segment -{ - friend class elfio; - public: - virtual ~segment() {}; - - ELFIO_GET_ACCESS_DECL ( Elf_Half, index ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Word, type ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Word, flags ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, align ); - ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, virtual_address ); - ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, physical_address ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, file_size ); - ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, memory_size ); - ELFIO_GET_ACCESS_DECL( Elf64_Off, offset ); - - virtual const char* get_data() const = 0; - - virtual Elf_Half add_section_index( Elf_Half index, Elf_Xword addr_align ) = 0; - virtual Elf_Half get_sections_num() const = 0; - virtual Elf_Half get_section_index_at( Elf_Half num ) const = 0; - virtual bool is_offset_initialized() const = 0; - - protected: - ELFIO_SET_ACCESS_DECL( Elf64_Off, offset ); - ELFIO_SET_ACCESS_DECL( Elf_Half, index ); - - virtual const std::vector& get_sections() const = 0; - virtual void load( std::istream& stream, std::streampos header_offset ) = 0; - virtual void save( std::ostream& stream, std::streampos header_offset, - std::streampos data_offset ) = 0; -}; - - -//------------------------------------------------------------------------------ -template< class T > -class segment_impl : public segment -{ - public: -//------------------------------------------------------------------------------ - segment_impl( endianess_convertor* convertor_ ) : - stream_size( 0 ), index( 0 ), data( 0 ), convertor( convertor_ ) - { - is_offset_set = false; - std::fill_n( reinterpret_cast( &ph ), sizeof( ph ), '\0' ); - } - -//------------------------------------------------------------------------------ - virtual ~segment_impl() - { - delete [] data; - } - -//------------------------------------------------------------------------------ - // Section info functions - ELFIO_GET_SET_ACCESS( Elf_Word, type, ph.p_type ); - ELFIO_GET_SET_ACCESS( Elf_Word, flags, ph.p_flags ); - ELFIO_GET_SET_ACCESS( Elf_Xword, align, ph.p_align ); - ELFIO_GET_SET_ACCESS( Elf64_Addr, virtual_address, ph.p_vaddr ); - ELFIO_GET_SET_ACCESS( Elf64_Addr, physical_address, ph.p_paddr ); - ELFIO_GET_SET_ACCESS( Elf_Xword, file_size, ph.p_filesz ); - ELFIO_GET_SET_ACCESS( Elf_Xword, memory_size, ph.p_memsz ); - ELFIO_GET_ACCESS( Elf64_Off, offset, ph.p_offset ); - size_t stream_size; - -//------------------------------------------------------------------------------ - size_t - get_stream_size() const - { - return stream_size; - } - -//------------------------------------------------------------------------------ - void - set_stream_size(size_t value) - { - stream_size = value; - } - -//------------------------------------------------------------------------------ - Elf_Half - get_index() const - { - return index; - } - -//------------------------------------------------------------------------------ - const char* - get_data() const - { - return data; - } - -//------------------------------------------------------------------------------ - Elf_Half - add_section_index( Elf_Half sec_index, Elf_Xword addr_align ) - { - sections.push_back( sec_index ); - if ( addr_align > get_align() ) { - set_align( addr_align ); - } - - return (Elf_Half)sections.size(); - } - -//------------------------------------------------------------------------------ - Elf_Half - get_sections_num() const - { - return (Elf_Half)sections.size(); - } - -//------------------------------------------------------------------------------ - Elf_Half - get_section_index_at( Elf_Half num ) const - { - if ( num < sections.size() ) { - return sections[num]; - } - - return Elf_Half(-1); - } - -//------------------------------------------------------------------------------ - protected: -//------------------------------------------------------------------------------ - -//------------------------------------------------------------------------------ - void - set_offset( Elf64_Off value ) - { - ph.p_offset = value; - ph.p_offset = (*convertor)( ph.p_offset ); - is_offset_set = true; - } - -//------------------------------------------------------------------------------ - bool - is_offset_initialized() const - { - return is_offset_set; - } - -//------------------------------------------------------------------------------ - const std::vector& - get_sections() const - { - return sections; - } - -//------------------------------------------------------------------------------ - void - set_index( Elf_Half value ) - { - index = value; - } - -//------------------------------------------------------------------------------ - void - load( std::istream& stream, - std::streampos header_offset ) - { - - stream.seekg ( 0, stream.end ); - set_stream_size ( stream.tellg() ); - - stream.seekg( header_offset ); - stream.read( reinterpret_cast( &ph ), sizeof( ph ) ); - is_offset_set = true; - - if ( PT_NULL != get_type() && 0 != get_file_size() ) { - stream.seekg( (*convertor)( ph.p_offset ) ); - Elf_Xword size = get_file_size(); - - if ( size > get_stream_size() ) { - data = 0; - } - else { - try { - data = new char[size + 1]; - } catch (const std::bad_alloc&) { - data = 0; - } - - if ( 0 != data ) { - stream.read( data, size ); - data[size] = 0; - } - } - } - } - -//------------------------------------------------------------------------------ - void save( std::ostream& stream, - std::streampos header_offset, - std::streampos data_offset ) - { - ph.p_offset = data_offset; - ph.p_offset = (*convertor)(ph.p_offset); - stream.seekp( header_offset ); - stream.write( reinterpret_cast( &ph ), sizeof( ph ) ); - } - -//------------------------------------------------------------------------------ - private: - T ph; - Elf_Half index; - char* data; - std::vector sections; - endianess_convertor* convertor; - bool is_offset_set; -}; - -} // namespace ELFIO - -#endif // ELFIO_SEGMENT_HPP diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_strings.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_strings.hpp deleted file mode 100644 index 552f00029..000000000 --- a/tools/ZAPD/lib/elfio/elfio/elfio_strings.hpp +++ /dev/null @@ -1,100 +0,0 @@ -/* -Copyright (C) 2001-2015 by Serge Lamikhov-Center - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef ELFIO_STRINGS_HPP -#define ELFIO_STRINGS_HPP - -#include -#include -#include - -namespace ELFIO { - -//------------------------------------------------------------------------------ -template< class S > -class string_section_accessor_template -{ - public: -//------------------------------------------------------------------------------ - string_section_accessor_template( S* section_ ) : - string_section( section_ ) - { - } - - -//------------------------------------------------------------------------------ - const char* - get_string( Elf_Word index ) const - { - if ( string_section ) { - if ( index < string_section->get_size() ) { - const char* data = string_section->get_data(); - if ( 0 != data ) { - return data + index; - } - } - } - - return 0; - } - - -//------------------------------------------------------------------------------ - Elf_Word - add_string( const char* str ) - { - Elf_Word current_position = 0; - - if (string_section) { - // Strings are addeded to the end of the current section data - current_position = (Elf_Word)string_section->get_size(); - - if ( current_position == 0 ) { - char empty_string = '\0'; - string_section->append_data( &empty_string, 1 ); - current_position++; - } - string_section->append_data( str, (Elf_Word)std::strlen( str ) + 1 ); - } - - return current_position; - } - - -//------------------------------------------------------------------------------ - Elf_Word - add_string( const std::string& str ) - { - return add_string( str.c_str() ); - } - -//------------------------------------------------------------------------------ - private: - S* string_section; -}; - -using string_section_accessor = string_section_accessor_template
; -using const_string_section_accessor = string_section_accessor_template; - -} // namespace ELFIO - -#endif // ELFIO_STRINGS_HPP diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_symbols.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_symbols.hpp deleted file mode 100644 index d18756a9a..000000000 --- a/tools/ZAPD/lib/elfio/elfio/elfio_symbols.hpp +++ /dev/null @@ -1,282 +0,0 @@ -/* -Copyright (C) 2001-2015 by Serge Lamikhov-Center - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef ELFIO_SYMBOLS_HPP -#define ELFIO_SYMBOLS_HPP - -namespace ELFIO { - -//------------------------------------------------------------------------------ -template< class S > -class symbol_section_accessor_template -{ - public: -//------------------------------------------------------------------------------ - symbol_section_accessor_template( const elfio& elf_file_, S* symbol_section_ ) : - elf_file( elf_file_ ), - symbol_section( symbol_section_ ) - { - find_hash_section(); - } - -//------------------------------------------------------------------------------ - Elf_Xword - get_symbols_num() const - { - Elf_Xword nRet = 0; - if ( 0 != symbol_section->get_entry_size() ) { - nRet = symbol_section->get_size() / symbol_section->get_entry_size(); - } - - return nRet; - } - -//------------------------------------------------------------------------------ - bool - get_symbol( Elf_Xword index, - std::string& name, - Elf64_Addr& value, - Elf_Xword& size, - unsigned char& bind, - unsigned char& type, - Elf_Half& section_index, - unsigned char& other ) const - { - bool ret = false; - - if ( elf_file.get_class() == ELFCLASS32 ) { - ret = generic_get_symbol( index, name, value, size, bind, - type, section_index, other ); - } - else { - ret = generic_get_symbol( index, name, value, size, bind, - type, section_index, other ); - } - - return ret; - } - -//------------------------------------------------------------------------------ - bool - get_symbol( const std::string& name, - Elf64_Addr& value, - Elf_Xword& size, - unsigned char& bind, - unsigned char& type, - Elf_Half& section_index, - unsigned char& other ) const - { - bool ret = false; - - if ( 0 != get_hash_table_index() ) { - Elf_Word nbucket = *(const Elf_Word*)hash_section->get_data(); - Elf_Word nchain = *(const Elf_Word*)( hash_section->get_data() + - sizeof( Elf_Word ) ); - Elf_Word val = elf_hash( (const unsigned char*)name.c_str() ); - - Elf_Word y = *(const Elf_Word*)( hash_section->get_data() + - ( 2 + val % nbucket ) * sizeof( Elf_Word ) ); - std::string str; - get_symbol( y, str, value, size, bind, type, section_index, other ); - while ( str != name && STN_UNDEF != y && y < nchain ) { - y = *(const Elf_Word*)( hash_section->get_data() + - ( 2 + nbucket + y ) * sizeof( Elf_Word ) ); - get_symbol( y, str, value, size, bind, type, section_index, other ); - } - if ( str == name ) { - ret = true; - } - } - - return ret; - } - -//------------------------------------------------------------------------------ - Elf_Word - add_symbol( Elf_Word name, Elf64_Addr value, Elf_Xword size, - unsigned char info, unsigned char other, - Elf_Half shndx ) - { - Elf_Word nRet; - - if ( symbol_section->get_size() == 0 ) { - if ( elf_file.get_class() == ELFCLASS32 ) { - nRet = generic_add_symbol( 0, 0, 0, 0, 0, 0 ); - } - else { - nRet = generic_add_symbol( 0, 0, 0, 0, 0, 0 ); - } - } - - if ( elf_file.get_class() == ELFCLASS32 ) { - nRet = generic_add_symbol( name, value, size, info, other, - shndx ); - } - else { - nRet = generic_add_symbol( name, value, size, info, other, - shndx ); - } - - return nRet; - } - -//------------------------------------------------------------------------------ - Elf_Word - add_symbol( Elf_Word name, Elf64_Addr value, Elf_Xword size, - unsigned char bind, unsigned char type, unsigned char other, - Elf_Half shndx ) - { - return add_symbol( name, value, size, ELF_ST_INFO( bind, type ), other, shndx ); - } - -//------------------------------------------------------------------------------ - Elf_Word - add_symbol( string_section_accessor& pStrWriter, const char* str, - Elf64_Addr value, Elf_Xword size, - unsigned char info, unsigned char other, - Elf_Half shndx ) - { - Elf_Word index = pStrWriter.add_string( str ); - return add_symbol( index, value, size, info, other, shndx ); - } - -//------------------------------------------------------------------------------ - Elf_Word - add_symbol( string_section_accessor& pStrWriter, const char* str, - Elf64_Addr value, Elf_Xword size, - unsigned char bind, unsigned char type, unsigned char other, - Elf_Half shndx ) - { - return add_symbol( pStrWriter, str, value, size, ELF_ST_INFO( bind, type ), other, shndx ); - } - -//------------------------------------------------------------------------------ - private: -//------------------------------------------------------------------------------ - void - find_hash_section() - { - hash_section = 0; - hash_section_index = 0; - Elf_Half nSecNo = elf_file.sections.size(); - for ( Elf_Half i = 0; i < nSecNo && 0 == hash_section_index; ++i ) { - const section* sec = elf_file.sections[i]; - if ( sec->get_link() == symbol_section->get_index() ) { - hash_section = sec; - hash_section_index = i; - } - } - } - -//------------------------------------------------------------------------------ - Elf_Half - get_string_table_index() const - { - return (Elf_Half)symbol_section->get_link(); - } - -//------------------------------------------------------------------------------ - Elf_Half - get_hash_table_index() const - { - return hash_section_index; - } - -//------------------------------------------------------------------------------ - template< class T > - bool - generic_get_symbol( Elf_Xword index, - std::string& name, Elf64_Addr& value, - Elf_Xword& size, - unsigned char& bind, unsigned char& type, - Elf_Half& section_index, - unsigned char& other ) const - { - bool ret = false; - - if ( index < get_symbols_num() ) { - const T* pSym = reinterpret_cast( - symbol_section->get_data() + - index * symbol_section->get_entry_size() ); - - const endianess_convertor& convertor = elf_file.get_convertor(); - - section* string_section = elf_file.sections[get_string_table_index()]; - string_section_accessor str_reader( string_section ); - const char* pStr = str_reader.get_string( convertor( pSym->st_name ) ); - if ( 0 != pStr ) { - name = pStr; - } - value = convertor( pSym->st_value ); - size = convertor( pSym->st_size ); - bind = ELF_ST_BIND( pSym->st_info ); - type = ELF_ST_TYPE( pSym->st_info ); - section_index = convertor( pSym->st_shndx ); - other = pSym->st_other; - - ret = true; - } - - return ret; - } - -//------------------------------------------------------------------------------ - template< class T > - Elf_Word - generic_add_symbol( Elf_Word name, Elf64_Addr value, Elf_Xword size, - unsigned char info, unsigned char other, - Elf_Half shndx ) - { - const endianess_convertor& convertor = elf_file.get_convertor(); - - T entry; - entry.st_name = convertor( name ); - entry.st_value = value; - entry.st_value = convertor( entry.st_value ); - entry.st_size = size; - entry.st_size = convertor( entry.st_size ); - entry.st_info = convertor( info ); - entry.st_other = convertor( other ); - entry.st_shndx = convertor( shndx ); - - symbol_section->append_data( reinterpret_cast( &entry ), - sizeof( entry ) ); - - Elf_Word nRet = symbol_section->get_size() / sizeof( entry ) - 1; - - return nRet; - } - -//------------------------------------------------------------------------------ - private: - const elfio& elf_file; - S* symbol_section; - Elf_Half hash_section_index; - const section* hash_section; -}; - -using symbol_section_accessor = symbol_section_accessor_template
; -using const_symbol_section_accessor = symbol_section_accessor_template; - -} // namespace ELFIO - -#endif // ELFIO_SYMBOLS_HPP diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_utils.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_utils.hpp deleted file mode 100644 index 2baf5a77c..000000000 --- a/tools/ZAPD/lib/elfio/elfio/elfio_utils.hpp +++ /dev/null @@ -1,209 +0,0 @@ -/* -Copyright (C) 2001-2015 by Serge Lamikhov-Center - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef ELFIO_UTILS_HPP -#define ELFIO_UTILS_HPP - -#define ELFIO_GET_ACCESS( TYPE, NAME, FIELD ) \ - TYPE get_##NAME() const \ - { \ - return (*convertor)( FIELD ); \ - } -#define ELFIO_SET_ACCESS( TYPE, NAME, FIELD ) \ - void set_##NAME( TYPE value ) \ - { \ - FIELD = value; \ - FIELD = (*convertor)( FIELD ); \ - } -#define ELFIO_GET_SET_ACCESS( TYPE, NAME, FIELD ) \ - TYPE get_##NAME() const \ - { \ - return (*convertor)( FIELD ); \ - } \ - void set_##NAME( TYPE value ) \ - { \ - FIELD = value; \ - FIELD = (*convertor)( FIELD ); \ - } - -#define ELFIO_GET_ACCESS_DECL( TYPE, NAME ) \ - virtual TYPE get_##NAME() const = 0 - -#define ELFIO_SET_ACCESS_DECL( TYPE, NAME ) \ - virtual void set_##NAME( TYPE value ) = 0 - -#define ELFIO_GET_SET_ACCESS_DECL( TYPE, NAME ) \ - virtual TYPE get_##NAME() const = 0; \ - virtual void set_##NAME( TYPE value ) = 0 - -namespace ELFIO { - -//------------------------------------------------------------------------------ -class endianess_convertor { - public: -//------------------------------------------------------------------------------ - endianess_convertor() - { - need_conversion = false; - } - -//------------------------------------------------------------------------------ - void - setup( unsigned char elf_file_encoding ) - { - need_conversion = ( elf_file_encoding != get_host_encoding() ); - } - -//------------------------------------------------------------------------------ - uint64_t - operator()( uint64_t value ) const - { - if ( !need_conversion ) { - return value; - } - value = - ( ( value & 0x00000000000000FFull ) << 56 ) | - ( ( value & 0x000000000000FF00ull ) << 40 ) | - ( ( value & 0x0000000000FF0000ull ) << 24 ) | - ( ( value & 0x00000000FF000000ull ) << 8 ) | - ( ( value & 0x000000FF00000000ull ) >> 8 ) | - ( ( value & 0x0000FF0000000000ull ) >> 24 ) | - ( ( value & 0x00FF000000000000ull ) >> 40 ) | - ( ( value & 0xFF00000000000000ull ) >> 56 ); - - return value; - } - -//------------------------------------------------------------------------------ - int64_t - operator()( int64_t value ) const - { - if ( !need_conversion ) { - return value; - } - return (int64_t)(*this)( (uint64_t)value ); - } - -//------------------------------------------------------------------------------ - uint32_t - operator()( uint32_t value ) const - { - if ( !need_conversion ) { - return value; - } - value = - ( ( value & 0x000000FF ) << 24 ) | - ( ( value & 0x0000FF00 ) << 8 ) | - ( ( value & 0x00FF0000 ) >> 8 ) | - ( ( value & 0xFF000000 ) >> 24 ); - - return value; - } - -//------------------------------------------------------------------------------ - int32_t - operator()( int32_t value ) const - { - if ( !need_conversion ) { - return value; - } - return (int32_t)(*this)( (uint32_t)value ); - } - -//------------------------------------------------------------------------------ - uint16_t - operator()( uint16_t value ) const - { - if ( !need_conversion ) { - return value; - } - value = - ( ( value & 0x00FF ) << 8 ) | - ( ( value & 0xFF00 ) >> 8 ); - - return value; - } - -//------------------------------------------------------------------------------ - int16_t - operator()( int16_t value ) const - { - if ( !need_conversion ) { - return value; - } - return (int16_t)(*this)( (uint16_t)value ); - } - -//------------------------------------------------------------------------------ - int8_t - operator()( int8_t value ) const - { - return value; - } - -//------------------------------------------------------------------------------ - uint8_t - operator()( uint8_t value ) const - { - return value; - } - -//------------------------------------------------------------------------------ - private: -//------------------------------------------------------------------------------ - unsigned char - get_host_encoding() const - { - static const int tmp = 1; - if ( 1 == *(const char*)&tmp ) { - return ELFDATA2LSB; - } - else { - return ELFDATA2MSB; - } - } - -//------------------------------------------------------------------------------ - private: - bool need_conversion; -}; - - -//------------------------------------------------------------------------------ -inline -uint32_t -elf_hash( const unsigned char *name ) -{ - uint32_t h = 0, g; - while ( *name ) { - h = (h << 4) + *name++; - g = h & 0xf0000000; - if ( g != 0 ) - h ^= g >> 24; - h &= ~g; - } - return h; -} - -} // namespace ELFIO - -#endif // ELFIO_UTILS_HPP diff --git a/tools/buildtools/elf2rom.c b/tools/buildtools/elf2rom.c index 8f4441293..1473246ce 100644 --- a/tools/buildtools/elf2rom.c +++ b/tools/buildtools/elf2rom.c @@ -12,45 +12,41 @@ #define ROM_SEG_START_SUFFIX ".rom_start" #define ROM_SEG_END_SUFFIX ".rom_end" -struct RomSegment -{ - const char *name; - const void *data; +struct RomSegment { + const char* name; + const void* data; int size; int romStart; int romEnd; }; -static struct RomSegment *g_romSegments = NULL; +static struct RomSegment* g_romSegments = NULL; static int g_romSegmentsCount = 0; static int g_romSize; -static bool parse_number(const char *str, int *num) -{ - char *endptr; +static bool parse_number(const char* str, int* num) { + char* endptr; long int n = strtol(str, &endptr, 0); *num = n; return endptr > str; } -static unsigned int round_up(unsigned int num, unsigned int multiple) -{ +static unsigned int round_up(unsigned int num, unsigned int multiple) { num += multiple - 1; return num / multiple * multiple; } -static char *sprintf_alloc(const char *fmt, ...) -{ +static char* sprintf_alloc(const char* fmt, ...) { va_list args; int size; - char *buffer; + char* buffer; va_start(args, fmt); size = vsnprintf(NULL, 0, fmt, args) + 1; va_end(args); buffer = malloc(size); - + va_start(args, fmt); vsprintf(buffer, fmt, args); va_end(args); @@ -58,8 +54,7 @@ static char *sprintf_alloc(const char *fmt, ...) return buffer; } -static struct RomSegment *add_rom_segment(const char *name) -{ +static struct RomSegment* add_rom_segment(const char* name) { int index = g_romSegmentsCount; g_romSegmentsCount++; @@ -71,50 +66,44 @@ static struct RomSegment *add_rom_segment(const char *name) return &g_romSegments[index]; } -static void find_segment_info(struct Elf32 *elf, struct RomSegment *segment) -{ +static void find_segment_info(struct Elf32* elf, struct RomSegment* segment) { int i; - char *romStartSymName = sprintf_alloc("_%sSegmentRomStart", segment->name); - char *romEndSymName = sprintf_alloc("_%sSegmentRomEnd", segment->name); + char* romStartSymName = sprintf_alloc("_%sSegmentRomStart", segment->name); + char* romEndSymName = sprintf_alloc("_%sSegmentRomEnd", segment->name); segment->romStart = -1; segment->romEnd = -1; // TODO: use a hashmap for this instead of an O(n) loop - for (i = 0; i < elf->numsymbols; i++) - { + for (i = 0; i < elf->numsymbols; i++) { struct Elf32_Symbol sym; - + if (!elf32_get_symbol(elf, &sym, i)) util_fatal_error("invalid or corrupt ELF file"); - if (strcmp(sym.name, romStartSymName) == 0) - { + if (strcmp(sym.name, romStartSymName) == 0) { segment->romStart = sym.value; if (segment->romEnd != -1) break; - } - else if (strcmp(sym.name, romEndSymName) == 0) - { + } else if (strcmp(sym.name, romEndSymName) == 0) { segment->romEnd = sym.value; if (segment->romStart != -1) break; } } - + if (segment->romStart == -1) util_fatal_error("ROM start address of %s is not defined\n", segment->name); if (segment->romEnd == -1) util_fatal_error("ROM end address of %s is not defined\n", segment->name); - + free(romStartSymName); free(romEndSymName); } -static void parse_input_file(const char *filename) -{ +static void parse_input_file(const char* filename) { struct Elf32 elf; - const void *data; + const void* data; size_t size; int i; @@ -125,45 +114,40 @@ static void parse_input_file(const char *filename) // get ROM segments // sections of type SHT_PROGBITS and whose name is ..secname are considered ROM segments - for (i = 0; i < elf.shnum; i++) - { + for (i = 0; i < elf.shnum; i++) { struct Elf32_Section sec; - struct RomSegment *segment; + struct RomSegment* segment; if (!elf32_get_section(&elf, &sec, i)) util_fatal_error("invalid or corrupt ELF file"); - if (sec.type == SHT_PROGBITS && sec.name[0] == '.' && sec.name[1] == '.' - // HACK! ld sometimes marks NOLOAD sections as SHT_PROGBITS for no apparent reason, - // so we must ignore the ..secname.bss sections explicitly - && strchr(sec.name + 2, '.') == NULL) - { - + if (sec.type == SHT_PROGBITS && sec.name[0] == '.' && + sec.name[1] == '.' + // HACK! ld sometimes marks NOLOAD sections as SHT_PROGBITS for no apparent reason, + // so we must ignore the ..secname.bss sections explicitly + && strchr(sec.name + 2, '.') == NULL) { + segment = add_rom_segment(sec.name + 2); find_segment_info(&elf, segment); segment->data = elf.data + sec.offset; } - } // find ROM size - for (i = 0; i < elf.numsymbols; i++) - { + for (i = 0; i < elf.numsymbols; i++) { struct Elf32_Symbol sym; if (!elf32_get_symbol(&elf, &sym, i)) util_fatal_error("invalid or corrupt ELF file"); - if (strcmp(sym.name, "_RomSize") == 0) - { + if (strcmp(sym.name, "_RomSize") == 0) { g_romSize = sym.value; goto got_rom_size; } } util_fatal_error("could not find symbol _RomSize"); - got_rom_size: +got_rom_size: // verify segment info - for (i = 0; i < g_romSegmentsCount; i++) - { + for (i = 0; i < g_romSegmentsCount; i++) { if (g_romSegments[i].romStart == -1) util_fatal_error("segment %s has no ROM start address defined.", g_romSegments[i].name); if (g_romSegments[i].romEnd == -1) @@ -172,23 +156,21 @@ static void parse_input_file(const char *filename) } // Writes the N64 ROM, padding the file size to a multiple of 1 MiB -static void write_rom_file(const char *filename, int cicType) -{ +static void write_rom_file(const char* filename, int cicType) { size_t fileSize = round_up(g_romSize, 0x100000); - uint8_t *buffer = calloc(fileSize, 1); + uint8_t* buffer = calloc(fileSize, 1); int i; uint32_t chksum[2]; // write segments - for (i = 0; i < g_romSegmentsCount; i++) - { + for (i = 0; i < g_romSegmentsCount; i++) { int size = g_romSegments[i].romEnd - g_romSegments[i].romStart; memcpy(buffer + g_romSegments[i].romStart, g_romSegments[i].data, size); } // pad the remaining space with 0xFF - for (i = g_romSize; i < (int) fileSize; i++) + for (i = g_romSize; i < (int)fileSize; i++) buffer[i] = 0xFF; // write checksum @@ -201,67 +183,51 @@ static void write_rom_file(const char *filename, int cicType) free(buffer); } -static void usage(const char *execname) -{ +static void usage(const char* execname) { printf("usage: %s\n", execname); } -int main(int argc, char **argv) -{ +int main(int argc, char** argv) { int i; - const char *inputFileName = NULL; - const char *outputFileName = NULL; + const char* inputFileName = NULL; + const char* outputFileName = NULL; int cicType = -1; - for (i = 1; i < argc; i++) - { - if (argv[i][0] == '-') - { - if (strcmp(argv[i], "-cic") == 0) - { + for (i = 1; i < argc; i++) { + if (argv[i][0] == '-') { + if (strcmp(argv[i], "-cic") == 0) { i++; - if (i >= argc || !parse_number(argv[i], &cicType)) - { + if (i >= argc || !parse_number(argv[i], &cicType)) { fputs("error: expected number after -cic\n", stderr); goto bad_args; } - } - else if (strcmp(argv[i], "-help") == 0) - { + } else if (strcmp(argv[i], "-help") == 0) { usage(argv[0]); return 0; - } - else - { + } else { fprintf(stderr, "unknown option %s\n", argv[i]); goto bad_args; } - } - else - { + } else { if (inputFileName == NULL) inputFileName = argv[i]; else if (outputFileName == NULL) outputFileName = argv[i]; - else - { + else { fputs("error: too many parameters specified\n", stderr); goto bad_args; } } } - if (inputFileName == NULL) - { + if (inputFileName == NULL) { fputs("error: no input file specified\n", stderr); goto bad_args; } - if (outputFileName == NULL) - { + if (outputFileName == NULL) { fputs("error: no output file specified\n", stderr); goto bad_args; } - if (cicType == -1) - { + if (cicType == -1) { fputs("error: no CIC type specified\n", stderr); goto bad_args; } diff --git a/tools/buildtools/elf32.c b/tools/buildtools/elf32.c index f5dcafc0d..7540406fb 100644 --- a/tools/buildtools/elf32.c +++ b/tools/buildtools/elf32.c @@ -5,36 +5,23 @@ #include "elf32.h" -static uint16_t read16_le(const uint8_t *data) -{ - return data[0] << 0 - | data[1] << 8; +static uint16_t read16_le(const uint8_t* data) { + return data[0] << 0 | data[1] << 8; } -static uint32_t read32_le(const uint8_t *data) -{ - return data[0] << 0 - | data[1] << 8 - | data[2] << 16 - | data[3] << 24; +static uint32_t read32_le(const uint8_t* data) { + return data[0] << 0 | data[1] << 8 | data[2] << 16 | data[3] << 24; } -static uint16_t read16_be(const uint8_t *data) -{ - return data[0] << 8 - | data[1] << 0; +static uint16_t read16_be(const uint8_t* data) { + return data[0] << 8 | data[1] << 0; } -static uint32_t read32_be(const uint8_t *data) -{ - return data[0] << 24 - | data[1] << 16 - | data[2] << 8 - | data[3] << 0; +static uint32_t read32_be(const uint8_t* data) { + return data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3] << 0; } -static const void *get_section_header(struct Elf32 *e, int secnum) -{ +static const void* get_section_header(struct Elf32* e, int secnum) { size_t secoffset = e->shoff + secnum * 0x28; if (secnum >= e->shnum || secoffset >= e->dataSize) @@ -42,76 +29,70 @@ static const void *get_section_header(struct Elf32 *e, int secnum) return e->data + secoffset; } -static const void *get_section_contents(struct Elf32 *e, int secnum) -{ +static const void* get_section_contents(struct Elf32* e, int secnum) { size_t secoffset = e->shoff + secnum * 0x28; size_t dataoffset; - + if (secnum >= e->shnum || secoffset >= e->dataSize) return NULL; dataoffset = e->read32(e->data + secoffset + 0x10); return e->data + dataoffset; } -static bool verify_magic(const uint8_t *data) -{ +static bool verify_magic(const uint8_t* data) { return (data[0] == 0x7F && data[1] == 'E' && data[2] == 'L' && data[3] == 'F'); } -bool elf32_init(struct Elf32 *e, const void *data, size_t size) -{ +bool elf32_init(struct Elf32* e, const void* data, size_t size) { unsigned int i; e->data = data; e->dataSize = size; if (size < 0x34) - return false; // not big enough for header + return false; // not big enough for header if (!verify_magic(e->data)) return false; if (e->data[4] != 1) - return false; // must be 32-bit + return false; // must be 32-bit e->endian = e->data[5]; - switch (e->endian) - { - case 1: - e->read16 = read16_le; - e->read32 = read32_le; - break; - case 2: - e->read16 = read16_be; - e->read32 = read32_be; - break; - default: - return false; + switch (e->endian) { + case 1: + e->read16 = read16_le; + e->read32 = read32_le; + break; + case 2: + e->read16 = read16_be; + e->read32 = read32_be; + break; + default: + return false; } - e->type = e->read16(e->data + 0x10); - e->machine = e->read16(e->data + 0x12); - e->version = e->data[6]; - e->entry = e->read32(e->data + 0x18); - e->phoff = e->read32(e->data + 0x1C); - e->shoff = e->read32(e->data + 0x20); - e->ehsize = e->read16(e->data + 0x28); + e->type = e->read16(e->data + 0x10); + e->machine = e->read16(e->data + 0x12); + e->version = e->data[6]; + e->entry = e->read32(e->data + 0x18); + e->phoff = e->read32(e->data + 0x1C); + e->shoff = e->read32(e->data + 0x20); + e->ehsize = e->read16(e->data + 0x28); e->phentsize = e->read16(e->data + 0x2A); - e->phnum = e->read16(e->data + 0x2C); + e->phnum = e->read16(e->data + 0x2C); e->shentsize = e->read16(e->data + 0x2E); - e->shnum = e->read16(e->data + 0x30); - e->shstrndx = e->read16(e->data + 0x32); - + e->shnum = e->read16(e->data + 0x30); + e->shstrndx = e->read16(e->data + 0x32); + // find symbol table section e->symtabndx = -1; - for (i = 0; i < e->shnum; i++) - { - const uint8_t *sechdr = get_section_header(e, i); + for (i = 0; i < e->shnum; i++) { + const uint8_t* sechdr = get_section_header(e, i); uint32_t type = e->read32(sechdr + 0x04); - - if (type == SHT_SYMTAB) - { + + if (type == SHT_SYMTAB) { e->symtabndx = i; break; } @@ -119,59 +100,53 @@ bool elf32_init(struct Elf32 *e, const void *data, size_t size) // find .strtab section e->strtabndx = -1; - for (i = 0; i < e->shnum; i++) - { - const uint8_t *sechdr = get_section_header(e, i); + for (i = 0; i < e->shnum; i++) { + const uint8_t* sechdr = get_section_header(e, i); uint32_t type = e->read32(sechdr + 0x04); - - if (type == SHT_STRTAB) - { - const char *strings = get_section_contents(e, e->shstrndx); - const char *secname = strings + e->read32(sechdr + 0); - - if (strcmp(secname, ".strtab") == 0) - { + + if (type == SHT_STRTAB) { + const char* strings = get_section_contents(e, e->shstrndx); + const char* secname = strings + e->read32(sechdr + 0); + + if (strcmp(secname, ".strtab") == 0) { e->strtabndx = i; break; } } } - + e->numsymbols = 0; - if (e->symtabndx != -1) - { - const uint8_t *sechdr = get_section_header(e, e->symtabndx); - //const uint8_t *symtab = get_section_contents(e, e->symtabndx); - + if (e->symtabndx != -1) { + const uint8_t* sechdr = get_section_header(e, e->symtabndx); + // const uint8_t *symtab = get_section_contents(e, e->symtabndx); + e->numsymbols = e->read32(sechdr + 0x14) / e->read32(sechdr + 0x24); } if (e->shoff + e->shstrndx * 0x28 >= e->dataSize) return false; - + return true; } -bool elf32_get_section(struct Elf32 *e, struct Elf32_Section *sec, int secnum) -{ - const uint8_t *sechdr = get_section_header(e, secnum); - const char *strings = get_section_contents(e, e->shstrndx); +bool elf32_get_section(struct Elf32* e, struct Elf32_Section* sec, int secnum) { + const uint8_t* sechdr = get_section_header(e, secnum); + const char* strings = get_section_contents(e, e->shstrndx); - sec->name = strings + e->read32(sechdr + 0); - sec->type = e->read32(sechdr + 0x04); - sec->flags = e->read32(sechdr + 0x08); - sec->addr = e->read32(sechdr + 0x0C); - sec->offset = e->read32(sechdr + 0x10); + sec->name = strings + e->read32(sechdr + 0); + sec->type = e->read32(sechdr + 0x04); + sec->flags = e->read32(sechdr + 0x08); + sec->addr = e->read32(sechdr + 0x0C); + sec->offset = e->read32(sechdr + 0x10); sec->addralign = e->read32(sechdr + 0x20); - sec->entsize = e->read32(sechdr + 0x24); + sec->entsize = e->read32(sechdr + 0x24); return true; } -bool elf32_get_symbol(struct Elf32 *e, struct Elf32_Symbol *sym, int symnum) -{ - const uint8_t *sechdr; - const uint8_t *symtab; - const char *strings; +bool elf32_get_symbol(struct Elf32* e, struct Elf32_Symbol* sym, int symnum) { + const uint8_t* sechdr; + const uint8_t* symtab; + const char* strings; int symcount; if (e->symtabndx == -1) diff --git a/tools/buildtools/elf32.h b/tools/buildtools/elf32.h index 666f6e917..0dae635f2 100644 --- a/tools/buildtools/elf32.h +++ b/tools/buildtools/elf32.h @@ -1,22 +1,22 @@ -#ifndef _ELF_H_ -#define _ELF_H_ +#ifndef ELF32_H +#define ELF32_H -enum -{ +#include +#include + +enum { ELF_MACHINE_NONE = 0, ELF_MACHINE_MIPS = 8, }; -enum -{ +enum { ELF_TYPE_RELOC = 1, ELF_TYPE_EXEC, ELF_TYPE_SHARED, ELF_TYPE_CORE, }; -struct Elf32 -{ +struct Elf32 { uint8_t endian; uint16_t type; uint16_t machine; @@ -34,23 +34,21 @@ struct Elf32 int strtabndx; int numsymbols; - const uint8_t *data; + const uint8_t* data; size_t dataSize; - uint16_t (*read16)(const uint8_t *); - uint32_t (*read32)(const uint8_t *); + uint16_t (*read16)(const uint8_t*); + uint32_t (*read32)(const uint8_t*); }; -enum -{ +enum { SHT_NULL = 0, SHT_PROGBITS, SHT_SYMTAB, SHT_STRTAB, }; -struct Elf32_Section -{ - const char *name; +struct Elf32_Section { + const char* name; uint32_t type; uint32_t flags; uint32_t addr; @@ -59,14 +57,13 @@ struct Elf32_Section uint32_t entsize; }; -struct Elf32_Symbol -{ - const char *name; +struct Elf32_Symbol { + const char* name; uint32_t value; }; -bool elf32_init(struct Elf32 *e, const void *data, size_t size); -bool elf32_get_section(struct Elf32 *e, struct Elf32_Section *sec, int secnum); -bool elf32_get_symbol(struct Elf32 *e, struct Elf32_Symbol *sym, int symnum); +bool elf32_init(struct Elf32* e, const void* data, size_t size); +bool elf32_get_section(struct Elf32* e, struct Elf32_Section* sec, int secnum); +bool elf32_get_symbol(struct Elf32* e, struct Elf32_Symbol* sym, int symnum); #endif diff --git a/tools/buildtools/makeromfs.c b/tools/buildtools/makeromfs.c index a61c8e019..198f8adc5 100644 --- a/tools/buildtools/makeromfs.c +++ b/tools/buildtools/makeromfs.c @@ -12,18 +12,16 @@ #define ROM_SIZE 0x02000000 -enum InputObjType -{ +enum InputObjType { OBJ_NULL, OBJ_FILE, OBJ_TABLE, }; -struct InputFile -{ +struct InputFile { enum InputObjType type; - const char *name; - uint8_t *data; + const char* name; + uint8_t* data; size_t size; unsigned int valign; @@ -33,73 +31,58 @@ struct InputFile uint32_t physEnd; }; -static struct InputFile *g_inputFiles = NULL; +static struct InputFile* g_inputFiles = NULL; static int g_inputFilesCount = 0; -static unsigned int round_up(unsigned int num, unsigned int multiple) -{ +static unsigned int round_up(unsigned int num, unsigned int multiple) { num += multiple - 1; return num / multiple * multiple; } -static bool is_yaz0_header(const uint8_t *data) -{ - return data[0] == 'Y' - && data[1] == 'a' - && data[2] == 'z' - && data[3] == '0'; +static bool is_yaz0_header(const uint8_t* data) { + return data[0] == 'Y' && data[1] == 'a' && data[2] == 'z' && data[3] == '0'; } -static void compute_offsets(void) -{ +static void compute_offsets(void) { size_t physOffset = 0; size_t virtOffset = 0; int i; - for (i = 0; i < g_inputFilesCount; i++) - { + for (i = 0; i < g_inputFilesCount; i++) { bool compressed = false; - if (g_inputFiles[i].type == OBJ_FILE) - { + if (g_inputFiles[i].type == OBJ_FILE) { if (is_yaz0_header(g_inputFiles[i].data)) compressed = true; - } - else if (g_inputFiles[i].type == OBJ_TABLE) - { + } else if (g_inputFiles[i].type == OBJ_TABLE) { g_inputFiles[i].size = g_inputFilesCount * 16; } virtOffset = round_up(virtOffset, g_inputFiles[i].valign); - if (g_inputFiles[i].type == OBJ_NULL) - { + if (g_inputFiles[i].type == OBJ_NULL) { g_inputFiles[i].virtStart = 0; - g_inputFiles[i].virtEnd = 0; + g_inputFiles[i].virtEnd = 0; g_inputFiles[i].physStart = 0; - g_inputFiles[i].physEnd = 0; - } - else if (compressed) - { + g_inputFiles[i].physEnd = 0; + } else if (compressed) { size_t compSize = round_up(g_inputFiles[i].size, 16); size_t uncompSize = util_read_uint32_be(g_inputFiles[i].data + 4); g_inputFiles[i].virtStart = virtOffset; - g_inputFiles[i].virtEnd = virtOffset + uncompSize; + g_inputFiles[i].virtEnd = virtOffset + uncompSize; g_inputFiles[i].physStart = physOffset; - g_inputFiles[i].physEnd = physOffset + compSize; + g_inputFiles[i].physEnd = physOffset + compSize; physOffset += compSize; virtOffset += uncompSize; - } - else - { + } else { size_t size = g_inputFiles[i].size; g_inputFiles[i].virtStart = virtOffset; - g_inputFiles[i].virtEnd = virtOffset + size; + g_inputFiles[i].virtEnd = virtOffset + size; g_inputFiles[i].physStart = physOffset; - g_inputFiles[i].physEnd = 0; + g_inputFiles[i].physEnd = 0; physOffset += size; virtOffset += size; @@ -107,17 +90,15 @@ static void compute_offsets(void) } } -static void build_rom(const char *filename) -{ - uint8_t *romData = calloc(ROM_SIZE, 1); +static void build_rom(const char* filename) { + uint8_t* romData = calloc(ROM_SIZE, 1); size_t pos = 0; int i; int j; uint32_t chksum[2]; - FILE *outFile; + FILE* outFile; - for (i = 0; i < g_inputFilesCount; i++) - { + for (i = 0; i < g_inputFilesCount; i++) { size_t size = g_inputFiles[i].size; if (pos + round_up(size, 16) > ROM_SIZE) @@ -125,34 +106,31 @@ static void build_rom(const char *filename) assert(pos % 16 == 0); - switch (g_inputFiles[i].type) - { - case OBJ_FILE: - // write file data - memcpy(romData + pos, g_inputFiles[i].data, size); - pos += round_up(size, 16); + switch (g_inputFiles[i].type) { + case OBJ_FILE: + // write file data + memcpy(romData + pos, g_inputFiles[i].data, size); + pos += round_up(size, 16); - free(g_inputFiles[i].data); - break; - case OBJ_TABLE: - for (j = 0; j < g_inputFilesCount; j++) - { - util_write_uint32_be(romData + pos + 0, g_inputFiles[j].virtStart); - util_write_uint32_be(romData + pos + 4, g_inputFiles[j].virtEnd); - util_write_uint32_be(romData + pos + 8, g_inputFiles[j].physStart); - util_write_uint32_be(romData + pos + 12, g_inputFiles[j].physEnd); + free(g_inputFiles[i].data); + break; + case OBJ_TABLE: + for (j = 0; j < g_inputFilesCount; j++) { + util_write_uint32_be(romData + pos + 0, g_inputFiles[j].virtStart); + util_write_uint32_be(romData + pos + 4, g_inputFiles[j].virtEnd); + util_write_uint32_be(romData + pos + 8, g_inputFiles[j].physStart); + util_write_uint32_be(romData + pos + 12, g_inputFiles[j].physEnd); - pos += 16; - } - break; - case OBJ_NULL: - break; + pos += 16; + } + break; + case OBJ_NULL: + break; } } // Pad the rest of the ROM - while (pos < ROM_SIZE) - { + while (pos < ROM_SIZE) { // This is such a weird thing to pad with. Whatever, Nintendo. romData[pos] = pos & 0xFF; pos++; @@ -173,8 +151,7 @@ static void build_rom(const char *filename) free(romData); } -static struct InputFile *new_file(void) -{ +static struct InputFile* new_file(void) { int index = g_inputFilesCount; g_inputFilesCount++; @@ -186,15 +163,13 @@ static struct InputFile *new_file(void) } // null terminates the current token and returns a pointer to the next token -static char *token_split(char *str) -{ - while (!isspace(*str)) - { +static char* token_split(char* str) { + while (!isspace(*str)) { if (*str == 0) - return str; // end of string + return str; // end of string str++; } - *str = 0; // terminate token + *str = 0; // terminate token str++; // skip remaining whitespace @@ -204,104 +179,94 @@ static char *token_split(char *str) } // null terminates the current line and returns a pointer to the next line -static char *line_split(char *str) -{ - while (*str != '\n') - { +static char* line_split(char* str) { + while (*str != '\n') { if (*str == 0) - return str; // end of string + return str; // end of string str++; } - *str = 0; // terminate line + *str = 0; // terminate line return str + 1; } -static void parse_line(char *line, int lineNum) -{ - char *token = line; +static void parse_line(char* line, int lineNum) { + char* token = line; int i = 0; - char *filename = NULL; + char* filename = NULL; enum InputObjType type = -1; int valign = 1; - struct InputFile *file; + struct InputFile* file; // iterate through each token - while (token[0] != 0) - { - char *nextToken = token_split(token); + while (token[0] != 0) { + char* nextToken = token_split(token); - if (token[0] == '#') // comment - ignore rest of line + if (token[0] == '#') // comment - ignore rest of line return; - switch (i) - { - case 0: - if (strcmp(token, "file") == 0) - type = OBJ_FILE; - else if (strcmp(token, "filetable") == 0) - type = OBJ_TABLE; - else if (strcmp(token, "null") == 0) - type = OBJ_NULL; - else - util_fatal_error("unknown object type '%s' on line %i", token, lineNum); - break; - case 1: - filename = token; - break; - case 2: - { + switch (i) { + case 0: + if (strcmp(token, "file") == 0) + type = OBJ_FILE; + else if (strcmp(token, "filetable") == 0) + type = OBJ_TABLE; + else if (strcmp(token, "null") == 0) + type = OBJ_NULL; + else + util_fatal_error("unknown object type '%s' on line %i", token, lineNum); + break; + case 1: + filename = token; + break; + case 2: { int n; if (sscanf(token, "align(%i)", &n) == 1) valign = n; else goto junk; - } - break; - default: - junk: - util_fatal_error("junk '%s' on line %i", token, lineNum); - break; + } break; + default: + junk: + util_fatal_error("junk '%s' on line %i", token, lineNum); + break; } token = nextToken; i++; } - if (i == 0) // empty line + if (i == 0) // empty line return; file = new_file(); file->valign = valign; - switch (type) - { - case OBJ_FILE: - if (filename == NULL) - util_fatal_error("no filename specified on line %i", lineNum); - file->type = OBJ_FILE; - file->data = util_read_whole_file(filename, &file->size); - break; - case OBJ_TABLE: - file->type = OBJ_TABLE; - break; - case OBJ_NULL: - file->type = OBJ_NULL; - file->size = 0; - break; + switch (type) { + case OBJ_FILE: + if (filename == NULL) + util_fatal_error("no filename specified on line %i", lineNum); + file->type = OBJ_FILE; + file->data = util_read_whole_file(filename, &file->size); + break; + case OBJ_TABLE: + file->type = OBJ_TABLE; + break; + case OBJ_NULL: + file->type = OBJ_NULL; + file->size = 0; + break; } } -static void parse_list(char *list) -{ - char *line = list; +static void parse_list(char* list) { + char* line = list; int lineNum = 1; // iterate through each line - while (line[0] != 0) - { - char *nextLine = line_split(line); + while (line[0] != 0) { + char* nextLine = line_split(line); parse_line(line, lineNum); @@ -310,8 +275,7 @@ static void parse_list(char *list) } } -static void usage(const char *execName) -{ +static void usage(const char* execName) { printf("usage: %s FILE_LIST OUTPUT_FILE\n" "where FILE_LIST is a list of files to include\n" "and OUTPUT_FILE is the name of the output ROM\n" @@ -319,12 +283,10 @@ static void usage(const char *execName) execName); } -int main(int argc, char **argv) -{ - char *list; +int main(int argc, char** argv) { + char* list; - if (argc != 3) - { + if (argc != 3) { puts("invalid args"); usage(argv[0]); return 1; diff --git a/tools/buildtools/n64chksum.c b/tools/buildtools/n64chksum.c index 64cfd3aad..add34b029 100644 --- a/tools/buildtools/n64chksum.c +++ b/tools/buildtools/n64chksum.c @@ -6,12 +6,11 @@ #include "n64chksum.h" #include "util.h" -//Based on uCON64's N64 checksum algorithm by Andreas Sterbenz +// Based on uCON64's N64 checksum algorithm by Andreas Sterbenz #define ROL(i, b) (((i) << (b)) | ((i) >> (32 - (b)))) -bool n64chksum_calculate(const uint8_t *romData, int cicType, uint32_t *chksum) -{ +bool n64chksum_calculate(const uint8_t* romData, int cicType, uint32_t* chksum) { unsigned int seed; unsigned int t1, t2, t3, t4, t5, t6; size_t pos; @@ -20,29 +19,27 @@ bool n64chksum_calculate(const uint8_t *romData, int cicType, uint32_t *chksum) const size_t END = START + 0x100000; // determine initial seed - switch (cicType) - { - case 6101: - case 6102: - seed = 0xF8CA4DDC; - break; - case 6103: - seed = 0xA3886759; - break; - case 6105: - seed = 0xDF26F436; - break; - case 6106: - seed = 0x1FEA617A; - break; - default: - return false; // unknown CIC type + switch (cicType) { + case 6101: + case 6102: + seed = 0xF8CA4DDC; + break; + case 6103: + seed = 0xA3886759; + break; + case 6105: + seed = 0xDF26F436; + break; + case 6106: + seed = 0x1FEA617A; + break; + default: + return false; // unknown CIC type } t1 = t2 = t3 = t4 = t5 = t6 = seed; - for (pos = START; pos < END; pos += 4) - { + for (pos = START; pos < END; pos += 4) { unsigned int d = util_read_uint32_be(romData + pos); unsigned int r = ROL(d, (d & 0x1F)); @@ -65,18 +62,13 @@ bool n64chksum_calculate(const uint8_t *romData, int cicType, uint32_t *chksum) t1 += t5 ^ d; } - if (cicType == 6103) - { + if (cicType == 6103) { chksum[0] = (t6 ^ t4) + t3; chksum[1] = (t5 ^ t2) + t1; - } - else if (cicType == 6106) - { + } else if (cicType == 6106) { chksum[0] = (t6 * t4) + t3; chksum[1] = (t5 * t2) + t1; - } - else - { + } else { chksum[0] = t6 ^ t4 ^ t3; chksum[1] = t5 ^ t2 ^ t1; } diff --git a/tools/buildtools/n64chksum.h b/tools/buildtools/n64chksum.h index 0ca13a819..5cea0edc8 100644 --- a/tools/buildtools/n64chksum.h +++ b/tools/buildtools/n64chksum.h @@ -1,6 +1,6 @@ -#ifndef _N64CHKSUM_H_ -#define _N64CHKSUM_H_ +#ifndef N64CHKSUM_H +#define N64CHKSUM_H -bool n64chksum_calculate(const uint8_t *romData, int cicType, uint32_t *chksum); +bool n64chksum_calculate(const uint8_t* romData, int cicType, uint32_t* chksum); #endif diff --git a/tools/buildtools/spec.h b/tools/buildtools/spec.h index aeabd07d1..01c6b3d84 100644 --- a/tools/buildtools/spec.h +++ b/tools/buildtools/spec.h @@ -55,9 +55,9 @@ typedef struct Segment { void parse_rom_spec(char* spec, struct Segment** segments, int* segment_count); -bool get_single_segment_by_name(struct Segment* dstSegment, char *spec, const char *segmentName); +bool get_single_segment_by_name(struct Segment* dstSegment, char* spec, const char* segmentName); -void free_single_segment_elements(struct Segment *segment); +void free_single_segment_elements(struct Segment* segment); void free_rom_spec(struct Segment* segments, int segment_count); diff --git a/tools/buildtools/util.c b/tools/buildtools/util.c index 824e089e0..941ac1ffd 100644 --- a/tools/buildtools/util.c +++ b/tools/buildtools/util.c @@ -8,8 +8,7 @@ #include "util.h" // displays an error message and exits -void util_fatal_error(const char *msgfmt, ...) -{ +void util_fatal_error(const char* msgfmt, ...) { va_list args; fputs(ERRMSG_START, stderr); @@ -24,10 +23,9 @@ void util_fatal_error(const char *msgfmt, ...) } // reads a whole file into memory, and returns a malloc'd pointer to the data. -void *util_read_whole_file(const char *filename, size_t *pSize) -{ - FILE *file = fopen(filename, "rb"); - uint8_t *buffer; +void* util_read_whole_file(const char* filename, size_t* pSize) { + FILE* file = fopen(filename, "rb"); + uint8_t* buffer; size_t size; if (file == NULL) @@ -56,9 +54,8 @@ void *util_read_whole_file(const char *filename, size_t *pSize) } // writes data to file -void util_write_whole_file(const char *filename, const void *data, size_t size) -{ - FILE *file = fopen(filename, "wb"); +void util_write_whole_file(const char* filename, const void* data, size_t size) { + FILE* file = fopen(filename, "wb"); if (file == NULL) util_fatal_error("failed to open file '%s' for writing: %s", filename, strerror(errno)); @@ -69,17 +66,12 @@ void util_write_whole_file(const char *filename, const void *data, size_t size) fclose(file); } -uint32_t util_read_uint32_be(const uint8_t *data) -{ - return data[0] << 24 - | data[1] << 16 - | data[2] << 8 - | data[3] << 0; +uint32_t util_read_uint32_be(const uint8_t* data) { + return data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3] << 0; } // writes a big-endian 32-bit integer -void util_write_uint32_be(uint8_t *data, uint32_t val) -{ +void util_write_uint32_be(uint8_t* data, uint32_t val) { data[0] = val >> 24; data[1] = val >> 16; data[2] = val >> 8; diff --git a/tools/buildtools/util.h b/tools/buildtools/util.h index ed692bf53..d07340706 100644 --- a/tools/buildtools/util.h +++ b/tools/buildtools/util.h @@ -13,12 +13,12 @@ __attribute__((format(printf, 1, 2), noreturn)) #endif void util_fatal_error(const char *msgfmt, ...); -void *util_read_whole_file(const char *filename, size_t *pSize); +void* util_read_whole_file(const char* filename, size_t* pSize); -void util_write_whole_file(const char *filename, const void *data, size_t size); +void util_write_whole_file(const char* filename, const void* data, size_t size); -uint32_t util_read_uint32_be(const uint8_t *data); +uint32_t util_read_uint32_be(const uint8_t* data); -void util_write_uint32_be(uint8_t *data, uint32_t val); +void util_write_uint32_be(uint8_t* data, uint32_t val); #endif diff --git a/tools/buildtools/yaz0.c b/tools/buildtools/yaz0.c index 5b3156e44..346b37e79 100644 --- a/tools/buildtools/yaz0.c +++ b/tools/buildtools/yaz0.c @@ -10,31 +10,25 @@ // src points to the yaz0 source data (to the "real" source data, not at the header!) // dst points to a buffer uncompressedSize bytes large (you get uncompressedSize from // the second 4 bytes in the Yaz0 header). -void yaz0_decode(uint8_t* src, uint8_t* dst, int uncompressedSize) -{ - int srcPlace = 0, dstPlace = 0; // current read/write positions +void yaz0_decode(uint8_t* src, uint8_t* dst, int uncompressedSize) { + int srcPlace = 0, dstPlace = 0; // current read/write positions - unsigned int validBitCount = 0; // number of valid bits left in "code" byte + unsigned int validBitCount = 0; // number of valid bits left in "code" byte uint8_t currCodeByte; - while (dstPlace < uncompressedSize) - { + while (dstPlace < uncompressedSize) { // read new "code" byte if the current one is used up - if (validBitCount == 0) - { + if (validBitCount == 0) { currCodeByte = src[srcPlace]; ++srcPlace; validBitCount = 8; } - if ((currCodeByte & 0x80) != 0) - { + if ((currCodeByte & 0x80) != 0) { // straight copy dst[dstPlace] = src[srcPlace]; dstPlace++; srcPlace++; - } - else - { + } else { // RLE part uint8_t byte1 = src[srcPlace]; uint8_t byte2 = src[srcPlace + 1]; @@ -44,19 +38,15 @@ void yaz0_decode(uint8_t* src, uint8_t* dst, int uncompressedSize) unsigned int copySource = dstPlace - (dist + 1); unsigned int numBytes = byte1 >> 4; - if (numBytes == 0) - { + if (numBytes == 0) { numBytes = src[srcPlace] + 0x12; srcPlace++; - } - else - { + } else { numBytes += 2; } // copy run - for (unsigned int i = 0; i < numBytes; ++i) - { + for (unsigned int i = 0; i < numBytes; ++i) { dst[dstPlace] = dst[copySource]; copySource++; dstPlace++; @@ -77,8 +67,7 @@ typedef uint8_t uint8_t; #define MAX_RUNLEN (0xFF + 0x12) // simple and straight encoding scheme for Yaz0 -static uint32_t simpleEnc(uint8_t *src, int size, int pos, uint32_t *pMatchPos) -{ +static uint32_t simpleEnc(uint8_t* src, int size, int pos, uint32_t* pMatchPos) { int numBytes = 1; int matchPos = 0; @@ -92,17 +81,14 @@ static uint32_t simpleEnc(uint8_t *src, int size, int pos, uint32_t *pMatchPos) if (end > MAX_RUNLEN) end = MAX_RUNLEN; - for (int i = startPos; i < pos; i++) - { + for (int i = startPos; i < pos; i++) { int j; - for (j = 0; j < end; j++) - { + for (j = 0; j < end; j++) { if (src[i + j] != src[j + pos]) break; } - if (j > numBytes) - { + if (j > numBytes) { numBytes = j; matchPos = i; } @@ -117,8 +103,7 @@ static uint32_t simpleEnc(uint8_t *src, int size, int pos, uint32_t *pMatchPos) } // a lookahead encoding scheme for ngc Yaz0 -static uint32_t nintendoEnc(uint8_t *src, int size, int pos, uint32_t *pMatchPos) -{ +static uint32_t nintendoEnc(uint8_t* src, int size, int pos, uint32_t* pMatchPos) { uint32_t numBytes = 1; static uint32_t numBytes1; static uint32_t matchPos; @@ -128,8 +113,7 @@ static uint32_t nintendoEnc(uint8_t *src, int size, int pos, uint32_t *pMatchPos // was determined by look-ahead try. // so just use it. this is not the best optimization, // but nintendo's choice for speed. - if (prevFlag == 1) - { + if (prevFlag == 1) { *pMatchPos = matchPos; prevFlag = 0; return numBytes1; @@ -140,13 +124,11 @@ static uint32_t nintendoEnc(uint8_t *src, int size, int pos, uint32_t *pMatchPos *pMatchPos = matchPos; // if this position is RLE encoded, then compare to copying 1 byte and next position(pos+1) encoding - if (numBytes >= 3) - { + if (numBytes >= 3) { numBytes1 = simpleEnc(src, size, pos + 1, &matchPos); // if the next position encoding is +2 longer than current position, choose it. // this does not guarantee the best optimization, but fairly good optimization with speed. - if (numBytes1 >= numBytes + 2) - { + if (numBytes1 >= numBytes + 2) { numBytes = 1; prevFlag = 1; } @@ -154,8 +136,7 @@ static uint32_t nintendoEnc(uint8_t *src, int size, int pos, uint32_t *pMatchPos return numBytes; } -int yaz0_encode(uint8_t *src, uint8_t *dst, int srcSize) -{ +int yaz0_encode(uint8_t* src, uint8_t* dst, int srcSize) { int srcPos = 0; int dstPos = 0; int bufPos = 0; @@ -163,30 +144,26 @@ int yaz0_encode(uint8_t *src, uint8_t *dst, int srcSize) uint8_t buf[24]; // 8 codes * 3 bytes maximum uint32_t validBitCount = 0; // number of valid bits left in "code" byte - uint8_t currCodeByte = 0; // a bitfield, set bits meaning copy, unset meaning RLE + uint8_t currCodeByte = 0; // a bitfield, set bits meaning copy, unset meaning RLE - while (srcPos < srcSize) - { + while (srcPos < srcSize) { uint32_t numBytes; uint32_t matchPos; numBytes = nintendoEnc(src, srcSize, srcPos, &matchPos); - if (numBytes < 3) - { + if (numBytes < 3) { // straight copy buf[bufPos] = src[srcPos]; bufPos++; srcPos++; - //set flag for straight copy + // set flag for straight copy currCodeByte |= (0x80 >> validBitCount); - } - else - { - //RLE part + } else { + // RLE part uint32_t dist = srcPos - matchPos - 1; uint8_t byte1, byte2, byte3; - if (numBytes >= 0x12) // 3 byte encoding + if (numBytes >= 0x12) // 3 byte encoding { byte1 = 0 | (dist >> 8); byte2 = dist & 0xFF; @@ -197,8 +174,7 @@ int yaz0_encode(uint8_t *src, uint8_t *dst, int srcSize) numBytes = MAX_RUNLEN; byte3 = numBytes - 0x12; buf[bufPos++] = byte3; - } - else // 2 byte encoding + } else // 2 byte encoding { byte1 = ((numBytes - 2) << 4) | (dist >> 8); byte2 = dist & 0xFF; @@ -211,8 +187,7 @@ int yaz0_encode(uint8_t *src, uint8_t *dst, int srcSize) validBitCount++; // write eight codes - if (validBitCount == 8) - { + if (validBitCount == 8) { dst[dstPos++] = currCodeByte; for (int j = 0; j < bufPos; j++) dst[dstPos++] = buf[j]; @@ -223,8 +198,7 @@ int yaz0_encode(uint8_t *src, uint8_t *dst, int srcSize) } } - if (validBitCount > 0) - { + if (validBitCount > 0) { dst[dstPos++] = currCodeByte; for (int j = 0; j < bufPos; j++) dst[dstPos++] = buf[j]; diff --git a/tools/buildtools/yaz0.h b/tools/buildtools/yaz0.h index 0cc3703ec..97656aac5 100644 --- a/tools/buildtools/yaz0.h +++ b/tools/buildtools/yaz0.h @@ -1,10 +1,10 @@ -#ifndef _YAZ0_H_ -#define _YAZ0_H_ +#ifndef YAZ0_H +#define YAZ0_H -int yaz0_encode2(uint8_t *src, uint8_t *dest, int uncompressedSize); +int yaz0_encode2(uint8_t* src, uint8_t* dest, int uncompressedSize); void yaz0_decode(uint8_t* src, uint8_t* dst, int uncompressedSize); -int yaz0_encode(uint8_t *src, uint8_t *dest, int srcSize); +int yaz0_encode(uint8_t* src, uint8_t* dest, int srcSize); -#endif // _YAZ0_H_ +#endif // YAZ0_H diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index c546c1f69..2a79674bf 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -428,6 +428,7 @@ 0x8013EC10 : "z_rumble", 0x8013EE60 : "z_view", 0x80140260 : "z_vimode", + 0x80140CE0 : "code_80140CE0", 0x80140E80 : "code_80140E80", 0x801418B0 : "z_vismono", 0x801420C0 : "code_801420C0", @@ -464,7 +465,9 @@ 0x80174F10 : "padmgr", 0x80176280 : "sched", 0x80177390 : "speed_meter", - 0x80178750 : "sys_cmpdma", + 0x801780F0 : "su_mtx", + 0x80178750 : "sys_cfb", + 0x80178AC0 : "sys_cmpdma", 0x80178F30 : "sys_initial_check", 0x80179300 : "sys_math", 0x801795F0 : "sys_math3d", @@ -482,7 +485,7 @@ 0x801877D0 : "audio_synthesis", 0x8018B0F0 : "audio_heap", 0x8018EB60 : "audio_load", - 0x80192BE0 : "code_80192BE0", + 0x80192BE0 : "audio_thread", 0x80194710 : "audio_dcache", 0x80194790 : "aisetnextbuf", 0x80194930 : "audio_playback", @@ -506,7 +509,7 @@ 0x801AAAB0 : "aspMain", 0x801ABAB0 : "gspS2DEX2.fifo", 0x801AD370 : "njpgdspMain", - 0x801ADE60 : "", + 0x801ADE60 : "z_en_a_keep", 0x801ADEC0 : "z_en_item00", 0x801AE240 : "z_eff_blure", 0x801AE2F0 : "z_eff_shield_particle", @@ -558,7 +561,7 @@ 0x801C5CB0 : "z_skelanime", 0x801C5CD0 : "z_skin_matrix", 0x801C5D10 : "z_sub_s", - 0x801C5DD0 : "z_vimode", + 0x801C5DD0 : "code_80140CE0", 0x801C5E30 : "z_vr_box", 0x801C5FC0 : "z_sram_NES", 0x801C6A70 : "z_message", @@ -586,7 +589,7 @@ 0x801D2E80 : "audio_data", 0x801D5FB0 : "audio_synthesis", 0x801D5FE0 : "audio_load", - 0x801D5FF0 : "code_80192BE0", + 0x801D5FF0 : "audio_thread", 0x801D6010 : "aisetnextbuf", 0x801D6190 : "audio_effects", 0x801D61A0 : "audio_seqplayer", @@ -670,7 +673,7 @@ 0x801E0280 : "audio_synthesis", 0x801E02B0 : "audio_heap", 0x801E0300 : "audio_load", - 0x801E0390 : "code_80192BE0", + 0x801E0390 : "audio_thread", 0x801E04E0 : "audio_playback", 0x801E0510 : "audio_effects", 0x801E0540 : "audio_seqplayer", diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 42ca92a72..b178fe3ed 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -486,8 +486,8 @@ 0x80096930:("__osMemcpy",), 0x800A5AC0:("EnAObj_Init",), 0x800A5B6C:("EnAObj_Destroy",), - 0x800A5B98:("EnAObj_Update1",), - 0x800A5C28:("EnAObj_Update2",), + 0x800A5B98:("EnAObj_Idle",), + 0x800A5C28:("EnAObj_Talk",), 0x800A5C60:("EnAObj_Update",), 0x800A5CB8:("EnAObj_Draw",), 0x800A5D00:("EnItem00_SetObject",), @@ -754,7 +754,7 @@ 0x800B742C:("Actor_ActorAIsFacingActorB",), 0x800B748C:("Actor_IsFacingAndNearPlayer",), 0x800B750C:("Actor_ActorAIsFacingAndNearActorB",), - 0x800B75A0:("func_800B75A0",), + 0x800B75A0:("Actor_GetSlopeDirection",), 0x800B761C:("func_800B761C",), 0x800B7678:("func_800B7678",), 0x800B78B8:("Actor_UpdateBgCheckInfo",), @@ -1708,11 +1708,11 @@ 0x800F5004:("Font_LoadOrderedFont",), 0x800F5090:("func_800F5090",), 0x800F50D4:("func_800F50D4",), - 0x800F510C:("Kankyo_Init",), + 0x800F510C:("Environment_Init",), 0x800F5954:("func_800F5954",), 0x800F5A8C:("Environment_LerpWeight",), 0x800F5B10:("func_800F5B10",), - 0x800F5CD0:("func_800F5CD0",), + 0x800F5CD0:("Environment_UpdateSkybox",), 0x800F6834:("func_800F6834",), 0x800F694C:("func_800F694C",), 0x800F6A04:("func_800F6A04",), @@ -1727,13 +1727,13 @@ 0x800F88C4:("func_800F88C4",), 0x800F8970:("func_800F8970",), 0x800F8A9C:("func_800F8A9C",), - 0x800F8CD4:("func_800F8CD4",), + 0x800F8CD4:("Environment_Update",), 0x800F8D84:("func_800F8D84",), - 0x800F9728:("func_800F9728",), + 0x800F9728:("Environment_DrawSunLensFlare",), 0x800F9824:("func_800F9824",), 0x800FA39C:("func_800FA39C",), 0x800FA3C4:("func_800FA3C4",), - 0x800FA9FC:("func_800FA9FC",), + 0x800FA9FC:("Environment_DrawRain",), 0x800FAAB4:("func_800FAAB4",), 0x800FAC20:("func_800FAC20",), 0x800FAF74:("func_800FAF74",), @@ -1742,13 +1742,13 @@ 0x800FB388:("func_800FB388",), 0x800FB758:("func_800FB758",), 0x800FB9B4:("func_800FB9B4",), - 0x800FBCBC:("func_800FBCBC",), + 0x800FBCBC:("Environment_DrawCustomLensFlare",), 0x800FBDEC:("Kankyo_InitGameOverLights",), 0x800FBF3C:("Kankyo_FadeInGameOverLights",), 0x800FC158:("Kankyo_FadeOutGameOverLights",), 0x800FC3DC:("func_800FC3DC",), - 0x800FC444:("func_800FC444",), - 0x800FC64C:("func_800FC64C",), + 0x800FC444:("Environment_FillScreen",), + 0x800FC64C:("Environment_DrawSandstorm",), 0x800FD2B4:("func_800FD2B4",), 0x800FD538:("func_800FD538",), 0x800FD59C:("func_800FD59C",), @@ -1768,9 +1768,9 @@ 0x800FDC94:("func_800FDC94",), 0x800FE390:("func_800FE390",), 0x800FE3E0:("func_800FE3E0",), - 0x800FE484:("func_800FE484",), - 0x800FE498:("func_800FE498",), - 0x800FE4A8:("func_800FE4A8",), + 0x800FE484:("Environment_StopTime",), + 0x800FE498:("Environment_StartTime",), + 0x800FE4A8:("Environment_IsTimeStopped",), 0x800FE4B8:("func_800FE4B8",), 0x800FE590:("func_800FE590",), 0x800FE5D0:("func_800FE5D0",), @@ -1881,7 +1881,7 @@ 0x80102464:("Lights_FreeNode",), 0x801024AC:("LightContext_Init",), 0x80102518:("LightContext_SetAmbientColor",), - 0x80102544:("func_80102544",), + 0x80102544:("LightContext_SetFog",), 0x80102580:("LightContext_NewLights",), 0x801025B8:("LightContext_InitList",), 0x801025C8:("LightContext_DestroyList",), @@ -2083,32 +2083,32 @@ 0x8010C930:("OLib_Vec3fDiffBinAng",), 0x8010C9C8:("OLib_DbCameraVec3fDiff",), 0x8010CAA0:("OLib_DbCameraVec3fSum",), - 0x8010CB80:("func_8010CB80",), - 0x8010CD98:("func_8010CD98",), - 0x8010CFBC:("func_8010CFBC",), - 0x8010D2D4:("func_8010D2D4",), - 0x8010D480:("func_8010D480",), - 0x8010D7D0:("func_8010D7D0",), - 0x8010D9F4:("func_8010D9F4",), - 0x8010DC58:("func_8010DC58",), - 0x8010DE38:("func_8010DE38",), - 0x8010E028:("func_8010E028",), + 0x8010CB80:("Gfx_DrawTexRectRGBA16",), + 0x8010CD98:("Gfx_DrawTexRectIA8",), + 0x8010CFBC:("Gfx_DrawTexRectIA8_DropShadow",), + 0x8010D2D4:("Gfx_DrawRect_DropShadow",), + 0x8010D480:("Gfx_DrawTexRectIA8_DropShadowOffset",), + 0x8010D7D0:("Gfx_DrawTexRectI8",), + 0x8010D9F4:("Gfx_DrawTexRect4b",), + 0x8010DC58:("Gfx_DrawTexQuadIA8",), + 0x8010DE38:("Gfx_DrawTexQuad4b",), + 0x8010E028:("Interface_SetVertices",), 0x8010E968:("Interface_PostmanTimerCallback",), 0x8010E9F0:("Interface_StartTimer",), 0x8010EA9C:("Interface_StartPostmanTimer",), 0x8010EB50:("Interface_StartGoronRaceTimer",), 0x8010EBA0:("Interface_StartBottleTimer",), 0x8010EC54:("Interface_GetCompressedTimerDigits",), - 0x8010EE74:("func_8010EE74",), + 0x8010EE74:("Interface_NewDay",), 0x8010EF68:("Interface_SetHudVisibility",), 0x8010EF9C:("Interface_UpdateButtonAlphasByStatus",), 0x8010F0D4:("Interface_UpdateButtonAlphas",), 0x8010F1A8:("Interface_UpdateHudAlphas",), 0x80110038:("func_80110038",), 0x80111CB4:("func_80111CB4",), - 0x801129E4:("func_801129E4",), - 0x80112AF4:("func_80112AF4",), - 0x80112AFC:("func_80112AFC",), + 0x801129E4:("Interface_SetSceneRestrictions",), + 0x80112AF4:("Interface_Noop",), + 0x80112AFC:("Interface_InitMinigame",), 0x80112B40:("Interface_LoadItemIconImpl",), 0x80112BE4:("Interface_LoadItemIcon",), 0x80112C0C:("func_80112C0C",), @@ -2150,23 +2150,23 @@ 0x80118890:("func_80118890",), 0x80118BA4:("func_80118BA4",), 0x80119030:("func_80119030",), - 0x80119610:("func_80119610",), - 0x8011B4E0:("func_8011B4E0",), - 0x8011B5C0:("func_8011B5C0",), - 0x8011B9E0:("func_8011B9E0",), - 0x8011BF70:("func_8011BF70",), - 0x8011C4C4:("func_8011C4C4",), + 0x80119610:("Interface_DrawClock",), + 0x8011B4E0:("Interface_SetPerfectLetters",), + 0x8011B5C0:("Interface_UpdatePerfectLettersType1",), + 0x8011B9E0:("Interface_UpdatePerfectLettersType2",), + 0x8011BF70:("Interface_UpdatePerfectLettersType3",), + 0x8011C4C4:("Interface_DrawPerfectLetters",), 0x8011C808:("Interface_StartMoonCrash",), 0x8011C898:("Interface_GetTimerDigits",), 0x8011CA64:("Interface_DrawTimers",), 0x8011E3B4:("Interface_UpdateBottleTimers",), - 0x8011E730:("func_8011E730",), - 0x8011F0E0:("func_8011F0E0",), - 0x80120F90:("func_80120F90",), - 0x80121064:("func_80121064",), - 0x801210E0:("func_801210E0",), + 0x8011E730:("Interface_DrawMinigameIcons",), + 0x8011F0E0:("Interface_Draw",), + 0x80120F90:("Interface_LoadStory",), + 0x80121064:("Interface_AllocStory",), + 0x801210E0:("Interface_Update",), 0x80121F94:("Interface_Destroy",), - 0x80121FC4:("func_80121FC4",), + 0x80121FC4:("Interface_Init",), 0x801224E0:("Path_GetByIndex",), 0x80122524:("Path_OrientAndGetDistSq",), 0x801225CC:("Path_CopyLastPoint",), @@ -2207,7 +2207,7 @@ 0x80123BD4:("Player_SetModelGroup",), 0x80123C58:("func_80123C58",), 0x80123C90:("Player_SetEquipmentData",), - 0x80123D50:("func_80123D50",), + 0x80123D50:("Player_UpdateBottleHeld",), 0x80123DA4:("func_80123DA4",), 0x80123DC0:("func_80123DC0",), 0x80123E90:("func_80123E90",), @@ -2232,7 +2232,7 @@ 0x80124258:("Player_GetExplosiveHeld",), 0x80124278:("Player_ActionToSword",), 0x801242B4:("func_801242B4",), - 0x801242DC:("Player_GetEnvTimerType",), + 0x801242DC:("Player_GetEnvironmentalHazard",), 0x80124420:("func_80124420",), 0x80124618:("func_80124618",), 0x801246F4:("Player_DrawImpl",), @@ -2458,7 +2458,7 @@ 0x801306E8:("Scene_ProcessHeader",), 0x80130768:("Entrance_Create",), 0x80130784:("Entrance_CreateFromSpawn",), - 0x801307C0:("Scene_ExecuteDrawConfig",), + 0x801307C0:("Scene_Draw",), 0x801307F4:("Scene_DrawConfigDefault",), 0x80130834:("AnimatedMat_TexScroll",), 0x801308A0:("AnimatedMat_DrawTexScroll",), @@ -2780,13 +2780,13 @@ 0x80142100:("func_80142100",), 0x80142440:("func_80142440",), 0x80143148:("func_80143148",), - 0x801431E8:("func_801431E8",), + 0x801431E8:("Skybox_Setup",), 0x80143324:("func_80143324",), - 0x801434E4:("func_801434E4",), + 0x801434E4:("Skybox_Init",), 0x801435A0:("SkyboxDraw_UpdateMatrix",), 0x80143624:("SkyboxDraw_SetColors",), 0x80143668:("SkyboxDraw_Draw",), - 0x80143A04:("SkyboxDraw_Noop",), + 0x80143A04:("SkyboxDraw_Update",), 0x80143A10:("Sram_ActivateOwl",), 0x80143A54:("Sram_ClearHighscores",), 0x80143AC4:("Sram_ClearFlagsAtDawnOfTheFirstDay",), @@ -2870,8 +2870,8 @@ 0x80153E7C:("func_80153E7C",), 0x80153EF0:("func_80153EF0",), 0x801541D4:("func_801541D4",), - 0x80156758:("func_80156758",), - 0x8015680C:("func_8015680C",), + 0x80156758:("Message_Draw",), + 0x8015680C:("Message_Update",), 0x801586A4:("func_801586A4",), 0x801586D4:("Message_Init",), 0x801588D0:("Message_FindMessageNES",), @@ -2940,10 +2940,10 @@ 0x80163D80:("Transition_Destroy",), 0x80163DC0:("func_80163DC0",), 0x8016418C:("func_8016418C",), - 0x8016424C:("func_8016424C",), - 0x801642D8:("func_801642D8",), + 0x8016424C:("TransitionUnk_Destroy",), + 0x801642D8:("TransitionUnk_Init",), 0x80164438:("func_80164438",), - 0x8016454C:("func_8016454C",), + 0x8016454C:("TransitionUnk_Draw",), 0x80164678:("func_80164678",), 0x801647AC:("func_801647AC",), 0x801647B8:("func_801647B8",), @@ -2970,41 +2970,41 @@ 0x8016537C:("TransitionOverlay_Free",), 0x80165438:("TransitionOverlay_ClearLoadInfo",), 0x80165444:("TransitionOverlay_SetSegment",), - 0x80165460:("func_80165460",), - 0x80165608:("func_80165608",), - 0x80165630:("func_80165630",), - 0x80165658:("func_80165658",), - 0x8016566C:("func_8016566C",), - 0x80165690:("func_80165690",), - 0x801656A4:("func_801656A4",), - 0x80165DB8:("func_80165DB8",), - 0x80165DCC:("func_80165DCC",), - 0x80165DF0:("func_80165DF0",), - 0x80165E04:("func_80165E04",), - 0x80165E1C:("func_80165E1C",), - 0x80165E7C:("func_80165E7C",), - 0x80165EC0:("func_80165EC0",), - 0x80166060:("func_80166060",), - 0x801660B8:("func_801660B8",), + 0x80165460:("Play_DrawMotionBlur",), + 0x80165608:("Play_InitMotionBlur",), + 0x80165630:("Play_DestroyMotionBlur",), + 0x80165658:("Play_SetMotionBlurAlpha",), + 0x8016566C:("Play_EnableMotionBlur",), + 0x80165690:("Play_DisableMotionBlur",), + 0x801656A4:("Play_ConvertRgba16ToIntensityImage",), + 0x80165DB8:("Play_SetMotionBlurPriorityAlpha",), + 0x80165DCC:("Play_EnableMotionBlurPriority",), + 0x80165DF0:("Play_DisableMotionBlurPriority",), + 0x80165E04:("Play_StartPictographPhoto",), + 0x80165E1C:("Play_TakePictoPhoto",), + 0x80165E7C:("Play_ChooseDynamicTransition",), + 0x80165EC0:("Play_SetupTransition",), + 0x80166060:("Play_ClearTransition",), + 0x801660B8:("Play_SetFog",), 0x8016613C:("Play_Destroy",), - 0x801663C4:("func_801663C4",), - 0x80166644:("func_80166644",), - 0x801668B4:("func_801668B4",), - 0x80166968:("func_80166968",), - 0x80166B30:("func_80166B30",), - 0x80167814:("Play_Update",), - 0x80167DE4:("func_80167DE4",), - 0x80167F0C:("func_80167F0C",), - 0x80168090:("Play_Draw",), - 0x80168DAC:("func_80168DAC",), + 0x801663C4:("Play_CompressI8ToI5",), + 0x80166644:("Play_DecompressI5ToI8",), + 0x801668B4:("Play_GetWaterSurface",), + 0x80166968:("Play_UpdateWaterCamera",), + 0x80166B30:("Play_UpdateTransition",), + 0x80167814:("Play_UpdateMain",), + 0x80167DE4:("Play_Update",), + 0x80167F0C:("Play_PostWorldDraw",), + 0x80168090:("Play_DrawMain",), + 0x80168DAC:("Play_Draw",), 0x80168F64:("Play_Main",), 0x801690CC:("Play_InCsMode",), - 0x80169100:("func_80169100",), - 0x801691F0:("func_801691F0",), - 0x80169220:("Play_LoadScene",), - 0x8016927C:("func_8016927C",), - 0x801692C4:("func_801692C4",), - 0x801693D4:("Play_SceneInit",), + 0x80169100:("Play_GetFloorSurfaceImpl",), + 0x801691F0:("Play_GetFloorSurface",), + 0x80169220:("Play_LoadFile",), + 0x8016927C:("Play_InitEnvironment",), + 0x801692C4:("Play_InitScene",), + 0x801693D4:("Play_SpawnScene",), 0x80169474:("Play_GetScreenPos",), 0x801694DC:("Play_CreateSubCamera",), 0x80169584:("Play_GetActiveCamId",), @@ -3048,11 +3048,11 @@ 0x8016CD4C:("func_8016CD4C",), 0x8016E40C:("func_8016E40C",), 0x8016EA90:("func_8016EA90",), - 0x8016F1A8:("func_8016F1A8",), + 0x8016F1A8:("BombersNotebook_Draw",), 0x8016F4EC:("func_8016F4EC",), - 0x8016F5A8:("func_8016F5A8",), - 0x8016FC78:("func_8016FC78",), - 0x8016FC98:("func_8016FC98",), + 0x8016F5A8:("BombersNotebook_Update",), + 0x8016FC78:("BombersNotebook_Init",), + 0x8016FC98:("BombersNotebook_Destroy",), 0x8016FCF0:("PreRender_SetValuesSave",), 0x8016FD2C:("PreRender_Init",), 0x8016FD60:("PreRender_SetValues",), @@ -3222,9 +3222,9 @@ 0x80177A84:("func_80177A84",), 0x80177AC8:("func_80177AC8",), 0x80177E58:("SpeedMeter_DrawAllocEntries",), - 0x801780F0:("func_801780F0",), - 0x801781EC:("func_801781EC",), - 0x8017842C:("func_8017842C",), + 0x801780F0:("Mtx_SetTranslateScaleMtx",), + 0x801781EC:("Mtx_SetRotationMtx",), + 0x8017842C:("Mtx_SetTranslationRotationScaleMtx",), 0x80178750:("func_80178750",), 0x80178818:("func_80178818",), 0x80178978:("func_80178978",), @@ -3235,11 +3235,11 @@ 0x80178A34:("func_80178A34",), 0x80178A94:("func_80178A94",), 0x80178AC0:("func_80178AC0",), - 0x80178C80:("func_80178C80",), - 0x80178D7C:("func_80178D7C",), - 0x80178DAC:("func_80178DAC",), - 0x80178E3C:("func_80178E3C",), - 0x80178E7C:("func_80178E7C",), + 0x80178C80:("CmpDma_GetFileInfo",), + 0x80178D7C:("CmpDma_Decompress",), + 0x80178DAC:("CmpDma_LoadFileImpl",), + 0x80178E3C:("CmpDma_LoadFile",), + 0x80178E7C:("CmpDma_LoadAllFiles",), 0x80178F30:("Check_WriteRGBA16Pixel",), 0x80178F60:("Check_WriteI4Pixel",), 0x80178FA0:("Check_DrawI4Texture",), @@ -3352,8 +3352,8 @@ 0x8017FEB0:("Math_GetAtan2Tbl",), 0x8017FEE4:("Math_Atan2S",), 0x801800CC:("Math_Atan2F",), - 0x80180100:("Math_FAtan2F",), - 0x8018012C:("Math_Acot2F",), + 0x80180100:("Math_Atan2S_XY",), + 0x8018012C:("Math_Atan2F_XY",), 0x80180160:("Matrix_Init",), 0x8018019C:("Matrix_Push",), 0x801801CC:("Matrix_Pop",), @@ -3680,44 +3680,44 @@ 0x80192AE8:("AudioLoad_ScriptLoad",), 0x80192B54:("AudioLoad_ProcessScriptLoads",), 0x80192BAC:("AudioLoad_InitScriptLoads",), - 0x80192BE0:("func_80192BE0",), - 0x80192C00:("func_80192C00",), - 0x8019319C:("func_8019319C",), - 0x801936D8:("func_801936D8",), - 0x8019372C:("func_8019372C",), - 0x80193774:("func_80193774",), - 0x8019380C:("func_8019380C",), - 0x80193858:("func_80193858",), + 0x80192BE0:("AudioThread_Update",), + 0x80192C00:("AudioThread_UpdateImpl",), + 0x8019319C:("AudioThread_ProcessGlobalCmd",), + 0x801936D8:("AudioThread_SetFadeOutTimer",), + 0x8019372C:("AudioThread_SetFadeInTimer",), + 0x80193774:("AudioThread_InitMesgQueuesInternal",), + 0x8019380C:("AudioThread_QueueCmd",), + 0x80193858:("AudioThread_QueueCmdF32",), 0x8019387C:("AudioThread_QueueCmdS32",), 0x801938A0:("AudioThread_QueueCmdS8",), - 0x801938D0:("func_801938D0",), + 0x801938D0:("AudioThread_QueueCmdU16",), 0x80193900:("AudioThread_ScheduleProcessCmds",), - 0x80193990:("func_80193990",), - 0x801939A8:("func_801939A8",), - 0x80193AEC:("func_80193AEC",), - 0x80193BA0:("func_80193BA0",), - 0x80193C04:("func_80193C04",), - 0x80193C24:("func_80193C24",), + 0x80193990:("AudioThread_ResetCmdQueue",), + 0x801939A8:("AudioThread_ProcessCmd",), + 0x80193AEC:("AudioThread_ProcessCmds",), + 0x80193BA0:("AudioThread_GetExternalLoadQueueMsg",), + 0x80193C04:("AudioThread_GetFontsForSequence",), + 0x80193C24:("AudioThread_GetSampleBankIdsOfFont",), 0x80193C5C:("func_80193C5C",), - 0x80193CB4:("func_80193CB4",), - 0x80193D08:("func_80193D08",), - 0x80193DA4:("func_80193DA4",), - 0x80193DF0:("func_80193DF0",), - 0x80193E44:("func_80193E44",), - 0x80193E6C:("func_80193E6C",), - 0x80193E9C:("func_80193E9C",), - 0x80193EA8:("func_80193EA8",), - 0x80194080:("func_80194080",), - 0x801942BC:("func_801942BC",), - 0x80194304:("func_80194304",), - 0x80194328:("func_80194328",), - 0x8019435C:("func_8019435C",), - 0x8019439C:("func_8019439C",), - 0x801943D0:("func_801943D0",), - 0x8019440C:("func_8019440C",), - 0x80194528:("func_80194528",), - 0x80194548:("func_80194548",), - 0x80194568:("func_80194568",), + 0x80193CB4:("AudioThread_WaitForAudioResetQueueP",), + 0x80193D08:("AudioThread_ResetAudioHeap",), + 0x80193DA4:("AudioThread_PreNMIInternal",), + 0x80193DF0:("AudioThread_GetChannelIO",), + 0x80193E44:("AudioThread_GetSeqPlayerIO",), + 0x80193E6C:("AudioThread_InitExternalPool",), + 0x80193E9C:("AudioThread_ResetExternalPool",), + 0x80193EA8:("AudioThread_ProcessSeqPlayerCmd",), + 0x80194080:("AudioThread_ProcessChannelCmd",), + 0x801942BC:("AudioThread_Noop1Cmd",), + 0x80194304:("AudioThread_Noop1CmdZeroed",), + 0x80194328:("AudioThread_Noop2Cmd",), + 0x8019435C:("AudioThread_WaitForAudioTask",), + 0x8019439C:("AudioThread_GetSamplePosFromStart",), + 0x801943D0:("AudioThread_GetSamplePosUntilEnd",), + 0x8019440C:("AudioThread_GetSamplePos",), + 0x80194528:("AudioThread_GetEnabledNotesCount",), + 0x80194548:("AudioThread_GetEnabledSampledNotesCount",), + 0x80194568:("AudioThread_CountAndReleaseNotes",), 0x80194668:("AudioThread_NextRandom",), 0x801946E4:("AudioThread_InitMesgQueues",), 0x80194710:("Audio_InvalDCache",), @@ -4082,7 +4082,7 @@ 0x801AA610:("GameOver_Init",), 0x801AA624:("GameOver_FadeLights",), 0x801AA68C:("GameOver_Update",), - 0x801AAAA0:("func_801AAAA0",), + 0x801AAAA0:("Regs_InitData",), 0x80800000:("ConsoleLogo_UpdateCounters",), 0x8080009C:("ConsoleLogo_RenderView",), 0x80800134:("ConsoleLogo_Draw",), @@ -11108,48 +11108,48 @@ 0x80A7C5EC:("ObjEtcetera_Update",), 0x80A7C690:("ObjEtcetera_DrawIdle",), 0x80A7C718:("ObjEtcetera_DrawAnimated",), - 0x80A7C990:("func_80A7C990",), - 0x80A7CA18:("func_80A7CA18",), - 0x80A7CBC4:("func_80A7CBC4",), - 0x80A7CD08:("func_80A7CD08",), + 0x80A7C990:("EnEgol_ChangeAnim",), + 0x80A7CA18:("EnEgol_FootstepEffects",), + 0x80A7CBC4:("EnEgol_DestroyBlocks",), + 0x80A7CD08:("EnEgol_GetWaypoint",), 0x80A7CD60:("EnEgol_Init",), 0x80A7D0F0:("EnEgol_Destroy",), - 0x80A7D140:("func_80A7D140",), - 0x80A7D168:("func_80A7D168",), - 0x80A7D1E4:("func_80A7D1E4",), - 0x80A7D240:("func_80A7D240",), - 0x80A7D27C:("func_80A7D27C",), - 0x80A7D2C4:("func_80A7D2C4",), - 0x80A7D710:("func_80A7D710",), - 0x80A7D780:("func_80A7D780",), - 0x80A7DAAC:("func_80A7DAAC",), - 0x80A7DAF0:("func_80A7DAF0",), - 0x80A7E2E8:("func_80A7E2E8",), - 0x80A7E344:("func_80A7E344",), - 0x80A7E478:("func_80A7E478",), - 0x80A7E4B4:("func_80A7E4B4",), - 0x80A7E7EC:("func_80A7E7EC",), - 0x80A7E820:("func_80A7E820",), - 0x80A7E924:("func_80A7E924",), - 0x80A7E970:("func_80A7E970",), - 0x80A7E9D0:("func_80A7E9D0",), - 0x80A7EA28:("func_80A7EA28",), - 0x80A7EA88:("func_80A7EA88",), - 0x80A7EAD8:("func_80A7EAD8",), - 0x80A7EB14:("func_80A7EB14",), - 0x80A7EB54:("func_80A7EB54",), - 0x80A7EB90:("func_80A7EB90",), - 0x80A7EBDC:("func_80A7EBDC",), - 0x80A7EC84:("func_80A7EC84",), - 0x80A7ED14:("func_80A7ED14",), - 0x80A7EFB8:("func_80A7EFB8",), + 0x80A7D140:("EnEgol_SetupWait",), + 0x80A7D168:("EnEgol_Wait",), + 0x80A7D1E4:("EnEgol_SetupStand",), + 0x80A7D240:("EnEgol_Stand",), + 0x80A7D27C:("EnEgol_SetupWalk",), + 0x80A7D2C4:("EnEgol_Walk",), + 0x80A7D710:("EnEgol_SetupRetreat",), + 0x80A7D780:("EnEgol_Retreat",), + 0x80A7DAAC:("EnEgol_SetupLaser",), + 0x80A7DAF0:("EnEgol_Laser",), + 0x80A7E2E8:("EnEgol_SetupStop",), + 0x80A7E344:("EnEgol_Stop",), + 0x80A7E478:("EnEgol_SetupSlam",), + 0x80A7E4B4:("EnEgol_Slam",), + 0x80A7E7EC:("EnEgol_SetupPunch",), + 0x80A7E820:("EnEgol_Punch",), + 0x80A7E924:("EnEgol_SetupSlamWait",), + 0x80A7E970:("EnEgol_SlamWait",), + 0x80A7E9D0:("EnEgol_SetupStunned",), + 0x80A7EA28:("EnEgol_Stunned",), + 0x80A7EA88:("EnEgol_SetupStunEnd",), + 0x80A7EAD8:("EnEgol_StunEnd",), + 0x80A7EB14:("EnEgol_SetupSlamEnd",), + 0x80A7EB54:("EnEgol_SlamEnd",), + 0x80A7EB90:("EnEgol_SetupDamaged",), + 0x80A7EBDC:("EnEgol_Damaged",), + 0x80A7EC84:("EnEgol_StartDeathCutscene",), + 0x80A7ED14:("EnEgol_Death",), + 0x80A7EFB8:("EnEgol_CollisionCheck",), 0x80A7F354:("EnEgol_Update",), - 0x80A7F8E8:("func_80A7F8E8",), - 0x80A7FAFC:("func_80A7FAFC",), + 0x80A7F8E8:("EnEgol_OverrideLimbDraw",), + 0x80A7FAFC:("EnEgol_PostLimbDraw",), 0x80A7FFB8:("EnEgol_Draw",), - 0x80A80508:("func_80A80508",), - 0x80A80750:("func_80A80750",), - 0x80A80904:("func_80A80904",), + 0x80A80508:("EnEgol_SpawnEffect",), + 0x80A80750:("EnEgol_UpdateEffects",), + 0x80A80904:("EnEgol_DrawEffects",), 0x80A811D0:("func_80A811D0",), 0x80A8120C:("func_80A8120C",), 0x80A81288:("func_80A81288",), @@ -11339,8 +11339,8 @@ 0x80A90478:("EnTest5_HandleBottleAction",), 0x80A905A4:("EnTest5_Update",), 0x80A90730:("func_80A90730",), - 0x80A90C08:("func_80A90C08",), - 0x80A90C34:("func_80A90C34",), + 0x80A90C08:("EnTest6_EnableMotionBlur",), + 0x80A90C34:("EnTest6_DisableMotionBlur",), 0x80A90C54:("func_80A90C54",), 0x80A90D20:("func_80A90D20",), 0x80A90D34:("func_80A90D34",), @@ -11409,13 +11409,13 @@ 0x80A98F94:("func_80A98F94",), 0x80A99EA0:("EnEstone_Init",), 0x80A9A1B0:("EnEstone_Destroy",), - 0x80A9A1DC:("func_80A9A1DC",), - 0x80A9A4B0:("func_80A9A4B0",), + 0x80A9A1DC:("EnEstone_Active",), + 0x80A9A4B0:("EnEstone_Inactive",), 0x80A9A4E0:("EnEstone_Update",), 0x80A9A600:("EnEstone_Draw",), - 0x80A9A774:("func_80A9A774",), - 0x80A9A870:("func_80A9A870",), - 0x80A9A9C0:("func_80A9A9C0",), + 0x80A9A774:("EnEstone_SpawnEffect",), + 0x80A9A870:("EnEstone_UpdateEffects",), + 0x80A9A9C0:("EnEstone_DrawEffects",), 0x80A9ACD0:("func_80A9ACD0",), 0x80A9ACF0:("func_80A9ACF0",), 0x80A9AD18:("func_80A9AD18",), @@ -11794,14 +11794,14 @@ 0x80AB9C4C:("func_80AB9C4C",), 0x80ABA7A0:("EnEgblock_Init",), 0x80ABA868:("EnEgblock_Destroy",), - 0x80ABA8A4:("func_80ABA8A4",), - 0x80ABA988:("func_80ABA988",), - 0x80ABA9B8:("func_80ABA9B8",), + 0x80ABA8A4:("EnEgblock_Active",), + 0x80ABA988:("EnEgblock_Inactive",), + 0x80ABA9B8:("EnEgblock_DoNothing",), 0x80ABA9C8:("EnEgblock_Update",), 0x80ABAA14:("EnEgblock_Draw",), - 0x80ABAAF4:("func_80ABAAF4",), - 0x80ABACB4:("func_80ABACB4",), - 0x80ABAE64:("func_80ABAE64",), + 0x80ABAAF4:("EnEgblock_SpawnEffect",), + 0x80ABACB4:("EnEgblock_UpdateEffects",), + 0x80ABAE64:("EnEgblock_DrawEffects",), 0x80ABB0E0:("EnGuardNuts_Init",), 0x80ABB1E4:("EnGuardNuts_Destroy",), 0x80ABB210:("EnGuardNuts_ChangeAnim",), @@ -14659,8 +14659,8 @@ 0x80B85858:("func_80B85858",), 0x80B85900:("func_80B85900",), 0x80B85A00:("func_80B85A00",), - 0x80B85E18:("func_80B85E18",), - 0x80B85EA0:("func_80B85EA0",), + 0x80B85E18:("EnKaizoku_ChangeAnim",), + 0x80B85EA0:("EnKaizoku_ValidatePictograph",), 0x80B85F48:("func_80B85F48",), 0x80B85FA8:("func_80B85FA8",), 0x80B86804:("func_80B86804",), @@ -14698,10 +14698,10 @@ 0x80B8971C:("func_80B8971C",), 0x80B89A08:("func_80B89A08",), 0x80B8A0A0:("EnKaizoku_Update",), - 0x80B8A318:("func_80B8A318",), - 0x80B8A468:("func_80B8A468",), - 0x80B8A6B0:("func_80B8A6B0",), - 0x80B8A718:("func_80B8A718",), + 0x80B8A318:("EnKaizoku_OverrideLimbDraw",), + 0x80B8A468:("EnKaizoku_PostLimbDraw",), + 0x80B8A6B0:("EnKaizoku_TransformLimbDraw",), + 0x80B8A718:("EnKaizoku_Draw",), 0x80B8B2D0:("EnGe2_Init",), 0x80B8B504:("EnGe2_Destroy",), 0x80B8B514:("func_80B8B514",), @@ -15251,26 +15251,26 @@ 0x80BAE538:("EnSuttari_Draw",), 0x80BAEF70:("EnZod_Init",), 0x80BAF1C0:("EnZod_Destroy",), - 0x80BAF1EC:("func_80BAF1EC",), - 0x80BAF2B4:("func_80BAF2B4",), - 0x80BAF338:("func_80BAF338",), - 0x80BAF3E0:("func_80BAF3E0",), - 0x80BAF4D8:("func_80BAF4D8",), + 0x80BAF1EC:("EnZod_HandleRoomConversation",), + 0x80BAF2B4:("EnZod_PlayerIsFacingTijo",), + 0x80BAF338:("EnZod_ChangeAnim",), + 0x80BAF3E0:("EnZod_UpdateAnimation",), + 0x80BAF4D8:("EnZod_UpdateInstruments",), 0x80BAF7CC:("func_80BAF7CC",), - 0x80BAF99C:("func_80BAF99C",), + 0x80BAF99C:("EnZod_PlayDrumsSequence",), 0x80BAFA44:("func_80BAFA44",), 0x80BAFADC:("func_80BAFADC",), 0x80BAFB84:("func_80BAFB84",), - 0x80BAFC00:("func_80BAFC00",), - 0x80BAFC10:("func_80BAFC10",), - 0x80BAFD00:("func_80BAFD00",), + 0x80BAFC00:("EnZod_DoNothing",), + 0x80BAFC10:("EnZod_Rehearse",), + 0x80BAFD00:("EnZod_SetupRehearse",), 0x80BAFDB4:("func_80BAFDB4",), 0x80BAFE34:("func_80BAFE34",), 0x80BAFF14:("func_80BAFF14",), 0x80BAFF84:("EnZod_Update",), - 0x80BB0128:("func_80BB0128",), - 0x80BB0170:("func_80BB0170",), - 0x80BB01B0:("func_80BB01B0",), + 0x80BB0128:("EnZod_OverrideLimbDraw",), + 0x80BB0170:("EnZod_PostLimbDraw",), + 0x80BB01B0:("EnZod_DrawDrums",), 0x80BB03E8:("EnZod_Draw",), 0x80BB08E0:("EnKujiya_Init",), 0x80BB0998:("EnKujiya_Destroy",), @@ -16990,25 +16990,25 @@ 0x80C1E84C:("EnEndingHero_Draw",), 0x80C1E9E0:("DmBal_Init",), 0x80C1EAB4:("DmBal_Destroy",), - 0x80C1EAC4:("func_80C1EAC4",), - 0x80C1EAD8:("func_80C1EAD8",), + 0x80C1EAC4:("DmBal_SetupDoNothing",), + 0x80C1EAD8:("DmBal_DoNothing",), 0x80C1EAE8:("func_80C1EAE8",), 0x80C1EC60:("func_80C1EC60",), - 0x80C1ED0C:("func_80C1ED0C",), - 0x80C1ED64:("func_80C1ED64",), + 0x80C1ED0C:("DmBal_UpdateEyes",), + 0x80C1ED64:("DmBal_SpawnPaper",), 0x80C1EDE4:("DmBal_Update",), 0x80C1EF80:("DmBal_OverrideLimbDraw",), 0x80C1F060:("DmBal_PostLimbDraw",), 0x80C1F078:("DmBal_Draw",), 0x80C1F3D0:("EnPaper_Init",), 0x80C1F45C:("EnPaper_Destroy",), - 0x80C1F46C:("func_80C1F46C",), - 0x80C1F480:("func_80C1F480",), - 0x80C1F4E8:("func_80C1F4E8",), - 0x80C1F4FC:("func_80C1F4FC",), - 0x80C1F55C:("func_80C1F55C",), - 0x80C1F6E0:("func_80C1F6E0",), - 0x80C1F87C:("func_80C1F87C",), + 0x80C1F46C:("EnPaper_SetupSpreadConfettiGroup",), + 0x80C1F480:("EnPaper_SpreadConfettiGroup",), + 0x80C1F4E8:("EnPaper_SetupFlyConfettiGroup",), + 0x80C1F4FC:("EnPaper_FlyConfettiGroup",), + 0x80C1F55C:("EnPaper_InitConfettiPiece",), + 0x80C1F6E0:("EnPaper_FlyConfettiPiece",), + 0x80C1F87C:("EnPaper_UpdateWind",), 0x80C1F97C:("EnPaper_Update",), 0x80C1F9D0:("EnPaper_Draw",), 0x80C1FCF0:("EnHintSkb_Init",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 49af1b3fc..962bf4fc2 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -311,7 +311,7 @@ 0x8009BE14:("sYaz0CurRomStart","u32","",0x4), 0x8009BE18:("sYaz0CurSize","u32","",0x4), 0x8009BE1C:("sYaz0MaxPtr","u8*","",0x4), - 0x8009BE20:("D_8009BE20","u8*","",0x4), + 0x8009BE20:("gYaz0DecompressDstEnd","void*","",0x4), 0x8009BE30:("D_8009BE30","UNK_TYPE4","",0x4), 0x8009BE34:("D_8009BE34","UNK_TYPE4","",0x4), 0x8009BE38:("romInfoFaultClient","FaultClient","",0x10), @@ -1075,8 +1075,8 @@ 0x801BF5C0:("D_801BF5C0","UNK_PTR","",0x4), 0x801BF68C:("D_801BF68C","UNK_TYPE1","",0x1), 0x801BF6C0:("sRestrictionFlags","RestrictionFlags","[113]",0x1c4), - 0x801BF884:("D_801BF884","UNK_TYPE2","",0x2), - 0x801BF888:("D_801BF888","UNK_TYPE2","",0x2), + 0x801BF884:("sPictoState","UNK_TYPE2","",0x2), + 0x801BF888:("sPictoPhotoBeingTaken","UNK_TYPE2","",0x2), 0x801BF88C:("sHBAScoreTier","UNK_TYPE2","",0x2), 0x801BF890:("sMinigameScoreDigits","UNK_TYPE2","",0x2), 0x801BF898:("sCUpInvisible","UNK_TYPE2","",0x2), @@ -1086,7 +1086,7 @@ 0x801BF8A8:("sMagicMeterOutlinePrimBlue","UNK_TYPE2","",0x2), 0x801BF8AC:("sMagicBorderRatio","UNK_TYPE2","",0x2), 0x801BF8B0:("sMagicBorderStep","UNK_TYPE2","",0x2), - 0x801BF8DC:("sEnvTimerType","UNK_TYPE2","",0x2), + 0x801BF8DC:("sEnvHazard","UNK_TYPE2","",0x2), 0x801BF8E0:("sEnvTimerActive","UNK_TYPE2","",0x2), 0x801BF8E4:("sPostmanBunnyHoodState","UNK_TYPE2","",0x2), 0x801BF8E8:("sTimerPausedOsTime","UNK_TYPE4","",0x4), @@ -1100,7 +1100,7 @@ 0x801BF978:("D_801BF978","UNK_TYPE4","",0x4), 0x801BF97C:("D_801BF97C","UNK_TYPE4","",0x4), 0x801BF980:("D_801BF980","UNK_TYPE4","",0x4), - 0x801BF988:("D_801BF988","Gfx","[5]",0x28), + 0x801BF988:("sScreenFillSetupDL","Gfx","[5]",0x28), 0x801BF9B0:("D_801BF9B0","UNK_TYPE2","",0x2), 0x801BF9B4:("D_801BF9B4","UNK_TYPE1","",0x1), 0x801BF9BC:("D_801BF9BC","UNK_TYPE1","",0x1), @@ -1119,12 +1119,12 @@ 0x801BF9F8:("sFinalHoursClockFrameEnvBlue","UNK_TYPE2","",0x2), 0x801BF9FC:("sFinalHoursClockColorTimer","UNK_TYPE2","",0x2), 0x801BFA00:("sFinalHoursClockColorTargetIndex","UNK_TYPE2","",0x2), - 0x801BFA04:("D_801BFA04","UNK_TYPE2","",0x2), - 0x801BFA1C:("D_801BFA1C","UNK_TYPE2","",0x2), - 0x801BFA34:("D_801BFA34","UNK_TYPE2","",0x2), - 0x801BFA4C:("D_801BFA4C","UNK_TYPE2","",0x2), - 0x801BFA64:("D_801BFA64","UNK_TYPE2","",0x2), - 0x801BFA74:("D_801BFA74","UNK_TYPE2","",0x2), + 0x801BFA04:("sActionVtxPosX","UNK_TYPE2","",0x2), + 0x801BFA1C:("sActionVtxWidths","UNK_TYPE2","",0x2), + 0x801BFA34:("sActionVtxPosY","UNK_TYPE2","",0x2), + 0x801BFA4C:("sActionVtxHeights","UNK_TYPE2","",0x2), + 0x801BFA64:("sPerfectLettersCenterX","UNK_TYPE2","",0x2), + 0x801BFA74:("sPerfectLettersCenterY","UNK_TYPE2","",0x2), 0x801BFA84:("sPostmanTimerInputBtnAPressed","UNK_TYPE4","",0x4), 0x801BFAB0:("sDoActionTextures","UNK_TYPE1","",0x1), 0x801BFAB8:("magicBorderColors","UNK_TYPE1","",0x1), @@ -1139,11 +1139,11 @@ 0x801BFB14:("D_801BFB14","UNK_TYPE1","",0x1), 0x801BFB1C:("D_801BFB1C","UNK_TYPE1","",0x1), 0x801BFB24:("D_801BFB24","UNK_TYPE1","",0x1), - 0x801BFB2C:("D_801BFB2C","UNK_TYPE2","",0x2), + 0x801BFB2C:("sThreeDayClockAlpha","UNK_TYPE2","",0x2), 0x801BFB30:("D_801BFB30","UNK_TYPE2","",0x2), 0x801BFB34:("D_801BFB34","UNK_TYPE2","",0x2), - 0x801BFB38:("D_801BFB38","UNK_TYPE1","",0x1), - 0x801BFB6C:("D_801BFB6C","UNK_TYPE1","",0x1), + 0x801BFB38:("sThreeDayClockHours","UNK_TYPE1","",0x1), + 0x801BFB6C:("sThreeDayClockHourTextures","UNK_TYPE1","",0x1), 0x801BFBCC:("D_801BFBCC","UNK_TYPE2","",0x2), 0x801BFBD0:("D_801BFBD0","UNK_TYPE2","",0x2), 0x801BFBD4:("D_801BFBD4","UNK_TYPE2","",0x2), @@ -1162,33 +1162,33 @@ 0x801BFC08:("D_801BFC08","UNK_TYPE1","",0x1), 0x801BFC0C:("D_801BFC0C","UNK_TYPE1","",0x1), 0x801BFC10:("D_801BFC10","UNK_TYPE1","",0x1), - 0x801BFC14:("D_801BFC14","UNK_TYPE1","",0x1), + 0x801BFC14:("sFinalHoursDigitTextures","UNK_TYPE1","",0x1), 0x801BFC40:("D_801BFC40","UNK_TYPE1","",0x1), - 0x801BFC50:("D_801BFC50","UNK_TYPE2","",0x2), - 0x801BFC60:("D_801BFC60","s16","[6]",0xC), - 0x801BFC6C:("D_801BFC6C","UNK_TYPE4","",0x4), - 0x801BFC7C:("D_801BFC7C","UNK_TYPE2","",0x2), - 0x801BFC8C:("D_801BFC8C","UNK_TYPE1","",0x1), - 0x801BFC98:("D_801BFC98","UNK_TYPE2","",0x2), - 0x801BFCA8:("D_801BFCA8","UNK_TYPE2","",0x2), - 0x801BFCB8:("D_801BFCB8","UNK_TYPE1","",0x1), - 0x801BFCC4:("D_801BFCC4","UNK_TYPE4","",0x4), + 0x801BFC50:("sPerfectLettersType1OffScreenAngles","UNK_TYPE2","",0x2), + 0x801BFC60:("sPerfectLettersType1PrimColorTargets","s16","[6]",0xC), + 0x801BFC6C:("sPerfectLettersType2SpellingOffsetsX","UNK_TYPE4","",0x4), + 0x801BFC7C:("sPerfectLettersType2OffScreenOffsetsX","UNK_TYPE2","",0x2), + 0x801BFC8C:("sPerfectLettersType2PrimColorTargets","UNK_TYPE1","",0x1), + 0x801BFC98:("sPerfectLettersType3SpellingOffsetsX","UNK_TYPE2","",0x2), + 0x801BFCA8:("sPerfectLettersType3OffScreenAngles","UNK_TYPE2","",0x2), + 0x801BFCB8:("sPerfectLettersType3PrimColorTargets","UNK_TYPE1","",0x1), + 0x801BFCC4:("sPerfectLettersTextures","UNK_TYPE4","",0x4), 0x801BFCE4:("sTimerStateTimer","UNK_TYPE4","",0x4), 0x801BFCE8:("sTimerDigits","u16","[8]",0x10), 0x801BFCF8:("sTimerBeepSfxSeconds","UNK_TYPE4","",0x4), 0x801BFCFC:("D_801BFCFC","UNK_TYPE4","",0x4), 0x801BFD0C:("D_801BFD0C","UNK_TYPE4","",0x4), - 0x801BFD1C:("D_801BFD1C","UNK_TYPE1","",0x1), - 0x801BFD24:("D_801BFD24","UNK_TYPE1","",0x1), - 0x801BFD2C:("D_801BFD2C","UNK_TYPE1","",0x1), - 0x801BFD40:("D_801BFD40","UNK_TYPE1","",0x1), - 0x801BFD54:("D_801BFD54","UNK_TYPE1","",0x1), - 0x801BFD64:("D_801BFD64","UNK_TYPE1","",0x1), - 0x801BFD6C:("D_801BFD6C","UNK_TYPE2","",0x2), - 0x801BFD84:("D_801BFD84","UNK_TYPE1","",0x1), - 0x801BFD8C:("D_801BFD8C","UNK_TYPE1","",0x1), - 0x801BFD94:("D_801BFD94","UNK_TYPE4","",0x4), - 0x801BFD98:("D_801BFD98","UNK_TYPE4","[2]",0x8), + 0x801BFD1C:("sRupeeDigitsFirst","UNK_TYPE1","",0x1), + 0x801BFD24:("sRupeeDigitsCount","UNK_TYPE1","",0x1), + 0x801BFD2C:("sRupeeCounterIconPrimColors","UNK_TYPE1","",0x1), + 0x801BFD40:("sRupeeCounterIconEnvColors","UNK_TYPE1","",0x1), + 0x801BFD54:("sMinigameCountdownTextures","UNK_TYPE1","",0x1), + 0x801BFD64:("sMinigameCountdownTexWidths","UNK_TYPE1","",0x1), + 0x801BFD6C:("sMinigameCountdownPrimColors","UNK_TYPE2","",0x2), + 0x801BFD84:("sStoryTextures","UNK_TYPE1","",0x1), + 0x801BFD8C:("sStoryTLUTs","UNK_TYPE1","",0x1), + 0x801BFD94:("sIsSunsPlayedAtDay","UNK_TYPE4","",0x4), + 0x801BFD98:("sPrevTimeSpeed","UNK_TYPE4","[2]",0x8), 0x801BFDA0:("sMaskObjectIds","s16","[24]",0x30), 0x801BFDD0:("D_801BFDD0","UNK_TYPE1","",0x1), 0x801BFDE8:("sMaskItemIds","UNK_TYPE1","",0x1), @@ -1198,7 +1198,7 @@ 0x801BFF3C:("sActionModelGroups","UNK_TYPE1","",0x1), 0x801BFF90:("D_801BFF90","UNK_TYPE1","",0x1), 0x801BFF98:("sPlayerStrengths","UNK_TYPE1","",0x1), - 0x801BFFA0:("sEnvironmentTextTriggers","UNK_TYPE1","",0x1), + 0x801BFFA0:("sEnvHazardTextTriggers","UNK_TYPE1","",0x1), 0x801BFFB0:("gPlayerModelTypes","UNK_TYPE1","",0x1), 0x801BFFFC:("gPlayerWaistDLs","UNK_TYPE1","",0x1), 0x801C0024:("gPlayerHandHoldingShields","UNK_TYPE1","",0x1), @@ -1955,11 +1955,9 @@ 0x801C66D0:("D_801C66D0","UNK_TYPE2","",0x2), 0x801C6798:("D_801C6798","UNK_TYPE4","",0x4), 0x801C67B0:("gAmmoItems","UNK_TYPE1","",0x1), - 0x801C67C8:("D_801C67C8","s32","[8]",0x20), - 0x801C67E8:("D_801C67E8","UNK_TYPE4","",0x4), - 0x801C67F0:("D_801C67F0","s32","[8]",0x20), - 0x801C6818:("D_801C6818","UNK_TYPE1","",0x1), - 0x801C6838:("D_801C6838","UNK_TYPE4","",0x4), + 0x801C67C8:("D_801C67C8","s32","[10]",0x28), + 0x801C67F0:("D_801C67F0","s32","[10]",0x28), + 0x801C6818:("D_801C6818","s32","[10]",0x28), 0x801C6840:("D_801C6840","UNK_TYPE1","",0x1), 0x801C6850:("D_801C6850","UNK_TYPE1","",0x1), 0x801C6870:("D_801C6870","UNK_TYPE1","",0x1), @@ -2139,11 +2137,11 @@ 0x801D0D28:("TransitionCircle_InitVars","UNK_PTR","",0x4), 0x801D0D50:("gDbgCamEnabled","UNK_TYPE4","",0x4), 0x801D0D54:("D_801D0D54","UNK_TYPE1","",0x1), - 0x801D0D58:("D_801D0D58","UNK_TYPE2","",0x2), - 0x801D0D5C:("D_801D0D5C","UNK_TYPE2","",0x2), + 0x801D0D58:("sQuakeIndex","UNK_TYPE2","",0x2), + 0x801D0D5C:("sIsCameraUnderwater","UNK_TYPE2","",0x2), 0x801D0D60:("D_801D0D60","Input*","",0x4), 0x801D0D64:("D_801D0D64","s16","[10]",0x14), - 0x801D0D7A:("D_801D0D7A","UNK_TYPE1","",0x1), + 0x801D0D78:("D_801D0D78","u16","[4]",0x4), 0x801D0D80:("D_801D0D80","UNK_TYPE1","",0x1), 0x801D11F4:("D_801D11F4","UNK_TYPE1","",0x1), 0x801D1230:("D_801D1230","UNK_TYPE1","",0x1), @@ -2251,11 +2249,11 @@ 0x801D5FE4:("D_801D5FE4","UNK_TYPE1","",0x1), 0x801D5FE8:("gAudioCtxInitalized","UNK_TYPE4","",0x4), 0x801D5FEC:("D_801D5FEC","UNK_TYPE4","",0x4), - 0x801D5FF0:("D_801D5FF0","UNK_TYPE4","",0x4), - 0x801D5FF4:("D_801D5FF4","UNK_TYPE4","",0x4), - 0x801D5FF8:("D_801D5FF8","UNK_TYPE1","",0x1), - 0x801D5FFC:("D_801D5FFC","UNK_TYPE4","",0x4), - 0x801D6000:("D_801D6000","UNK_PTR","",0x4), + 0x801D5FF0:("sWaitingAudioTask","UNK_TYPE4","",0x4), + 0x801D5FF4:("sMaxWriteReadDiff","UNK_TYPE4","",0x4), + 0x801D5FF8:("sCurCmdRdPos","UNK_TYPE1","",0x1), + 0x801D5FFC:("sAudioRandom","UNK_TYPE4","",0x4), + 0x801D6000:("sAudioOsCount","UNK_PTR","",0x4), 0x801D6010:("D_801D6010","UNK_TYPE1","",0x1), 0x801D6014:("D_801D6014","UNK_TYPE1","",0x1), 0x801D6028:("D_801D6028","UNK_TYPE1","",0x1), @@ -4053,18 +4051,18 @@ 0x801F6BF0:("sKaleidoAreaFaultClient","FaultAddrConvClient","",0xC), 0x801F6C00:("sKaleidoScopeUpdateFunc","void*","",0x4), 0x801F6C04:("sKaleidoScopeDrawFunc","void*","",0x4), - 0x801F6C10:("D_801F6C10","UNK_TYPE1","",0x1), + 0x801F6C10:("sTransitionFillTimer","UNK_TYPE1","",0x1), 0x801F6C18:("D_801F6C18","Input","",0x18), - 0x801F6C30:("D_801F6C30","UNK_TYPE1","",0x1), + 0x801F6C30:("sTrnsnUnk","UNK_TYPE1","",0x1), 0x801F6D0C:("D_801F6D0C","UNK_TYPE1","",0x1), - 0x801F6D10:("D_801F6D10","UNK_TYPE4","",0x4), - 0x801F6D18:("D_801F6D18","UNK_TYPE1","",0x1), - 0x801F6D30:("D_801F6D30","Color_RGBA8","",0x4), + 0x801F6D10:("gTrnsnUnkState","UNK_TYPE4","",0x4), + 0x801F6D18:("sVisMono","UNK_TYPE1","",0x1), + 0x801F6D30:("gVisMonoColor","Color_RGBA8","",0x4), 0x801F6D38:("D_801F6D38","UNK_TYPE1","",0x1), 0x801F6D4C:("D_801F6D4C","UNK_TYPE4","",0x4), - 0x801F6D50:("D_801F6D50","UNK_TYPE1","",0x1), - 0x801F6DFC:("D_801F6DFC","u8","",0x1), - 0x801F6DFD:("D_801F6DFD","UNK_TYPE1","",0x1), + 0x801F6D50:("sBombersNotebook","UNK_TYPE1","",0x1), + 0x801F6DFC:("sBombersNotebookOpen","u8","",0x1), + 0x801F6DFD:("sMotionBlurStatus","UNK_TYPE1","",0x1), 0x801F6E00:("D_801F6E00","SlowlyTask","",0x1c0), 0x801F6FC0:("D_801F6FC0","UNK_TYPE1","",0x1), 0x801F6FC8:("slowlyStackEntry","StackEntry","",0x1c), @@ -4141,7 +4139,7 @@ 0x801FBBD0:("D_801FBBD0","UNK_TYPE1","",0x1), 0x801FBBD2:("D_801FBBD2","UNK_TYPE1","",0x1), 0x801FBBD4:("D_801FBBD4","UNK_TYPE1","",0x1), - 0x801FBBE0:("D_801FBBE0","UNK_TYPE1","",0x1), + 0x801FBBE0:("sDmaBuffer","u32","[2]",0x8), 0x801FBBF0:("D_801FBBF0","Vec3f","",0xc), 0x801FBC00:("Math3D_ColSphereTri_line","LineSegment","",0x18), 0x801FBC18:("Math3D_ColSphereTri_point","Vec3f","",0xc), @@ -4354,10 +4352,10 @@ 0x80200BCE:("D_80200BCE","UNK_TYPE1","",0x1), 0x80200BD0:("D_80200BD0","UNK_TYPE1","",0x1), 0x80200C70:("gAudioCtx","AudioContext","",0x81F8), - 0x80208E68:("gCustomAudioUpdateFunction","UNK_TYPE4","",0x4), - 0x80208E6C:("gCustomAudioSeqFunction","UNK_TYPE4","",0x4), - 0x80208E70:("gCustomAudioReverbFunction","UNK_TYPE4","",0x4), - 0x80208E74:("gCustomAudioSynthFunction","UNK_TYPE4","",0x4), + 0x80208E68:("gAudioCustomUpdateFunction","UNK_TYPE4","",0x4), + 0x80208E6C:("gAudioCustomSeqFunction","UNK_TYPE4","",0x4), + 0x80208E70:("gAudioCustomReverbFunction","UNK_TYPE4","",0x4), + 0x80208E74:("gAudioCustomSynthFunction","UNK_TYPE4","",0x4), 0x80208E90:("sJpegBitStreamPtr","UNK_TYPE1","",0x1), 0x80208E94:("sJpegBitStreamByteIdx","UNK_TYPE1","",0x1), 0x80208E98:("sJpegBitStreamBitIdx","UNK_TYPE1","",0x1), @@ -4368,7 +4366,7 @@ 0x80209EA0:("gGfxPools","GfxPool","[2]",0x40620), 0x8024A4C0:("gAudioHeap","u8","[0x138000]",0x138000), 0x803824C0:("gSystemHeap","u8","[UNK_SIZE]",0x3fdb40), - 0x80780000:("D_80780000","u8","[0x4600]",0x4600), + 0x80780000:("gPictoPhotoI8","u8","[0x4600]",0x4600), 0x80784600:("D_80784600","u8","[0x56200]",0x56200), 0x807DA800:("gFramebuffer0","u16","[SCREEN_HEIGHT][SCREEN_WIDTH]",0x25800), 0x80800860:("titleRotation","s16","",0x2), @@ -11462,7 +11460,7 @@ 0x80A41938:("D_80A41938","f32","",0x4), 0x80A41D20:("D_80A41D20","UNK_TYPE1","",0x1), 0x80A41D24:("D_80A41D24","UNK_TYPE1","",0x1), - 0x80A41D28:("D_80A41D28","UNK_TYPE1","",0x1), + 0x80A41D28:("sEnTest3_Input","Input","",0x18), 0x80A41D40:("D_80A41D40","f32","",0x4), 0x80A41D44:("D_80A41D44","UNK_TYPE1","",0x1), 0x80A41D48:("D_80A41D48","UNK_TYPE1","",0x1), diff --git a/tools/eventinfconvert.py b/tools/eventinfconvert.py new file mode 100755 index 000000000..7205dfcc9 --- /dev/null +++ b/tools/eventinfconvert.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 + +import argparse +import math +import re + +def isValid(index: int, mask: int) -> bool: + if index < 0 or index > 7: + return False + if mask != (1 << int(math.log2(mask))): + return False + return True + +def getFlagMacro(index: int, mask: int) -> str: + return f"EVENTINF_{index}{int(math.log2(mask))}" + +def getCheckMacro(index: int, mask: int) -> str: + return f"CHECK_EVENTINF({getFlagMacro(index, mask)})" + +def getSetMacro(index: int, mask: int) -> str: + return f"SET_EVENTINF({getFlagMacro(index, mask)})" + +def getClearMacro(index: int, mask: int) -> str: + return f"CLEAR_EVENTINF({getFlagMacro(index, mask)})" + +NUMBER_PATTERN = r"(0[xX])?[0-9a-fA-F]+" + +def applyChange(fileContents: str, compiledRegex: re.Pattern, callback) -> str: + parsedContents = "" + + match = compiledRegex.search(fileContents) + while match: + index = int(match.group("index"), 0) + mask = int(match.group("mask"), 0) + + start, end = match.span() + parsedContents += fileContents[:start] + if isValid(index, mask): + parsedContents += callback(index, mask) + else: + parsedContents += fileContents[start:end] + + fileContents = fileContents[end:] + match = compiledRegex.search(fileContents) + + parsedContents += fileContents + return parsedContents + + +def updateCheck(fileContents: str) -> str: + checkRegex = re.compile(rf"gSaveContext.eventInf\[(?P{NUMBER_PATTERN})\]\s*\&\s*(?P{NUMBER_PATTERN})") + + return applyChange(fileContents, checkRegex, getCheckMacro) + +def updateSet(fileContents: str) -> str: + setRegex = re.compile(rf"gSaveContext.eventInf\[(?P{NUMBER_PATTERN})\]\s*\|=\s*(?P{NUMBER_PATTERN})") + + return applyChange(fileContents, setRegex, getSetMacro) + +def updateClear(fileContents: str) -> str: + clearRegex = re.compile(rf"gSaveContext.eventInf\[(?P{NUMBER_PATTERN})\]\s*\&=\s*(\(u8\))?~(?P{NUMBER_PATTERN})") + + return applyChange(fileContents, clearRegex, getClearMacro) + + +def read_file(filename): + with open(filename) as src_file: + return src_file.read() + +def write_file(filename, contents): + with open(filename, "w") as f: + f.write(contents) + + +def main(): + parser = argparse.ArgumentParser(description="Converts a eventInf access to a macro") + + parser.add_argument("filename", help="Replace every occurrence of numeric eventInf on this file to the corresponding macro") + args = parser.parse_args() + + fileContents = read_file(args.filename) + + parsedContents = updateCheck(fileContents) + parsedContents = updateSet(parsedContents) + parsedContents = updateClear(parsedContents) + + if fileContents != parsedContents: + write_file(args.filename, parsedContents) + +if __name__ == "__main__": + main() diff --git a/tools/ido_recomp/linux/5.3/as0 b/tools/ido_recomp/linux/5.3/as0 new file mode 100755 index 000000000..15c169107 Binary files /dev/null and b/tools/ido_recomp/linux/5.3/as0 differ diff --git a/tools/ido_recomp/linux/5.3/as1 b/tools/ido_recomp/linux/5.3/as1 index 41c2545af..1a24f18b2 100755 Binary files a/tools/ido_recomp/linux/5.3/as1 and b/tools/ido_recomp/linux/5.3/as1 differ diff --git a/tools/ido_recomp/linux/5.3/cc b/tools/ido_recomp/linux/5.3/cc index 3dcc53798..65f0d1b2d 100755 Binary files a/tools/ido_recomp/linux/5.3/cc and b/tools/ido_recomp/linux/5.3/cc differ diff --git a/tools/ido_recomp/linux/5.3/cfe b/tools/ido_recomp/linux/5.3/cfe index e9594fafc..cbb4f9d44 100755 Binary files a/tools/ido_recomp/linux/5.3/cfe and b/tools/ido_recomp/linux/5.3/cfe differ diff --git a/tools/ido_recomp/linux/5.3/err.english.cc b/tools/ido_recomp/linux/5.3/err.english.cc old mode 100755 new mode 100644 diff --git a/tools/ido_recomp/linux/5.3/ugen b/tools/ido_recomp/linux/5.3/ugen index b2b662f1d..119d2817b 100755 Binary files a/tools/ido_recomp/linux/5.3/ugen and b/tools/ido_recomp/linux/5.3/ugen differ diff --git a/tools/ido_recomp/linux/5.3/ujoin b/tools/ido_recomp/linux/5.3/ujoin old mode 100644 new mode 100755 index f9c90b8be..4091986a8 Binary files a/tools/ido_recomp/linux/5.3/ujoin and b/tools/ido_recomp/linux/5.3/ujoin differ diff --git a/tools/ido_recomp/linux/5.3/uld b/tools/ido_recomp/linux/5.3/uld old mode 100644 new mode 100755 index f227222bc..653ff37df Binary files a/tools/ido_recomp/linux/5.3/uld and b/tools/ido_recomp/linux/5.3/uld differ diff --git a/tools/ido_recomp/linux/5.3/umerge b/tools/ido_recomp/linux/5.3/umerge old mode 100644 new mode 100755 index 00a8281d2..4b00ffa36 Binary files a/tools/ido_recomp/linux/5.3/umerge and b/tools/ido_recomp/linux/5.3/umerge differ diff --git a/tools/ido_recomp/linux/5.3/uopt b/tools/ido_recomp/linux/5.3/uopt index 5afe7a11c..d5ba32fbd 100755 Binary files a/tools/ido_recomp/linux/5.3/uopt and b/tools/ido_recomp/linux/5.3/uopt differ diff --git a/tools/ido_recomp/linux/5.3/usplit b/tools/ido_recomp/linux/5.3/usplit old mode 100644 new mode 100755 index a1c5ebad6..17d9d3d5d Binary files a/tools/ido_recomp/linux/5.3/usplit and b/tools/ido_recomp/linux/5.3/usplit differ diff --git a/tools/ido_recomp/linux/7.1/as0 b/tools/ido_recomp/linux/7.1/as0 new file mode 100755 index 000000000..e9ef71c63 Binary files /dev/null and b/tools/ido_recomp/linux/7.1/as0 differ diff --git a/tools/ido_recomp/linux/7.1/as1 b/tools/ido_recomp/linux/7.1/as1 index 01dbc6f6b..475079063 100755 Binary files a/tools/ido_recomp/linux/7.1/as1 and b/tools/ido_recomp/linux/7.1/as1 differ diff --git a/tools/ido_recomp/linux/7.1/cc b/tools/ido_recomp/linux/7.1/cc index a7f06afa8..6c68698f3 100755 Binary files a/tools/ido_recomp/linux/7.1/cc and b/tools/ido_recomp/linux/7.1/cc differ diff --git a/tools/ido_recomp/linux/7.1/cfe b/tools/ido_recomp/linux/7.1/cfe index 2c6767e69..2b52669de 100755 Binary files a/tools/ido_recomp/linux/7.1/cfe and b/tools/ido_recomp/linux/7.1/cfe differ diff --git a/tools/ido_recomp/linux/7.1/err.english.cc b/tools/ido_recomp/linux/7.1/err.english.cc old mode 100755 new mode 100644 diff --git a/tools/ido_recomp/linux/7.1/ugen b/tools/ido_recomp/linux/7.1/ugen index f5c1a2e20..340a282c9 100755 Binary files a/tools/ido_recomp/linux/7.1/ugen and b/tools/ido_recomp/linux/7.1/ugen differ diff --git a/tools/ido_recomp/linux/7.1/ujoin b/tools/ido_recomp/linux/7.1/ujoin new file mode 100755 index 000000000..3752698d8 Binary files /dev/null and b/tools/ido_recomp/linux/7.1/ujoin differ diff --git a/tools/ido_recomp/linux/7.1/uld b/tools/ido_recomp/linux/7.1/uld new file mode 100755 index 000000000..2b76d0c18 Binary files /dev/null and b/tools/ido_recomp/linux/7.1/uld differ diff --git a/tools/ido_recomp/linux/7.1/umerge b/tools/ido_recomp/linux/7.1/umerge old mode 100644 new mode 100755 index b0c8c1778..03d68a8f2 Binary files a/tools/ido_recomp/linux/7.1/umerge and b/tools/ido_recomp/linux/7.1/umerge differ diff --git a/tools/ido_recomp/linux/7.1/uopt b/tools/ido_recomp/linux/7.1/uopt index ecf7eab72..feef7f749 100755 Binary files a/tools/ido_recomp/linux/7.1/uopt and b/tools/ido_recomp/linux/7.1/uopt differ diff --git a/tools/ido_recomp/linux/7.1/usplit b/tools/ido_recomp/linux/7.1/usplit new file mode 100755 index 000000000..090200ab5 Binary files /dev/null and b/tools/ido_recomp/linux/7.1/usplit differ diff --git a/tools/ido_recomp/macos/5.3/acpp b/tools/ido_recomp/macos/5.3/acpp deleted file mode 100755 index 043162770..000000000 Binary files a/tools/ido_recomp/macos/5.3/acpp and /dev/null differ diff --git a/tools/ido_recomp/macos/5.3/as0 b/tools/ido_recomp/macos/5.3/as0 index 9cff1dcd7..46e69e09b 100755 Binary files a/tools/ido_recomp/macos/5.3/as0 and b/tools/ido_recomp/macos/5.3/as0 differ diff --git a/tools/ido_recomp/macos/5.3/as1 b/tools/ido_recomp/macos/5.3/as1 index df0142e86..f723cc5c1 100755 Binary files a/tools/ido_recomp/macos/5.3/as1 and b/tools/ido_recomp/macos/5.3/as1 differ diff --git a/tools/ido_recomp/macos/5.3/cc b/tools/ido_recomp/macos/5.3/cc index e9b599bda..d583c6b5b 100755 Binary files a/tools/ido_recomp/macos/5.3/cc and b/tools/ido_recomp/macos/5.3/cc differ diff --git a/tools/ido_recomp/macos/5.3/cfe b/tools/ido_recomp/macos/5.3/cfe index 30e514947..92f76465a 100755 Binary files a/tools/ido_recomp/macos/5.3/cfe and b/tools/ido_recomp/macos/5.3/cfe differ diff --git a/tools/ido_recomp/macos/5.3/copt b/tools/ido_recomp/macos/5.3/copt deleted file mode 100755 index 243c37a29..000000000 Binary files a/tools/ido_recomp/macos/5.3/copt and /dev/null differ diff --git a/tools/ido_recomp/macos/5.3/ugen b/tools/ido_recomp/macos/5.3/ugen index 7f18bf44b..7be477312 100755 Binary files a/tools/ido_recomp/macos/5.3/ugen and b/tools/ido_recomp/macos/5.3/ugen differ diff --git a/tools/ido_recomp/macos/5.3/ujoin b/tools/ido_recomp/macos/5.3/ujoin index 30503f95d..e69611f41 100755 Binary files a/tools/ido_recomp/macos/5.3/ujoin and b/tools/ido_recomp/macos/5.3/ujoin differ diff --git a/tools/ido_recomp/macos/5.3/uld b/tools/ido_recomp/macos/5.3/uld index 13aa261f5..2bcce1cd6 100755 Binary files a/tools/ido_recomp/macos/5.3/uld and b/tools/ido_recomp/macos/5.3/uld differ diff --git a/tools/ido_recomp/macos/5.3/umerge b/tools/ido_recomp/macos/5.3/umerge index c31c866d5..7fdf06e8d 100755 Binary files a/tools/ido_recomp/macos/5.3/umerge and b/tools/ido_recomp/macos/5.3/umerge differ diff --git a/tools/ido_recomp/macos/5.3/uopt b/tools/ido_recomp/macos/5.3/uopt index 7bbaac298..e9b8cbe62 100755 Binary files a/tools/ido_recomp/macos/5.3/uopt and b/tools/ido_recomp/macos/5.3/uopt differ diff --git a/tools/ido_recomp/macos/5.3/usplit b/tools/ido_recomp/macos/5.3/usplit index a95984803..cb28e320c 100755 Binary files a/tools/ido_recomp/macos/5.3/usplit and b/tools/ido_recomp/macos/5.3/usplit differ diff --git a/tools/ido_recomp/macos/7.1/as0 b/tools/ido_recomp/macos/7.1/as0 new file mode 100755 index 000000000..cdb4f9121 Binary files /dev/null and b/tools/ido_recomp/macos/7.1/as0 differ diff --git a/tools/ido_recomp/macos/7.1/as1 b/tools/ido_recomp/macos/7.1/as1 index 88b9f1f7e..93370b495 100755 Binary files a/tools/ido_recomp/macos/7.1/as1 and b/tools/ido_recomp/macos/7.1/as1 differ diff --git a/tools/ido_recomp/macos/7.1/cc b/tools/ido_recomp/macos/7.1/cc index ae54cdbcd..96d45690b 100755 Binary files a/tools/ido_recomp/macos/7.1/cc and b/tools/ido_recomp/macos/7.1/cc differ diff --git a/tools/ido_recomp/macos/7.1/cfe b/tools/ido_recomp/macos/7.1/cfe index 6c468c336..a9f0b56fc 100755 Binary files a/tools/ido_recomp/macos/7.1/cfe and b/tools/ido_recomp/macos/7.1/cfe differ diff --git a/tools/ido_recomp/macos/7.1/ugen b/tools/ido_recomp/macos/7.1/ugen index 3fa7d48fc..801337b48 100755 Binary files a/tools/ido_recomp/macos/7.1/ugen and b/tools/ido_recomp/macos/7.1/ugen differ diff --git a/tools/ido_recomp/macos/7.1/ujoin b/tools/ido_recomp/macos/7.1/ujoin new file mode 100755 index 000000000..620e624f0 Binary files /dev/null and b/tools/ido_recomp/macos/7.1/ujoin differ diff --git a/tools/ido_recomp/macos/7.1/uld b/tools/ido_recomp/macos/7.1/uld new file mode 100755 index 000000000..a7826480f Binary files /dev/null and b/tools/ido_recomp/macos/7.1/uld differ diff --git a/tools/ido_recomp/macos/7.1/umerge b/tools/ido_recomp/macos/7.1/umerge index 3a9d5440c..0f1978051 100755 Binary files a/tools/ido_recomp/macos/7.1/umerge and b/tools/ido_recomp/macos/7.1/umerge differ diff --git a/tools/ido_recomp/macos/7.1/uopt b/tools/ido_recomp/macos/7.1/uopt index b025fa2c5..528151499 100755 Binary files a/tools/ido_recomp/macos/7.1/uopt and b/tools/ido_recomp/macos/7.1/uopt differ diff --git a/tools/ido_recomp/macos/7.1/usplit b/tools/ido_recomp/macos/7.1/usplit new file mode 100755 index 000000000..cc539bdb1 Binary files /dev/null and b/tools/ido_recomp/macos/7.1/usplit differ diff --git a/tools/ido_recomp/windows/5.3/as0.exe b/tools/ido_recomp/windows/5.3/as0.exe new file mode 100755 index 000000000..10c16ca69 Binary files /dev/null and b/tools/ido_recomp/windows/5.3/as0.exe differ diff --git a/tools/ido_recomp/windows/5.3/as1.exe b/tools/ido_recomp/windows/5.3/as1.exe index fb67bb8b5..0ddac02bb 100755 Binary files a/tools/ido_recomp/windows/5.3/as1.exe and b/tools/ido_recomp/windows/5.3/as1.exe differ diff --git a/tools/ido_recomp/windows/5.3/cc.exe b/tools/ido_recomp/windows/5.3/cc.exe index 402d6f489..fdbaea21d 100755 Binary files a/tools/ido_recomp/windows/5.3/cc.exe and b/tools/ido_recomp/windows/5.3/cc.exe differ diff --git a/tools/ido_recomp/windows/5.3/cfe.exe b/tools/ido_recomp/windows/5.3/cfe.exe index 4b2fa59de..abe1063c6 100755 Binary files a/tools/ido_recomp/windows/5.3/cfe.exe and b/tools/ido_recomp/windows/5.3/cfe.exe differ diff --git a/tools/ido_recomp/windows/5.3/err.english.cc b/tools/ido_recomp/windows/5.3/err.english.cc old mode 100755 new mode 100644 diff --git a/tools/ido_recomp/windows/5.3/ugen.exe b/tools/ido_recomp/windows/5.3/ugen.exe index f74ee0d9e..be08a43c9 100755 Binary files a/tools/ido_recomp/windows/5.3/ugen.exe and b/tools/ido_recomp/windows/5.3/ugen.exe differ diff --git a/tools/ido_recomp/windows/5.3/ujoin.exe b/tools/ido_recomp/windows/5.3/ujoin.exe new file mode 100755 index 000000000..b01b5c335 Binary files /dev/null and b/tools/ido_recomp/windows/5.3/ujoin.exe differ diff --git a/tools/ido_recomp/windows/5.3/uld.exe b/tools/ido_recomp/windows/5.3/uld.exe new file mode 100755 index 000000000..34cad1400 Binary files /dev/null and b/tools/ido_recomp/windows/5.3/uld.exe differ diff --git a/tools/ido_recomp/windows/5.3/umerge.exe b/tools/ido_recomp/windows/5.3/umerge.exe new file mode 100755 index 000000000..3ce31e0cb Binary files /dev/null and b/tools/ido_recomp/windows/5.3/umerge.exe differ diff --git a/tools/ido_recomp/windows/5.3/uopt.exe b/tools/ido_recomp/windows/5.3/uopt.exe index 274d7e008..c1fb98c0d 100755 Binary files a/tools/ido_recomp/windows/5.3/uopt.exe and b/tools/ido_recomp/windows/5.3/uopt.exe differ diff --git a/tools/ido_recomp/windows/5.3/usplit.exe b/tools/ido_recomp/windows/5.3/usplit.exe new file mode 100755 index 000000000..d179f1e13 Binary files /dev/null and b/tools/ido_recomp/windows/5.3/usplit.exe differ diff --git a/tools/ido_recomp/windows/7.1/as0.exe b/tools/ido_recomp/windows/7.1/as0.exe new file mode 100755 index 000000000..1a375d73e Binary files /dev/null and b/tools/ido_recomp/windows/7.1/as0.exe differ diff --git a/tools/ido_recomp/windows/7.1/as1.exe b/tools/ido_recomp/windows/7.1/as1.exe index b41eba841..4778d2db6 100755 Binary files a/tools/ido_recomp/windows/7.1/as1.exe and b/tools/ido_recomp/windows/7.1/as1.exe differ diff --git a/tools/ido_recomp/windows/7.1/cc.exe b/tools/ido_recomp/windows/7.1/cc.exe index 1ada0d5bb..887b7cc49 100755 Binary files a/tools/ido_recomp/windows/7.1/cc.exe and b/tools/ido_recomp/windows/7.1/cc.exe differ diff --git a/tools/ido_recomp/windows/7.1/cfe.exe b/tools/ido_recomp/windows/7.1/cfe.exe index 03f8fc7e8..6f5fd9e8d 100755 Binary files a/tools/ido_recomp/windows/7.1/cfe.exe and b/tools/ido_recomp/windows/7.1/cfe.exe differ diff --git a/tools/ido_recomp/windows/7.1/err.english.cc b/tools/ido_recomp/windows/7.1/err.english.cc old mode 100755 new mode 100644 diff --git a/tools/ido_recomp/windows/7.1/ugen.exe b/tools/ido_recomp/windows/7.1/ugen.exe index e6533ab0b..fcc03538c 100755 Binary files a/tools/ido_recomp/windows/7.1/ugen.exe and b/tools/ido_recomp/windows/7.1/ugen.exe differ diff --git a/tools/ido_recomp/windows/7.1/ujoin.exe b/tools/ido_recomp/windows/7.1/ujoin.exe new file mode 100755 index 000000000..9fb3a3f4f Binary files /dev/null and b/tools/ido_recomp/windows/7.1/ujoin.exe differ diff --git a/tools/ido_recomp/windows/7.1/uld.exe b/tools/ido_recomp/windows/7.1/uld.exe new file mode 100755 index 000000000..4a0cc8fe2 Binary files /dev/null and b/tools/ido_recomp/windows/7.1/uld.exe differ diff --git a/tools/ido_recomp/windows/7.1/umerge.exe b/tools/ido_recomp/windows/7.1/umerge.exe new file mode 100755 index 000000000..7cc0b1be6 Binary files /dev/null and b/tools/ido_recomp/windows/7.1/umerge.exe differ diff --git a/tools/ido_recomp/windows/7.1/uopt.exe b/tools/ido_recomp/windows/7.1/uopt.exe index 5033f72b1..4fbd1ab57 100755 Binary files a/tools/ido_recomp/windows/7.1/uopt.exe and b/tools/ido_recomp/windows/7.1/uopt.exe differ diff --git a/tools/ido_recomp/windows/7.1/usplit.exe b/tools/ido_recomp/windows/7.1/usplit.exe new file mode 100755 index 000000000..5c0da6fe6 Binary files /dev/null and b/tools/ido_recomp/windows/7.1/usplit.exe differ diff --git a/tools/namefixer.py b/tools/namefixer.py index a60e58311..9de1fc43b 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -5,10 +5,7 @@ import argparse # all occurrences of keys will be replaced by associated value simpleReplace = { - # "Math_Rand_":"Rand_", - # "ACTORTYPE":"ACTORCAT", - # "DistToLink":"DistToPlayer", - # "HitItem":"HitInfo", + "PLAYER_AP_": "PLAYER_IA_", } # all occurrences of keys will be replaced by associated value, @@ -21,7 +18,9 @@ simpleReplace = { wordReplace = { # Functions "Actor_GetSwitchFlag": "Flags_GetSwitch", - "atan_flip": "Math_Acot2F", + "Math_FAtan2F(": "Math_Atan2S_XY(", + "Math_Acot2F": "Math_Atan2F_XY", + "atan_flip": "Math_Atan2F_XY", "atans": "Math_Atan2S", # "SysMatrix_StateAlloc": "Matrix_StateAlloc", @@ -98,6 +97,7 @@ wordReplace = { "Matrix_InsertRotationAroundUnitVector_s": "Matrix_RotateAxisS", "func_800B78B8": "Actor_UpdateBgCheckInfo", + "func_80123D50": "Player_UpdateBottleHeld", "func_8012403C": "Player_GetMask", "func_8012404c": "Player_RemoveMask", "func_80123AA4": "Player_SetModels", @@ -149,6 +149,7 @@ wordReplace = { "func_801A5BD0": "AudioSfx_MuteBanks", "func_801A72CC": "AudioSfx_StopByPos", "Audio_StopSfxByPos": "AudioSfx_StopByPos", + "Audio_StopSfxById": "AudioSfx_StopById", "func_801A3098": "Audio_PlayFanfare", "func_801A8A50": "Audio_GetActiveSequence", "func_801A2E54": "Audio_PlayBgm_StorePrevBgm", @@ -471,6 +472,7 @@ wordReplace = { "func_800DFC90": "Camera_GetCamDir", "func_800DFD04": "Camera_AddQuake", "func_800DFFAC": "Camera_ChangeDoorCam", + "func_801694DC": "Play_CreateSubCamera", "Play_GetActiveCameraIndex": "Play_GetActiveCamId", "func_80169590": "Play_ChangeCameraStatus", @@ -498,6 +500,14 @@ wordReplace = { "func_80169E6C": "Play_SetupRespawnPoint", "func_8016A0AC": "Play_IsUnderwater", "func_801690CC": "Play_InCsMode", + "func_80165658": "Play_SetMotionBlurAlpha", + "func_8016566C": "Play_EnableMotionBlur", + "func_80165690": "Play_DisableMotionBlur", + "func_801660B8": "Play_SetFog", + + "func_801129E4": "Interface_SetSceneRestrictions", + "func_8011B4E0": "Interface_SetPerfectLetters", + "func_80112AFC": "Interface_InitMinigame", "func_8010E9F0": "Interface_StartTimer", "func_8010EA9C": "Interface_StartPostmanTimer", "func_80121F94": "Interface_Destroy", @@ -515,7 +525,7 @@ wordReplace = { "func_80115130": "Inventory_ConsumeFairy", "func_801152B8": "Inventory_UpdateItem", "func_80115908": "Health_ChangeBy", - "func_801159c0": "Health_GiveHearts", + "func_801159C0": "Health_GiveHearts", "func_801159EC": "Rupees_ChangeBy", "func_80115A14": "Inventory_ChangeAmmo", "Parameter_AddMagic": "Magic_Add", @@ -527,6 +537,9 @@ wordReplace = { "func_800A81F0": "EffectBlure_AddVertex", "func_800A8514": "EffectBlure_AddSpace", "Effect_GetParams": "Effect_GetByIndex", + "func_800FE484": "Environment_StopTime", + "func_800FE498": "Environment_StartTime", + "func_800FE4A8": "Environment_IsTimeStopped", "func_800F5A8C": "Environment_LerpWeight", "func_801A3F54": "Audio_SetCutsceneFlag", "func_800EA0D4": "Cutscene_Start", @@ -617,6 +630,7 @@ wordReplace = { "func_800E8FA4": "Actor_TrackPoint", "func_800E9250": "Actor_TrackPlayer", "func_800E8EA0": "Actor_ContinueText", + "func_800B90F4": "Actor_DeactivateLens", "func_8010A000": "Map_GetDungeonOrBossAreaIndex", "func_8010A074": "Map_IsInDungeonOrBossArea", @@ -636,6 +650,8 @@ wordReplace = { "Entrance_CreateIndex": "Entrance_Create", "Entrance_CreateIndexFromSpawn": "Entrance_CreateFromSpawn", + "func_80102544": "LightContext_SetFog", + # Structs "ActorAnimationEntry": "AnimationInfo", "ActorAnimationEntryS": "AnimationInfoS", @@ -687,7 +703,8 @@ wordReplace = { "gSaveContext.equippedMask": "gSaveContext.save.equippedMask", "gSaveContext.entranceIndex": "gSaveContext.save.entrance", "gSaveContext.time": "gSaveContext.save.time", - "gSaveContext.unk_14": "gSaveContext.save.daySpeed", + "gSaveContext.save.daySpeed": "gSaveContext.save.timeSpeedOffset", + "gSaveContext.unk_14": "gSaveContext.save.timeSpeedOffset", "gSaveContext.unk_FE6": "gSaveContext.save.bombersCaughtNum", "gSaveContext.unk_FE7": "gSaveContext.save.bombersCaughtOrder", "gSaveContext.linkAge": "gSaveContext.save.linkAge", @@ -712,6 +729,8 @@ wordReplace = { "gSaveContext.sceneSetupIndex": "gSaveContext.sceneLayer", "gSaveContext.seqIndex": "gSaveContext.seqId", "gSaveContext.nightSeqIndex": "gSaveContext.ambienceId", + "gSaveContext.minigameState": "gSaveContext.minigameStatus", + "gSaveContext.unk_3F3C": "gSaveContext.minigameHiddenScore", "player->unk_A87": "player->exchangeItemId", "player->leftHandActor": "player->heldActor", @@ -726,6 +745,17 @@ wordReplace = { "player->swordAnimation": "player->meleeWeaponAnimation", "player->swordState": "player->meleeWeaponState", "player->swordInfo": "player->meleeWeaponInfo", + "player->itemActionParam": "player->heldItemAction", + "player->heldItemActionParam": "player->itemAction", + "player->unk_A9C": "player->secretRumbleCharge", + "player->unk_AA0": "player->closestSecretDistSq", + "player->unk_B68": "player->fallStartHeight", + "player->unk_B6A": "player->fallDistance", + "player->targetActor": "player->talkActor", + "player->targetActorDistance": "player->talkActorDistance", + "player->unk_730": "player->targetedActor", + "player->ageProperties->unk_92": "player->ageProperties->voiceSfxIdOffset", + "player->ageProperties->unk_94": "player->ageProperties->surfaceSfxIdOffset", "csCtx.npcActions": "csCtx.actorActions", "csCtx->npcActions": "csCtx->actorActions", @@ -741,6 +771,11 @@ wordReplace = { "globalCtx->interfaceCtx.unk_21E": "play->interfaceCtx.bButtonDoAction", "play->interfaceCtx.unk_31A": "play->interfaceCtx.storyState", "play->interfaceCtx.unk_31B": "play->interfaceCtx.storyType", + "play->interfaceCtx.unk_25C": "play->interfaceCtx.minigamePoints", + "play->interfaceCtx.unk_25E": "play->interfaceCtx.minigameHiddenPoints", + "play->interfaceCtx.unk_280": "play->interfaceCtx.minigameState", + "play->interfaceCtx.unk_286": "play->interfaceCtx.perfectLettersOn", + "play->interfaceCtx.hbaAmmo": "play->interfaceCtx.minigameAmmo", # "play->actorCtx.flags": "play->actorCtx.sceneFlags", # "play->actorCtx.unk5": "play->actorCtx.flags", @@ -785,22 +820,48 @@ wordReplace = { "ICHAIN_F32_DIV1000(minVelocityY,": "ICHAIN_F32_DIV1000(terminalVelocity,", "ICHAIN_F32(minVelocityY,": "ICHAIN_F32(terminalVelocity,", - "EXCH_ITEM_MINUS1": "PLAYER_AP_MINUS1", - "EXCH_ITEM_NONE": "PLAYER_AP_NONE", - "EXCH_ITEM_PICTO_BOX": "PLAYER_AP_PICTO_BOX", - "EXCH_ITEM_1E": "PLAYER_AP_BOTTLE_MUSHROOM", - "EXCH_ITEM_MOON_TEAR": "PLAYER_AP_MOON_TEAR", - "EXCH_ITEM_DEED_LAND": "PLAYER_AP_DEED_LAND", - "EXCH_ITEM_ROOM_KEY": "PLAYER_AP_ROOM_KEY", - "EXCH_ITEM_LETTER_TO_KAFEI": "PLAYER_AP_LETTER_TO_KAFEI", - "EXCH_ITEM_2E": "PLAYER_AP_MAGIC_BEANS", - "EXCH_ITEM_DEED_SWAMP": "PLAYER_AP_DEED_SWAMP", - "EXCH_ITEM_DEED_MOUNTAIN": "PLAYER_AP_DEED_MOUNTAIN", - "EXCH_ITEM_DEED_OCEAN": "PLAYER_AP_DEED_OCEAN", - "EXCH_ITEM_LETTER_MAMA": "PLAYER_AP_LETTER_MAMA", - "ITEM_FISHING_POLE": "ITEM_FISHING_ROD", - "PLAYER_AP_FISHING_POLE": "PLAYER_AP_FISHING_ROD", + "ACTORCTX_FLAG_2": "ACTORCTX_FLAG_PICTO_BOX_ON", + "EXCH_ITEM_MINUS1": "PLAYER_IA_MINUS1", + "EXCH_ITEM_NONE": "PLAYER_IA_NONE", + "EXCH_ITEM_PICTO_BOX": "PLAYER_IA_PICTO_BOX", + "EXCH_ITEM_1E": "PLAYER_IA_BOTTLE_MUSHROOM", + "EXCH_ITEM_MOON_TEAR": "PLAYER_IA_MOON_TEAR", + "EXCH_ITEM_DEED_LAND": "PLAYER_IA_DEED_LAND", + "EXCH_ITEM_ROOM_KEY": "PLAYER_IA_ROOM_KEY", + "EXCH_ITEM_LETTER_TO_KAFEI": "PLAYER_IA_LETTER_TO_KAFEI", + "EXCH_ITEM_2E": "PLAYER_IA_MAGIC_BEANS", + "EXCH_ITEM_DEED_SWAMP": "PLAYER_IA_DEED_SWAMP", + "EXCH_ITEM_DEED_MOUNTAIN": "PLAYER_IA_DEED_MOUNTAIN", + "EXCH_ITEM_DEED_OCEAN": "PLAYER_IA_DEED_OCEAN", + "EXCH_ITEM_LETTER_MAMA": "PLAYER_IA_LETTER_MAMA", + "ITEM_FISHING_POLE": "ITEM_FISHING_ROD", + "PLAYER_AP_FISHING_POLE": "PLAYER_IA_FISHING_ROD", + + # Enums + "TRANS_TYPE_00": "TRANS_TYPE_WIPE", + "TRANS_TYPE_01": "TRANS_TYPE_TRIFORCE", + "TRANS_TYPE_02": "TRANS_TYPE_FADE_BLACK", + "TRANS_TYPE_03": "TRANS_TYPE_FADE_WHITE", + "TRANS_TYPE_04": "TRANS_TYPE_FADE_BLACK_FAST", + "TRANS_TYPE_05": "TRANS_TYPE_FADE_WHITE_FAST", + "TRANS_TYPE_06": "TRANS_TYPE_FADE_BLACK_SLOW", + "TRANS_TYPE_07": "TRANS_TYPE_FADE_WHITE_SLOW", + "TRANS_TYPE_08": "TRANS_TYPE_WIPE_FAST", + "TRANS_TYPE_09": "TRANS_TYPE_FILL_WHITE_FAST", + "TRANS_TYPE_10": "TRANS_TYPE_FILL_WHITE", + "TRANS_TYPE_11": "TRANS_TYPE_INSTANT", + "TRANS_TYPE_12": "TRANS_TYPE_FILL_BROWN", + "TRANS_TYPE_13": "TRANS_TYPE_FADE_WHITE_CS_DELAYED", + "TRANS_TYPE_14": "TRANS_TYPE_SANDSTORM_PERSIST", + "TRANS_TYPE_15": "TRANS_TYPE_SANDSTORM_END", + "TRANS_TYPE_16": "TRANS_TYPE_CS_BLACK_FILL", + "TRANS_TYPE_17": "TRANS_TYPE_FADE_WHITE_INSTANT", + "TRANS_TYPE_18": "TRANS_TYPE_FADE_GREEN", + "TRANS_TYPE_19": "TRANS_TYPE_FADE_BLUE", + "TRANS_TYPE_20": "TRANS_TYPE_FADE_DYNAMIC", + "TRANS_TYPE_21": "TRANS_TYPE_CIRCLE", + "TRANS_TYPE_22": "TRANS_TYPE_WIPE5", # Example of custom behaviour: # "PLAYER": ("GET_PLAYER(play)", {"ignore": (-1, '"PLAYER"')}), # ignore "PLAYER" in sSoundBankNames } diff --git a/tools/overlayhelpers/scheduledis.py b/tools/overlayhelpers/scheduledis.py index b441b94c7..5eb70d518 100755 --- a/tools/overlayhelpers/scheduledis.py +++ b/tools/overlayhelpers/scheduledis.py @@ -7,8 +7,8 @@ import argparse, os, struct, math from actor_symbols import resolve_symbol cmd_info = [ - ('SCHEDULE_CMD_CHECK_FLAG_S', 0x04, '>BBb', (2, )), - ('SCHEDULE_CMD_CHECK_FLAG_L', 0x05, '>BBh', (2, )), + ('SCHEDULE_CMD_CHECK_FLAG_S', 0x04, '>Hb', (1, )), + ('SCHEDULE_CMD_CHECK_FLAG_L', 0x05, '>Hh', (1, )), ('SCHEDULE_CMD_CHECK_TIME_RANGE_S', 0x06, '>BBBBb', (4, )), ('SCHEDULE_CMD_CHECK_TIME_RANGE_L', 0x07, '>BBBBh', (4, )), ('SCHEDULE_CMD_RET_VAL_L', 0x03, '>H', ( )), @@ -198,6 +198,8 @@ def disassemble_unk_script(data_file, offset): elif arg_type == "H": if (cmd == 0x0A or cmd == 0x0B) and (arg_value < len(scene_names)): arg_formatted = scene_names[arg_value] + elif cmd == 0x00 or cmd == 0x01: + arg_formatted = f"WEEKEVENTREG_{arg_value>>8:02}_{arg_value&0xFF:02X}" else: arg_formatted = f"{arg_value}" elif arg_type == "B": diff --git a/tools/permuter_settings.toml b/tools/permuter_settings.toml index 380acbfc2..5f42d30d6 100644 --- a/tools/permuter_settings.toml +++ b/tools/permuter_settings.toml @@ -20,6 +20,18 @@ CLOCK_TIME = "int" CURRENT_DAY = "int" CHECK_NEWF = "int" NULL = "int" +"SCREEN_.*" = "int" +GET_PLAYER = "int" +CHECK_WEEKEVENTREG = "int" +SET_WEEKEVENTREG = "int" +CLEAR_WEEKEVENTREG = "int" +"WEEKEVENTREG_.+" = "int" +CHECK_EVENTINF = "int" +SET_EVENTINF = "int" +CLEAR_EVENTINF = "int" +CLEAR_EVENTINF_ALT = "int" +"EVENTINF_.*" = "int" +".+REG" = "int" [decompme.compilers] "tools/ido_recomp/linux/7.1/cc" = "ido7.1" diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 19f625dbf..3e1befd91 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1,7 +1,7 @@ asm/non_matchings/code/z_en_a_keep/EnAObj_Init.s,EnAObj_Init,0x800A5AC0,0x2B asm/non_matchings/code/z_en_a_keep/EnAObj_Destroy.s,EnAObj_Destroy,0x800A5B6C,0xB -asm/non_matchings/code/z_en_a_keep/EnAObj_Update1.s,EnAObj_Update1,0x800A5B98,0x24 -asm/non_matchings/code/z_en_a_keep/EnAObj_Update2.s,EnAObj_Update2,0x800A5C28,0xE +asm/non_matchings/code/z_en_a_keep/EnAObj_Idle.s,EnAObj_Idle,0x800A5B98,0x24 +asm/non_matchings/code/z_en_a_keep/EnAObj_Talk.s,EnAObj_Talk,0x800A5C28,0xE asm/non_matchings/code/z_en_a_keep/EnAObj_Update.s,EnAObj_Update,0x800A5C60,0x16 asm/non_matchings/code/z_en_a_keep/EnAObj_Draw.s,EnAObj_Draw,0x800A5CB8,0x12 asm/non_matchings/code/z_en_item00/EnItem00_SetObject.s,EnItem00_SetObject,0x800A5D00,0x1C @@ -268,7 +268,7 @@ asm/non_matchings/code/z_actor/Actor_IsFacingPlayer.s,Actor_IsFacingPlayer,0x800 asm/non_matchings/code/z_actor/Actor_ActorAIsFacingActorB.s,Actor_ActorAIsFacingActorB,0x800B742C,0x18 asm/non_matchings/code/z_actor/Actor_IsFacingAndNearPlayer.s,Actor_IsFacingAndNearPlayer,0x800B748C,0x20 asm/non_matchings/code/z_actor/Actor_ActorAIsFacingAndNearActorB.s,Actor_ActorAIsFacingAndNearActorB,0x800B750C,0x25 -asm/non_matchings/code/z_actor/func_800B75A0.s,func_800B75A0,0x800B75A0,0x1F +asm/non_matchings/code/z_actor/Actor_GetSlopeDirection.s,Actor_GetSlopeDirection,0x800B75A0,0x1F asm/non_matchings/code/z_actor/func_800B761C.s,func_800B761C,0x800B761C,0x17 asm/non_matchings/code/z_actor/func_800B7678.s,func_800B7678,0x800B7678,0x90 asm/non_matchings/code/z_actor/Actor_UpdateBgCheckInfo.s,Actor_UpdateBgCheckInfo,0x800B78B8,0x153 @@ -1222,11 +1222,11 @@ asm/non_matchings/code/z_kanfont/Font_LoadMessageBoxEndIcon.s,Font_LoadMessageBo asm/non_matchings/code/z_kanfont/Font_LoadOrderedFont.s,Font_LoadOrderedFont,0x800F5004,0x23 asm/non_matchings/code/z_kankyo/func_800F5090.s,func_800F5090,0x800F5090,0x11 asm/non_matchings/code/z_kankyo/func_800F50D4.s,func_800F50D4,0x800F50D4,0xE -asm/non_matchings/code/z_kankyo/Kankyo_Init.s,Kankyo_Init,0x800F510C,0x212 +asm/non_matchings/code/z_kankyo/Environment_Init.s,Environment_Init,0x800F510C,0x212 asm/non_matchings/code/z_kankyo/func_800F5954.s,func_800F5954,0x800F5954,0x4E asm/non_matchings/code/z_kankyo/Environment_LerpWeight.s,Environment_LerpWeight,0x800F5A8C,0x21 asm/non_matchings/code/z_kankyo/func_800F5B10.s,func_800F5B10,0x800F5B10,0x70 -asm/non_matchings/code/z_kankyo/func_800F5CD0.s,func_800F5CD0,0x800F5CD0,0x2D9 +asm/non_matchings/code/z_kankyo/Environment_UpdateSkybox.s,Environment_UpdateSkybox,0x800F5CD0,0x2D9 asm/non_matchings/code/z_kankyo/func_800F6834.s,func_800F6834,0x800F6834,0x46 asm/non_matchings/code/z_kankyo/func_800F694C.s,func_800F694C,0x800F694C,0x2E asm/non_matchings/code/z_kankyo/func_800F6A04.s,func_800F6A04,0x800F6A04,0xF @@ -1241,13 +1241,13 @@ asm/non_matchings/code/z_kankyo/func_800F8554.s,func_800F8554,0x800F8554,0xDC asm/non_matchings/code/z_kankyo/func_800F88C4.s,func_800F88C4,0x800F88C4,0x2B asm/non_matchings/code/z_kankyo/func_800F8970.s,func_800F8970,0x800F8970,0x4B asm/non_matchings/code/z_kankyo/func_800F8A9C.s,func_800F8A9C,0x800F8A9C,0x8E -asm/non_matchings/code/z_kankyo/func_800F8CD4.s,func_800F8CD4,0x800F8CD4,0x2C +asm/non_matchings/code/z_kankyo/Environment_Update.s,Environment_Update,0x800F8CD4,0x2C asm/non_matchings/code/z_kankyo/func_800F8D84.s,func_800F8D84,0x800F8D84,0x269 -asm/non_matchings/code/z_kankyo/func_800F9728.s,func_800F9728,0x800F9728,0x3F +asm/non_matchings/code/z_kankyo/Environment_DrawSunLensFlare.s,Environment_DrawSunLensFlare,0x800F9728,0x3F asm/non_matchings/code/z_kankyo/func_800F9824.s,func_800F9824,0x800F9824,0x2DE asm/non_matchings/code/z_kankyo/func_800FA39C.s,func_800FA39C,0x800FA39C,0xA asm/non_matchings/code/z_kankyo/func_800FA3C4.s,func_800FA3C4,0x800FA3C4,0x18E -asm/non_matchings/code/z_kankyo/func_800FA9FC.s,func_800FA9FC,0x800FA9FC,0x2E +asm/non_matchings/code/z_kankyo/Environment_DrawRain.s,Environment_DrawRain,0x800FA9FC,0x2E asm/non_matchings/code/z_kankyo/func_800FAAB4.s,func_800FAAB4,0x800FAAB4,0x5B asm/non_matchings/code/z_kankyo/func_800FAC20.s,func_800FAC20,0x800FAC20,0xD5 asm/non_matchings/code/z_kankyo/func_800FAF74.s,func_800FAF74,0x800FAF74,0x27 @@ -1256,13 +1256,13 @@ asm/non_matchings/code/z_kankyo/Environment_AddLightningBolts.s,Environment_AddL asm/non_matchings/code/z_kankyo/func_800FB388.s,func_800FB388,0x800FB388,0xF4 asm/non_matchings/code/z_kankyo/func_800FB758.s,func_800FB758,0x800FB758,0x97 asm/non_matchings/code/z_kankyo/func_800FB9B4.s,func_800FB9B4,0x800FB9B4,0xC2 -asm/non_matchings/code/z_kankyo/func_800FBCBC.s,func_800FBCBC,0x800FBCBC,0x4C +asm/non_matchings/code/z_kankyo/Environment_DrawCustomLensFlare.s,Environment_DrawCustomLensFlare,0x800FBCBC,0x4C asm/non_matchings/code/z_kankyo/Kankyo_InitGameOverLights.s,Kankyo_InitGameOverLights,0x800FBDEC,0x54 asm/non_matchings/code/z_kankyo/Kankyo_FadeInGameOverLights.s,Kankyo_FadeInGameOverLights,0x800FBF3C,0x87 asm/non_matchings/code/z_kankyo/Kankyo_FadeOutGameOverLights.s,Kankyo_FadeOutGameOverLights,0x800FC158,0xA1 asm/non_matchings/code/z_kankyo/func_800FC3DC.s,func_800FC3DC,0x800FC3DC,0x1A -asm/non_matchings/code/z_kankyo/func_800FC444.s,func_800FC444,0x800FC444,0x82 -asm/non_matchings/code/z_kankyo/func_800FC64C.s,func_800FC64C,0x800FC64C,0x31A +asm/non_matchings/code/z_kankyo/Environment_FillScreen.s,Environment_FillScreen,0x800FC444,0x82 +asm/non_matchings/code/z_kankyo/Environment_DrawSandstorm.s,Environment_DrawSandstorm,0x800FC64C,0x31A asm/non_matchings/code/z_kankyo/func_800FD2B4.s,func_800FD2B4,0x800FD2B4,0xA1 asm/non_matchings/code/z_kankyo/func_800FD538.s,func_800FD538,0x800FD538,0x19 asm/non_matchings/code/z_kankyo/func_800FD59C.s,func_800FD59C,0x800FD59C,0x11 @@ -1282,9 +1282,9 @@ asm/non_matchings/code/z_kankyo/func_800FDAF8.s,func_800FDAF8,0x800FDAF8,0x67 asm/non_matchings/code/z_kankyo/func_800FDC94.s,func_800FDC94,0x800FDC94,0x1BF asm/non_matchings/code/z_kankyo/func_800FE390.s,func_800FE390,0x800FE390,0x14 asm/non_matchings/code/z_kankyo/func_800FE3E0.s,func_800FE3E0,0x800FE3E0,0x29 -asm/non_matchings/code/z_kankyo/func_800FE484.s,func_800FE484,0x800FE484,0x5 -asm/non_matchings/code/z_kankyo/func_800FE498.s,func_800FE498,0x800FE498,0x4 -asm/non_matchings/code/z_kankyo/func_800FE4A8.s,func_800FE4A8,0x800FE4A8,0x4 +asm/non_matchings/code/z_kankyo/Environment_StopTime.s,Environment_StopTime,0x800FE484,0x5 +asm/non_matchings/code/z_kankyo/Environment_StartTime.s,Environment_StartTime,0x800FE498,0x4 +asm/non_matchings/code/z_kankyo/Environment_IsTimeStopped.s,Environment_IsTimeStopped,0x800FE4A8,0x4 asm/non_matchings/code/z_kankyo/func_800FE4B8.s,func_800FE4B8,0x800FE4B8,0x36 asm/non_matchings/code/z_kankyo/func_800FE590.s,func_800FE590,0x800FE590,0x10 asm/non_matchings/code/z_kankyo/func_800FE5D0.s,func_800FE5D0,0x800FE5D0,0x10 @@ -1395,7 +1395,7 @@ asm/non_matchings/code/z_lights/Lights_FindBufSlot.s,Lights_FindBufSlot,0x801023 asm/non_matchings/code/z_lights/Lights_FreeNode.s,Lights_FreeNode,0x80102464,0x12 asm/non_matchings/code/z_lights/LightContext_Init.s,LightContext_Init,0x801024AC,0x1B asm/non_matchings/code/z_lights/LightContext_SetAmbientColor.s,LightContext_SetAmbientColor,0x80102518,0xB -asm/non_matchings/code/z_lights/func_80102544.s,func_80102544,0x80102544,0xF +asm/non_matchings/code/z_lights/LightContext_SetFog.s,LightContext_SetFog,0x80102544,0xF asm/non_matchings/code/z_lights/LightContext_NewLights.s,LightContext_NewLights,0x80102580,0xE asm/non_matchings/code/z_lights/LightContext_InitList.s,LightContext_InitList,0x801025B8,0x4 asm/non_matchings/code/z_lights/LightContext_DestroyList.s,LightContext_DestroyList,0x801025C8,0x17 @@ -1597,32 +1597,32 @@ asm/non_matchings/code/z_olib/OLib_Vec3fDiffDegF.s,OLib_Vec3fDiffDegF,0x8010C8C8 asm/non_matchings/code/z_olib/OLib_Vec3fDiffBinAng.s,OLib_Vec3fDiffBinAng,0x8010C930,0x26 asm/non_matchings/code/z_olib/OLib_DbCameraVec3fDiff.s,OLib_DbCameraVec3fDiff,0x8010C9C8,0x36 asm/non_matchings/code/z_olib/OLib_DbCameraVec3fSum.s,OLib_DbCameraVec3fSum,0x8010CAA0,0x34 -asm/non_matchings/code/z_parameter/func_8010CB80.s,func_8010CB80,0x8010CB80,0x86 -asm/non_matchings/code/z_parameter/func_8010CD98.s,func_8010CD98,0x8010CD98,0x89 -asm/non_matchings/code/z_parameter/func_8010CFBC.s,func_8010CFBC,0x8010CFBC,0xC6 -asm/non_matchings/code/z_parameter/func_8010D2D4.s,func_8010D2D4,0x8010D2D4,0x6B -asm/non_matchings/code/z_parameter/func_8010D480.s,func_8010D480,0x8010D480,0xD4 -asm/non_matchings/code/z_parameter/func_8010D7D0.s,func_8010D7D0,0x8010D7D0,0x89 -asm/non_matchings/code/z_parameter/func_8010D9F4.s,func_8010D9F4,0x8010D9F4,0x99 -asm/non_matchings/code/z_parameter/func_8010DC58.s,func_8010DC58,0x8010DC58,0x78 -asm/non_matchings/code/z_parameter/func_8010DE38.s,func_8010DE38,0x8010DE38,0x7C -asm/non_matchings/code/z_parameter/func_8010E028.s,func_8010E028,0x8010E028,0x250 +asm/non_matchings/code/z_parameter/Gfx_DrawTexRectRGBA16.s,Gfx_DrawTexRectRGBA16,0x8010CB80,0x86 +asm/non_matchings/code/z_parameter/Gfx_DrawTexRectIA8.s,Gfx_DrawTexRectIA8,0x8010CD98,0x89 +asm/non_matchings/code/z_parameter/Gfx_DrawTexRectIA8_DropShadow.s,Gfx_DrawTexRectIA8_DropShadow,0x8010CFBC,0xC6 +asm/non_matchings/code/z_parameter/Gfx_DrawRect_DropShadow.s,Gfx_DrawRect_DropShadow,0x8010D2D4,0x6B +asm/non_matchings/code/z_parameter/Gfx_DrawTexRectIA8_DropShadowOffset.s,Gfx_DrawTexRectIA8_DropShadowOffset,0x8010D480,0xD4 +asm/non_matchings/code/z_parameter/Gfx_DrawTexRectI8.s,Gfx_DrawTexRectI8,0x8010D7D0,0x89 +asm/non_matchings/code/z_parameter/Gfx_DrawTexRect4b.s,Gfx_DrawTexRect4b,0x8010D9F4,0x99 +asm/non_matchings/code/z_parameter/Gfx_DrawTexQuadIA8.s,Gfx_DrawTexQuadIA8,0x8010DC58,0x78 +asm/non_matchings/code/z_parameter/Gfx_DrawTexQuad4b.s,Gfx_DrawTexQuad4b,0x8010DE38,0x7C +asm/non_matchings/code/z_parameter/Interface_SetVertices.s,Interface_SetVertices,0x8010E028,0x250 asm/non_matchings/code/z_parameter/Interface_PostmanTimerCallback.s,Interface_PostmanTimerCallback,0x8010E968,0x22 asm/non_matchings/code/z_parameter/Interface_StartTimer.s,Interface_StartTimer,0x8010E9F0,0x2B asm/non_matchings/code/z_parameter/Interface_StartPostmanTimer.s,Interface_StartPostmanTimer,0x8010EA9C,0x2D asm/non_matchings/code/z_parameter/Interface_StartGoronRaceTimer.s,Interface_StartGoronRaceTimer,0x8010EB50,0x14 asm/non_matchings/code/z_parameter/Interface_StartBottleTimer.s,Interface_StartBottleTimer,0x8010EBA0,0x2D asm/non_matchings/code/z_parameter/Interface_GetCompressedTimerDigits.s,Interface_GetCompressedTimerDigits,0x8010EC54,0x88 -asm/non_matchings/code/z_parameter/func_8010EE74.s,func_8010EE74,0x8010EE74,0x3D +asm/non_matchings/code/z_parameter/Interface_NewDay.s,Interface_NewDay,0x8010EE74,0x3D asm/non_matchings/code/z_parameter/Interface_SetHudVisibility.s,Interface_SetHudVisibility,0x8010EF68,0xD asm/non_matchings/code/z_parameter/Interface_UpdateButtonAlphasByStatus.s,Interface_UpdateButtonAlphasByStatus,0x8010EF9C,0x4E asm/non_matchings/code/z_parameter/Interface_UpdateButtonAlphas.s,Interface_UpdateButtonAlphas,0x8010F0D4,0x35 asm/non_matchings/code/z_parameter/Interface_UpdateHudAlphas.s,Interface_UpdateHudAlphas,0x8010F1A8,0x3A4 asm/non_matchings/code/z_parameter/func_80110038.s,func_80110038,0x80110038,0x71F asm/non_matchings/code/z_parameter/func_80111CB4.s,func_80111CB4,0x80111CB4,0x34C -asm/non_matchings/code/z_parameter/func_801129E4.s,func_801129E4,0x801129E4,0x44 -asm/non_matchings/code/z_parameter/func_80112AF4.s,func_80112AF4,0x80112AF4,0x2 -asm/non_matchings/code/z_parameter/func_80112AFC.s,func_80112AFC,0x80112AFC,0x11 +asm/non_matchings/code/z_parameter/Interface_SetSceneRestrictions.s,Interface_SetSceneRestrictions,0x801129E4,0x44 +asm/non_matchings/code/z_parameter/Interface_Noop.s,Interface_Noop,0x80112AF4,0x2 +asm/non_matchings/code/z_parameter/Interface_InitMinigame.s,Interface_InitMinigame,0x80112AFC,0x11 asm/non_matchings/code/z_parameter/Interface_LoadItemIconImpl.s,Interface_LoadItemIconImpl,0x80112B40,0x29 asm/non_matchings/code/z_parameter/Interface_LoadItemIcon.s,Interface_LoadItemIcon,0x80112BE4,0xA asm/non_matchings/code/z_parameter/func_80112C0C.s,func_80112C0C,0x80112C0C,0x9D @@ -1664,23 +1664,23 @@ asm/non_matchings/code/z_parameter/func_80118084.s,func_80118084,0x80118084,0x20 asm/non_matchings/code/z_parameter/func_80118890.s,func_80118890,0x80118890,0xC5 asm/non_matchings/code/z_parameter/func_80118BA4.s,func_80118BA4,0x80118BA4,0x123 asm/non_matchings/code/z_parameter/func_80119030.s,func_80119030,0x80119030,0x178 -asm/non_matchings/code/z_parameter/func_80119610.s,func_80119610,0x80119610,0x7B4 -asm/non_matchings/code/z_parameter/func_8011B4E0.s,func_8011B4E0,0x8011B4E0,0x38 -asm/non_matchings/code/z_parameter/func_8011B5C0.s,func_8011B5C0,0x8011B5C0,0x108 -asm/non_matchings/code/z_parameter/func_8011B9E0.s,func_8011B9E0,0x8011B9E0,0x164 -asm/non_matchings/code/z_parameter/func_8011BF70.s,func_8011BF70,0x8011BF70,0x155 -asm/non_matchings/code/z_parameter/func_8011C4C4.s,func_8011C4C4,0x8011C4C4,0xD1 +asm/non_matchings/code/z_parameter/Interface_DrawClock.s,Interface_DrawClock,0x80119610,0x7B4 +asm/non_matchings/code/z_parameter/Interface_SetPerfectLetters.s,Interface_SetPerfectLetters,0x8011B4E0,0x38 +asm/non_matchings/code/z_parameter/Interface_UpdatePerfectLettersType1.s,Interface_UpdatePerfectLettersType1,0x8011B5C0,0x108 +asm/non_matchings/code/z_parameter/Interface_UpdatePerfectLettersType2.s,Interface_UpdatePerfectLettersType2,0x8011B9E0,0x164 +asm/non_matchings/code/z_parameter/Interface_UpdatePerfectLettersType3.s,Interface_UpdatePerfectLettersType3,0x8011BF70,0x155 +asm/non_matchings/code/z_parameter/Interface_DrawPerfectLetters.s,Interface_DrawPerfectLetters,0x8011C4C4,0xD1 asm/non_matchings/code/z_parameter/Interface_StartMoonCrash.s,Interface_StartMoonCrash,0x8011C808,0x24 asm/non_matchings/code/z_parameter/Interface_GetTimerDigits.s,Interface_GetTimerDigits,0x8011C898,0x73 asm/non_matchings/code/z_parameter/Interface_DrawTimers.s,Interface_DrawTimers,0x8011CA64,0x654 asm/non_matchings/code/z_parameter/Interface_UpdateBottleTimers.s,Interface_UpdateBottleTimers,0x8011E3B4,0xDF -asm/non_matchings/code/z_parameter/func_8011E730.s,func_8011E730,0x8011E730,0x26C -asm/non_matchings/code/z_parameter/func_8011F0E0.s,func_8011F0E0,0x8011F0E0,0x7AC -asm/non_matchings/code/z_parameter/func_80120F90.s,func_80120F90,0x80120F90,0x35 -asm/non_matchings/code/z_parameter/func_80121064.s,func_80121064,0x80121064,0x1F -asm/non_matchings/code/z_parameter/func_801210E0.s,func_801210E0,0x801210E0,0x3AD +asm/non_matchings/code/z_parameter/Interface_DrawMinigameIcons.s,Interface_DrawMinigameIcons,0x8011E730,0x26C +asm/non_matchings/code/z_parameter/Interface_Draw.s,Interface_Draw,0x8011F0E0,0x7AC +asm/non_matchings/code/z_parameter/Interface_LoadStory.s,Interface_LoadStory,0x80120F90,0x35 +asm/non_matchings/code/z_parameter/Interface_AllocStory.s,Interface_AllocStory,0x80121064,0x1F +asm/non_matchings/code/z_parameter/Interface_Update.s,Interface_Update,0x801210E0,0x3AD asm/non_matchings/code/z_parameter/Interface_Destroy.s,Interface_Destroy,0x80121F94,0xC -asm/non_matchings/code/z_parameter/func_80121FC4.s,func_80121FC4,0x80121FC4,0x147 +asm/non_matchings/code/z_parameter/Interface_Init.s,Interface_Init,0x80121FC4,0x147 asm/non_matchings/code/z_path/func_801224E0.s,func_801224E0,0x801224E0,0x11 asm/non_matchings/code/z_path/func_80122524.s,func_80122524,0x80122524,0x2A asm/non_matchings/code/z_path/func_801225CC.s,func_801225CC,0x801225CC,0x25 @@ -1721,7 +1721,7 @@ asm/non_matchings/code/z_player_lib/Player_SetModels.s,Player_SetModels,0x80123A asm/non_matchings/code/z_player_lib/Player_SetModelGroup.s,Player_SetModelGroup,0x80123BD4,0x21 asm/non_matchings/code/z_player_lib/func_80123C58.s,func_80123C58,0x80123C58,0xE asm/non_matchings/code/z_player_lib/Player_SetEquipmentData.s,Player_SetEquipmentData,0x80123C90,0x30 -asm/non_matchings/code/z_player_lib/func_80123D50.s,func_80123D50,0x80123D50,0x15 +asm/non_matchings/code/z_player_lib/Player_UpdateBottleHeld.s,Player_UpdateBottleHeld,0x80123D50,0x15 asm/non_matchings/code/z_player_lib/func_80123DA4.s,func_80123DA4,0x80123DA4,0x7 asm/non_matchings/code/z_player_lib/func_80123DC0.s,func_80123DC0,0x80123DC0,0x34 asm/non_matchings/code/z_player_lib/func_80123E90.s,func_80123E90,0x80123E90,0x21 @@ -1746,7 +1746,7 @@ asm/non_matchings/code/z_player_lib/Player_ActionToExplosive.s,Player_ActionToEx asm/non_matchings/code/z_player_lib/Player_GetExplosiveHeld.s,Player_GetExplosiveHeld,0x80124258,0x8 asm/non_matchings/code/z_player_lib/Player_ActionToSword.s,Player_ActionToSword,0x80124278,0xF asm/non_matchings/code/z_player_lib/func_801242B4.s,func_801242B4,0x801242B4,0xA -asm/non_matchings/code/z_player_lib/Player_GetEnvTimerType.s,Player_GetEnvTimerType,0x801242DC,0x51 +asm/non_matchings/code/z_player_lib/Player_GetEnvironmentalHazard.s,Player_GetEnvironmentalHazard,0x801242DC,0x51 asm/non_matchings/code/z_player_lib/func_80124420.s,func_80124420,0x80124420,0x7E asm/non_matchings/code/z_player_lib/func_80124618.s,func_80124618,0x80124618,0x37 asm/non_matchings/code/z_player_lib/Player_DrawImpl.s,Player_DrawImpl,0x801246F4,0x5F @@ -1972,7 +1972,7 @@ asm/non_matchings/code/z_scene/Scene_SetExitFade.s,Scene_SetExitFade,0x801306A4, asm/non_matchings/code/z_scene/Scene_ProcessHeader.s,Scene_ProcessHeader,0x801306E8,0x20 asm/non_matchings/code/z_scene/Entrance_Create.s,Entrance_Create,0x80130768,0x7 asm/non_matchings/code/z_scene/Entrance_CreateFromSpawn.s,Entrance_CreateFromSpawn,0x80130784,0xF -asm/non_matchings/code/z_scene_proc/Scene_ExecuteDrawConfig.s,Scene_ExecuteDrawConfig,0x801307C0,0xD +asm/non_matchings/code/z_scene_proc/Scene_Draw.s,Scene_Draw,0x801307C0,0xD asm/non_matchings/code/z_scene_proc/Scene_DrawConfigDefault.s,Scene_DrawConfigDefault,0x801307F4,0x10 asm/non_matchings/code/z_scene_proc/AnimatedMat_TexScroll.s,AnimatedMat_TexScroll,0x80130834,0x1B asm/non_matchings/code/z_scene_proc/AnimatedMat_DrawTexScroll.s,AnimatedMat_DrawTexScroll,0x801308A0,0x28 @@ -2294,9 +2294,9 @@ asm/non_matchings/code/code_801420C0/func_801420F4.s,func_801420F4,0x801420F4,0x asm/non_matchings/code/code_801420C0/func_80142100.s,func_80142100,0x80142100,0xD0 asm/non_matchings/code/z_vr_box/func_80142440.s,func_80142440,0x80142440,0x342 asm/non_matchings/code/z_vr_box/func_80143148.s,func_80143148,0x80143148,0x28 -asm/non_matchings/code/z_vr_box/func_801431E8.s,func_801431E8,0x801431E8,0x4F +asm/non_matchings/code/z_vr_box/Skybox_Setup.s,Skybox_Setup,0x801431E8,0x4F asm/non_matchings/code/z_vr_box/func_80143324.s,func_80143324,0x80143324,0x70 -asm/non_matchings/code/z_vr_box/func_801434E4.s,func_801434E4,0x801434E4,0x2F +asm/non_matchings/code/z_vr_box/Skybox_Init.s,Skybox_Init,0x801434E4,0x2F asm/non_matchings/code/z_vr_box_draw/func_801435A0.s,func_801435A0,0x801435A0,0x21 asm/non_matchings/code/z_vr_box_draw/func_80143624.s,func_80143624,0x80143624,0x11 asm/non_matchings/code/z_vr_box_draw/func_80143668.s,func_80143668,0x80143668,0xE7 @@ -2384,8 +2384,8 @@ asm/non_matchings/code/z_message/func_80153750.s,func_80153750,0x80153750,0x1CB asm/non_matchings/code/z_message/func_80153E7C.s,func_80153E7C,0x80153E7C,0x1D asm/non_matchings/code/z_message/func_80153EF0.s,func_80153EF0,0x80153EF0,0xB9 asm/non_matchings/code/z_message/func_801541D4.s,func_801541D4,0x801541D4,0x961 -asm/non_matchings/code/z_message/func_80156758.s,func_80156758,0x80156758,0x2D -asm/non_matchings/code/z_message/func_8015680C.s,func_8015680C,0x8015680C,0x7A6 +asm/non_matchings/code/z_message/Message_Draw.s,Message_Draw,0x80156758,0x2D +asm/non_matchings/code/z_message/Message_Update.s,Message_Update,0x8015680C,0x7A6 asm/non_matchings/code/z_message/func_801586A4.s,func_801586A4,0x801586A4,0xC asm/non_matchings/code/z_message/Message_Init.s,Message_Init,0x801586D4,0x7F asm/non_matchings/code/z_message_nes/Message_FindMessageNES.s,Message_FindMessageNES,0x801588D0,0x2E @@ -2454,10 +2454,10 @@ asm/non_matchings/code/z_fbdemo_dlftbls/Transition_Init.s,Transition_Init,0x8016 asm/non_matchings/code/z_fbdemo_dlftbls/Transition_Destroy.s,Transition_Destroy,0x80163D80,0x10 asm/non_matchings/code/z_fbdemo/func_80163DC0.s,func_80163DC0,0x80163DC0,0xF3 asm/non_matchings/code/z_fbdemo/func_8016418C.s,func_8016418C,0x8016418C,0x30 -asm/non_matchings/code/z_fbdemo/func_8016424C.s,func_8016424C,0x8016424C,0x23 -asm/non_matchings/code/z_fbdemo/func_801642D8.s,func_801642D8,0x801642D8,0x58 +asm/non_matchings/code/z_fbdemo/TransitionUnk_Destroy.s,TransitionUnk_Destroy,0x8016424C,0x23 +asm/non_matchings/code/z_fbdemo/TransitionUnk_Init.s,TransitionUnk_Init,0x801642D8,0x58 asm/non_matchings/code/z_fbdemo/func_80164438.s,func_80164438,0x80164438,0x45 -asm/non_matchings/code/z_fbdemo/func_8016454C.s,func_8016454C,0x8016454C,0x4B +asm/non_matchings/code/z_fbdemo/TransitionUnk_Draw.s,TransitionUnk_Draw,0x8016454C,0x4B asm/non_matchings/code/z_fbdemo/func_80164678.s,func_80164678,0x80164678,0x4D asm/non_matchings/code/z_fbdemo/func_801647AC.s,func_801647AC,0x801647AC,0x3 asm/non_matchings/code/z_fbdemo/func_801647B8.s,func_801647B8,0x801647B8,0x6 @@ -2484,41 +2484,41 @@ asm/non_matchings/code/z_overlay/TransitionOverlay_Load.s,TransitionOverlay_Load asm/non_matchings/code/z_overlay/TransitionOverlay_Free.s,TransitionOverlay_Free,0x8016537C,0x2F asm/non_matchings/code/z_overlay/TransitionOverlay_ClearLoadInfo.s,TransitionOverlay_ClearLoadInfo,0x80165438,0x3 asm/non_matchings/code/z_overlay/TransitionOverlay_SetSegment.s,TransitionOverlay_SetSegment,0x80165444,0x7 -asm/non_matchings/code/z_play/func_80165460.s,func_80165460,0x80165460,0x6A -asm/non_matchings/code/z_play/func_80165608.s,func_80165608,0x80165608,0xA -asm/non_matchings/code/z_play/func_80165630.s,func_80165630,0x80165630,0xA -asm/non_matchings/code/z_play/func_80165658.s,func_80165658,0x80165658,0x5 -asm/non_matchings/code/z_play/func_8016566C.s,func_8016566C,0x8016566C,0x9 -asm/non_matchings/code/z_play/func_80165690.s,func_80165690,0x80165690,0x5 -asm/non_matchings/code/z_play/func_801656A4.s,func_801656A4,0x801656A4,0x1C5 -asm/non_matchings/code/z_play/func_80165DB8.s,func_80165DB8,0x80165DB8,0x5 -asm/non_matchings/code/z_play/func_80165DCC.s,func_80165DCC,0x80165DCC,0x9 -asm/non_matchings/code/z_play/func_80165DF0.s,func_80165DF0,0x80165DF0,0x5 -asm/non_matchings/code/z_play/func_80165E04.s,func_80165E04,0x80165E04,0x6 -asm/non_matchings/code/z_play/func_80165E1C.s,func_80165E1C,0x80165E1C,0x18 -asm/non_matchings/code/z_play/func_80165E7C.s,func_80165E7C,0x80165E7C,0x11 -asm/non_matchings/code/z_play/func_80165EC0.s,func_80165EC0,0x80165EC0,0x68 -asm/non_matchings/code/z_play/func_80166060.s,func_80166060,0x80166060,0x16 -asm/non_matchings/code/z_play/func_801660B8.s,func_801660B8,0x801660B8,0x21 +asm/non_matchings/code/z_play/Play_DrawMotionBlur.s,Play_DrawMotionBlur,0x80165460,0x6A +asm/non_matchings/code/z_play/Play_InitMotionBlur.s,Play_InitMotionBlur,0x80165608,0xA +asm/non_matchings/code/z_play/Play_DestroyMotionBlur.s,Play_DestroyMotionBlur,0x80165630,0xA +asm/non_matchings/code/z_play/Play_SetMotionBlurAlpha.s,Play_SetMotionBlurAlpha,0x80165658,0x5 +asm/non_matchings/code/z_play/Play_EnableMotionBlur.s,Play_EnableMotionBlur,0x8016566C,0x9 +asm/non_matchings/code/z_play/Play_DisableMotionBlur.s,Play_DisableMotionBlur,0x80165690,0x5 +asm/non_matchings/code/z_play/Play_ConvertRgba16ToIntensityImage.s,Play_ConvertRgba16ToIntensityImage,0x801656A4,0x1C5 +asm/non_matchings/code/z_play/Play_SetMotionBlurPriorityAlpha.s,Play_SetMotionBlurPriorityAlpha,0x80165DB8,0x5 +asm/non_matchings/code/z_play/Play_EnableMotionBlurPriority.s,Play_EnableMotionBlurPriority,0x80165DCC,0x9 +asm/non_matchings/code/z_play/Play_DisableMotionBlurPriority.s,Play_DisableMotionBlurPriority,0x80165DF0,0x5 +asm/non_matchings/code/z_play/Play_TriggerPictoPhoto.s,Play_TriggerPictoPhoto,0x80165E04,0x6 +asm/non_matchings/code/z_play/Play_TakePictoPhoto.s,Play_TakePictoPhoto,0x80165E1C,0x18 +asm/non_matchings/code/z_play/Play_ChooseDynamicTransition.s,Play_ChooseDynamicTransition,0x80165E7C,0x11 +asm/non_matchings/code/z_play/Play_SetupTransition.s,Play_SetupTransition,0x80165EC0,0x68 +asm/non_matchings/code/z_play/Play_ClearTransition.s,Play_ClearTransition,0x80166060,0x16 +asm/non_matchings/code/z_play/Play_SetFog.s,Play_SetFog,0x801660B8,0x21 asm/non_matchings/code/z_play/Play_Destroy.s,Play_Destroy,0x8016613C,0xA2 -asm/non_matchings/code/z_play/func_801663C4.s,func_801663C4,0x801663C4,0xA0 -asm/non_matchings/code/z_play/func_80166644.s,func_80166644,0x80166644,0x9C -asm/non_matchings/code/z_play/func_801668B4.s,func_801668B4,0x801668B4,0x2D -asm/non_matchings/code/z_play/func_80166968.s,func_80166968,0x80166968,0x72 -asm/non_matchings/code/z_play/func_80166B30.s,func_80166B30,0x80166B30,0x339 -asm/non_matchings/code/z_play/Play_Update.s,Play_Update,0x80167814,0x174 -asm/non_matchings/code/z_play/func_80167DE4.s,func_80167DE4,0x80167DE4,0x4A -asm/non_matchings/code/z_play/func_80167F0C.s,func_80167F0C,0x80167F0C,0x61 -asm/non_matchings/code/z_play/Play_Draw.s,Play_Draw,0x80168090,0x347 -asm/non_matchings/code/z_play/func_80168DAC.s,func_80168DAC,0x80168DAC,0x6E +asm/non_matchings/code/z_play/Play_CompressI8ToI5.s,Play_CompressI8ToI5,0x801663C4,0xA0 +asm/non_matchings/code/z_play/Play_DecompressI5ToI8.s,Play_DecompressI5ToI8,0x80166644,0x9C +asm/non_matchings/code/z_play/Play_GetWaterSurface.s,Play_GetWaterSurface,0x801668B4,0x2D +asm/non_matchings/code/z_play/Play_UpdateWaterCamera.s,Play_UpdateWaterCamera,0x80166968,0x72 +asm/non_matchings/code/z_play/Play_UpdateTransition.s,Play_UpdateTransition,0x80166B30,0x339 +asm/non_matchings/code/z_play/Play_UpdateMain.s,Play_UpdateMain,0x80167814,0x174 +asm/non_matchings/code/z_play/Play_Update.s,Play_Update,0x80167DE4,0x4A +asm/non_matchings/code/z_play/Play_PostWorldDraw.s,Play_PostWorldDraw,0x80167F0C,0x61 +asm/non_matchings/code/z_play/Play_DrawMain.s,Play_DrawMain,0x80168090,0x347 +asm/non_matchings/code/z_play/Play_Draw.s,Play_Draw,0x80168DAC,0x6E asm/non_matchings/code/z_play/Play_Main.s,Play_Main,0x80168F64,0x5A asm/non_matchings/code/z_play/Play_InCsMode.s,Play_InCsMode,0x801690CC,0xD -asm/non_matchings/code/z_play/func_80169100.s,func_80169100,0x80169100,0x3C -asm/non_matchings/code/z_play/func_801691F0.s,func_801691F0,0x801691F0,0xC -asm/non_matchings/code/z_play/Play_LoadScene.s,Play_LoadScene,0x80169220,0x17 -asm/non_matchings/code/z_play/func_8016927C.s,func_8016927C,0x8016927C,0x12 -asm/non_matchings/code/z_play/func_801692C4.s,func_801692C4,0x801692C4,0x44 -asm/non_matchings/code/z_play/Play_SceneInit.s,Play_SceneInit,0x801693D4,0x28 +asm/non_matchings/code/z_play/Play_GetFloorSurfaceImpl.s,Play_GetFloorSurfaceImpl,0x80169100,0x3C +asm/non_matchings/code/z_play/Play_GetFloorSurface.s,Play_GetFloorSurface,0x801691F0,0xC +asm/non_matchings/code/z_play/Play_LoadFile.s,Play_LoadFile,0x80169220,0x17 +asm/non_matchings/code/z_play/Play_InitEnvironment.s,Play_InitEnvironment,0x8016927C,0x12 +asm/non_matchings/code/z_play/Play_InitScene.s,Play_InitScene,0x801692C4,0x44 +asm/non_matchings/code/z_play/Play_SpawnScene.s,Play_SpawnScene,0x801693D4,0x28 asm/non_matchings/code/z_play/Play_GetScreenPos.s,Play_GetScreenPos,0x80169474,0x1A asm/non_matchings/code/z_play/Play_CreateSubCamera.s,Play_CreateSubCamera,0x801694DC,0x2A asm/non_matchings/code/z_play/Play_GetActiveCamId.s,Play_GetActiveCamId,0x80169584,0x3 @@ -2562,11 +2562,11 @@ asm/non_matchings/code/z_play_hireso/func_8016C344.s,func_8016C344,0x8016C344,0x asm/non_matchings/code/z_play_hireso/func_8016CD4C.s,func_8016CD4C,0x8016CD4C,0x5B0 asm/non_matchings/code/z_play_hireso/func_8016E40C.s,func_8016E40C,0x8016E40C,0x1A1 asm/non_matchings/code/z_play_hireso/func_8016EA90.s,func_8016EA90,0x8016EA90,0x1C6 -asm/non_matchings/code/z_play_hireso/func_8016F1A8.s,func_8016F1A8,0x8016F1A8,0xD1 +asm/non_matchings/code/z_play_hireso/BombersNotebook_Draw.s,BombersNotebook_Draw,0x8016F1A8,0xD1 asm/non_matchings/code/z_play_hireso/func_8016F4EC.s,func_8016F4EC,0x8016F4EC,0x2F -asm/non_matchings/code/z_play_hireso/func_8016F5A8.s,func_8016F5A8,0x8016F5A8,0x1B4 -asm/non_matchings/code/z_play_hireso/func_8016FC78.s,func_8016FC78,0x8016FC78,0x8 -asm/non_matchings/code/z_play_hireso/func_8016FC98.s,func_8016FC98,0x8016FC98,0x16 +asm/non_matchings/code/z_play_hireso/BombersNotebook_Update.s,BombersNotebook_Update,0x8016F5A8,0x1B4 +asm/non_matchings/code/z_play_hireso/BombersNotebook_Init.s,BombersNotebook_Init,0x8016FC78,0x8 +asm/non_matchings/code/z_play_hireso/BombersNotebook_Destroy.s,BombersNotebook_Destroy,0x8016FC98,0x16 asm/non_matchings/code/PreRender/PreRender_SetValuesSave.s,PreRender_SetValuesSave,0x8016FCF0,0xF asm/non_matchings/code/PreRender/PreRender_Init.s,PreRender_Init,0x8016FD2C,0xD asm/non_matchings/code/PreRender/PreRender_SetValues.s,PreRender_SetValues,0x8016FD60,0xD @@ -2749,11 +2749,11 @@ asm/non_matchings/code/sys_cmpdma/func_80178A24.s,func_80178A24,0x80178A24,0x4 asm/non_matchings/code/sys_cmpdma/func_80178A34.s,func_80178A34,0x80178A34,0x18 asm/non_matchings/code/sys_cmpdma/func_80178A94.s,func_80178A94,0x80178A94,0xB asm/non_matchings/code/sys_cmpdma/func_80178AC0.s,func_80178AC0,0x80178AC0,0x70 -asm/non_matchings/code/sys_cmpdma/func_80178C80.s,func_80178C80,0x80178C80,0x3F -asm/non_matchings/code/sys_cmpdma/func_80178D7C.s,func_80178D7C,0x80178D7C,0xC -asm/non_matchings/code/sys_cmpdma/func_80178DAC.s,func_80178DAC,0x80178DAC,0x24 -asm/non_matchings/code/sys_cmpdma/func_80178E3C.s,func_80178E3C,0x80178E3C,0x10 -asm/non_matchings/code/sys_cmpdma/func_80178E7C.s,func_80178E7C,0x80178E7C,0x2D +asm/non_matchings/code/sys_cmpdma/CmpDma_GetFileInfo.s,CmpDma_GetFileInfo,0x80178C80,0x3F +asm/non_matchings/code/sys_cmpdma/CmpDma_Decompress.s,CmpDma_Decompress,0x80178D7C,0xC +asm/non_matchings/code/sys_cmpdma/CmpDma_LoadFileImpl.s,CmpDma_LoadFileImpl,0x80178DAC,0x24 +asm/non_matchings/code/sys_cmpdma/CmpDma_LoadFile.s,CmpDma_LoadFile,0x80178E3C,0x10 +asm/non_matchings/code/sys_cmpdma/CmpDma_LoadAllFiles.s,CmpDma_LoadAllFiles,0x80178E7C,0x2D asm/non_matchings/code/sys_initial_check/Check_WriteRGBA16Pixel.s,Check_WriteRGBA16Pixel,0x80178F30,0xC asm/non_matchings/code/sys_initial_check/Check_WriteI4Pixel.s,Check_WriteI4Pixel,0x80178F60,0x10 asm/non_matchings/code/sys_initial_check/Check_DrawI4Texture.s,Check_DrawI4Texture,0x80178FA0,0x3C @@ -2866,8 +2866,8 @@ asm/non_matchings/code/sys_math3d/func_8017FD44.s,func_8017FD44,0x8017FD44,0x5B asm/non_matchings/code/sys_math_atan/Math_GetAtan2Tbl.s,Math_GetAtan2Tbl,0x8017FEB0,0xD asm/non_matchings/code/sys_math_atan/Math_Atan2S.s,Math_Atan2S,0x8017FEE4,0x7A asm/non_matchings/code/sys_math_atan/Math_Atan2F.s,Math_Atan2F,0x801800CC,0xD -asm/non_matchings/code/sys_math_atan/Math_FAtan2F.s,Math_FAtan2F,0x80180100,0xB -asm/non_matchings/code/sys_math_atan/Math_Acot2F.s,Math_Acot2F,0x8018012C,0xD +asm/non_matchings/code/sys_math_atan/Math_Atan2S_XY.s,Math_Atan2S_XY,0x80180100,0xB +asm/non_matchings/code/sys_math_atan/Math_Atan2F_XY.s,Math_Atan2F_XY,0x8018012C,0xD asm/non_matchings/code/sys_matrix/Matrix_Init.s,Matrix_Init,0x80180160,0xF asm/non_matchings/code/sys_matrix/Matrix_Push.s,Matrix_Push,0x8018019C,0xC asm/non_matchings/code/sys_matrix/Matrix_Pop.s,Matrix_Pop,0x801801CC,0x7 @@ -3196,46 +3196,46 @@ asm/non_matchings/code/audio_load/AudioLoad_Unused5.s,AudioLoad_Unused5,0x80192A asm/non_matchings/code/audio_load/AudioLoad_ScriptLoad.s,AudioLoad_ScriptLoad,0x80192AE8,0x1B asm/non_matchings/code/audio_load/AudioLoad_ProcessScriptLoads.s,AudioLoad_ProcessScriptLoads,0x80192B54,0x16 asm/non_matchings/code/audio_load/AudioLoad_InitScriptLoads.s,AudioLoad_InitScriptLoads,0x80192BAC,0xD -asm/non_matchings/code/code_80192BE0/func_80192BE0.s,func_80192BE0,0x80192BE0,0x8 -asm/non_matchings/code/code_80192BE0/func_80192C00.s,func_80192C00,0x80192C00,0x167 -asm/non_matchings/code/code_80192BE0/func_8019319C.s,func_8019319C,0x8019319C,0x14F -asm/non_matchings/code/code_80192BE0/func_801936D8.s,func_801936D8,0x801936D8,0x15 -asm/non_matchings/code/code_80192BE0/func_8019372C.s,func_8019372C,0x8019372C,0x12 -asm/non_matchings/code/code_80192BE0/func_80193774.s,func_80193774,0x80193774,0x26 -asm/non_matchings/code/code_80192BE0/func_8019380C.s,func_8019380C,0x8019380C,0x13 -asm/non_matchings/code/code_80192BE0/func_80193858.s,func_80193858,0x80193858,0x9 -asm/non_matchings/code/code_80192BE0/AudioThread_QueueCmdS32.s,AudioThread_QueueCmdS32,0x8019387C,0x9 -asm/non_matchings/code/code_80192BE0/AudioThread_QueueCmdS8.s,AudioThread_QueueCmdS8,0x801938A0,0xC -asm/non_matchings/code/code_80192BE0/func_801938D0.s,func_801938D0,0x801938D0,0xC -asm/non_matchings/code/code_80192BE0/AudioThread_ScheduleProcessCmds.s,AudioThread_ScheduleProcessCmds,0x80193900,0x24 -asm/non_matchings/code/code_80192BE0/func_80193990.s,func_80193990,0x80193990,0x6 -asm/non_matchings/code/code_80192BE0/func_801939A8.s,func_801939A8,0x801939A8,0x51 -asm/non_matchings/code/code_80192BE0/func_80193AEC.s,func_80193AEC,0x80193AEC,0x2D -asm/non_matchings/code/code_80192BE0/func_80193BA0.s,func_80193BA0,0x80193BA0,0x19 -asm/non_matchings/code/code_80192BE0/func_80193C04.s,func_80193C04,0x80193C04,0x8 -asm/non_matchings/code/code_80192BE0/func_80193C24.s,func_80193C24,0x80193C24,0xE -asm/non_matchings/code/code_80192BE0/func_80193C5C.s,func_80193C5C,0x80193C5C,0x16 -asm/non_matchings/code/code_80192BE0/func_80193CB4.s,func_80193CB4,0x80193CB4,0x15 -asm/non_matchings/code/code_80192BE0/func_80193D08.s,func_80193D08,0x80193D08,0x27 -asm/non_matchings/code/code_80192BE0/func_80193DA4.s,func_80193DA4,0x80193DA4,0x13 -asm/non_matchings/code/code_80192BE0/func_80193DF0.s,func_80193DF0,0x80193DF0,0x15 -asm/non_matchings/code/code_80192BE0/func_80193E44.s,func_80193E44,0x80193E44,0xA -asm/non_matchings/code/code_80192BE0/func_80193E6C.s,func_80193E6C,0x80193E6C,0xC -asm/non_matchings/code/code_80192BE0/func_80193E9C.s,func_80193E9C,0x80193E9C,0x3 -asm/non_matchings/code/code_80192BE0/func_80193EA8.s,func_80193EA8,0x80193EA8,0x76 -asm/non_matchings/code/code_80192BE0/func_80194080.s,func_80194080,0x80194080,0x8F -asm/non_matchings/code/code_80192BE0/func_801942BC.s,func_801942BC,0x801942BC,0x12 -asm/non_matchings/code/code_80192BE0/func_80194304.s,func_80194304,0x80194304,0x9 -asm/non_matchings/code/code_80192BE0/func_80194328.s,func_80194328,0x80194328,0xD -asm/non_matchings/code/code_80192BE0/func_8019435C.s,func_8019435C,0x8019435C,0x10 -asm/non_matchings/code/code_80192BE0/func_8019439C.s,func_8019439C,0x8019439C,0xD -asm/non_matchings/code/code_80192BE0/func_801943D0.s,func_801943D0,0x801943D0,0xF -asm/non_matchings/code/code_80192BE0/func_8019440C.s,func_8019440C,0x8019440C,0x47 -asm/non_matchings/code/code_80192BE0/func_80194528.s,func_80194528,0x80194528,0x8 -asm/non_matchings/code/code_80192BE0/func_80194548.s,func_80194548,0x80194548,0x8 -asm/non_matchings/code/code_80192BE0/func_80194568.s,func_80194568,0x80194568,0x40 -asm/non_matchings/code/code_80192BE0/AudioThread_NextRandom.s,AudioThread_NextRandom,0x80194668,0x1F -asm/non_matchings/code/code_80192BE0/AudioThread_InitMesgQueues.s,AudioThread_InitMesgQueues,0x801946E4,0xB +asm/non_matchings/code/audio_thread/AudioThread_Update.s,AudioThread_Update,0x80192BE0,0x8 +asm/non_matchings/code/audio_thread/AudioThread_UpdateImpl.s,AudioThread_UpdateImpl,0x80192C00,0x167 +asm/non_matchings/code/audio_thread/AudioThread_ProcessGlobalCmd.s,AudioThread_ProcessGlobalCmd,0x8019319C,0x14F +asm/non_matchings/code/audio_thread/AudioThread_SetFadeOutTimer.s,AudioThread_SetFadeOutTimer,0x801936D8,0x15 +asm/non_matchings/code/audio_thread/AudioThread_SetFadeInTimer.s,AudioThread_SetFadeInTimer,0x8019372C,0x12 +asm/non_matchings/code/audio_thread/AudioThread_InitMesgQueuesInternal.s,AudioThread_InitMesgQueuesInternal,0x80193774,0x26 +asm/non_matchings/code/audio_thread/AudioThread_QueueCmd.s,AudioThread_QueueCmd,0x8019380C,0x13 +asm/non_matchings/code/audio_thread/AudioThread_QueueCmdF32.s,AudioThread_QueueCmdF32,0x80193858,0x9 +asm/non_matchings/code/audio_thread/AudioThread_QueueCmdS32.s,AudioThread_QueueCmdS32,0x8019387C,0x9 +asm/non_matchings/code/audio_thread/AudioThread_QueueCmdS8.s,AudioThread_QueueCmdS8,0x801938A0,0xC +asm/non_matchings/code/audio_thread/AudioThread_QueueCmdU16.s,AudioThread_QueueCmdU16,0x801938D0,0xC +asm/non_matchings/code/audio_thread/AudioThread_ScheduleProcessCmds.s,AudioThread_ScheduleProcessCmds,0x80193900,0x24 +asm/non_matchings/code/audio_thread/AudioThread_ResetCmdQueue.s,AudioThread_ResetCmdQueue,0x80193990,0x6 +asm/non_matchings/code/audio_thread/AudioThread_ProcessCmd.s,AudioThread_ProcessCmd,0x801939A8,0x51 +asm/non_matchings/code/audio_thread/AudioThread_ProcessCmds.s,AudioThread_ProcessCmds,0x80193AEC,0x2D +asm/non_matchings/code/audio_thread/AudioThread_GetExternalLoadQueueMsg.s,AudioThread_GetExternalLoadQueueMsg,0x80193BA0,0x19 +asm/non_matchings/code/audio_thread/AudioThread_GetFontsForSequence.s,AudioThread_GetFontsForSequence,0x80193C04,0x8 +asm/non_matchings/code/audio_thread/AudioThread_GetSampleBankIdsOfFont.s,AudioThread_GetSampleBankIdsOfFont,0x80193C24,0xE +asm/non_matchings/code/audio_thread/func_80193C5C.s,func_80193C5C,0x80193C5C,0x16 +asm/non_matchings/code/audio_thread/AudioThread_WaitForAudioResetQueueP.s,AudioThread_WaitForAudioResetQueueP,0x80193CB4,0x15 +asm/non_matchings/code/audio_thread/AudioThread_ResetAudioHeap.s,AudioThread_ResetAudioHeap,0x80193D08,0x27 +asm/non_matchings/code/audio_thread/AudioThread_PreNMIInternal.s,AudioThread_PreNMIInternal,0x80193DA4,0x13 +asm/non_matchings/code/audio_thread/AudioThread_GetChannelIO.s,AudioThread_GetChannelIO,0x80193DF0,0x15 +asm/non_matchings/code/audio_thread/AudioThread_GetSeqPlayerIO.s,AudioThread_GetSeqPlayerIO,0x80193E44,0xA +asm/non_matchings/code/audio_thread/AudioThread_InitExternalPool.s,AudioThread_InitExternalPool,0x80193E6C,0xC +asm/non_matchings/code/audio_thread/AudioThread_ResetExternalPool.s,AudioThread_ResetExternalPool,0x80193E9C,0x3 +asm/non_matchings/code/audio_thread/AudioThread_ProcessSeqPlayerCmd.s,AudioThread_ProcessSeqPlayerCmd,0x80193EA8,0x76 +asm/non_matchings/code/audio_thread/AudioThread_ProcessChannelCmd.s,AudioThread_ProcessChannelCmd,0x80194080,0x8F +asm/non_matchings/code/audio_thread/AudioThread_Noop1Cmd.s,AudioThread_Noop1Cmd,0x801942BC,0x12 +asm/non_matchings/code/audio_thread/AudioThread_Noop1CmdZeroed.s,AudioThread_Noop1CmdZeroed,0x80194304,0x9 +asm/non_matchings/code/audio_thread/AudioThread_Noop2Cmd.s,AudioThread_Noop2Cmd,0x80194328,0xD +asm/non_matchings/code/audio_thread/AudioThread_WaitForAudioTask.s,AudioThread_WaitForAudioTask,0x8019435C,0x10 +asm/non_matchings/code/audio_thread/AudioThread_GetSamplePosFromStart.s,AudioThread_GetSamplePosFromStart,0x8019439C,0xD +asm/non_matchings/code/audio_thread/AudioThread_GetSamplePosUntilEnd.s,AudioThread_GetSamplePosUntilEnd,0x801943D0,0xF +asm/non_matchings/code/audio_thread/AudioThread_GetSamplePos.s,AudioThread_GetSamplePos,0x8019440C,0x47 +asm/non_matchings/code/audio_thread/AudioThread_GetEnabledNotesCount.s,AudioThread_GetEnabledNotesCount,0x80194528,0x8 +asm/non_matchings/code/audio_thread/AudioThread_GetEnabledSampledNotesCount.s,AudioThread_GetEnabledSampledNotesCount,0x80194548,0x8 +asm/non_matchings/code/audio_thread/AudioThread_CountAndReleaseNotes.s,AudioThread_CountAndReleaseNotes,0x80194568,0x40 +asm/non_matchings/code/audio_thread/AudioThread_NextRandom.s,AudioThread_NextRandom,0x80194668,0x1F +asm/non_matchings/code/audio_thread/AudioThread_InitMesgQueues.s,AudioThread_InitMesgQueues,0x801946E4,0xB asm/non_matchings/code/code_80194710/Audio_InvalDCache.s,Audio_InvalDCache,0x80194710,0x10 asm/non_matchings/code/code_80194710/Audio_WritebackDCache.s,Audio_WritebackDCache,0x80194750,0x10 asm/non_matchings/code/code_80194710/osAiSetNextBuffer.s,osAiSetNextBuffer,0x80194790,0x1D @@ -3598,4 +3598,4 @@ asm/non_matchings/code/jpegdecoder/JpegDecoder_ReadBits.s,JpegDecoder_ReadBits,0 asm/non_matchings/code/z_game_over/GameOver_Init.s,GameOver_Init,0x801AA610,0x5 asm/non_matchings/code/z_game_over/GameOver_FadeLights.s,GameOver_FadeLights,0x801AA624,0x1A asm/non_matchings/code/z_game_over/GameOver_Update.s,GameOver_Update,0x801AA68C,0x105 -asm/non_matchings/code/z_construct/func_801AAAA0.s,func_801AAAA0,0x801AAAA0,0x4 +asm/non_matchings/code/z_construct/Regs_InitData.s,Regs_InitData,0x801AAAA0,0x4 diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py new file mode 100755 index 000000000..e2092e595 --- /dev/null +++ b/tools/weekeventregconvert.py @@ -0,0 +1,889 @@ +#!/usr/bin/env python3 + +import argparse +import re + +weekEventReg = { + ( 0 << 8) | 0x01: "WEEKEVENTREG_00_01", + ( 0 << 8) | 0x02: "WEEKEVENTREG_00_02", + ( 0 << 8) | 0x04: "WEEKEVENTREG_00_04", + ( 0 << 8) | 0x08: "WEEKEVENTREG_00_08", + ( 0 << 8) | 0x10: "WEEKEVENTREG_00_10", + ( 0 << 8) | 0x20: "WEEKEVENTREG_00_20", + ( 0 << 8) | 0x40: "WEEKEVENTREG_00_40", + ( 0 << 8) | 0x80: "WEEKEVENTREG_00_80", + ( 1 << 8) | 0x01: "WEEKEVENTREG_01_01", + ( 1 << 8) | 0x02: "WEEKEVENTREG_01_02", + ( 1 << 8) | 0x04: "WEEKEVENTREG_01_04", + ( 1 << 8) | 0x08: "WEEKEVENTREG_01_08", + ( 1 << 8) | 0x10: "WEEKEVENTREG_01_10", + ( 1 << 8) | 0x20: "WEEKEVENTREG_01_20", + ( 1 << 8) | 0x40: "WEEKEVENTREG_01_40", + ( 1 << 8) | 0x80: "WEEKEVENTREG_01_80", + ( 2 << 8) | 0x01: "WEEKEVENTREG_02_01", + ( 2 << 8) | 0x02: "WEEKEVENTREG_02_02", + ( 2 << 8) | 0x04: "WEEKEVENTREG_02_04", + ( 2 << 8) | 0x08: "WEEKEVENTREG_02_08", + ( 2 << 8) | 0x10: "WEEKEVENTREG_02_10", + ( 2 << 8) | 0x20: "WEEKEVENTREG_02_20", + ( 2 << 8) | 0x40: "WEEKEVENTREG_02_40", + ( 2 << 8) | 0x80: "WEEKEVENTREG_02_80", + ( 3 << 8) | 0x01: "WEEKEVENTREG_03_01", + ( 3 << 8) | 0x02: "WEEKEVENTREG_03_02", + ( 3 << 8) | 0x04: "WEEKEVENTREG_03_04", + ( 3 << 8) | 0x08: "WEEKEVENTREG_03_08", + ( 3 << 8) | 0x10: "WEEKEVENTREG_03_10", + ( 3 << 8) | 0x20: "WEEKEVENTREG_03_20", + ( 3 << 8) | 0x40: "WEEKEVENTREG_03_40", + ( 3 << 8) | 0x80: "WEEKEVENTREG_03_80", + ( 4 << 8) | 0x01: "WEEKEVENTREG_04_01", + ( 4 << 8) | 0x02: "WEEKEVENTREG_04_02", + ( 4 << 8) | 0x04: "WEEKEVENTREG_04_04", + ( 4 << 8) | 0x08: "WEEKEVENTREG_04_08", + ( 4 << 8) | 0x10: "WEEKEVENTREG_04_10", + ( 4 << 8) | 0x20: "WEEKEVENTREG_04_20", + ( 4 << 8) | 0x40: "WEEKEVENTREG_04_40", + ( 4 << 8) | 0x80: "WEEKEVENTREG_04_80", + ( 5 << 8) | 0x01: "WEEKEVENTREG_05_01", + ( 5 << 8) | 0x02: "WEEKEVENTREG_05_02", + ( 5 << 8) | 0x04: "WEEKEVENTREG_05_04", + ( 5 << 8) | 0x08: "WEEKEVENTREG_05_08", + ( 5 << 8) | 0x10: "WEEKEVENTREG_05_10", + ( 5 << 8) | 0x20: "WEEKEVENTREG_05_20", + ( 5 << 8) | 0x40: "WEEKEVENTREG_05_40", + ( 5 << 8) | 0x80: "WEEKEVENTREG_05_80", + ( 6 << 8) | 0x01: "WEEKEVENTREG_06_01", + ( 6 << 8) | 0x02: "WEEKEVENTREG_06_02", + ( 6 << 8) | 0x04: "WEEKEVENTREG_06_04", + ( 6 << 8) | 0x08: "WEEKEVENTREG_06_08", + ( 6 << 8) | 0x10: "WEEKEVENTREG_06_10", + ( 6 << 8) | 0x20: "WEEKEVENTREG_06_20", + ( 6 << 8) | 0x40: "WEEKEVENTREG_06_40", + ( 6 << 8) | 0x80: "WEEKEVENTREG_06_80", + ( 7 << 8) | 0x01: "WEEKEVENTREG_07_01", + ( 7 << 8) | 0x02: "WEEKEVENTREG_07_02", + ( 7 << 8) | 0x04: "WEEKEVENTREG_07_04", + ( 7 << 8) | 0x08: "WEEKEVENTREG_07_08", + ( 7 << 8) | 0x10: "WEEKEVENTREG_07_10", + ( 7 << 8) | 0x20: "WEEKEVENTREG_07_20", + ( 7 << 8) | 0x40: "WEEKEVENTREG_07_40", + ( 7 << 8) | 0x80: "WEEKEVENTREG_07_80", + ( 8 << 8) | 0x01: "WEEKEVENTREG_08_01", + ( 8 << 8) | 0x02: "WEEKEVENTREG_08_02", + ( 8 << 8) | 0x04: "WEEKEVENTREG_08_04", + ( 8 << 8) | 0x08: "WEEKEVENTREG_08_08", + ( 8 << 8) | 0x10: "WEEKEVENTREG_08_10", + ( 8 << 8) | 0x20: "WEEKEVENTREG_08_20", + ( 8 << 8) | 0x40: "WEEKEVENTREG_08_40", + ( 8 << 8) | 0x80: "WEEKEVENTREG_08_80", + ( 9 << 8) | 0x01: "WEEKEVENTREG_09_01", + ( 9 << 8) | 0x02: "WEEKEVENTREG_09_02", + ( 9 << 8) | 0x04: "WEEKEVENTREG_09_04", + ( 9 << 8) | 0x08: "WEEKEVENTREG_09_08", + ( 9 << 8) | 0x10: "WEEKEVENTREG_09_10", + ( 9 << 8) | 0x20: "WEEKEVENTREG_09_20", + ( 9 << 8) | 0x40: "WEEKEVENTREG_09_40", + ( 9 << 8) | 0x80: "WEEKEVENTREG_09_80", + (10 << 8) | 0x01: "WEEKEVENTREG_10_01", + (10 << 8) | 0x02: "WEEKEVENTREG_10_02", + (10 << 8) | 0x04: "WEEKEVENTREG_10_04", + (10 << 8) | 0x08: "WEEKEVENTREG_10_08", + (10 << 8) | 0x10: "WEEKEVENTREG_10_10", + (10 << 8) | 0x20: "WEEKEVENTREG_10_20", + (10 << 8) | 0x40: "WEEKEVENTREG_10_40", + (10 << 8) | 0x80: "WEEKEVENTREG_10_80", + (11 << 8) | 0x01: "WEEKEVENTREG_11_01", + (11 << 8) | 0x02: "WEEKEVENTREG_11_02", + (11 << 8) | 0x04: "WEEKEVENTREG_11_04", + (11 << 8) | 0x08: "WEEKEVENTREG_11_08", + (11 << 8) | 0x10: "WEEKEVENTREG_11_10", + (11 << 8) | 0x20: "WEEKEVENTREG_11_20", + (11 << 8) | 0x40: "WEEKEVENTREG_11_40", + (11 << 8) | 0x80: "WEEKEVENTREG_11_80", + (12 << 8) | 0x01: "WEEKEVENTREG_12_01", + (12 << 8) | 0x02: "WEEKEVENTREG_12_02", + (12 << 8) | 0x04: "WEEKEVENTREG_12_04", + (12 << 8) | 0x08: "WEEKEVENTREG_12_08", + (12 << 8) | 0x10: "WEEKEVENTREG_12_10", + (12 << 8) | 0x20: "WEEKEVENTREG_12_20", + (12 << 8) | 0x40: "WEEKEVENTREG_12_40", + (12 << 8) | 0x80: "WEEKEVENTREG_12_80", + (13 << 8) | 0x01: "WEEKEVENTREG_13_01", + (13 << 8) | 0x02: "WEEKEVENTREG_13_02", + (13 << 8) | 0x04: "WEEKEVENTREG_13_04", + (13 << 8) | 0x08: "WEEKEVENTREG_13_08", + (13 << 8) | 0x10: "WEEKEVENTREG_13_10", + (13 << 8) | 0x20: "WEEKEVENTREG_13_20", + (13 << 8) | 0x40: "WEEKEVENTREG_13_40", + (13 << 8) | 0x80: "WEEKEVENTREG_13_80", + (14 << 8) | 0x01: "WEEKEVENTREG_14_01", + (14 << 8) | 0x02: "WEEKEVENTREG_14_02", + (14 << 8) | 0x04: "WEEKEVENTREG_14_04", + (14 << 8) | 0x08: "WEEKEVENTREG_DRANK_CHATEAU_ROMANI", + (14 << 8) | 0x10: "WEEKEVENTREG_14_10", + (14 << 8) | 0x20: "WEEKEVENTREG_14_20", + (14 << 8) | 0x40: "WEEKEVENTREG_14_40", + (14 << 8) | 0x80: "WEEKEVENTREG_14_80", + (15 << 8) | 0x01: "WEEKEVENTREG_15_01", + (15 << 8) | 0x02: "WEEKEVENTREG_15_02", + (15 << 8) | 0x04: "WEEKEVENTREG_15_04", + (15 << 8) | 0x08: "WEEKEVENTREG_15_08", + (15 << 8) | 0x10: "WEEKEVENTREG_15_10", + (15 << 8) | 0x20: "WEEKEVENTREG_15_20", + (15 << 8) | 0x40: "WEEKEVENTREG_15_40", + (15 << 8) | 0x80: "WEEKEVENTREG_15_80", + (16 << 8) | 0x01: "WEEKEVENTREG_16_01", + (16 << 8) | 0x02: "WEEKEVENTREG_16_02", + (16 << 8) | 0x04: "WEEKEVENTREG_16_04", + (16 << 8) | 0x08: "WEEKEVENTREG_16_08", + (16 << 8) | 0x10: "WEEKEVENTREG_16_10", + (16 << 8) | 0x20: "WEEKEVENTREG_16_20", + (16 << 8) | 0x40: "WEEKEVENTREG_16_40", + (16 << 8) | 0x80: "WEEKEVENTREG_16_80", + (17 << 8) | 0x01: "WEEKEVENTREG_17_01", + (17 << 8) | 0x02: "WEEKEVENTREG_17_02", + (17 << 8) | 0x04: "WEEKEVENTREG_17_04", + (17 << 8) | 0x08: "WEEKEVENTREG_17_08", + (17 << 8) | 0x10: "WEEKEVENTREG_17_10", + (17 << 8) | 0x20: "WEEKEVENTREG_17_20", + (17 << 8) | 0x40: "WEEKEVENTREG_17_40", + (17 << 8) | 0x80: "WEEKEVENTREG_17_80", + (18 << 8) | 0x01: "WEEKEVENTREG_18_01", + (18 << 8) | 0x02: "WEEKEVENTREG_18_02", + (18 << 8) | 0x04: "WEEKEVENTREG_18_04", + (18 << 8) | 0x08: "WEEKEVENTREG_18_08", + (18 << 8) | 0x10: "WEEKEVENTREG_18_10", + (18 << 8) | 0x20: "WEEKEVENTREG_18_20", + (18 << 8) | 0x40: "WEEKEVENTREG_18_40", + (18 << 8) | 0x80: "WEEKEVENTREG_18_80", + (19 << 8) | 0x01: "WEEKEVENTREG_19_01", + (19 << 8) | 0x02: "WEEKEVENTREG_19_02", + (19 << 8) | 0x04: "WEEKEVENTREG_19_04", + (19 << 8) | 0x08: "WEEKEVENTREG_19_08", + (19 << 8) | 0x10: "WEEKEVENTREG_19_10", + (19 << 8) | 0x20: "WEEKEVENTREG_19_20", + (19 << 8) | 0x40: "WEEKEVENTREG_19_40", + (19 << 8) | 0x80: "WEEKEVENTREG_19_80", + (20 << 8) | 0x01: "WEEKEVENTREG_20_01", + (20 << 8) | 0x02: "WEEKEVENTREG_20_02", + (20 << 8) | 0x04: "WEEKEVENTREG_20_04", + (20 << 8) | 0x08: "WEEKEVENTREG_20_08", + (20 << 8) | 0x10: "WEEKEVENTREG_20_10", + (20 << 8) | 0x20: "WEEKEVENTREG_20_20", + (20 << 8) | 0x40: "WEEKEVENTREG_20_40", + (20 << 8) | 0x80: "WEEKEVENTREG_20_80", + (21 << 8) | 0x01: "WEEKEVENTREG_21_01", + (21 << 8) | 0x02: "WEEKEVENTREG_21_02", + (21 << 8) | 0x04: "WEEKEVENTREG_21_04", + (21 << 8) | 0x08: "WEEKEVENTREG_21_08", + (21 << 8) | 0x10: "WEEKEVENTREG_21_10", + (21 << 8) | 0x20: "WEEKEVENTREG_21_20", + (21 << 8) | 0x40: "WEEKEVENTREG_21_40", + (21 << 8) | 0x80: "WEEKEVENTREG_21_80", + (22 << 8) | 0x01: "WEEKEVENTREG_22_01", + (22 << 8) | 0x02: "WEEKEVENTREG_22_02", + (22 << 8) | 0x04: "WEEKEVENTREG_22_04", + (22 << 8) | 0x08: "WEEKEVENTREG_22_08", + (22 << 8) | 0x10: "WEEKEVENTREG_22_10", + (22 << 8) | 0x20: "WEEKEVENTREG_22_20", + (22 << 8) | 0x40: "WEEKEVENTREG_22_40", + (22 << 8) | 0x80: "WEEKEVENTREG_22_80", + (23 << 8) | 0x01: "WEEKEVENTREG_23_01", + (23 << 8) | 0x02: "WEEKEVENTREG_23_02", + (23 << 8) | 0x04: "WEEKEVENTREG_23_04", + (23 << 8) | 0x08: "WEEKEVENTREG_23_08", + (23 << 8) | 0x10: "WEEKEVENTREG_23_10", + (23 << 8) | 0x20: "WEEKEVENTREG_23_20", + (23 << 8) | 0x40: "WEEKEVENTREG_23_40", + (23 << 8) | 0x80: "WEEKEVENTREG_23_80", + (24 << 8) | 0x01: "WEEKEVENTREG_24_01", + (24 << 8) | 0x02: "WEEKEVENTREG_24_02", + (24 << 8) | 0x04: "WEEKEVENTREG_24_04", + (24 << 8) | 0x08: "WEEKEVENTREG_24_08", + (24 << 8) | 0x10: "WEEKEVENTREG_24_10", + (24 << 8) | 0x20: "WEEKEVENTREG_24_20", + (24 << 8) | 0x40: "WEEKEVENTREG_24_40", + (24 << 8) | 0x80: "WEEKEVENTREG_24_80", + (25 << 8) | 0x01: "WEEKEVENTREG_25_01", + (25 << 8) | 0x02: "WEEKEVENTREG_25_02", + (25 << 8) | 0x04: "WEEKEVENTREG_25_04", + (25 << 8) | 0x08: "WEEKEVENTREG_25_08", + (25 << 8) | 0x10: "WEEKEVENTREG_25_10", + (25 << 8) | 0x20: "WEEKEVENTREG_25_20", + (25 << 8) | 0x40: "WEEKEVENTREG_25_40", + (25 << 8) | 0x80: "WEEKEVENTREG_25_80", + (26 << 8) | 0x01: "WEEKEVENTREG_26_01", + (26 << 8) | 0x02: "WEEKEVENTREG_26_02", + (26 << 8) | 0x04: "WEEKEVENTREG_26_04", + (26 << 8) | 0x08: "WEEKEVENTREG_26_08", + (26 << 8) | 0x10: "WEEKEVENTREG_26_10", + (26 << 8) | 0x20: "WEEKEVENTREG_26_20", + (26 << 8) | 0x40: "WEEKEVENTREG_26_40", + (26 << 8) | 0x80: "WEEKEVENTREG_26_80", + (27 << 8) | 0x01: "WEEKEVENTREG_27_01", + (27 << 8) | 0x02: "WEEKEVENTREG_27_02", + (27 << 8) | 0x04: "WEEKEVENTREG_27_04", + (27 << 8) | 0x08: "WEEKEVENTREG_27_08", + (27 << 8) | 0x10: "WEEKEVENTREG_27_10", + (27 << 8) | 0x20: "WEEKEVENTREG_27_20", + (27 << 8) | 0x40: "WEEKEVENTREG_27_40", + (27 << 8) | 0x80: "WEEKEVENTREG_27_80", + (28 << 8) | 0x01: "WEEKEVENTREG_28_01", + (28 << 8) | 0x02: "WEEKEVENTREG_28_02", + (28 << 8) | 0x04: "WEEKEVENTREG_28_04", + (28 << 8) | 0x08: "WEEKEVENTREG_28_08", + (28 << 8) | 0x10: "WEEKEVENTREG_28_10", + (28 << 8) | 0x20: "WEEKEVENTREG_28_20", + (28 << 8) | 0x40: "WEEKEVENTREG_28_40", + (28 << 8) | 0x80: "WEEKEVENTREG_28_80", + (29 << 8) | 0x01: "WEEKEVENTREG_29_01", + (29 << 8) | 0x02: "WEEKEVENTREG_29_02", + (29 << 8) | 0x04: "WEEKEVENTREG_29_04", + (29 << 8) | 0x08: "WEEKEVENTREG_29_08", + (29 << 8) | 0x10: "WEEKEVENTREG_29_10", + (29 << 8) | 0x20: "WEEKEVENTREG_29_20", + (29 << 8) | 0x40: "WEEKEVENTREG_29_40", + (29 << 8) | 0x80: "WEEKEVENTREG_29_80", + (30 << 8) | 0x01: "WEEKEVENTREG_30_01", + (30 << 8) | 0x02: "WEEKEVENTREG_30_02", + (30 << 8) | 0x04: "WEEKEVENTREG_30_04", + (30 << 8) | 0x08: "WEEKEVENTREG_30_08", + (30 << 8) | 0x10: "WEEKEVENTREG_30_10", + (30 << 8) | 0x20: "WEEKEVENTREG_30_20", + (30 << 8) | 0x40: "WEEKEVENTREG_30_40", + (30 << 8) | 0x80: "WEEKEVENTREG_30_80", + (31 << 8) | 0x01: "WEEKEVENTREG_31_01", + (31 << 8) | 0x02: "WEEKEVENTREG_31_02", + (31 << 8) | 0x04: "WEEKEVENTREG_31_04", + (31 << 8) | 0x08: "WEEKEVENTREG_31_08", + (31 << 8) | 0x10: "WEEKEVENTREG_31_10", + (31 << 8) | 0x20: "WEEKEVENTREG_31_20", + (31 << 8) | 0x40: "WEEKEVENTREG_31_40", + (31 << 8) | 0x80: "WEEKEVENTREG_31_80", + (32 << 8) | 0x01: "WEEKEVENTREG_32_01", + (32 << 8) | 0x02: "WEEKEVENTREG_32_02", + (32 << 8) | 0x04: "WEEKEVENTREG_32_04", + (32 << 8) | 0x08: "WEEKEVENTREG_32_08", + (32 << 8) | 0x10: "WEEKEVENTREG_32_10", + (32 << 8) | 0x20: "WEEKEVENTREG_32_20", + (32 << 8) | 0x40: "WEEKEVENTREG_32_40", + (32 << 8) | 0x80: "WEEKEVENTREG_32_80", + (33 << 8) | 0x01: "WEEKEVENTREG_33_01", + (33 << 8) | 0x02: "WEEKEVENTREG_33_02", + (33 << 8) | 0x04: "WEEKEVENTREG_33_04", + (33 << 8) | 0x08: "WEEKEVENTREG_33_08", + (33 << 8) | 0x10: "WEEKEVENTREG_33_10", + (33 << 8) | 0x20: "WEEKEVENTREG_33_20", + (33 << 8) | 0x40: "WEEKEVENTREG_33_40", + (33 << 8) | 0x80: "WEEKEVENTREG_33_80", + (34 << 8) | 0x01: "WEEKEVENTREG_34_01", + (34 << 8) | 0x02: "WEEKEVENTREG_34_02", + (34 << 8) | 0x04: "WEEKEVENTREG_34_04", + (34 << 8) | 0x08: "WEEKEVENTREG_34_08", + (34 << 8) | 0x10: "WEEKEVENTREG_34_10", + (34 << 8) | 0x20: "WEEKEVENTREG_34_20", + (34 << 8) | 0x40: "WEEKEVENTREG_34_40", + (34 << 8) | 0x80: "WEEKEVENTREG_34_80", + (35 << 8) | 0x01: "WEEKEVENTREG_35_01", + (35 << 8) | 0x02: "WEEKEVENTREG_35_02", + (35 << 8) | 0x04: "WEEKEVENTREG_35_04", + (35 << 8) | 0x08: "WEEKEVENTREG_35_08", + (35 << 8) | 0x10: "WEEKEVENTREG_35_10", + (35 << 8) | 0x20: "WEEKEVENTREG_35_20", + (35 << 8) | 0x40: "WEEKEVENTREG_35_40", + (35 << 8) | 0x80: "WEEKEVENTREG_35_80", + (36 << 8) | 0x01: "WEEKEVENTREG_36_01", + (36 << 8) | 0x02: "WEEKEVENTREG_36_02", + (36 << 8) | 0x04: "WEEKEVENTREG_36_04", + (36 << 8) | 0x08: "WEEKEVENTREG_36_08", + (36 << 8) | 0x10: "WEEKEVENTREG_36_10", + (36 << 8) | 0x20: "WEEKEVENTREG_36_20", + (36 << 8) | 0x40: "WEEKEVENTREG_36_40", + (36 << 8) | 0x80: "WEEKEVENTREG_36_80", + (37 << 8) | 0x01: "WEEKEVENTREG_37_01", + (37 << 8) | 0x02: "WEEKEVENTREG_37_02", + (37 << 8) | 0x04: "WEEKEVENTREG_37_04", + (37 << 8) | 0x08: "WEEKEVENTREG_37_08", + (37 << 8) | 0x10: "WEEKEVENTREG_37_10", + (37 << 8) | 0x20: "WEEKEVENTREG_37_20", + (37 << 8) | 0x40: "WEEKEVENTREG_37_40", + (37 << 8) | 0x80: "WEEKEVENTREG_37_80", + (38 << 8) | 0x01: "WEEKEVENTREG_38_01", + (38 << 8) | 0x02: "WEEKEVENTREG_38_02", + (38 << 8) | 0x04: "WEEKEVENTREG_38_04", + (38 << 8) | 0x08: "WEEKEVENTREG_38_08", + (38 << 8) | 0x10: "WEEKEVENTREG_38_10", + (38 << 8) | 0x20: "WEEKEVENTREG_38_20", + (38 << 8) | 0x40: "WEEKEVENTREG_38_40", + (38 << 8) | 0x80: "WEEKEVENTREG_38_80", + (39 << 8) | 0x01: "WEEKEVENTREG_39_01", + (39 << 8) | 0x02: "WEEKEVENTREG_39_02", + (39 << 8) | 0x04: "WEEKEVENTREG_39_04", + (39 << 8) | 0x08: "WEEKEVENTREG_39_08", + (39 << 8) | 0x10: "WEEKEVENTREG_39_10", + (39 << 8) | 0x20: "WEEKEVENTREG_39_20", + (39 << 8) | 0x40: "WEEKEVENTREG_39_40", + (39 << 8) | 0x80: "WEEKEVENTREG_39_80", + (40 << 8) | 0x01: "WEEKEVENTREG_40_01", + (40 << 8) | 0x02: "WEEKEVENTREG_40_02", + (40 << 8) | 0x04: "WEEKEVENTREG_40_04", + (40 << 8) | 0x08: "WEEKEVENTREG_40_08", + (40 << 8) | 0x10: "WEEKEVENTREG_40_10", + (40 << 8) | 0x20: "WEEKEVENTREG_40_20", + (40 << 8) | 0x40: "WEEKEVENTREG_40_40", + (40 << 8) | 0x80: "WEEKEVENTREG_40_80", + (41 << 8) | 0x01: "WEEKEVENTREG_41_01", + (41 << 8) | 0x02: "WEEKEVENTREG_41_02", + (41 << 8) | 0x04: "WEEKEVENTREG_41_04", + (41 << 8) | 0x08: "WEEKEVENTREG_41_08", + (41 << 8) | 0x10: "WEEKEVENTREG_41_10", + (41 << 8) | 0x20: "WEEKEVENTREG_41_20", + (41 << 8) | 0x40: "WEEKEVENTREG_41_40", + (41 << 8) | 0x80: "WEEKEVENTREG_41_80", + (42 << 8) | 0x01: "WEEKEVENTREG_42_01", + (42 << 8) | 0x02: "WEEKEVENTREG_42_02", + (42 << 8) | 0x04: "WEEKEVENTREG_42_04", + (42 << 8) | 0x08: "WEEKEVENTREG_42_08", + (42 << 8) | 0x10: "WEEKEVENTREG_42_10", + (42 << 8) | 0x20: "WEEKEVENTREG_42_20", + (42 << 8) | 0x40: "WEEKEVENTREG_42_40", + (42 << 8) | 0x80: "WEEKEVENTREG_42_80", + (43 << 8) | 0x01: "WEEKEVENTREG_43_01", + (43 << 8) | 0x02: "WEEKEVENTREG_43_02", + (43 << 8) | 0x04: "WEEKEVENTREG_43_04", + (43 << 8) | 0x08: "WEEKEVENTREG_43_08", + (43 << 8) | 0x10: "WEEKEVENTREG_43_10", + (43 << 8) | 0x20: "WEEKEVENTREG_43_20", + (43 << 8) | 0x40: "WEEKEVENTREG_43_40", + (43 << 8) | 0x80: "WEEKEVENTREG_43_80", + (44 << 8) | 0x01: "WEEKEVENTREG_44_01", + (44 << 8) | 0x02: "WEEKEVENTREG_44_02", + (44 << 8) | 0x04: "WEEKEVENTREG_44_04", + (44 << 8) | 0x08: "WEEKEVENTREG_44_08", + (44 << 8) | 0x10: "WEEKEVENTREG_44_10", + (44 << 8) | 0x20: "WEEKEVENTREG_44_20", + (44 << 8) | 0x40: "WEEKEVENTREG_44_40", + (44 << 8) | 0x80: "WEEKEVENTREG_44_80", + (45 << 8) | 0x01: "WEEKEVENTREG_45_01", + (45 << 8) | 0x02: "WEEKEVENTREG_45_02", + (45 << 8) | 0x04: "WEEKEVENTREG_45_04", + (45 << 8) | 0x08: "WEEKEVENTREG_45_08", + (45 << 8) | 0x10: "WEEKEVENTREG_45_10", + (45 << 8) | 0x20: "WEEKEVENTREG_45_20", + (45 << 8) | 0x40: "WEEKEVENTREG_45_40", + (45 << 8) | 0x80: "WEEKEVENTREG_45_80", + (46 << 8) | 0x01: "WEEKEVENTREG_46_01", + (46 << 8) | 0x02: "WEEKEVENTREG_46_02", + (46 << 8) | 0x04: "WEEKEVENTREG_46_04", + (46 << 8) | 0x08: "WEEKEVENTREG_46_08", + (46 << 8) | 0x10: "WEEKEVENTREG_46_10", + (46 << 8) | 0x20: "WEEKEVENTREG_46_20", + (46 << 8) | 0x40: "WEEKEVENTREG_46_40", + (46 << 8) | 0x80: "WEEKEVENTREG_46_80", + (47 << 8) | 0x01: "WEEKEVENTREG_47_01", + (47 << 8) | 0x02: "WEEKEVENTREG_47_02", + (47 << 8) | 0x04: "WEEKEVENTREG_47_04", + (47 << 8) | 0x08: "WEEKEVENTREG_47_08", + (47 << 8) | 0x10: "WEEKEVENTREG_47_10", + (47 << 8) | 0x20: "WEEKEVENTREG_47_20", + (47 << 8) | 0x40: "WEEKEVENTREG_47_40", + (47 << 8) | 0x80: "WEEKEVENTREG_47_80", + (48 << 8) | 0x01: "WEEKEVENTREG_48_01", + (48 << 8) | 0x02: "WEEKEVENTREG_48_02", + (48 << 8) | 0x04: "WEEKEVENTREG_48_04", + (48 << 8) | 0x08: "WEEKEVENTREG_48_08", + (48 << 8) | 0x10: "WEEKEVENTREG_48_10", + (48 << 8) | 0x20: "WEEKEVENTREG_48_20", + (48 << 8) | 0x40: "WEEKEVENTREG_48_40", + (48 << 8) | 0x80: "WEEKEVENTREG_48_80", + (49 << 8) | 0x01: "WEEKEVENTREG_49_01", + (49 << 8) | 0x02: "WEEKEVENTREG_49_02", + (49 << 8) | 0x04: "WEEKEVENTREG_49_04", + (49 << 8) | 0x08: "WEEKEVENTREG_49_08", + (49 << 8) | 0x10: "WEEKEVENTREG_49_10", + (49 << 8) | 0x20: "WEEKEVENTREG_49_20", + (49 << 8) | 0x40: "WEEKEVENTREG_49_40", + (49 << 8) | 0x80: "WEEKEVENTREG_49_80", + (50 << 8) | 0x01: "WEEKEVENTREG_50_01", + (50 << 8) | 0x02: "WEEKEVENTREG_50_02", + (50 << 8) | 0x04: "WEEKEVENTREG_50_04", + (50 << 8) | 0x08: "WEEKEVENTREG_50_08", + (50 << 8) | 0x10: "WEEKEVENTREG_50_10", + (50 << 8) | 0x20: "WEEKEVENTREG_50_20", + (50 << 8) | 0x40: "WEEKEVENTREG_50_40", + (50 << 8) | 0x80: "WEEKEVENTREG_50_80", + (51 << 8) | 0x01: "WEEKEVENTREG_51_01", + (51 << 8) | 0x02: "WEEKEVENTREG_51_02", + (51 << 8) | 0x04: "WEEKEVENTREG_51_04", + (51 << 8) | 0x08: "WEEKEVENTREG_51_08", + (51 << 8) | 0x10: "WEEKEVENTREG_51_10", + (51 << 8) | 0x20: "WEEKEVENTREG_51_20", + (51 << 8) | 0x40: "WEEKEVENTREG_51_40", + (51 << 8) | 0x80: "WEEKEVENTREG_51_80", + (52 << 8) | 0x01: "WEEKEVENTREG_52_01", + (52 << 8) | 0x02: "WEEKEVENTREG_52_02", + (52 << 8) | 0x04: "WEEKEVENTREG_52_04", + (52 << 8) | 0x08: "WEEKEVENTREG_52_08", + (52 << 8) | 0x10: "WEEKEVENTREG_52_10", + (52 << 8) | 0x20: "WEEKEVENTREG_52_20", + (52 << 8) | 0x40: "WEEKEVENTREG_52_40", + (52 << 8) | 0x80: "WEEKEVENTREG_52_80", + (53 << 8) | 0x01: "WEEKEVENTREG_53_01", + (53 << 8) | 0x02: "WEEKEVENTREG_53_02", + (53 << 8) | 0x04: "WEEKEVENTREG_53_04", + (53 << 8) | 0x08: "WEEKEVENTREG_53_08", + (53 << 8) | 0x10: "WEEKEVENTREG_53_10", + (53 << 8) | 0x20: "WEEKEVENTREG_53_20", + (53 << 8) | 0x40: "WEEKEVENTREG_53_40", + (53 << 8) | 0x80: "WEEKEVENTREG_53_80", + (54 << 8) | 0x01: "WEEKEVENTREG_54_01", + (54 << 8) | 0x02: "WEEKEVENTREG_54_02", + (54 << 8) | 0x04: "WEEKEVENTREG_54_04", + (54 << 8) | 0x08: "WEEKEVENTREG_54_08", + (54 << 8) | 0x10: "WEEKEVENTREG_54_10", + (54 << 8) | 0x20: "WEEKEVENTREG_54_20", + (54 << 8) | 0x40: "WEEKEVENTREG_54_40", + (54 << 8) | 0x80: "WEEKEVENTREG_54_80", + (55 << 8) | 0x01: "WEEKEVENTREG_55_01", + (55 << 8) | 0x02: "WEEKEVENTREG_55_02", + (55 << 8) | 0x04: "WEEKEVENTREG_55_04", + (55 << 8) | 0x08: "WEEKEVENTREG_55_08", + (55 << 8) | 0x10: "WEEKEVENTREG_55_10", + (55 << 8) | 0x20: "WEEKEVENTREG_55_20", + (55 << 8) | 0x40: "WEEKEVENTREG_55_40", + (55 << 8) | 0x80: "WEEKEVENTREG_55_80", + (56 << 8) | 0x01: "WEEKEVENTREG_56_01", + (56 << 8) | 0x02: "WEEKEVENTREG_56_02", + (56 << 8) | 0x04: "WEEKEVENTREG_56_04", + (56 << 8) | 0x08: "WEEKEVENTREG_56_08", + (56 << 8) | 0x10: "WEEKEVENTREG_56_10", + (56 << 8) | 0x20: "WEEKEVENTREG_56_20", + (56 << 8) | 0x40: "WEEKEVENTREG_56_40", + (56 << 8) | 0x80: "WEEKEVENTREG_56_80", + (57 << 8) | 0x01: "WEEKEVENTREG_57_01", + (57 << 8) | 0x02: "WEEKEVENTREG_57_02", + (57 << 8) | 0x04: "WEEKEVENTREG_57_04", + (57 << 8) | 0x08: "WEEKEVENTREG_57_08", + (57 << 8) | 0x10: "WEEKEVENTREG_57_10", + (57 << 8) | 0x20: "WEEKEVENTREG_57_20", + (57 << 8) | 0x40: "WEEKEVENTREG_57_40", + (57 << 8) | 0x80: "WEEKEVENTREG_57_80", + (58 << 8) | 0x01: "WEEKEVENTREG_58_01", + (58 << 8) | 0x02: "WEEKEVENTREG_58_02", + (58 << 8) | 0x04: "WEEKEVENTREG_58_04", + (58 << 8) | 0x08: "WEEKEVENTREG_58_08", + (58 << 8) | 0x10: "WEEKEVENTREG_58_10", + (58 << 8) | 0x20: "WEEKEVENTREG_58_20", + (58 << 8) | 0x40: "WEEKEVENTREG_58_40", + (58 << 8) | 0x80: "WEEKEVENTREG_58_80", + (59 << 8) | 0x01: "WEEKEVENTREG_59_01", + (59 << 8) | 0x02: "WEEKEVENTREG_59_02", + (59 << 8) | 0x08: "WEEKEVENTREG_59_08", + (59 << 8) | 0x04: "WEEKEVENTREG_59_04", + (59 << 8) | 0x10: "WEEKEVENTREG_59_10", + (59 << 8) | 0x20: "WEEKEVENTREG_59_20", + (59 << 8) | 0x40: "WEEKEVENTREG_59_40", + (59 << 8) | 0x80: "WEEKEVENTREG_59_80", + (60 << 8) | 0x01: "WEEKEVENTREG_60_01", + (60 << 8) | 0x02: "WEEKEVENTREG_60_02", + (60 << 8) | 0x04: "WEEKEVENTREG_60_04", + (60 << 8) | 0x08: "WEEKEVENTREG_60_08", + (60 << 8) | 0x10: "WEEKEVENTREG_60_10", + (60 << 8) | 0x20: "WEEKEVENTREG_60_20", + (60 << 8) | 0x40: "WEEKEVENTREG_60_40", + (60 << 8) | 0x80: "WEEKEVENTREG_60_80", + (61 << 8) | 0x01: "WEEKEVENTREG_61_01", + (61 << 8) | 0x02: "WEEKEVENTREG_61_02", + (61 << 8) | 0x04: "WEEKEVENTREG_61_04", + (61 << 8) | 0x08: "WEEKEVENTREG_61_08", + (61 << 8) | 0x10: "WEEKEVENTREG_61_10", + (61 << 8) | 0x20: "WEEKEVENTREG_61_20", + (61 << 8) | 0x40: "WEEKEVENTREG_61_40", + (61 << 8) | 0x80: "WEEKEVENTREG_61_80", + (62 << 8) | 0x01: "WEEKEVENTREG_62_01", + (62 << 8) | 0x02: "WEEKEVENTREG_62_02", + (62 << 8) | 0x04: "WEEKEVENTREG_62_04", + (62 << 8) | 0x08: "WEEKEVENTREG_62_08", + (62 << 8) | 0x10: "WEEKEVENTREG_62_10", + (62 << 8) | 0x20: "WEEKEVENTREG_62_20", + (62 << 8) | 0x40: "WEEKEVENTREG_62_40", + (62 << 8) | 0x80: "WEEKEVENTREG_62_80", + (63 << 8) | 0x01: "WEEKEVENTREG_63_01", + (63 << 8) | 0x02: "WEEKEVENTREG_63_02", + (63 << 8) | 0x04: "WEEKEVENTREG_63_04", + (63 << 8) | 0x08: "WEEKEVENTREG_63_08", + (63 << 8) | 0x10: "WEEKEVENTREG_63_10", + (63 << 8) | 0x20: "WEEKEVENTREG_63_20", + (63 << 8) | 0x40: "WEEKEVENTREG_63_40", + (63 << 8) | 0x80: "WEEKEVENTREG_63_80", + (64 << 8) | 0x01: "WEEKEVENTREG_64_01", + (64 << 8) | 0x02: "WEEKEVENTREG_64_02", + (64 << 8) | 0x04: "WEEKEVENTREG_64_04", + (64 << 8) | 0x08: "WEEKEVENTREG_64_08", + (64 << 8) | 0x10: "WEEKEVENTREG_64_10", + (64 << 8) | 0x20: "WEEKEVENTREG_64_20", + (64 << 8) | 0x40: "WEEKEVENTREG_64_40", + (64 << 8) | 0x80: "WEEKEVENTREG_64_80", + (65 << 8) | 0x01: "WEEKEVENTREG_65_01", + (65 << 8) | 0x02: "WEEKEVENTREG_65_02", + (65 << 8) | 0x04: "WEEKEVENTREG_65_04", + (65 << 8) | 0x08: "WEEKEVENTREG_65_08", + (65 << 8) | 0x10: "WEEKEVENTREG_65_10", + (65 << 8) | 0x20: "WEEKEVENTREG_65_20", + (65 << 8) | 0x40: "WEEKEVENTREG_65_40", + (65 << 8) | 0x80: "WEEKEVENTREG_65_80", + (66 << 8) | 0x01: "WEEKEVENTREG_66_01", + (66 << 8) | 0x02: "WEEKEVENTREG_66_02", + (66 << 8) | 0x04: "WEEKEVENTREG_66_04", + (66 << 8) | 0x08: "WEEKEVENTREG_66_08", + (66 << 8) | 0x10: "WEEKEVENTREG_66_10", + (66 << 8) | 0x20: "WEEKEVENTREG_66_20", + (66 << 8) | 0x40: "WEEKEVENTREG_66_40", + (66 << 8) | 0x80: "WEEKEVENTREG_66_80", + (67 << 8) | 0x01: "WEEKEVENTREG_67_01", + (67 << 8) | 0x02: "WEEKEVENTREG_67_02", + (67 << 8) | 0x04: "WEEKEVENTREG_67_04", + (67 << 8) | 0x08: "WEEKEVENTREG_67_08", + (67 << 8) | 0x10: "WEEKEVENTREG_67_10", + (67 << 8) | 0x20: "WEEKEVENTREG_67_20", + (67 << 8) | 0x40: "WEEKEVENTREG_67_40", + (67 << 8) | 0x80: "WEEKEVENTREG_67_80", + (68 << 8) | 0x01: "WEEKEVENTREG_68_01", + (68 << 8) | 0x02: "WEEKEVENTREG_68_02", + (68 << 8) | 0x04: "WEEKEVENTREG_68_04", + (68 << 8) | 0x08: "WEEKEVENTREG_68_08", + (68 << 8) | 0x10: "WEEKEVENTREG_68_10", + (68 << 8) | 0x20: "WEEKEVENTREG_68_20", + (68 << 8) | 0x40: "WEEKEVENTREG_68_40", + (68 << 8) | 0x80: "WEEKEVENTREG_68_80", + (69 << 8) | 0x01: "WEEKEVENTREG_69_01", + (69 << 8) | 0x02: "WEEKEVENTREG_69_02", + (69 << 8) | 0x04: "WEEKEVENTREG_69_04", + (69 << 8) | 0x08: "WEEKEVENTREG_69_08", + (69 << 8) | 0x10: "WEEKEVENTREG_69_10", + (69 << 8) | 0x20: "WEEKEVENTREG_69_20", + (69 << 8) | 0x40: "WEEKEVENTREG_69_40", + (69 << 8) | 0x80: "WEEKEVENTREG_69_80", + (70 << 8) | 0x01: "WEEKEVENTREG_70_01", + (70 << 8) | 0x02: "WEEKEVENTREG_70_02", + (70 << 8) | 0x04: "WEEKEVENTREG_70_04", + (70 << 8) | 0x08: "WEEKEVENTREG_70_08", + (70 << 8) | 0x10: "WEEKEVENTREG_70_10", + (70 << 8) | 0x20: "WEEKEVENTREG_70_20", + (70 << 8) | 0x40: "WEEKEVENTREG_70_40", + (70 << 8) | 0x80: "WEEKEVENTREG_70_80", + (71 << 8) | 0x01: "WEEKEVENTREG_71_01", + (71 << 8) | 0x02: "WEEKEVENTREG_71_02", + (71 << 8) | 0x04: "WEEKEVENTREG_71_04", + (71 << 8) | 0x08: "WEEKEVENTREG_71_08", + (71 << 8) | 0x10: "WEEKEVENTREG_71_10", + (71 << 8) | 0x20: "WEEKEVENTREG_71_20", + (71 << 8) | 0x40: "WEEKEVENTREG_71_40", + (71 << 8) | 0x80: "WEEKEVENTREG_71_80", + (72 << 8) | 0x01: "WEEKEVENTREG_72_01", + (72 << 8) | 0x02: "WEEKEVENTREG_72_02", + (72 << 8) | 0x04: "WEEKEVENTREG_72_04", + (72 << 8) | 0x08: "WEEKEVENTREG_72_08", + (72 << 8) | 0x10: "WEEKEVENTREG_72_10", + (72 << 8) | 0x20: "WEEKEVENTREG_72_20", + (72 << 8) | 0x40: "WEEKEVENTREG_72_40", + (72 << 8) | 0x80: "WEEKEVENTREG_72_80", + (73 << 8) | 0x01: "WEEKEVENTREG_73_01", + (73 << 8) | 0x02: "WEEKEVENTREG_73_02", + (73 << 8) | 0x04: "WEEKEVENTREG_73_04", + (73 << 8) | 0x08: "WEEKEVENTREG_73_08", + (73 << 8) | 0x10: "WEEKEVENTREG_73_10", + (73 << 8) | 0x20: "WEEKEVENTREG_73_20", + (73 << 8) | 0x40: "WEEKEVENTREG_73_40", + (73 << 8) | 0x80: "WEEKEVENTREG_73_80", + (74 << 8) | 0x01: "WEEKEVENTREG_74_01", + (74 << 8) | 0x02: "WEEKEVENTREG_74_02", + (74 << 8) | 0x04: "WEEKEVENTREG_74_04", + (74 << 8) | 0x08: "WEEKEVENTREG_74_08", + (74 << 8) | 0x10: "WEEKEVENTREG_74_10", + (74 << 8) | 0x20: "WEEKEVENTREG_74_20", + (74 << 8) | 0x40: "WEEKEVENTREG_74_40", + (74 << 8) | 0x80: "WEEKEVENTREG_74_80", + (75 << 8) | 0x01: "WEEKEVENTREG_75_01", + (75 << 8) | 0x02: "WEEKEVENTREG_75_02", + (75 << 8) | 0x04: "WEEKEVENTREG_75_04", + (75 << 8) | 0x08: "WEEKEVENTREG_75_08", + (75 << 8) | 0x10: "WEEKEVENTREG_75_10", + (75 << 8) | 0x20: "WEEKEVENTREG_75_20", + (75 << 8) | 0x40: "WEEKEVENTREG_75_40", + (75 << 8) | 0x80: "WEEKEVENTREG_75_80", + (76 << 8) | 0x01: "WEEKEVENTREG_76_01", + (76 << 8) | 0x02: "WEEKEVENTREG_76_02", + (76 << 8) | 0x04: "WEEKEVENTREG_76_04", + (76 << 8) | 0x08: "WEEKEVENTREG_76_08", + (76 << 8) | 0x10: "WEEKEVENTREG_76_10", + (76 << 8) | 0x20: "WEEKEVENTREG_76_20", + (76 << 8) | 0x40: "WEEKEVENTREG_76_40", + (76 << 8) | 0x80: "WEEKEVENTREG_76_80", + (77 << 8) | 0x01: "WEEKEVENTREG_77_01", + (77 << 8) | 0x02: "WEEKEVENTREG_77_02", + (77 << 8) | 0x04: "WEEKEVENTREG_77_04", + (77 << 8) | 0x08: "WEEKEVENTREG_77_08", + (77 << 8) | 0x10: "WEEKEVENTREG_77_10", + (77 << 8) | 0x20: "WEEKEVENTREG_77_20", + (77 << 8) | 0x40: "WEEKEVENTREG_77_40", + (77 << 8) | 0x80: "WEEKEVENTREG_77_80", + (78 << 8) | 0x01: "WEEKEVENTREG_78_01", + (78 << 8) | 0x02: "WEEKEVENTREG_78_02", + (78 << 8) | 0x04: "WEEKEVENTREG_78_04", + (78 << 8) | 0x08: "WEEKEVENTREG_78_08", + (78 << 8) | 0x10: "WEEKEVENTREG_78_10", + (78 << 8) | 0x20: "WEEKEVENTREG_78_20", + (78 << 8) | 0x40: "WEEKEVENTREG_78_40", + (78 << 8) | 0x80: "WEEKEVENTREG_78_80", + (79 << 8) | 0x01: "WEEKEVENTREG_79_01", + (79 << 8) | 0x02: "WEEKEVENTREG_79_02", + (79 << 8) | 0x04: "WEEKEVENTREG_79_04", + (79 << 8) | 0x08: "WEEKEVENTREG_79_08", + (79 << 8) | 0x10: "WEEKEVENTREG_79_10", + (79 << 8) | 0x20: "WEEKEVENTREG_79_20", + (79 << 8) | 0x40: "WEEKEVENTREG_79_40", + (79 << 8) | 0x80: "WEEKEVENTREG_79_80", + (80 << 8) | 0x01: "WEEKEVENTREG_80_01", + (80 << 8) | 0x02: "WEEKEVENTREG_80_02", + (80 << 8) | 0x04: "WEEKEVENTREG_80_04", + (80 << 8) | 0x08: "WEEKEVENTREG_80_08", + (80 << 8) | 0x10: "WEEKEVENTREG_80_10", + (80 << 8) | 0x20: "WEEKEVENTREG_80_20", + (80 << 8) | 0x40: "WEEKEVENTREG_80_40", + (80 << 8) | 0x80: "WEEKEVENTREG_80_80", + (81 << 8) | 0x01: "WEEKEVENTREG_81_01", + (81 << 8) | 0x02: "WEEKEVENTREG_81_02", + (81 << 8) | 0x04: "WEEKEVENTREG_81_04", + (81 << 8) | 0x08: "WEEKEVENTREG_81_08", + (81 << 8) | 0x10: "WEEKEVENTREG_81_10", + (81 << 8) | 0x20: "WEEKEVENTREG_81_20", + (81 << 8) | 0x40: "WEEKEVENTREG_81_40", + (81 << 8) | 0x80: "WEEKEVENTREG_81_80", + (82 << 8) | 0x01: "WEEKEVENTREG_82_01", + (82 << 8) | 0x02: "WEEKEVENTREG_82_02", + (82 << 8) | 0x04: "WEEKEVENTREG_82_04", + (82 << 8) | 0x08: "WEEKEVENTREG_82_08", + (82 << 8) | 0x10: "WEEKEVENTREG_82_10", + (82 << 8) | 0x20: "WEEKEVENTREG_82_20", + (82 << 8) | 0x40: "WEEKEVENTREG_82_40", + (82 << 8) | 0x80: "WEEKEVENTREG_82_80", + (83 << 8) | 0x01: "WEEKEVENTREG_83_01", + (83 << 8) | 0x02: "WEEKEVENTREG_83_02", + (83 << 8) | 0x04: "WEEKEVENTREG_83_04", + (83 << 8) | 0x08: "WEEKEVENTREG_83_08", + (83 << 8) | 0x10: "WEEKEVENTREG_83_10", + (83 << 8) | 0x20: "WEEKEVENTREG_83_20", + (83 << 8) | 0x40: "WEEKEVENTREG_83_40", + (83 << 8) | 0x80: "WEEKEVENTREG_83_80", + (84 << 8) | 0x01: "WEEKEVENTREG_84_01", + (84 << 8) | 0x02: "WEEKEVENTREG_84_02", + (84 << 8) | 0x04: "WEEKEVENTREG_84_04", + (84 << 8) | 0x08: "WEEKEVENTREG_84_08", + (84 << 8) | 0x10: "WEEKEVENTREG_84_10", + (84 << 8) | 0x20: "WEEKEVENTREG_84_20", + (84 << 8) | 0x40: "WEEKEVENTREG_84_40", + (84 << 8) | 0x80: "WEEKEVENTREG_84_80", + (85 << 8) | 0x01: "WEEKEVENTREG_85_01", + (85 << 8) | 0x02: "WEEKEVENTREG_85_02", + (85 << 8) | 0x04: "WEEKEVENTREG_85_04", + (85 << 8) | 0x08: "WEEKEVENTREG_85_08", + (85 << 8) | 0x10: "WEEKEVENTREG_85_10", + (85 << 8) | 0x20: "WEEKEVENTREG_85_20", + (85 << 8) | 0x40: "WEEKEVENTREG_85_40", + (85 << 8) | 0x80: "WEEKEVENTREG_85_80", + (86 << 8) | 0x01: "WEEKEVENTREG_86_01", + (86 << 8) | 0x02: "WEEKEVENTREG_86_02", + (86 << 8) | 0x04: "WEEKEVENTREG_86_04", + (86 << 8) | 0x08: "WEEKEVENTREG_86_08", + (86 << 8) | 0x10: "WEEKEVENTREG_86_10", + (86 << 8) | 0x20: "WEEKEVENTREG_86_20", + (86 << 8) | 0x40: "WEEKEVENTREG_86_40", + (86 << 8) | 0x80: "WEEKEVENTREG_86_80", + (87 << 8) | 0x01: "WEEKEVENTREG_87_01", + (87 << 8) | 0x02: "WEEKEVENTREG_87_02", + (87 << 8) | 0x04: "WEEKEVENTREG_87_04", + (87 << 8) | 0x08: "WEEKEVENTREG_87_08", + (87 << 8) | 0x10: "WEEKEVENTREG_87_10", + (87 << 8) | 0x20: "WEEKEVENTREG_87_20", + (87 << 8) | 0x40: "WEEKEVENTREG_87_40", + (87 << 8) | 0x80: "WEEKEVENTREG_87_80", + (88 << 8) | 0x01: "WEEKEVENTREG_88_01", + (88 << 8) | 0x02: "WEEKEVENTREG_88_02", + (88 << 8) | 0x04: "WEEKEVENTREG_88_04", + (88 << 8) | 0x08: "WEEKEVENTREG_88_08", + (88 << 8) | 0x10: "WEEKEVENTREG_88_10", + (88 << 8) | 0x20: "WEEKEVENTREG_88_20", + (88 << 8) | 0x40: "WEEKEVENTREG_88_40", + (88 << 8) | 0x80: "WEEKEVENTREG_88_80", + (89 << 8) | 0x01: "WEEKEVENTREG_89_01", + (89 << 8) | 0x02: "WEEKEVENTREG_89_02", + (89 << 8) | 0x04: "WEEKEVENTREG_89_04", + (89 << 8) | 0x08: "WEEKEVENTREG_89_08", + (89 << 8) | 0x10: "WEEKEVENTREG_89_10", + (89 << 8) | 0x20: "WEEKEVENTREG_89_20", + (89 << 8) | 0x40: "WEEKEVENTREG_89_40", + (89 << 8) | 0x80: "WEEKEVENTREG_89_80", + (90 << 8) | 0x01: "WEEKEVENTREG_90_01", + (90 << 8) | 0x02: "WEEKEVENTREG_90_02", + (90 << 8) | 0x04: "WEEKEVENTREG_90_04", + (90 << 8) | 0x08: "WEEKEVENTREG_90_08", + (90 << 8) | 0x10: "WEEKEVENTREG_90_10", + (90 << 8) | 0x20: "WEEKEVENTREG_90_20", + (90 << 8) | 0x40: "WEEKEVENTREG_90_40", + (90 << 8) | 0x80: "WEEKEVENTREG_90_80", + (91 << 8) | 0x01: "WEEKEVENTREG_91_01", + (91 << 8) | 0x02: "WEEKEVENTREG_91_02", + (91 << 8) | 0x04: "WEEKEVENTREG_91_04", + (91 << 8) | 0x08: "WEEKEVENTREG_91_08", + (91 << 8) | 0x10: "WEEKEVENTREG_91_10", + (91 << 8) | 0x20: "WEEKEVENTREG_91_20", + (91 << 8) | 0x40: "WEEKEVENTREG_91_40", + (91 << 8) | 0x80: "WEEKEVENTREG_91_80", + (92 << 8) | 0x01: "WEEKEVENTREG_92_01", + (92 << 8) | 0x02: "WEEKEVENTREG_92_02", + (92 << 8) | 0x04: "WEEKEVENTREG_92_04", + (92 << 8) | 0x08: "WEEKEVENTREG_92_08", + (92 << 8) | 0x10: "WEEKEVENTREG_92_10", + (92 << 8) | 0x20: "WEEKEVENTREG_92_20", + (92 << 8) | 0x40: "WEEKEVENTREG_92_40", + (92 << 8) | 0x80: "WEEKEVENTREG_92_80", + (93 << 8) | 0x01: "WEEKEVENTREG_93_01", + (93 << 8) | 0x02: "WEEKEVENTREG_93_02", + (93 << 8) | 0x04: "WEEKEVENTREG_93_04", + (93 << 8) | 0x08: "WEEKEVENTREG_93_08", + (93 << 8) | 0x10: "WEEKEVENTREG_93_10", + (93 << 8) | 0x20: "WEEKEVENTREG_93_20", + (93 << 8) | 0x40: "WEEKEVENTREG_93_40", + (93 << 8) | 0x80: "WEEKEVENTREG_93_80", + (94 << 8) | 0x01: "WEEKEVENTREG_94_01", + (94 << 8) | 0x02: "WEEKEVENTREG_94_02", + (94 << 8) | 0x04: "WEEKEVENTREG_94_04", + (94 << 8) | 0x08: "WEEKEVENTREG_94_08", + (94 << 8) | 0x10: "WEEKEVENTREG_94_10", + (94 << 8) | 0x20: "WEEKEVENTREG_94_20", + (94 << 8) | 0x40: "WEEKEVENTREG_94_40", + (94 << 8) | 0x80: "WEEKEVENTREG_94_80", + (95 << 8) | 0x01: "WEEKEVENTREG_95_01", + (95 << 8) | 0x02: "WEEKEVENTREG_95_02", + (95 << 8) | 0x04: "WEEKEVENTREG_95_04", + (95 << 8) | 0x08: "WEEKEVENTREG_95_08", + (95 << 8) | 0x10: "WEEKEVENTREG_95_10", + (95 << 8) | 0x20: "WEEKEVENTREG_95_20", + (95 << 8) | 0x40: "WEEKEVENTREG_95_40", + (95 << 8) | 0x80: "WEEKEVENTREG_95_80", + (96 << 8) | 0x01: "WEEKEVENTREG_96_01", + (96 << 8) | 0x02: "WEEKEVENTREG_96_02", + (96 << 8) | 0x04: "WEEKEVENTREG_96_04", + (96 << 8) | 0x08: "WEEKEVENTREG_96_08", + (96 << 8) | 0x10: "WEEKEVENTREG_96_10", + (96 << 8) | 0x20: "WEEKEVENTREG_96_20", + (96 << 8) | 0x40: "WEEKEVENTREG_96_40", + (96 << 8) | 0x80: "WEEKEVENTREG_96_80", + (97 << 8) | 0x01: "WEEKEVENTREG_97_01", + (97 << 8) | 0x02: "WEEKEVENTREG_97_02", + (97 << 8) | 0x04: "WEEKEVENTREG_97_04", + (97 << 8) | 0x08: "WEEKEVENTREG_97_08", + (97 << 8) | 0x10: "WEEKEVENTREG_97_10", + (97 << 8) | 0x20: "WEEKEVENTREG_97_20", + (97 << 8) | 0x40: "WEEKEVENTREG_97_40", + (97 << 8) | 0x80: "WEEKEVENTREG_97_80", + (98 << 8) | 0x01: "WEEKEVENTREG_98_01", + (98 << 8) | 0x02: "WEEKEVENTREG_98_02", + (98 << 8) | 0x04: "WEEKEVENTREG_98_04", + (98 << 8) | 0x08: "WEEKEVENTREG_98_08", + (98 << 8) | 0x10: "WEEKEVENTREG_98_10", + (98 << 8) | 0x20: "WEEKEVENTREG_98_20", + (98 << 8) | 0x40: "WEEKEVENTREG_98_40", + (98 << 8) | 0x80: "WEEKEVENTREG_98_80", + (99 << 8) | 0x01: "WEEKEVENTREG_99_01", + (99 << 8) | 0x02: "WEEKEVENTREG_99_02", + (99 << 8) | 0x04: "WEEKEVENTREG_99_04", + (99 << 8) | 0x08: "WEEKEVENTREG_99_08", + (99 << 8) | 0x10: "WEEKEVENTREG_99_10", + (99 << 8) | 0x20: "WEEKEVENTREG_99_20", + (99 << 8) | 0x40: "WEEKEVENTREG_99_40", + (99 << 8) | 0x80: "WEEKEVENTREG_99_80", +} + +def getFlagMacro(index: int, mask: int) -> str: + flag = (index << 8) | mask + if flag in weekEventReg: + return weekEventReg[flag] + return f"WEEKEVENTREG_{index:02}_{mask:02X}" + +def getCheckMacro(index: int, mask: int) -> str: + return f"CHECK_WEEKEVENTREG({getFlagMacro(index, mask)})" + +def getSetMacro(index: int, mask: int) -> str: + return f"SET_WEEKEVENTREG({getFlagMacro(index, mask)})" + +def getClearMacro(index: int, mask: int) -> str: + return f"CLEAR_WEEKEVENTREG({getFlagMacro(index, mask)})" + +NUMBER_PATTERN = r"(0[xX])?[0-9a-fA-F]+" + +def applyChange(fileContents: str, compiledRegex: re.Pattern, callback) -> str: + parsedContents = "" + + match = compiledRegex.search(fileContents) + while match: + index = int(match.group("index"), 0) + mask = int(match.group("mask"), 0) + + start, end = match.span() + parsedContents += fileContents[:start] + parsedContents += callback(index, mask) + + fileContents = fileContents[end:] + match = compiledRegex.search(fileContents) + + parsedContents += fileContents + return parsedContents + + +def updateCheck(fileContents: str) -> str: + # gSaveContext.save.weekEventReg[86] & 2 + checkRegex = re.compile(rf"gSaveContext.save.weekEventReg\[(?P{NUMBER_PATTERN})\]\s*\&\s*(?P{NUMBER_PATTERN})") + + return applyChange(fileContents, checkRegex, getCheckMacro) + +def updateSet(fileContents: str) -> str: + # gSaveContext.save.weekEventReg[51] |= 0x10 + setRegex = re.compile(rf"gSaveContext.save.weekEventReg\[(?P{NUMBER_PATTERN})\]\s*\|=\s*(?P{NUMBER_PATTERN})") + + return applyChange(fileContents, setRegex, getSetMacro) + +def updateClear(fileContents: str) -> str: + # gSaveContext.save.weekEventReg[85] &= (u8)~0x80 + clearRegex = re.compile(rf"gSaveContext.save.weekEventReg\[(?P{NUMBER_PATTERN})\]\s*\&=\s*(\(u8\))?~(?P{NUMBER_PATTERN})") + + return applyChange(fileContents, clearRegex, getClearMacro) + + +def read_file(filename): + with open(filename) as src_file: + return src_file.read() + +def write_file(filename, contents): + with open(filename, "w") as f: + f.write(contents) + + +def main(): + parser = argparse.ArgumentParser(description="Converts a weekEventReg access to a macro") + + parser.add_argument("filename", help="Replace every occurrence of numeric weekEventReg on this file to the corresponding macro") + args = parser.parse_args() + + fileContents = read_file(args.filename) + + parsedContents = updateCheck(fileContents) + parsedContents = updateSet(parsedContents) + parsedContents = updateClear(parsedContents) + + if fileContents != parsedContents: + write_file(args.filename, parsedContents) + +if __name__ == "__main__": + main() diff --git a/undefined_syms.txt b/undefined_syms.txt index ebbdd5b07..41b9d0558 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -131,6 +131,8 @@ D_80025D00 = 0x80025D00; rspbootTextSize = 0x160; rspbootTextEnd = rspbootTextStart + rspbootTextSize; +aspMainTextEnd = aspMainTextStart + 0x1000; +aspMainDataEnd = aspMainDataStart + 0x2E0; // Segmented Addresses @@ -564,68 +566,14 @@ D_06004240 = 0x06004240; D_06003B08 = 0x06003B08; D_06003E80 = 0x06003E80; -// ovl_Bg_Fire_Wall - -D_06000040 = 0x06000040; - -// ovl_Bg_Fu_Mizu - -D_06002FC0 = 0x06002FC0; -D_060037D8 = 0x060037D8; -D_060037F8 = 0x060037F8; - // ovl_Bg_Haka_Bombwall D_06001680 = 0x06001680; -// ovl_Bg_Hakugin_Bombwall - -D_06009830 = 0x06009830; - -// ovl_Bg_Hakugin_Elvpole - -D_0600ACB8 = 0x0600ACB8; -D_0600BF40 = 0x0600BF40; - // ovl_Bg_Ikana_Bombwall D_06000288 = 0x06000288; -// ovl_Bg_Ikana_Mirror - -D_060014B0 = 0x060014B0; -D_06001678 = 0x06001678; -D_06001880 = 0x06001880; -D_06001AD8 = 0x06001AD8; -D_06001E18 = 0x06001E18; -D_06002358 = 0x06002358; - -// ovl_Bg_Kin2_Bombwall - -D_06000128 = 0x06000128; -D_060002C0 = 0x060002C0; -D_06000360 = 0x06000360; -D_06000490 = 0x06000490; - -// ovl_Bg_Kin2_Picture - -D_06000658 = 0x06000658; -D_06000798 = 0x06000798; - -// ovl_Bg_Last_Bwall - -D_06000098 = 0x06000098; - -// ovl_Bg_Sinkai_Kabe - -D_06000048 = 0x06000048; - -// ovl_Bg_Umajump - -D_06001220 = 0x06001220; -D_06001438 = 0x06001438; -D_06001558 = 0x06001558; - // ovl_Boss_01 D_06000C44 = 0x06000C44; @@ -677,14 +625,6 @@ D_06006E50 = 0x06006E50; D_06007488 = 0x06007488; D_06007908 = 0x06007908; -// ovl_Boss_06 - -D_06018BD0 = 0x06018BD0; -D_06018CF0 = 0x06018CF0; -D_06018DE0 = 0x06018DE0; -D_06019360 = 0x06019360; -D_060193B0 = 0x060193B0; - // ovl_Boss_07 D_06000194 = 0x06000194; @@ -782,86 +722,17 @@ D_0600B5A0 = 0x0600B5A0; D_06010C40 = 0x06010C40; D_060129F0 = 0x060129F0; -// ovl_Demo_Tre_Lgt - -D_06007D78 = 0x06007D78; - -// ovl_Dm_Ah - -D_06009E70 = 0x06009E70; - -// ovl_Dm_Al - -D_0600A0D8 = 0x0600A0D8; - -// ovl_Dm_Bal - -D_060005FC = 0x060005FC; -D_06001804 = 0x06001804; -D_0600A6D0 = 0x0600A6D0; - -// ovl_Dm_Char02 - -D_0600AD68 = 0x0600AD68; - -// ovl_Dm_Char03 - -D_06020550 = 0x06020550; - -// ovl_Dm_Char06 - -D_060013A8 = 0x060013A8; -D_06006868 = 0x06006868; - -// ovl_Dm_Char08 - -D_06002328 = 0x06002328; -D_06002470 = 0x06002470; -D_06004E70 = 0x06004E70; -D_0600E748 = 0x0600E748; - -// ovl_Dm_Char09 - -D_0600005C = 0x0600005C; -D_06001398 = 0x06001398; - // ovl_Dm_Tsg D_06002D30 = 0x06002D30; D_06011458 = 0x06011458; -// ovl_Dm_Zl - -D_0600DE08 = 0x0600DE08; -D_0600E038 = 0x0600E038; - -// ovl_Door_Warp1 - -D_06003230 = 0x06003230; -D_060044D8 = 0x060044D8; -D_06004690 = 0x06004690; -D_060057D8 = 0x060057D8; -D_060058C8 = 0x060058C8; -D_06007238 = 0x06007238; - -// ovl_Eff_Kamejima_Wave - -D_06000000 = 0x06000000; -D_06000140 = 0x06000140; -D_06001AF0 = 0x06001AF0; - // ovl_Eff_Stk D_06008920 = 0x06008920; D_06008A38 = 0x06008A38; D_06009F60 = 0x06009F60; -// ovl_Eff_Zoraband - -D_06000180 = 0x06000180; -D_060002A8 = 0x060002A8; -D_06000F38 = 0x06000F38; - // ovl_En_An D_06000308 = 0x06000308; @@ -875,25 +746,6 @@ D_06012618 = 0x06012618; D_0600B380 = 0x0600B380; -// ovl_En_Ani - -D_060007FC = 0x060007FC; -D_06000C14 = 0x06000C14; -D_060011CC = 0x060011CC; -D_06001D48 = 0x06001D48; -D_060027A0 = 0x060027A0; -D_060028A0 = 0x060028A0; -D_06009220 = 0x06009220; -D_06009D34 = 0x06009D34; - -// ovl_En_Az - -D_06007438 = 0x06007438; -D_0600C94C = 0x0600C94C; -D_06017990 = 0x06017990; -D_0601ABF0 = 0x0601ABF0; -D_0601AD00 = 0x0601AD00; - // ovl_En_Bal D_060005FC = 0x060005FC; @@ -903,48 +755,6 @@ D_0600B604 = 0x0600B604; D_0600CB78 = 0x0600CB78; D_0600D530 = 0x0600D530; -// ovl_En_Bat - -D_060000A0 = 0x060000A0; -D_060000C8 = 0x060000C8; - -// ovl_En_Bee - -D_0600005C = 0x0600005C; -D_06001398 = 0x06001398; - -// ovl_En_Bh - -D_06000074 = 0x06000074; -D_06001E60 = 0x06001E60; - -// ovl_En_Bombal - -D_06000A00 = 0x06000A00; -D_06000D78 = 0x06000D78; - -// ovl_En_Bombers2 - -D_060064B8 = 0x060064B8; -D_0600F82C = 0x0600F82C; - -// ovl_En_Bomjimb - -D_060064B8 = 0x060064B8; -D_0600F82C = 0x0600F82C; - -// ovl_En_Box - -D_0600043C = 0x0600043C; -D_060006F0 = 0x060006F0; -D_06000A50 = 0x06000A50; -D_06000DB0 = 0x06000DB0; -D_060012E8 = 0x060012E8; -D_06001850 = 0x06001850; -D_06001D58 = 0x06001D58; -D_060066A0 = 0x060066A0; -D_060080E8 = 0x060080E8; - // ovl_En_Bsb D_06000C50 = 0x06000C50; @@ -952,15 +762,6 @@ D_06004894 = 0x06004894; D_060086BC = 0x060086BC; D_0600C3E0 = 0x0600C3E0; -// ovl_En_Bubble - -D_06001000 = 0x06001000; - -// ovl_En_Crow - -D_060000F0 = 0x060000F0; -D_060010C0 = 0x060010C0; - // ovl_En_Death D_06000E64 = 0x06000E64; @@ -992,20 +793,10 @@ D_06001828 = 0x06001828; D_06002A40 = 0x06002A40; D_06003070 = 0x06003070; -// ovl_En_Demo_heishi - -D_06003BFC = 0x06003BFC; -D_0600D640 = 0x0600D640; - // ovl_En_Dnh D_06002950 = 0x06002950; -// ovl_En_Ds2n - -D_06008038 = 0x06008038; -D_06008170 = 0x06008170; - // ovl_En_Dt D_0600112C = 0x0600112C; @@ -1037,26 +828,6 @@ D_060009A0 = 0x060009A0; D_06010240 = 0x06010240; -// ovl_En_Fall2 - -D_06005EF4 = 0x06005EF4; -D_06005F10 = 0x06005F10; -D_06008840 = 0x06008840; -D_06008898 = 0x06008898; - -// ovl_En_Famos - -D_060000F8 = 0x060000F8; -D_06003D38 = 0x06003D38; -D_06003DC8 = 0x06003DC8; - -// ovl_En_Fishing - -D_060029C0 = 0x060029C0; -D_0600007C = 0x0600007C; -D_0600CFE0 = 0x0600CFE0; -D_06011058 = 0x06011058; - // ovl_En_Ge2 D_0600030C = 0x0600030C; @@ -1072,12 +843,6 @@ D_0600A344 = 0x0600A344; D_06001EFC = 0x06001EFC; D_0600A808 = 0x0600A808; -// ovl_En_Hgo - -D_0600B644 = 0x0600B644; -D_0600F248 = 0x0600F248; -D_06012A58 = 0x06012A58; - // ovl_En_Invadepoh_Demo D_06000080 = 0x06000080; @@ -1094,15 +859,6 @@ D_06012FC8 = 0x06012FC8; D_06013928 = 0x06013928; D_06016588 = 0x06016588; -// ovl_En_Js - -D_06010880 = 0x06010880; -D_06010CD8 = 0x06010CD8; -D_060164B8 = 0x060164B8; -D_06016F58 = 0x06016F58; -D_0601764C = 0x0601764C; -D_06017E98 = 0x06017E98; - // ovl_En_Jso D_060081F4 = 0x060081F4; @@ -1114,16 +870,6 @@ D_06002ED8 = 0x06002ED8; D_06003168 = 0x06003168; D_060081F4 = 0x060081F4; -// ovl_En_Kaizoku - -D_060058B8 = 0x060058B8; -D_0600D828 = 0x0600D828; - -// ovl_En_Kanban - -D_06000C30 = 0x06000C30; -D_06001630 = 0x06001630; - // ovl_En_Kitan D_06000CE8 = 0x06000CE8; @@ -1190,22 +936,6 @@ D_06021E34 = 0x06021E34; D_06022728 = 0x06022728; D_06022CAC = 0x06022CAC; -// ovl_En_Lift_Nuts - -D_060029E8 = 0x060029E8; -D_0600AC70 = 0x0600AC70; - -// ovl_En_Mag - -D_06000000 = 0x06000000; -D_06009000 = 0x06009000; -D_06009680 = 0x06009680; -D_06009D00 = 0x06009D00; -D_06010F40 = 0x06010F40; -D_06011740 = 0x06011740; -D_06011BC0 = 0x06011BC0; -D_06011E48 = 0x06011E48; - // ovl_En_Mnk D_06003584 = 0x06003584; @@ -1217,17 +947,6 @@ D_060105DC = 0x060105DC; D_06019B88 = 0x06019B88; D_0601D518 = 0x0601D518; -// ovl_En_Neo_Reeba - -D_060001E4 = 0x060001E4; -D_06001EE8 = 0x06001EE8; - -// ovl_En_Nwc - -D_060000E8 = 0x060000E8; -D_060002E8 = 0x060002E8; -D_06002530 = 0x06002530; - // ovl_En_Okuta D_0600044C = 0x0600044C; @@ -1239,16 +958,6 @@ D_06003EE4 = 0x06003EE4; D_06004204 = 0x06004204; D_0600466C = 0x0600466C; -// ovl_En_Osn - -D_060192A0 = 0x060192A0; -D_060201BC = 0x060201BC; -D_060202F0 = 0x060202F0; - -// ovl_En_Paper - -D_0600D5A0 = 0x0600D5A0; - // ovl_En_Po_Composer D_0600188C = 0x0600188C; @@ -1258,26 +967,6 @@ D_06006F38 = 0x06006F38; D_06006FD8 = 0x06006FD8; D_06009930 = 0x06009930; -// ovl_En_Pr2 - -D_06003904 = 0x06003904; -D_06004188 = 0x06004188; -D_06004340 = 0x06004340; - -// ovl_En_Pst - -D_06001A80 = 0x06001A80; - -// ovl_En_Ru - -D_0600C700 = 0x0600C700; - -// ovl_En_Rz - -D_06003A20 = 0x06003A20; -D_0600D768 = 0x0600D768; -D_0600D8D8 = 0x0600D8D8; - // ovl_En_Slime D_060004C0 = 0x060004C0; @@ -1294,28 +983,11 @@ D_06001AA0 = 0x06001AA0; D_06000304 = 0x06000304; -// ovl_En_Sth2 - -D_060031F8 = 0x060031F8; - -// ovl_En_Stone_heishi - -D_06000630 = 0x06000630; -D_06000768 = 0x06000768; -D_06003BFC = 0x06003BFC; -D_0600D640 = 0x0600D640; - // ovl_En_Stop_heishi D_06006C18 = 0x06006C18; D_0600D640 = 0x0600D640; -// ovl_En_S_Goro - -D_060091A8 = 0x060091A8; -D_06011AC8 = 0x06011AC8; -D_06012DE0 = 0x06012DE0; - // ovl_En_Takaraya D_06000968 = 0x06000968; @@ -1325,45 +997,17 @@ D_06009890 = 0x06009890; D_0600A280 = 0x0600A280; D_0600AD98 = 0x0600AD98; -// ovl_En_Tanron2 - -D_06003450 = 0x06003450; -D_060034C8 = 0x060034C8; -D_06004510 = 0x06004510; -D_06004550 = 0x06004550; - -// ovl_En_Tanron4 - -D_06000168 = 0x06000168; -D_06000E68 = 0x06000E68; - // ovl_En_Test3 D_0600CB60 = 0x0600CB60; D_0600EDD0 = 0x0600EDD0; D_0600F7EC = 0x0600F7EC; -// ovl_En_Tg - -D_0600B0A0 = 0x0600B0A0; -D_0600B0E0 = 0x0600B0E0; -D_0600B2B0 = 0x0600B2B0; - -// ovl_En_Trt - -D_0600FEF0 = 0x0600FEF0; -D_06000A44 = 0x06000A44; - // ovl_En_Tru D_0601A820 = 0x0601A820; D_0601A830 = 0x0601A830; -// ovl_En_Twig - -D_060014C8 = 0x060014C8; -D_06001C38 = 0x06001C38; - // ovl_En_Wdhand D_060000F4 = 0x060000F4; @@ -1384,22 +1028,6 @@ D_06000D94 = 0x06000D94; D_06007650 = 0x06007650; D_0600D658 = 0x0600D658; -// ovl_Mir_Ray3 - -D_06000168 = 0x06000168; -D_060003F8 = 0x060003F8; -D_060004B0 = 0x060004B0; - -// ovl_Obj_Danpeilift - -D_06000180 = 0x06000180; -D_06000BA0 = 0x06000BA0; - -// ovl_Obj_Lift - -D_06000D10 = 0x06000D10; -D_06000F00 = 0x06000F00; - // ovl_Obj_Mine D_06000030 = 0x06000030; @@ -1411,15 +1039,6 @@ D_06002188 = 0x06002188; D_06000B70 = 0x06000B70; D_06000D60 = 0x06000D60; -// ovl_Obj_Taru - -D_06000420 = 0x06000420; -D_06000FC8 = 0x06000FC8; -D_06001040 = 0x06001040; -D_06001100 = 0x06001100; -D_06001140 = 0x06001140; -D_06001CB0 = 0x06001CB0; - // ovl_player_actor D_06008860 = 0x06008860;