diff --git a/assets/xml/interface/parameter_static.xml b/assets/xml/interface/parameter_static.xml index e5e0808c0f..a2ab9e0c50 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/object_ah.xml b/assets/xml/objects/object_ah.xml index 1bf479e869..71b031a015 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 db348868ad..790ca3d8af 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 1f738d39be..259700dc8c 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 2db214bd3c..d0f5f73c54 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 3adcc27f70..a1785e5dd8 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 2d94b81b79..2fa21dadc2 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 57088a072a..a6bb94e37d 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 00c8d7585a..a076a1c073 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 34fb49f0dc..fb17e4e750 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 7a87bd61b7..75a8e7ca2e 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 8130658768..419f37b294 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 2cdfc5c3ab..a31c0e29f3 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 0b22866e76..c3a5d04247 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 8fcd930fac..ab9699e844 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 fe294cb33b..272968b8da 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 3e33fb739c..b4cc953935 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 f3f51a4883..bb8b838be1 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 3e1a7fd7eb..f02767256b 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 d8df44ddc6..7c2928b232 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 531a151c6a..e10052e3c6 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 c7d571b3b8..93c2ef8078 100644 --- a/assets/xml/objects/object_bigslime.xml +++ b/assets/xml/objects/object_bigslime.xml @@ -1,30 +1,30 @@  - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -90,12 +90,12 @@ - - - + + + - - + + @@ -109,15 +109,15 @@ - + - + - - + + diff --git a/assets/xml/objects/object_bji.xml b/assets/xml/objects/object_bji.xml index bef54b0e5c..697ee565c5 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 27529206f0..a4943f6ee6 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 20c661bb59..2eb08a1ef8 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 a0e5cdef35..f27d67bc1e 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 6dbcaf2b59..903d5bd401 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 95bb16edd8..9490dd8780 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 91234f7580..b1f6cb417f 100644 --- a/assets/xml/objects/object_boss07.xml +++ b/assets/xml/objects/object_boss07.xml @@ -1,216 +1,270 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/objects/object_botihasira.xml b/assets/xml/objects/object_botihasira.xml index 93c59f42fb..f949abcc74 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 4413ecd7a6..be4f34b87f 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 81cdb99918..40bce73f2e 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 0e7a349cb0..92e8148e9b 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 12835da1f6..79b008353e 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 df9359acc8..d2b00b0ddd 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 10fc235435..068ca790a3 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 fe614582b6..cc9dfbe745 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 3a04c474e9..ad23362578 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_os_anime.xml b/assets/xml/objects/object_os_anime.xml index 7957dd58d5..379beff0ac 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_zod.xml b/assets/xml/objects/object_zod.xml index 2616dbcdfd..45fb179cc6 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 80393fc2d4..51b29870da 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 23140ad717..cd458db36c 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/audiothread_cmd.h b/include/audiothread_cmd.h new file mode 100644 index 0000000000..c9e6703dc2 --- /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 d0cdb62f58..b49ab8d78e 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 346b6c331c..1c3cbb6fa7 100644 --- a/include/functions.h +++ b/include/functions.h @@ -978,7 +978,7 @@ s32 Camera_ChangeMode(Camera* camera, s16 mode); 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); @@ -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); -s32 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); @@ -1705,15 +1708,13 @@ Gfx* Gfx_DrawTexRectI8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textu 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 func_8010E028(void); 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); @@ -1728,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, u16 arg1); void func_801155B4(PlayState* play, s16 arg1); void func_80115764(PlayState* play, UNK_TYPE arg1); -void func_80115844(PlayState* play, s16 param_2); +void func_80115844(PlayState* play, s16 doAction); s32 Health_ChangeBy(PlayState* play, s16 healthChange); void Health_GiveHearts(s16 hearts); void Rupees_ChangeBy(s16 rupeeChange); @@ -1741,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); @@ -1830,7 +1812,7 @@ s32 Player_ActionToExplosive(Player* player, PlayerItemAction itemAction); s32 Player_GetExplosiveHeld(Player* player); 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); @@ -1995,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); @@ -2075,8 +2057,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); @@ -2084,7 +2066,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); @@ -2103,7 +2085,7 @@ 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); @@ -2155,8 +2137,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); @@ -2199,7 +2181,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); @@ -2210,21 +2192,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); @@ -2233,8 +2216,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); @@ -2243,39 +2225,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(s32 arg0); -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); @@ -2305,8 +2274,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); @@ -2315,11 +2285,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); @@ -2485,24 +2455,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); @@ -2752,39 +2720,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); @@ -2826,7 +2773,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); @@ -2947,14 +2894,14 @@ void func_801A3CD8(s8 param_1); void func_801A3CF4(s8 arg0); void func_801A3D98(s8 audioSetting); void func_801A3E38(u8 arg0); -// void func_801A3EC0(void); +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_801A41C8(s32 arg0); void func_801A41F8(UNK_TYPE arg0); // void func_801A429C(void); // void func_801A42C8(void); @@ -3030,6 +2977,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 f5638199eb..77d3eadad5 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)) @@ -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) \ diff --git a/include/regs.h b/include/regs.h index 9fa5f736a5..9ea58aed14 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 a96dc8173b..af32d062e1 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]; @@ -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[]; @@ -951,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; @@ -1050,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]; @@ -2434,7 +2288,6 @@ extern u8 gSoundFontTable[]; extern u8 gSequenceFontTable[]; extern u8 gSequenceTable[]; extern u8 gSampleBankTable[]; -extern u64 aspMainDataStart[]; // bss // extern UNK_TYPE1 D_801ED890; @@ -2472,26 +2325,17 @@ extern TriNorm D_801EDBB0; // extern UNK_TYPE1 D_801EDBD8; // extern UNK_TYPE1 D_801EDBDC; // extern UNK_TYPE1 D_801EDBE0; -// 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; @@ -2635,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; @@ -2720,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; @@ -2932,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]; @@ -2944,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 78ba63b3c8..75b8a58d99 100644 --- a/include/z64.h +++ b/include/z64.h @@ -36,6 +36,7 @@ #include "z64cutscene.h" #include "z64dma.h" #include "z64effect.h" +#include "z64interface.h" #include "z64item.h" #include "z64light.h" #include "z64map.h" @@ -245,9 +246,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; @@ -466,106 +467,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; @@ -584,10 +485,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; @@ -636,8 +535,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 @@ -721,64 +620,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*); @@ -810,10 +651,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); @@ -869,15 +706,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. @@ -918,11 +754,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 @@ -961,7 +797,7 @@ typedef struct { /* 0x5E */ u16 age; } EffFootmark; // size = 0x60 -struct FireObj { +typedef struct FireObj { /* 0x00 */ Vec3f position; /* 0x0C */ f32 size; /* 0x10 */ f32 sizeInv; @@ -978,7 +814,7 @@ struct FireObj { /* 0x2A */ s16 ignitionDelay; /* 0x2C */ ColliderCylinder collision; /* 0x78 */ FireObjLight light; -}; // size = 0x8B +} FireObj; // size = 0x8B typedef struct { /* 0x0 */ u8 seqId; @@ -1006,7 +842,7 @@ typedef struct { /* 0x0 */ u16 state; } GameOverContext; // size = 0x2 -struct PlayState { +typedef struct PlayState { /* 0x00000 */ GameState state; /* 0x000A4 */ s16 sceneId; /* 0x000A6 */ u8 sceneConfig; @@ -1053,12 +889,12 @@ struct PlayState { /* 0x18798 */ s32 (*setPlayerTalkAnim)(struct PlayState* play, PlayerAnimationHeader* 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; @@ -1073,7 +909,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? @@ -1087,12 +923,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 3af22c4e9d..370b49e753 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -289,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, @@ -310,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) diff --git a/include/z64audio.h b/include/z64audio.h index 17f0e84f9d..bfb66a23a2 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/z64interface.h b/include/z64interface.h new file mode 100644 index 0000000000..385f808357 --- /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 8110a3dd46..d1d36ebbad 100644 --- a/include/z64item.h +++ b/include/z64item.h @@ -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, diff --git a/include/z64light.h b/include/z64light.h index d9404ab4ca..8eaebca61b 100644 --- a/include/z64light.h +++ b/include/z64light.h @@ -13,7 +13,7 @@ typedef struct { /* 0x0C */ u8 diffuseColor[3]; /* 0x0F */ u8 fogColor[3]; /* 0x12 */ s16 fogNear; - /* 0x14 */ s16 fogFar; + /* 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 323042b15b..70a115966b 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/z64player.h b/include/z64player.h index cba5fca902..fe4bfac58a 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -72,12 +72,12 @@ typedef enum PlayerMask { } 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 PlayerItemAction { /* -1 */ PLAYER_IA_MINUS1 = -1, @@ -745,7 +745,7 @@ typedef enum PlayerCsMode { #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) diff --git a/include/z64quake.h b/include/z64quake.h index a1272941d9..f0bd401fc3 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 56468af67b..d3f5380290 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; @@ -312,7 +335,7 @@ typedef struct SaveContext { /* 0x3DBA */ u8 unk_3DBA; // "player_wipe_item" /* 0x3DBB */ u8 unk_3DBB; // "next_walk" /* 0x3DBC */ s16 dogParams; // "dog_flag" - /* 0x3DBE */ u8 textTriggerFlags; // "guide_status" + /* 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,11 @@ 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] @@ -596,7 +624,7 @@ typedef enum SunsSongState { #define WEEKEVENTREG_14_02 PACK_WEEKEVENTREG_FLAG(14, 0x02) #define WEEKEVENTREG_14_04 PACK_WEEKEVENTREG_FLAG(14, 0x04) -#define WEEKEVENTREG_14_08 PACK_WEEKEVENTREG_FLAG(14, 0x08) +#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) @@ -1511,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 088565c0c9..41198af718 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/z64snap.h b/include/z64snap.h index fb3f861861..4f9dca9d41 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 45178ba8ec..98720e9a7c 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/spec b/spec index d923922359..bef1b4654f 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" @@ -4210,8 +4208,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 diff --git a/src/boot_O2_g3/boot_main.c b/src/boot_O2_g3/boot_main.c index 04bb9a33ae..87bee5da4f 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 942435fa7b..da93f13fdb 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 63260e8853..aa7ecdfe12 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/audio/audio_effects.c b/src/code/audio/audio_effects.c index 3f50f003c1..0dcdcda88f 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 1c05e94412..d767f7de36 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 d101b53f54..28c27d2cca 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 07315d56e0..9f3c6f8ed8 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 099f646fe5..a8c54420a1 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 5c72c44528..057668f373 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 0000000000..2b06281cce --- /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 e69f678ff2..0000000000 --- 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 5fd58a487b..801e2b0768 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 0e509670b8..76597f5f39 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 ce21bda37e..eca7ddd835 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 0000000000..f3d487fabc --- /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 8edc979d46..1c29029b03 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 5ad1cdbe0e..780a02c62f 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 0000000000..09cbda90e2 --- /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 0000000000..3f198ce8fd --- /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 2533c44f5e..b2a17d5477 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/title_setup.c b/src/code/title_setup.c index 8ba6f9b563..4e9293ce79 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 0483d097e9..dcc5c0219a 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -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; @@ -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)) && @@ -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; @@ -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); } diff --git a/src/code/z_camera.c b/src/code/z_camera.c index 3a5cde3956..f54fc93daf 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 5e92d49587..3d2621c9cb 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_demo.c b/src/code/z_demo.c index 6473540280..7d0c1ade37 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,19 +594,19 @@ 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 (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; @@ -614,12 +614,12 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB 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; @@ -628,7 +628,7 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB 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: @@ -636,7 +636,7 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB 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); } } } diff --git a/src/code/z_draw.c b/src/code/z_draw.c index 4167b4cea4..a2686be8e3 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_ss_dead.c b/src/code/z_eff_ss_dead.c index b7c6af97e3..6c416e3c85 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_en_a_keep.c b/src/code/z_en_a_keep.c index 267da4e40f..a9bd49f6ff 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_item00.c b/src/code/z_en_item00.c index 944e650a00..f450db0149 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 3d33399e58..c145087a24 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_game_over.c b/src/code/z_game_over.c index 5609a47273..1e87a6a17a 100644 --- a/src/code/z_game_over.c +++ b/src/code/z_game_over.c @@ -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 5ab466ddc3..59fde2f2d6 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 7120964468..dac0d83001 100644 --- a/src/code/z_kaleido_setup.c +++ b/src/code/z_kaleido_setup.c @@ -98,7 +98,7 @@ void KaleidoSetup_Update(PlayState* play) { (gSaveContext.magicState != MAGIC_STATE_FILL)) { 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 ad66fe4a18..d6d38f9d6f 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_lifemeter.c b/src/code/z_lifemeter.c index d4927ae975..b123baab69 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 e3e732eb39..6a31c7e94e 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 44fff9f9f3..97db5e72d4 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; @@ -531,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; @@ -551,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 fb8dbfcbf0..759c3d6119 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 79c50e9211..f3bfb530f3 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), @@ -506,26 +558,324 @@ Gfx* Gfx_DrawTexQuad4b(Gfx* gfx, TexturePtr texture, s32 fmt, s16 textureWidth, return gfx; } -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, +// 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; @@ -634,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) { @@ -1403,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") @@ -1467,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; @@ -2061,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; } } @@ -2162,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") @@ -2309,8 +2718,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) { play->actorCtx.lensActive = false; } - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_08)) { - // Drank Chateau Romani + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { magicToConsume = 0; } gSaveContext.magicToConsume = magicToConsume; @@ -2329,8 +2737,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) { play->actorCtx.lensActive = false; } - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_08)) { - // Drank Chateau Romani + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { magicToConsume = 0; } gSaveContext.magicToConsume = magicToConsume; @@ -2406,8 +2813,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) { play->actorCtx.lensActive = false; } - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_08)) { - // Drank Chateau Romani + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { magicToConsume = 0; } gSaveContext.save.playerData.magic -= magicToConsume; @@ -2495,8 +2901,7 @@ void Magic_Update(PlayState* play) { InterfaceContext* interfaceCtx = &play->interfaceCtx; s16 magicCapacityTarget; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_08)) { - // Drank Chateau Romani + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { Magic_FlashMeterBorder(); } @@ -2546,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 (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_08)) { + 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) { @@ -2559,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 (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_08)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { Magic_FlashMeterBorder(); } break; @@ -2577,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)) || @@ -2593,19 +2998,19 @@ void Magic_Update(PlayState* play) { interfaceCtx->magicConsumptionTimer--; if (interfaceCtx->magicConsumptionTimer == 0) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_08)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { gSaveContext.save.playerData.magic--; } interfaceCtx->magicConsumptionTimer = 80; } } - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_08)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { Magic_FlashMeterBorder(); } break; case MAGIC_STATE_CONSUME_GORON_ZORA_SETUP: - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_08)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { gSaveContext.save.playerData.magic -= 2; } if (gSaveContext.save.playerData.magic <= 0) { @@ -2620,7 +3025,7 @@ void Magic_Update(PlayState* play) { if (!Play_InCsMode(play)) { interfaceCtx->magicConsumptionTimer--; if (interfaceCtx->magicConsumptionTimer == 0) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_08)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { gSaveContext.save.playerData.magic--; } if (gSaveContext.save.playerData.magic <= 0) { @@ -2630,7 +3035,7 @@ void Magic_Update(PlayState* play) { } } } - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_08)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { Magic_FlashMeterBorder(); } break; @@ -2642,7 +3047,7 @@ void Magic_Update(PlayState* play) { if (!Play_InCsMode(play)) { interfaceCtx->magicConsumptionTimer--; if (interfaceCtx->magicConsumptionTimer == 0) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_08)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { gSaveContext.save.playerData.magic--; } if (gSaveContext.save.playerData.magic <= 0) { @@ -2652,7 +3057,7 @@ void Magic_Update(PlayState* play) { } } } - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_08)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { Magic_FlashMeterBorder(); } break; @@ -2708,8 +3113,8 @@ void Magic_DrawMeter(PlayState* play) { // Fill the rest of the meter with the normal magic color gDPPipeSync(OVERLAY_DISP++); - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_08)) { - // 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) @@ -2722,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 (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_08)) { - // 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) @@ -2743,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[] = { @@ -2755,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 }; @@ -2766,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 @@ -2777,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, @@ -2815,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, @@ -2823,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) { @@ -2881,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) { @@ -2935,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; @@ -2985,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; @@ -3005,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; @@ -3018,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 { @@ -3108,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]; @@ -3150,7 +4603,7 @@ 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); @@ -3261,7 +4714,8 @@ 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); } @@ -3276,7 +4730,8 @@ 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); @@ -3313,7 +4768,7 @@ 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); @@ -3447,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 71fbc897f7..b33b449d28 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 e429051c88..829fe71f21 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 ac6ac560cc..51b25268b9 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" @@ -142,7 +141,7 @@ 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); @@ -543,15 +542,15 @@ ItemId func_8012364C(PlayState* play, Player* player, s32 arg2) { 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; } @@ -725,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] = { @@ -1451,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); diff --git a/src/code/z_quake.c b/src/code/z_quake.c index b57012ce16..8a6b9d73af 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; @@ -745,7 +745,7 @@ void Distortion_Update(void) { } 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 39f09f1d49..7e15a9bde1 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) { @@ -1299,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 1a08cad0ef..48c3601074 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -149,7 +149,7 @@ void Scene_HeaderCmdSpawnList(PlayState* play, SceneCmd* cmd) { play->linkActorEntry = (ActorEntry*)Lib_SegmentedToVirtual(cmd->spawnList.segment) + play->setupEntranceList[play->curSpawn].spawn; if ((PLAYER_GET_INITMODE(play->linkActorEntry) == PLAYER_INITMODE_TELESCOPE) || - ((gSaveContext.respawnFlag == 0x02) && + ((gSaveContext.respawnFlag == 2) && (gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams == PLAYER_PARAMS(0xFF, PLAYER_INITMODE_TELESCOPE)))) { // Skull Kid Object Object_Spawn(&play->objectCtx, OBJECT_STK); @@ -231,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]); } } @@ -378,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))) { @@ -602,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 67f503e589..c899b4d83d 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, diff --git a/src/code/z_scene_table.c b/src/code/z_scene_table.c index ed45499663..f80ad551da 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_snap.c b/src/code/z_snap.c index 5d37e3eac7..d64cfbe6e8 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 b3d335afb3..94d0e69c31 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -268,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 }; @@ -342,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; @@ -474,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)) { @@ -593,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; diff --git a/src/code/z_vimode.c b/src/code/z_vimode.c index 76479a0287..b7d2dea64a 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 907004a7a5..f42e66a252 100644 --- a/src/code/z_vr_box.c +++ b/src/code/z_vr_box.c @@ -220,7 +220,7 @@ void Skybox_Setup(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyboxId) // Inverted Stone Tower Temple and Inverted Stone Tower if ((play->sceneId == SCENE_F41) || (play->sceneId == SCENE_INISIE_R)) { - skyboxCtx->rotZ = 3.15000009537f; + skyboxCtx->rotZ = 3.15f; } break; @@ -288,7 +288,7 @@ void func_80143324(PlayState* play, SkyboxContext* skyboxCtx, s16 skyboxId) { } void Skybox_Init(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyboxId) { - skyboxCtx->skyboxShouldDraw = 0; + skyboxCtx->skyboxShouldDraw = false; skyboxCtx->rotX = skyboxCtx->rotY = skyboxCtx->rotZ = 0.0f; Skybox_Setup(gameState, skyboxCtx, skyboxId); diff --git a/src/code/z_vr_box_draw.c b/src/code/z_vr_box_draw.c index 88da288f03..e0884e2707 100644 --- a/src/code/z_vr_box_draw.c +++ b/src/code/z_vr_box_draw.c @@ -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 cd4420c4af..3ed33f45d2 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 4a8f598228..0000000000 --- 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_Arrow_Fire/overlay.cfg b/src/overlays/actors/ovl_Arrow_Fire/overlay.cfg deleted file mode 100644 index a2d1a6ad65..0000000000 --- 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 b95f23d3c6..0000000000 --- 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 d5bda9b4cf..0000000000 --- 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 735382eadc..0000000000 --- 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 48da75cb3e..0000000000 --- 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 77c1ecf0d2..0000000000 --- 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_Crace_Movebg/overlay.cfg b/src/overlays/actors/ovl_Bg_Crace_Movebg/overlay.cfg deleted file mode 100644 index ab8eb44057..0000000000 --- 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 19cafc2bdc..0320912931 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 @@ -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 244f98e32c..0000000000 --- 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 c41e36b27c..0000000000 --- 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 beb2b30109..0000000000 --- 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 f0f5a4f1ab..0000000000 --- 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 8193509f4d..0000000000 --- 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 7188cf2ea1..0000000000 --- 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 d6819aa004..45b42942b0 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" 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 08aaa6100f..0000000000 --- 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 4a1aa8be1c..0000000000 --- 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 59c99de934..0000000000 --- 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 b5030fcaa7..0000000000 --- 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 f771926dbf..0000000000 --- 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 b5e0454594..0000000000 --- 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 83d9bffed0..0000000000 --- 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 8405309d0d..0000000000 --- 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 30736ca5db..0000000000 --- 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 295d23d049..0000000000 --- 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 cd6286ed11..0000000000 --- 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 dd9b391ee5..0000000000 --- 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_Curtain/overlay.cfg b/src/overlays/actors/ovl_Bg_Haka_Curtain/overlay.cfg deleted file mode 100644 index eba48c8727..0000000000 --- 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 3e83b3fb68..0000000000 --- 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 9b4288e951..0000000000 --- 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 cc7d95cdce..0000000000 --- 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 fc47ccb4fc..0000000000 --- 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 3887196c77..0000000000 --- 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 f8da71e62d..0000000000 --- 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 88c4deec09..0000000000 --- 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 af448437b7..0000000000 --- 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 4888c9532f..0000000000 --- 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 a97ed6b28e..04f7f514b7 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 @@ -235,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); @@ -248,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 13c58ba86f..0000000000 --- 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 d735febc00..0000000000 --- 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_Ray/overlay.cfg b/src/overlays/actors/ovl_Bg_Ikana_Ray/overlay.cfg deleted file mode 100644 index b091b0a519..0000000000 --- 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 c51c2a5980..0000000000 --- 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 27cecd05af..4561d4049a 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 @@ -651,7 +651,7 @@ void func_80B814B8(BgIkanaRotaryroom* this, PlayState* play) { 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->voiceSfxIdOffset); - play->unk_18845 = 1; + play->haltAllActors = true; play_sound(NA_SE_OC_ABYSS); this->actionFunc = NULL; } 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 e86cc272b1..0000000000 --- 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 e7df7599d6..0000000000 --- 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 43d45dac70..0000000000 --- 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 0eca2bc55d..0000000000 --- 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_Obj/overlay.cfg b/src/overlays/actors/ovl_Bg_Iknv_Obj/overlay.cfg deleted file mode 100644 index 971c9f9479..0000000000 --- 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_Ingate/overlay.cfg b/src/overlays/actors/ovl_Bg_Ingate/overlay.cfg deleted file mode 100644 index 68501515e6..0000000000 --- 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 0f267dccbb..4bfa17c1c3 100644 --- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c +++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c @@ -215,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; @@ -251,11 +251,11 @@ void func_809542A0(BgIngate* this, PlayState* play) { } 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; CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40); - func_800FE498(); + Environment_StartTime(); } void func_80954340(BgIngate* this, PlayState* play) { @@ -264,7 +264,7 @@ void func_80954340(BgIngate* this, PlayState* play) { func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6); this->timePath = &play->setupPathList[this->timePath->unk1]; func_80953F14(this, play); - func_800FE484(); + Environment_StopTime(); } } } @@ -283,7 +283,7 @@ void func_809543D4(BgIngate* this, PlayState* play) { 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) { @@ -304,7 +304,7 @@ void func_809543D4(BgIngate* this, PlayState* play) { 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); @@ -342,7 +342,7 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) { if (play->curSpawn == 6) { func_80953F14(this, play); if (CHECK_EVENTINF(EVENTINF_35)) { - func_80112AFC(play); + Interface_InitMinigame(play); } else { SET_EVENTINF(EVENTINF_41); } 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 8777870430..0000000000 --- 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 78f2c76688..0000000000 --- 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 74d068ea4e..0000000000 --- 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 b61d1617fd..0000000000 --- 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 d3984fea95..0000000000 --- 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 ddd62c8234..0000000000 --- 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 84a84fd495..0000000000 --- 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 6f88bdf1b5..0000000000 --- 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 ec560aa15f..0000000000 --- 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 520be10f09..0000000000 --- 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 95702c51ba..0000000000 --- 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 07ff7cee87..0000000000 --- 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 8cfa06dece..0000000000 --- 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 63ed804b17..0000000000 --- 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_Open_Shutter/overlay.cfg b/src/overlays/actors/ovl_Bg_Open_Shutter/overlay.cfg deleted file mode 100644 index 8bf55bec25..0000000000 --- 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_Spot/overlay.cfg b/src/overlays/actors/ovl_Bg_Open_Spot/overlay.cfg deleted file mode 100644 index 757c3fbfdc..0000000000 --- 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 b2a92fdbff..0000000000 --- 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_Spdweb/overlay.cfg b/src/overlays/actors/ovl_Bg_Spdweb/overlay.cfg deleted file mode 100644 index 9411f40928..0000000000 --- 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_Spout_Fire/overlay.cfg b/src/overlays/actors/ovl_Bg_Spout_Fire/overlay.cfg deleted file mode 100644 index bad8eedab0..0000000000 --- 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 7b142082d3..0000000000 --- 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_Umajump/overlay.cfg b/src/overlays/actors/ovl_Bg_Umajump/overlay.cfg deleted file mode 100644 index 3678ab523c..0000000000 --- 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_Boss_01/overlay.cfg b/src/overlays/actors/ovl_Boss_01/overlay.cfg deleted file mode 100644 index d11a70ed1b..0000000000 --- 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 6bf46fe21e..0000000000 --- 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 8d65c8a76f..e5505e92a3 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" @@ -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)) { @@ -1390,7 +1391,7 @@ 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; @@ -1425,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) { @@ -1635,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; @@ -1755,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; } 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 285cc55879..0000000000 --- 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 4c3b34fbb4..f51c944582 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -48,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" @@ -780,7 +779,7 @@ void Boss03_CatchPlayer(Boss03* this, PlayState* play) { player->unk_AE8 = 101; player->actor.parent = NULL; player->csMode = PLAYER_CSMODE_0; - func_80165690(); + Play_DisableMotionBlur(); } func_809E344C(this, play); @@ -852,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); @@ -908,7 +907,7 @@ void Boss03_ChewPlayer(Boss03* this, PlayState* play) { player->unk_AE8 = 101; player->actor.parent = NULL; player->csMode = PLAYER_CSMODE_0; - func_80165690(); + Play_DisableMotionBlur(); func_800B8D50(play, NULL, 10.0f, this->actor.shape.rot.y, 0.0f, 0x20); } @@ -1187,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: @@ -1280,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); @@ -1627,7 +1626,7 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) { Cutscene_End(play, &play->csCtx); 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); } @@ -1751,7 +1750,7 @@ void Boss03_SetupStunned(Boss03* this, PlayState* play) { player->unk_AE8 = 101; player->actor.parent = NULL; player->csMode = PLAYER_CSMODE_0; - func_80165690(); + Play_DisableMotionBlur(); } this->unk_240 = 0; @@ -1903,7 +1902,7 @@ void Boss03_UpdateCollision(Boss03* this, PlayState* play) { player->unk_AE8 = 101; player->actor.parent = NULL; player->csMode = PLAYER_CSMODE_0; - func_80165690(); + Play_DisableMotionBlur(); } continue; @@ -2270,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; 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 16d818a430..0000000000 --- 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 0b59ff9ed7..00892063c3 100644 --- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c +++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c @@ -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; @@ -391,7 +391,7 @@ void func_809EC568(Boss04* this, PlayState* play) { this->subCamId = SUB_CAM_ID_DONE; Cutscene_End(play, &play->csCtx); func_800B7298(play, &this->actor, PLAYER_CSMODE_6); - func_80165690(); + 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 db19abb801..0000000000 --- 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 3f5b0e7d58..0000000000 --- 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 5dce58c4e4..83a920b509 100644 --- a/src/overlays/actors/ovl_Boss_06/z_boss_06.c +++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.c @@ -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,7 +233,7 @@ 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; 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 79c564cccb..0000000000 --- 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_Hakugin/overlay.cfg b/src/overlays/actors/ovl_Boss_Hakugin/overlay.cfg deleted file mode 100644 index 059dde3810..0000000000 --- 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 8f2105acfc..0000000000 --- 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_Getitem/overlay.cfg b/src/overlays/actors/ovl_Demo_Getitem/overlay.cfg deleted file mode 100644 index df09fe2ea2..0000000000 --- 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 b9c10f3119..0000000000 --- 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_Moonend/overlay.cfg b/src/overlays/actors/ovl_Demo_Moonend/overlay.cfg deleted file mode 100644 index 3d2793e42b..0000000000 --- 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 0cf96d92aa..0000000000 --- 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 8fde4e6f62..0000000000 --- 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_Tre_Lgt/overlay.cfg b/src/overlays/actors/ovl_Demo_Tre_Lgt/overlay.cfg deleted file mode 100644 index a063264ea8..0000000000 --- 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 22f1cf7a3d..0000000000 --- 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 047d17b902..1a1f4ae221 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 92999ffdd3..0000000000 --- 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 03f82edfa5..0000000000 --- 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 fa51bac6a6..0000000000 --- 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 e2dc0daa71..b9c4cb33c0 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 7b38356538..01f10d4c92 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 0d49d3bbc7..0000000000 --- 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_Char01/overlay.cfg b/src/overlays/actors/ovl_Dm_Char01/overlay.cfg deleted file mode 100644 index babdfc2f2a..0000000000 --- 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_Char02/overlay.cfg b/src/overlays/actors/ovl_Dm_Char02/overlay.cfg deleted file mode 100644 index b5c165061a..0000000000 --- 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 dd50d58fa1..0000000000 --- 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 a8f5bd501e..0000000000 --- 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_Char05/overlay.cfg b/src/overlays/actors/ovl_Dm_Char05/overlay.cfg deleted file mode 100644 index cb8b10bcc2..0000000000 --- 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 8c0666c9b1..0000000000 --- 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_Char07/overlay.cfg b/src/overlays/actors/ovl_Dm_Char07/overlay.cfg deleted file mode 100644 index 5b5ad5acd5..0000000000 --- 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 5f69d0c826..0000000000 --- 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_Char09/overlay.cfg b/src/overlays/actors/ovl_Dm_Char09/overlay.cfg deleted file mode 100644 index 99eda9b12c..0000000000 --- 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 e12011867c..0000000000 --- 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 824085b3ee..0000000000 --- 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 7af01c8ccf..0000000000 --- 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 17e40ea810..0000000000 --- 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 a3287c4077..0000000000 --- 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_Sa/overlay.cfg b/src/overlays/actors/ovl_Dm_Sa/overlay.cfg deleted file mode 100644 index 3916c7965b..0000000000 --- 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_Statue/overlay.cfg b/src/overlays/actors/ovl_Dm_Statue/overlay.cfg deleted file mode 100644 index d01c4284e0..0000000000 --- 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 6282311226..0000000000 --- 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 f82279c09b..8233bb0cb4 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; @@ -1154,7 +1154,7 @@ void DmStk_WaitForTelescope(DmStk* this, PlayState* play) { 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; } } @@ -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; @@ -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 e1895969ed..0000000000 --- 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 ce1cc98f38..13a7e264f7 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; 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 cf5632fbbf..0000000000 --- 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 5411031276..0000000000 --- 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 cb3d1a5fd9..0000000000 --- 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_Shutter/overlay.cfg b/src/overlays/actors/ovl_Door_Shutter/overlay.cfg deleted file mode 100644 index f3b63c1cc9..0000000000 --- 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_Spiral/overlay.cfg b/src/overlays/actors/ovl_Door_Spiral/overlay.cfg deleted file mode 100644 index f33e851b57..0000000000 --- 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_Warp1/overlay.cfg b/src/overlays/actors/ovl_Door_Warp1/overlay.cfg deleted file mode 100644 index 7646036548..0000000000 --- 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 bf31f039cb..7ec2245d7d 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; } } @@ -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); @@ -705,8 +705,8 @@ 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: @@ -714,14 +714,14 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) { 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; @@ -729,8 +729,8 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) { 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: @@ -738,15 +738,15 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) { 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 { 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; @@ -755,14 +755,14 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) { 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; 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 6ab11cfbd9..0000000000 --- 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_Dust/overlay.cfg b/src/overlays/actors/ovl_Eff_Dust/overlay.cfg deleted file mode 100644 index 2833a83d08..0000000000 --- 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 7decfb871b..0000000000 --- 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 8e1cc8e1d8..0000000000 --- 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 725fd80b3e..0000000000 --- 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 57858dabd2..0000000000 --- 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 91ab171571..0000000000 --- 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 15a73db5de..0000000000 --- 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 e39f7e2901..0000000000 --- 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 2bfe9ff86c..0000000000 --- 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 d528de3424..0000000000 --- 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 9ded97384e..0000000000 --- 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_En_Ah/overlay.cfg b/src/overlays/actors/ovl_En_Ah/overlay.cfg deleted file mode 100644 index 694256c538..0000000000 --- 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 2f4e4ed039..5ea8510239 100644 --- a/src/overlays/actors/ovl_En_Ah/z_en_ah.c +++ b/src/overlays/actors/ovl_En_Ah/z_en_ah.c @@ -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; 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 a3e371656a..0000000000 --- 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_Al/overlay.cfg b/src/overlays/actors/ovl_En_Al/overlay.cfg deleted file mode 100644 index ccd80736ff..0000000000 --- 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 b5ea2f64f7..da1cc7d7e1 100644 --- a/src/overlays/actors/ovl_En_Al/z_en_al.c +++ b/src/overlays/actors/ovl_En_Al/z_en_al.c @@ -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 8f03945db6..0000000000 --- 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 14a6d7d5f2..0000000000 --- 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 f62d705f09..0000000000 --- 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 f0622d0c02..0000000000 --- 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_Aob_01/overlay.cfg b/src/overlays/actors/ovl_En_Aob_01/overlay.cfg deleted file mode 100644 index 592d6a8346..0000000000 --- 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 8f1915ae5e..84feccbd82 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 @@ -102,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) { @@ -677,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; } } 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 5ae277d228..0000000000 --- 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_Attack_Niw/overlay.cfg b/src/overlays/actors/ovl_En_Attack_Niw/overlay.cfg deleted file mode 100644 index 2b4aa71bea..0000000000 --- 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 e929d9380f..0000000000 --- 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 0a5056b1fb..e87bf9d62f 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) { @@ -1471,7 +1471,7 @@ void func_80A97C4C(EnAz* 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; func_80A979DC(this, play); } else { Actor_MoveWithGravity(&this->actor); @@ -1482,9 +1482,9 @@ 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 (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_01)) { @@ -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); } @@ -1552,8 +1552,8 @@ void func_80A97F9C(EnAz* this, PlayState* play) { 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 { 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 8d3dddae0f..0000000000 --- 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 0c5d7b799b..6040076f4d 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -654,7 +654,7 @@ void EnBaba_GaveBlastMask(EnBaba* this, PlayState* play) { 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) && 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 19e80c5e0f..0000000000 --- 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 e1ba96f41a..0000000000 --- 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_Bal/overlay.cfg b/src/overlays/actors/ovl_En_Bal/overlay.cfg deleted file mode 100644 index 53fdf3ee56..0000000000 --- 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 1d11f79a3b..0000000000 --- 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 048245caf6..0000000000 --- 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 e26bcdd36f..0000000000 --- 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_Bbfall/overlay.cfg b/src/overlays/actors/ovl_En_Bbfall/overlay.cfg deleted file mode 100644 index 711e74e296..0000000000 --- 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 ef6192fc4a..0000000000 --- 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 2fea0e1e5b..0000000000 --- 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 40f0939870..0000000000 --- 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 b995d77eaf..1f037a8a8f 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -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); } 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 df083a1703..0000000000 --- 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 1519b5573d..0000000000 --- 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_Bigslime/overlay.cfg b/src/overlays/actors/ovl_En_Bigslime/overlay.cfg deleted file mode 100644 index c7441440e7..0000000000 --- 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_Bji_01/overlay.cfg b/src/overlays/actors/ovl_En_Bji_01/overlay.cfg deleted file mode 100644 index 6455065bdc..0000000000 --- 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 25b59b59be..ed7b8c194e 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 @@ -114,7 +114,7 @@ void func_809CCEE8(EnBji01* this, PlayState* play) { } void func_809CD028(EnBji01* this, PlayState* play) { - f32 timeBeforeMoonCrash; + f32 timeUntilMoonCrash; switch (this->actor.params) { case SHIKASHI_TYPE_DEFAULT: @@ -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 ab6f05a540..0000000000 --- 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_Boj_01/overlay.cfg b/src/overlays/actors/ovl_En_Boj_01/overlay.cfg deleted file mode 100644 index 01b4cce6ed..0000000000 --- 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 7deb95ef2a..0000000000 --- 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 90f393836d..0000000000 --- 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 fd93a10799..0000000000 --- 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 038e0e91ca..0000000000 --- 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 c752520396..0000000000 --- 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_Bowl_Man/overlay.cfg b/src/overlays/actors/ovl_En_Bom_Bowl_Man/overlay.cfg deleted file mode 100644 index 2d762ca9b0..0000000000 --- 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 9b1f45a204..da6e8d6d05 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 @@ -336,7 +336,7 @@ 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.nextTransitionType = TRANS_TYPE_FADE_WHITE; CLEAR_WEEKEVENTREG(WEEKEVENTREG_75_40); if (player->transformation == PLAYER_FORM_HUMAN) { SET_WEEKEVENTREG(WEEKEVENTREG_84_80); @@ -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 d1b0f7dc2d..0000000000 --- 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 a715cfbf52..0000000000 --- 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_Bombers/overlay.cfg b/src/overlays/actors/ovl_En_Bombers/overlay.cfg deleted file mode 100644 index 95cb0c1f86..0000000000 --- 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_Bombers2/overlay.cfg b/src/overlays/actors/ovl_En_Bombers2/overlay.cfg deleted file mode 100644 index 6cbb956fe2..0000000000 --- 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_Bombf/overlay.cfg b/src/overlays/actors/ovl_En_Bombf/overlay.cfg deleted file mode 100644 index 831b98c2ff..0000000000 --- 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_Bomjima/overlay.cfg b/src/overlays/actors/ovl_En_Bomjima/overlay.cfg deleted file mode 100644 index 61e77897f1..0000000000 --- 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 126c293c37..b17079b6eb 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -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 3b2ee6496a..0000000000 --- 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 c0033b1036..7e07ed9d6d 100644 --- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c +++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c @@ -799,7 +799,7 @@ 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; } SET_WEEKEVENTREG(WEEKEVENTREG_75_40); SET_WEEKEVENTREG(WEEKEVENTREG_83_04); 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 d0ff420fdc..0000000000 --- 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 bdbd8b7544..0000000000 --- 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_Bsb/overlay.cfg b/src/overlays/actors/ovl_En_Bsb/overlay.cfg deleted file mode 100644 index 8542407fec..0000000000 --- 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 970a005fb8..0000000000 --- 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 9c86d2e3fc..0000000000 --- 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 04a22c1083..0000000000 --- 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_Cha/overlay.cfg b/src/overlays/actors/ovl_En_Cha/overlay.cfg deleted file mode 100644 index a409e7d556..0000000000 --- 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_Clear_Tag/overlay.cfg b/src/overlays/actors/ovl_En_Clear_Tag/overlay.cfg deleted file mode 100644 index edfefada00..0000000000 --- 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_Cne_01/overlay.cfg b/src/overlays/actors/ovl_En_Cne_01/overlay.cfg deleted file mode 100644 index 7678c1374b..0000000000 --- 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_Col_Man/overlay.cfg b/src/overlays/actors/ovl_En_Col_Man/overlay.cfg deleted file mode 100644 index 4f2df34a66..0000000000 --- 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 63c83f0ea9..b3038dd608 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 @@ -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 d7215aa84e..0000000000 --- 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_Crow/overlay.cfg b/src/overlays/actors/ovl_En_Crow/overlay.cfg deleted file mode 100644 index deb12c01d7..0000000000 --- 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 6a1c6a9296..0000000000 --- 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_Daiku/overlay.cfg b/src/overlays/actors/ovl_En_Daiku/overlay.cfg deleted file mode 100644 index cde668b4bf..0000000000 --- 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_Daiku2/overlay.cfg b/src/overlays/actors/ovl_En_Daiku2/overlay.cfg deleted file mode 100644 index c5eafa2b80..0000000000 --- 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_Death/overlay.cfg b/src/overlays/actors/ovl_En_Death/overlay.cfg deleted file mode 100644 index 17c27c8508..0000000000 --- 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 cb209dea47..0000000000 --- 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 dbbc3d2ed8..0000000000 --- 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 bff118f72a..0000000000 --- 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_Dg/overlay.cfg b/src/overlays/actors/ovl_En_Dg/overlay.cfg deleted file mode 100644 index b9e9281163..0000000000 --- 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_Dinofos/overlay.cfg b/src/overlays/actors/ovl_En_Dinofos/overlay.cfg deleted file mode 100644 index 61af267959..0000000000 --- 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_Dnb/overlay.cfg b/src/overlays/actors/ovl_En_Dnb/overlay.cfg deleted file mode 100644 index 074d3340a5..0000000000 --- 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 85a45176f6..0000000000 --- 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 93ce82d2ce..0000000000 --- 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 9aa2bd93c1..0000000000 --- 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_Dnp/overlay.cfg b/src/overlays/actors/ovl_En_Dnp/overlay.cfg deleted file mode 100644 index ea78e5340c..0000000000 --- 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_Dnq/overlay.cfg b/src/overlays/actors/ovl_En_Dnq/overlay.cfg deleted file mode 100644 index 169a416214..0000000000 --- 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 021b94476d..4b1087311c 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); } 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 3fc03b2179..0000000000 --- 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 714235b174..a8a94d9a4e 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -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; } } 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 05d2f0a6e7..0000000000 --- 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 9c737bc9dd..0000000000 --- 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_Etc/overlay.cfg b/src/overlays/actors/ovl_En_Door_Etc/overlay.cfg deleted file mode 100644 index fa6a13d8a2..0000000000 --- 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 2720fb7f17..0000000000 --- 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_Drs/overlay.cfg b/src/overlays/actors/ovl_En_Drs/overlay.cfg deleted file mode 100644 index 7a0ab3db7b..0000000000 --- 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_Ds2n/overlay.cfg b/src/overlays/actors/ovl_En_Ds2n/overlay.cfg deleted file mode 100644 index d0764f1c1a..0000000000 --- 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 6eb5532378..0000000000 --- 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 04c14d5ce2..0000000000 --- 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 c80635d344..0000000000 --- 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_Egol/overlay.cfg b/src/overlays/actors/ovl_En_Egol/overlay.cfg deleted file mode 100644 index 1073044cd8..0000000000 --- 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 7314974368..f115ada7c4 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -1453,7 +1453,7 @@ void EnEgol_Draw(Actor* thisx, PlayState* play2) { 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 = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); } if (this->dmgEffectTimer != 0) { f32 drawDmgEffAlpha = 0.05f * this->dmgEffectTimer; 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 cc1ddac286..0000000000 --- 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_Elfbub/overlay.cfg b/src/overlays/actors/ovl_En_Elfbub/overlay.cfg deleted file mode 100644 index 91957fdd0f..0000000000 --- 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 a371edb2f8..0000000000 --- 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_Elforg/overlay.cfg b/src/overlays/actors/ovl_En_Elforg/overlay.cfg deleted file mode 100644 index 124b13ce0b..0000000000 --- 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_Encount1/overlay.cfg b/src/overlays/actors/ovl_En_Encount1/overlay.cfg deleted file mode 100644 index 132566c389..0000000000 --- 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 31c83ff6fd..0000000000 --- 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 5527756557..0000000000 --- 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 124d2e4b4d..0000000000 --- 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_Ending_Hero/overlay.cfg b/src/overlays/actors/ovl_En_Ending_Hero/overlay.cfg deleted file mode 100644 index a512a6a47b..0000000000 --- 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 eeddcc9c78..0000000000 --- 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 13ddc6d82f..0000000000 --- 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 314fdd5629..0000000000 --- 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 1b49c5572c..0000000000 --- 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 d6911ffa0b..0000000000 --- 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 b847b42fa8..0000000000 --- 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_Fall/overlay.cfg b/src/overlays/actors/ovl_En_Fall/overlay.cfg deleted file mode 100644 index 48cfdea221..0000000000 --- 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 32a4b7c823..ea76ef0747 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -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; @@ -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 4219364f55..0000000000 --- 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_Famos/overlay.cfg b/src/overlays/actors/ovl_En_Famos/overlay.cfg deleted file mode 100644 index 375bd1638a..0000000000 --- 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 7121862622..0000000000 --- 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 e1d38e60a1..0000000000 --- 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 8b88be0b8c..0000000000 --- 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 0872be9ea6..0000000000 --- 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 a78daf631d..0000000000 --- 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 cba83b7356..0000000000 --- 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_Fishing/overlay.cfg b/src/overlays/actors/ovl_En_Fishing/overlay.cfg deleted file mode 100644 index 193cfdb5f7..0000000000 --- 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 ac7fc1debf..a64e8a9471 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; @@ -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; @@ -5361,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; 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 16ece1e424..0000000000 --- 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_Fr/overlay.cfg b/src/overlays/actors/ovl_En_Fr/overlay.cfg deleted file mode 100644 index b21ec21455..0000000000 --- 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 c173063cfb..0000000000 --- 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 23dc0f3505..0fa23e71a7 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -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 { @@ -880,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: @@ -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) { @@ -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); } 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 0cc55f8eb7..0000000000 --- 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 a3d76fab70..f43d244323 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -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); } @@ -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; } @@ -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 9a946e3098..0000000000 --- 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 78253baff7..0000000000 --- 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 0eba400a54..0000000000 --- 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_Gakufu/overlay.cfg b/src/overlays/actors/ovl_En_Gakufu/overlay.cfg deleted file mode 100644 index 9f421707a8..0000000000 --- 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_Gamelupy/overlay.cfg b/src/overlays/actors/ovl_En_Gamelupy/overlay.cfg deleted file mode 100644 index a9b07ebaea..0000000000 --- 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 d604decdc3..0000000000 --- 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 632b29a235..d6643dbeb3 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -488,7 +488,7 @@ 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(); + Environment_StartTime(); SET_EVENTINF(EVENTINF_46); func_80B0FE7C(play); } else if (this->unk_280 == 2) { @@ -892,7 +892,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) { } if (gSaveContext.save.entrance == ENTRANCE(GHOST_HUT, 1)) { - func_800FE484(); + Environment_StopTime(); this->actionFunc = func_80B10240; break; } 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 ebd643e2a1..0000000000 --- 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 cbc8511b73..3d4f4bd3dc 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 965bfcf194..0000000000 --- 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 5eec23b4bd..0000000000 --- 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 412bb71c1b..0000000000 --- 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_Gg/overlay.cfg b/src/overlays/actors/ovl_En_Gg/overlay.cfg deleted file mode 100644 index 5c782de1bc..0000000000 --- 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_Gg2/overlay.cfg b/src/overlays/actors/ovl_En_Gg2/overlay.cfg deleted file mode 100644 index 24b42b858a..0000000000 --- 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_Giant/overlay.cfg b/src/overlays/actors/ovl_En_Giant/overlay.cfg deleted file mode 100644 index a56d149b73..0000000000 --- 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_Ginko_Man/overlay.cfg b/src/overlays/actors/ovl_En_Ginko_Man/overlay.cfg deleted file mode 100644 index 5d02f02dcb..0000000000 --- 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_GirlA/overlay.cfg b/src/overlays/actors/ovl_En_GirlA/overlay.cfg deleted file mode 100644 index 2083a33774..0000000000 --- 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_Gk/overlay.cfg b/src/overlays/actors/ovl_En_Gk/overlay.cfg deleted file mode 100644 index 15b8f08e60..0000000000 --- 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 6f2f3c09cf..9704d62049 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -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; 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 d39cd1d30e..0000000000 --- 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 aaaf0ef3dc..01146c0cf1 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -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))) { 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 3ab4530a45..0000000000 --- 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 9d772cc289..e1250dbc67 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -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, }; 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 0f4bb5a326..0000000000 --- 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 a5fa8bb0a5..0000000000 --- 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_Gs/overlay.cfg b/src/overlays/actors/ovl_En_Gs/overlay.cfg deleted file mode 100644 index 0fc22a8560..0000000000 --- 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 93d7e3f88d..08133cc63b 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) { @@ -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 135b80f6cc..0000000000 --- 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_Guruguru/overlay.cfg b/src/overlays/actors/ovl_En_Guruguru/overlay.cfg deleted file mode 100644 index 727ca7b59b..0000000000 --- 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_Hakurock/overlay.cfg b/src/overlays/actors/ovl_En_Hakurock/overlay.cfg deleted file mode 100644 index 93c363b8d9..0000000000 --- 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 67feefe27c..0000000000 --- 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 e670da2627..0000000000 --- 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 3b8a0e40e7..0000000000 --- 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_Hg/overlay.cfg b/src/overlays/actors/ovl_En_Hg/overlay.cfg deleted file mode 100644 index d3037b31d5..0000000000 --- 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_Hgo/overlay.cfg b/src/overlays/actors/ovl_En_Hgo/overlay.cfg deleted file mode 100644 index 242079637b..0000000000 --- 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_Hidden_Nuts/overlay.cfg b/src/overlays/actors/ovl_En_Hidden_Nuts/overlay.cfg deleted file mode 100644 index 491a14d601..0000000000 --- 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 95449a9a4e..0000000000 --- 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 e7ee964c99..0000000000 --- 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 35c8d8f8e3..0000000000 --- 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 4a20640dee..0000000000 --- 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 90043637c2..0000000000 --- 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 2c7eec6072..5ffc364c34 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -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)) { @@ -2917,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(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 b950cc9c29..0000000000 --- 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 b2e745cadd..e650ef6d3c 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 @@ -122,7 +122,7 @@ s32 func_808F8CCC(EnHorseGameCheck* this, PlayState* play2) { } 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; } @@ -158,14 +158,14 @@ s32 func_808F8EB0(EnHorseGameCheck* this, PlayState* play) { if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_3) { play->transitionType = TRANS_TYPE_64; - gSaveContext.nextTransitionType = TRANS_TYPE_02; + 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; + 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_02; - gSaveContext.nextTransitionType = TRANS_TYPE_02; + 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; 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 09ec53e20e..0000000000 --- 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_Hs/overlay.cfg b/src/overlays/actors/ovl_En_Hs/overlay.cfg deleted file mode 100644 index dab1cacf78..0000000000 --- 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_Hs2/overlay.cfg b/src/overlays/actors/ovl_En_Hs2/overlay.cfg deleted file mode 100644 index a34ed88c5f..0000000000 --- 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 fa0125cbf3..0000000000 --- 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 8f0ae949d9..2468e5961f 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -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))) { 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 c4cc60ed31..0000000000 --- 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 2a1b953aaa..0000000000 --- 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 a51cae5563..3a83564e56 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -820,7 +820,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { 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; SET_WEEKEVENTREG(WEEKEVENTREG_57_01); break; @@ -1067,7 +1067,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { 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; SET_WEEKEVENTREG(WEEKEVENTREG_57_01); break; 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 f439a7c1b7..0000000000 --- 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 a05f98b613..0000000000 --- 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 bf2b37bca3..f1ebe1bb20 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" @@ -3016,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); } } @@ -3968,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); } } 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 192412f5fd..0000000000 --- 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 18c1eed56a..0000000000 --- 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 689d8deb5d..0000000000 --- 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_Ja/overlay.cfg b/src/overlays/actors/ovl_En_Ja/overlay.cfg deleted file mode 100644 index aab759e94e..0000000000 --- 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 9a82f24adf..39a28c4bd7 100644 --- a/src/overlays/actors/ovl_En_Ja/z_en_ja.c +++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.c @@ -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; 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 361e01617f..0000000000 --- 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 9bafd7ea60..03cc41f20e 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 { 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 a60b43afc9..0000000000 --- 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_Jgame_Tsn/overlay.cfg b/src/overlays/actors/ovl_En_Jgame_Tsn/overlay.cfg deleted file mode 100644 index 9d3fbbf9d8..0000000000 --- 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 8e82716588..2db753d01e 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 @@ -284,8 +284,8 @@ void func_80C1410C(EnJgameTsn* this, PlayState* play) { player->stateFlags1 |= PLAYER_STATE1_20; func_801A2BB8(0x25); - play->interfaceCtx.unk_280 = 1; - func_80112AFC(play); + 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) { @@ -478,7 +478,7 @@ 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; CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_20); func_80C144E4(this); @@ -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 6923c80b4b..0000000000 --- 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 d36bbb6c33..ecfaa6b8ba 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -110,7 +110,7 @@ void EnJs_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_8096A6F4; Animation_PlayLoop(&this->skelAnime, &gMoonChildSittingAnim); - func_8016566C(0x3C); + Play_EnableMotionBlur(60); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_20)) { Inventory_DeleteItem(ITEM_MASK_FIERCE_DEITY, SLOT(ITEM_MASK_FIERCE_DEITY)); @@ -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: 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 050d8bc675..0000000000 --- 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 907202195d..0000000000 --- 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 4f77e7de75..0000000000 --- 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 da327642b4..70ca7313ab 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -446,10 +446,10 @@ void EnKaizoku_ChangeAnim(EnKaizoku* this, EnKaizokuAnimation animIndex) { } s32 EnKaizoku_ValidatePictograph(PlayState* play, Actor* actor) { - s32 ret = Snap_ValidatePictograph(play, actor, PICTOGRAPH_PIRATE_GOOD, &actor->focus.pos, &actor->shape.rot, 10.0f, + s32 ret = Snap_ValidatePictograph(play, actor, PICTO_VALID_PIRATE_GOOD, &actor->focus.pos, &actor->shape.rot, 10.0f, 400.0f, -1); - ret |= Snap_ValidatePictograph(play, actor, PICTOGRAPH_PIRATE_TOO_FAR, &actor->focus.pos, &actor->shape.rot, 10.0f, + ret |= Snap_ValidatePictograph(play, actor, PICTO_VALID_PIRATE_TOO_FAR, &actor->focus.pos, &actor->shape.rot, 10.0f, 1200.0f, -1); return ret; } 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 f933ca862e..0000000000 --- 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 4cd82df43f..3ef617aec1 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -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) { @@ -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; } @@ -917,7 +917,7 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) { this->unk204 = 0xA; if (this->unk190 == 0xE) { func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_73); - func_80165690(); + Play_DisableMotionBlur(); this->unk204 = 0x14; } } 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 8f2bff1c1a..0000000000 --- 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 1ae4caed5b..0000000000 --- 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 0045038473..0000000000 --- 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 d9195b4b0f..0000000000 --- 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 dd63f4c4a8..0000000000 --- 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 7a28cf0fc3..c02b00b5aa 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 @@ -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; @@ -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; 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 9a9ddfd5ce..0000000000 --- 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_Kitan/overlay.cfg b/src/overlays/actors/ovl_En_Kitan/overlay.cfg deleted file mode 100644 index cd24348d58..0000000000 --- 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 150eab3c7b..0000000000 --- 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 a47b9648bc..0000000000 --- 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_Kusa/overlay.cfg b/src/overlays/actors/ovl_En_Kusa/overlay.cfg deleted file mode 100644 index 9cded0ca35..0000000000 --- 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 eaf5ea96af..39d55f7f80 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" 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 0e08a700ba..0000000000 --- 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 626ab3f3bf..0f95122d45 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" 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 df2faa5f07..0000000000 --- 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 f6647cc0b0..aafc12b516 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 @@ -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++; } 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 763d0ad6dc..0000000000 --- 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 8d594952f8..0000000000 --- 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_M_Fire1/overlay.cfg b/src/overlays/actors/ovl_En_M_Fire1/overlay.cfg deleted file mode 100644 index 1d43db7312..0000000000 --- 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 5de5ce33a1..0000000000 --- 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_Ma4/overlay.cfg b/src/overlays/actors/ovl_En_Ma4/overlay.cfg deleted file mode 100644 index 3a0c5af889..0000000000 --- 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 efe7546625..973e915531 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -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); SET_WEEKEVENTREG(WEEKEVENTREG_08_01); - func_80112AFC(play); + 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)) || @@ -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; @@ -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) { 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 a1085bf0ef..0000000000 --- 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 c9ba0f34d5..fb10d93111 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 @@ -1091,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) { 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 c185a0e537..0000000000 --- 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_Mag/overlay.cfg b/src/overlays/actors/ovl_En_Mag/overlay.cfg deleted file mode 100644 index 14fce0372c..0000000000 --- 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 3a72258cca..4a8ce8731e 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 6816a8c92b..0000000000 --- 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 deffea103b..0000000000 --- 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 db7e2a8424..0000000000 --- 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_Minislime/overlay.cfg b/src/overlays/actors/ovl_En_Minislime/overlay.cfg deleted file mode 100644 index 795b335cb1..0000000000 --- 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 7463d059af..0000000000 --- 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_Mkk/overlay.cfg b/src/overlays/actors/ovl_En_Mkk/overlay.cfg deleted file mode 100644 index 490c7cd58a..0000000000 --- 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 db9f54ab33..0000000000 --- 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_Mm2/overlay.cfg b/src/overlays/actors/ovl_En_Mm2/overlay.cfg deleted file mode 100644 index ee3394df9e..0000000000 --- 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 d1162759f0..0000000000 --- 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_Mnk/overlay.cfg b/src/overlays/actors/ovl_En_Mnk/overlay.cfg deleted file mode 100644 index 456c850ac3..0000000000 --- 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 f8f57266ec..0000000000 --- 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_Mt_tag/overlay.cfg b/src/overlays/actors/ovl_En_Mt_tag/overlay.cfg deleted file mode 100644 index dcf4dadff8..0000000000 --- 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 8d6b75fbdd..7b2dc9db6a 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 @@ -315,11 +315,11 @@ void EnMttag_RaceStart(EnMttag* this, PlayState* play) { } 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; SET_EVENTINF(EVENTINF_10); this->actionFunc = EnMttag_Race; @@ -398,10 +398,10 @@ void EnMttag_RaceFinish(EnMttag* this, PlayState* play) { if (DECR(this->timer) == 0) { 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); @@ -429,8 +429,8 @@ 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, PLAYER_CSMODE_7); Magic_Add(play, MAGIC_FILL_TO_CAPACITY); @@ -441,7 +441,7 @@ void EnMttag_PotentiallyRestartRace(EnMttag* this, PlayState* play) { 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,7 +457,7 @@ 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); + EnMttag_ExitRace(play, TRANS_TYPE_FADE_BLACK, TRANS_TYPE_FADE_BLACK); CLEAR_EVENTINF(EVENTINF_13); SET_EVENTINF(EVENTINF_12); Actor_Kill(&this->actor); 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 d8a7c2e85f..0000000000 --- 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_Muto/overlay.cfg b/src/overlays/actors/ovl_En_Muto/overlay.cfg deleted file mode 100644 index 3fd3e42b55..0000000000 --- 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_Nb/overlay.cfg b/src/overlays/actors/ovl_En_Nb/overlay.cfg deleted file mode 100644 index 27d485b84d..0000000000 --- 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 572364bbdf..b5d558a711 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -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) { @@ -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 b5d488d53f..0000000000 --- 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 8558fc330c..0000000000 --- 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 26dacb3bbe..0000000000 --- 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 01d2bec044..0000000000 --- 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 cc188400cf..0000000000 --- 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_Nwc/overlay.cfg b/src/overlays/actors/ovl_En_Nwc/overlay.cfg deleted file mode 100644 index d479e7da40..0000000000 --- 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_Okarina_Effect/overlay.cfg b/src/overlays/actors/ovl_En_Okarina_Effect/overlay.cfg deleted file mode 100644 index 02325ddea1..0000000000 --- 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 908da18884..0000000000 --- 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 8863e71691..0000000000 --- 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 50f24d4ace..0000000000 --- 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 3d963dc09c..0000000000 --- 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 59f9f2343a..0000000000 --- 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_Ossan/overlay.cfg b/src/overlays/actors/ovl_En_Ossan/overlay.cfg deleted file mode 100644 index be58d6c1ec..0000000000 --- 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 789c96cf07..d1f7dbec9e 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: @@ -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]; 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 53a5992e9a..0000000000 --- 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 928d4e5783..5fa27e0263 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, @@ -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 c3609f9923..0000000000 --- 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_Pamera/overlay.cfg b/src/overlays/actors/ovl_En_Pamera/overlay.cfg deleted file mode 100644 index 544499e92c..0000000000 --- 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 2b0aae48a0..bcbb787166 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c @@ -691,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) { 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 de6a9fa77d..0000000000 --- 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_Paper/overlay.cfg b/src/overlays/actors/ovl_En_Paper/overlay.cfg deleted file mode 100644 index f2b122194d..0000000000 --- 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 47d97e1c2f..a3f158cbdc 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 5e8450722a..a48c6ae881 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 883554d5bb..0000000000 --- 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 588e53bd7b..0000000000 --- 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 43905ae8cf..0000000000 --- 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 24fcc34f9f..c2846a26b8 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -1987,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; 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 25791e887e..0000000000 --- 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 71a747b65c..0000000000 --- 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 7c59c1704f..0000000000 --- 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 d83d8bd2f7..0000000000 --- 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 3cca2c18d2..0000000000 --- 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 efb1dfb564..0000000000 --- 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_Pr2/overlay.cfg b/src/overlays/actors/ovl_En_Pr2/overlay.cfg deleted file mode 100644 index 11a975ed02..0000000000 --- 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 dc79492a03..0000000000 --- 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_Pst/overlay.cfg b/src/overlays/actors/ovl_En_Pst/overlay.cfg deleted file mode 100644 index 857d2ee7e7..0000000000 --- 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_Racedog/overlay.cfg b/src/overlays/actors/ovl_En_Racedog/overlay.cfg deleted file mode 100644 index 6461b9ff5a..0000000000 --- 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_Raf/overlay.cfg b/src/overlays/actors/ovl_En_Raf/overlay.cfg deleted file mode 100644 index 086e64a725..0000000000 --- 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_Rail_Skb/overlay.cfg b/src/overlays/actors/ovl_En_Rail_Skb/overlay.cfg deleted file mode 100644 index df550bd198..0000000000 --- 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 6c055c27c3..0000000000 --- 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_Rat/overlay.cfg b/src/overlays/actors/ovl_En_Rat/overlay.cfg deleted file mode 100644 index 3562582caf..0000000000 --- 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 3864774ca9..0000000000 --- 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_Recepgirl/overlay.cfg b/src/overlays/actors/ovl_En_Recepgirl/overlay.cfg deleted file mode 100644 index bec7425dee..0000000000 --- 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_Rg/overlay.cfg b/src/overlays/actors/ovl_En_Rg/overlay.cfg deleted file mode 100644 index 4cbc296973..0000000000 --- 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_River_Sound/overlay.cfg b/src/overlays/actors/ovl_En_River_Sound/overlay.cfg deleted file mode 100644 index 82d1e4c4ab..0000000000 --- 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 d7730c1f0c..0000000000 --- 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_Rsn/overlay.cfg b/src/overlays/actors/ovl_En_Rsn/overlay.cfg deleted file mode 100644 index f99efb1a6b..0000000000 --- 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 4080303857..0000000000 --- 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 63f0bbb60c..0000000000 --- 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 10c34f949b..0000000000 --- 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_S_Goro/overlay.cfg b/src/overlays/actors/ovl_En_S_Goro/overlay.cfg deleted file mode 100644 index 195f952eae..0000000000 --- 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_Sb/overlay.cfg b/src/overlays/actors/ovl_En_Sb/overlay.cfg deleted file mode 100644 index 12658e7639..0000000000 --- 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 2262aa0bbf..0000000000 --- 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_Scopecoin/overlay.cfg b/src/overlays/actors/ovl_En_Scopecoin/overlay.cfg deleted file mode 100644 index 2c605c8bc2..0000000000 --- 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 880bf55391..0000000000 --- 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_Scopenuts/overlay.cfg b/src/overlays/actors/ovl_En_Scopenuts/overlay.cfg deleted file mode 100644 index 5989378a15..0000000000 --- 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_Sda/overlay.cfg b/src/overlays/actors/ovl_En_Sda/overlay.cfg deleted file mode 100644 index 694122dd7a..0000000000 --- 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_Sekihi/overlay.cfg b/src/overlays/actors/ovl_En_Sekihi/overlay.cfg deleted file mode 100644 index 96c2eae2ff..0000000000 --- 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_Sellnuts/overlay.cfg b/src/overlays/actors/ovl_En_Sellnuts/overlay.cfg deleted file mode 100644 index f3b9a3eca1..0000000000 --- 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_Shn/overlay.cfg b/src/overlays/actors/ovl_En_Shn/overlay.cfg deleted file mode 100644 index f0526f58cd..0000000000 --- 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 d606e17f40..0e1b182e6b 100644 --- a/src/overlays/actors/ovl_En_Shn/z_en_shn.c +++ b/src/overlays/actors/ovl_En_Shn/z_en_shn.c @@ -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; @@ -263,8 +263,8 @@ s32 func_80AE6704(Actor* thisx, PlayState* play) { 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; } 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 67fe955184..0000000000 --- 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 dfa528943e..0000000000 --- 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_Slime/overlay.cfg b/src/overlays/actors/ovl_En_Slime/overlay.cfg deleted file mode 100644 index ad13869e8c..0000000000 --- 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 97b6aa6e91..0000000000 --- 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_Snowwd/overlay.cfg b/src/overlays/actors/ovl_En_Snowwd/overlay.cfg deleted file mode 100644 index 4a44958334..0000000000 --- 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 cd2fa2a2ea..0000000000 --- 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 1fa9b2059c..035bc2bfab 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -494,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 { @@ -505,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; } @@ -514,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; } @@ -680,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) { @@ -688,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); } @@ -933,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; @@ -1041,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: 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 f8a88c0bed..0000000000 --- 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 7494695fa3..233c6c8114 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(); 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 b384f8265a..0000000000 --- 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 9420fb8f13..0000000000 --- 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_Sth2/overlay.cfg b/src/overlays/actors/ovl_En_Sth2/overlay.cfg deleted file mode 100644 index 594b965737..0000000000 --- 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 743a4bb0f1..0000000000 --- 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_Stop_heishi/overlay.cfg b/src/overlays/actors/ovl_En_Stop_heishi/overlay.cfg deleted file mode 100644 index cf5960b30a..0000000000 --- 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 3789ae1fee..0000000000 --- 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 9eea97af53..0000000000 --- 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 2f33a9aac7..93c93eef92 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -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) { @@ -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; @@ -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; @@ -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; 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 af7fca6eaa..0000000000 --- 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 d8dd72923b..bbc010a2aa 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); 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 5a90d72e02..0000000000 --- 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 1165e9df02..0000000000 --- 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 492b143b5c..0000000000 --- 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 3234941735..759e97206c 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 @@ -334,7 +334,7 @@ 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; @@ -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; @@ -414,7 +414,7 @@ void EnSyatekiMan_Swamp_HandleNormalMessage(EnSyatekiMan* this, PlayState* play) 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); @@ -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; @@ -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; @@ -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); @@ -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; @@ -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 { @@ -1122,7 +1122,7 @@ void EnSyatekiMan_Swamp_EndGame(EnSyatekiMan* this, PlayState* play) { 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; @@ -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,7 +1368,7 @@ 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)) { 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 5c4c2e7c53..0000000000 --- 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 5358d44cf5..162a6d7182 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 4a5373e732..0000000000 --- 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 2342018302..0000000000 --- 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 86de69140a..abd7c100c6 100644 --- a/src/overlays/actors/ovl_En_Tab/z_en_tab.c +++ b/src/overlays/actors/ovl_En_Tab/z_en_tab.c @@ -473,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))) { 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 0939c8b841..0000000000 --- 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 3fbedd25e5..0000000000 --- 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 3fed504a46..0000000000 --- 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 9f776a0932..0000000000 --- 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_Tanron1/overlay.cfg b/src/overlays/actors/ovl_En_Tanron1/overlay.cfg deleted file mode 100644 index 5a6959a4e4..0000000000 --- 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_Tanron2/overlay.cfg b/src/overlays/actors/ovl_En_Tanron2/overlay.cfg deleted file mode 100644 index c585d560b3..0000000000 --- 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_Tanron3/overlay.cfg b/src/overlays/actors/ovl_En_Tanron3/overlay.cfg deleted file mode 100644 index 1084615efe..0000000000 --- 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 d991ab323f..0e7be15f36 100644 --- a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c +++ b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c @@ -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 734d70ac7d..0000000000 --- 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 4a522458e8..0000000000 --- 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 2e81ae1217..0000000000 --- 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 3f264536a7..0000000000 --- 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_Test2/overlay.cfg b/src/overlays/actors/ovl_En_Test2/overlay.cfg deleted file mode 100644 index 8a698679cd..0000000000 --- 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 25736e068d..0000000000 --- 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 53ceff1167..8af1e186a9 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -4,6 +4,7 @@ * 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" @@ -507,7 +508,7 @@ void EnTest3_Destroy(Actor* thisx, PlayState* play2) { Collider_DestroyQuad(play, &this->player.meleeWeaponQuads[1]); Collider_DestroyQuad(play, &this->player.shieldQuad); ZeldaArena_Free(this->player.maskObjectSegment); - func_800FE498(); + Environment_StartTime(); } s32 func_80A3F080(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) { @@ -764,7 +765,7 @@ s32 func_80A3FBE8(EnTest3* this, PlayState* play) { if (this->unk_D8D >= 0) { if (func_80A3E9DC(this, play)) { this->unk_D8D = -1; - func_800FE484(); + 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); @@ -779,9 +780,9 @@ s32 func_80A3FBE8(EnTest3* this, PlayState* play) { } } else if ((D_80A41D20 == 2) && func_80A3E9DC(this, play)) { ActorCutscene_SetReturnCamera(CAM_ID_MAIN); - func_800FE498(); - if (gSaveContext.save.time > CLOCK_TIME(6, 0)) { - func_800FE658(TIME_TO_MINUTES_ALT_F(fabsf((s16)-gSaveContext.save.time))); + 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); @@ -967,7 +968,7 @@ void func_80A40678(EnTest3* this, PlayState* play) { this->unk_D80 = ((this->unk_D88 == 20) || (this->unk_D88 == 10) || (this->unk_D88 == 9)) ? 3 : Play_InCsMode(play) ? 0 - : REG(15) + ((void)0, gSaveContext.save.daySpeed); + : R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset); if (Schedule_RunScript(play, sScheduleScript, &scheduleOutput)) { if (this->unk_D88 != scheduleOutput.result) { @@ -1293,7 +1294,7 @@ void EnTest3_Draw(Actor* thisx, PlayState* play2) { this->player.skelAnime.dListCount, EnTest3_OverrideLimbDraw, EnTest3_PostLimbDraw, &this->player.actor, 0); if (this->player.invincibilityTimer > 0) { - POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); } if ((this->player.getItemDrawId - 1) != GID_NONE) { Player_DrawGetItem(play, &this->player); 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 06bfe78393..0000000000 --- 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 b7994cf046..5a6c4573f7 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); @@ -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); @@ -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; } } } @@ -310,7 +310,7 @@ void EnTest4_Init(Actor* thisx, PlayState* play) { } 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)) { @@ -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); } 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 9ad6cee31d..0000000000 --- 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 35635730d5..0000000000 --- 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 c0915fce61..6f1c5ac543 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c @@ -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])); @@ -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, PLAYER_CSMODE_6); - func_80A90C34(); + 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); } @@ -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, PLAYER_CSMODE_6); - func_80A90C34(); + 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,24 +704,24 @@ 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(); + EnTest6_DisableMotionBlur(); if (CHECK_EVENTINF(EVENTINF_52)) { this->unk_274 = 9; } @@ -976,7 +976,7 @@ void func_80A92950(EnTest6* this, PlayState* play) { 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; SET_EVENTINF(EVENTINF_27); @@ -1058,7 +1058,7 @@ void func_80A92950(EnTest6* this, PlayState* play) { 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; } 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 5a898f7c09..0000000000 --- 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 43facd8312..bf0dc785b9 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(); } } @@ -676,7 +676,7 @@ void func_80AF2350(EnTest7* this, PlayState* play) { } 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; } 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 99ad048ba3..0000000000 --- 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 947f97b627..0b7a5c3f30 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 f469c156a6..0000000000 --- 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_Time_Tag/overlay.cfg b/src/overlays/actors/ovl_En_Time_Tag/overlay.cfg deleted file mode 100644 index 9759bee865..0000000000 --- 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_Tite/overlay.cfg b/src/overlays/actors/ovl_En_Tite/overlay.cfg deleted file mode 100644 index 0d91c61fe0..0000000000 --- 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 a7ca23e6e7..0000000000 --- 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 a0b59be8a7..1bdc92b4a0 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)) { 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 0815135431..0000000000 --- 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 25ddefa7f1..0000000000 --- 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_Toto/overlay.cfg b/src/overlays/actors/ovl_En_Toto/overlay.cfg deleted file mode 100644 index 48534631ec..0000000000 --- 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_Trt/overlay.cfg b/src/overlays/actors/ovl_En_Trt/overlay.cfg deleted file mode 100644 index d0b1d075f4..0000000000 --- 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 a8ffe6ea1a..caceb62bd9 100644 --- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c +++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c @@ -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; @@ -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: @@ -896,7 +896,7 @@ void EnTrt_BeginInteraction(EnTrt* this, PlayState* play) { case 0x834: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_17_01)) { - func_8011552C(play, 6); + 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; @@ -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]; @@ -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; } 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 60a280872a..0000000000 --- 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_Tru/overlay.cfg b/src/overlays/actors/ovl_En_Tru/overlay.cfg deleted file mode 100644 index 49e1ffdd98..0000000000 --- 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_Mt/overlay.cfg b/src/overlays/actors/ovl_En_Tru_Mt/overlay.cfg deleted file mode 100644 index 8c432043ff..0000000000 --- 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 d90b83a570..e5ff4350f2 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; } @@ -342,7 +342,7 @@ 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); SET_EVENTINF(EVENTINF_36); SET_EVENTINF(EVENTINF_40); @@ -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; } } 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 7c91103898..0000000000 --- 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 a9631d96b3..5b6f7b9786 100644 --- a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c +++ b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c @@ -326,12 +326,12 @@ void func_80AE04FC(EnTsn* this, PlayState* play) { this->actionFunc = func_80AE0704; 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; } 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 364d4c7e9b..0000000000 --- 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 29491912c0..0000000000 --- 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 31af7f8b6c..5843357ee8 100644 --- a/src/overlays/actors/ovl_En_Twig/z_en_twig.c +++ b/src/overlays/actors/ovl_En_Twig/z_en_twig.c @@ -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 3faa113d44..0000000000 --- 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 7c1774086f..0000000000 --- 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 badbf57d02..0000000000 --- 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_Warp_Uzu/overlay.cfg b/src/overlays/actors/ovl_En_Warp_Uzu/overlay.cfg deleted file mode 100644 index 833f1a0b61..0000000000 --- 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 a70ec6a5c2..0000000000 --- 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 77b857c145..ef1ae15bc1 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 @@ -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 { @@ -209,13 +209,13 @@ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) { // 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)); } } 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 7aac8fdd83..0000000000 --- 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 94890bd39a..9831040010 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 @@ -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 501a7b6ed8..0000000000 --- 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 9b75932442..0000000000 --- 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 ea95cc6d02..7ddd539e79 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 @@ -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 d24cd8a277..0000000000 --- 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 a52f236dcf..0000000000 --- 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_Brock/overlay.cfg b/src/overlays/actors/ovl_En_Wiz_Brock/overlay.cfg deleted file mode 100644 index 8976343c87..0000000000 --- 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_Fire/overlay.cfg b/src/overlays/actors/ovl_En_Wiz_Fire/overlay.cfg deleted file mode 100644 index 47aa9022a7..0000000000 --- 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 52dbc67e44..0000000000 --- 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 5293ea603c..0000000000 --- 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_Zl1/overlay.cfg b/src/overlays/actors/ovl_En_Zl1/overlay.cfg deleted file mode 100644 index 188c2f1d51..0000000000 --- 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 91cec56107..0000000000 --- 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 eeedbff837..0000000000 --- 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_Zob/overlay.cfg b/src/overlays/actors/ovl_En_Zob/overlay.cfg deleted file mode 100644 index e8a11666fc..0000000000 --- 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 58dd246d8b..fdc6e47899 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c @@ -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 8acdefc35f..0000000000 --- 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 83a5dda4b9..8d8065ff69 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 08cf29f2d4..9e6f3f4dab 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 fe913a71e4..0000000000 --- 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_Zoraegg/overlay.cfg b/src/overlays/actors/ovl_En_Zoraegg/overlay.cfg deleted file mode 100644 index f7f5fde0b1..0000000000 --- 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_Zos/overlay.cfg b/src/overlays/actors/ovl_En_Zos/overlay.cfg deleted file mode 100644 index a83ca10170..0000000000 --- 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 ba37c3ffe3..72de2024fd 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -762,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 0d4db225f4..0000000000 --- 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 417a6388e9..331a153df4 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -958,8 +958,8 @@ void func_80B985EC(EnZot* this, PlayState* play) { if (itemAction > PLAYER_IA_NONE) { func_801477B4(play); if ((itemAction == PLAYER_IA_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)) { + 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; 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 6e8d4a17a5..0000000000 --- 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 851214b5d3..27d4e04b1b 100644 --- a/src/overlays/actors/ovl_En_Zov/z_en_zov.c +++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.c @@ -424,7 +424,7 @@ 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; SET_WEEKEVENTREG(WEEKEVENTREG_78_01); this->actionFunc = func_80BD1D94; @@ -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 ba17bffc79..0000000000 --- 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_Item_B_Heart/overlay.cfg b/src/overlays/actors/ovl_Item_B_Heart/overlay.cfg deleted file mode 100644 index 092976e2b5..0000000000 --- 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 bf610d3f65..0000000000 --- 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 e6d4ee8244..0000000000 --- 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 9010673e36..0000000000 --- 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 2a1947005c..0000000000 --- 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 b2553ef0fe..0000000000 --- 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 fa2c65abcd..0000000000 --- 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 1b54f7a3e0..0000000000 --- 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 24317cd060..0000000000 --- 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_Bell/overlay.cfg b/src/overlays/actors/ovl_Obj_Bell/overlay.cfg deleted file mode 100644 index 40a295642b..0000000000 --- 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 7f70ff3502..0000000000 --- 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 0c337eb0e6..0000000000 --- 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 8617a82288..0000000000 --- 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_Bombiwa/overlay.cfg b/src/overlays/actors/ovl_Obj_Bombiwa/overlay.cfg deleted file mode 100644 index d18e4301f3..0000000000 --- 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 c024ce5ed8..0000000000 --- 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_Chan/overlay.cfg b/src/overlays/actors/ovl_Obj_Chan/overlay.cfg deleted file mode 100644 index 6480f28ff6..0000000000 --- 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_Chikuwa/overlay.cfg b/src/overlays/actors/ovl_Obj_Chikuwa/overlay.cfg deleted file mode 100644 index d2599907ae..0000000000 --- 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 69f62abc44..0000000000 --- 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_Danpeilift/overlay.cfg b/src/overlays/actors/ovl_Obj_Danpeilift/overlay.cfg deleted file mode 100644 index d2836d0123..0000000000 --- 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 feba3b348c..0000000000 --- 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 0e58d06667..0000000000 --- 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 3fc58dccdf..0000000000 --- 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_Dora/overlay.cfg b/src/overlays/actors/ovl_Obj_Dora/overlay.cfg deleted file mode 100644 index 1bb5f302a3..0000000000 --- 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 e8dbfc20ae..0000000000 --- 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 1b85d29a1d..0000000000 --- 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 4930e52266..0000000000 --- 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 55d5ebe5f9..0000000000 --- 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 d8a2390689..0000000000 --- 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 e5006379ab..0000000000 --- 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 f6aa9dc164..0000000000 --- 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 e67ba5e19a..0000000000 --- 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 c760e169fb..0000000000 --- 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_Grass/overlay.cfg b/src/overlays/actors/ovl_Obj_Grass/overlay.cfg deleted file mode 100644 index 6aec3207dd..0000000000 --- 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 3414aaafad..501fb2ee41 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 41ae3cfcda..0000000000 --- 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_Unit/overlay.cfg b/src/overlays/actors/ovl_Obj_Grass_Unit/overlay.cfg deleted file mode 100644 index d67028b99e..0000000000 --- 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 5d1fb24adf..0000000000 --- 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 902311cdcf..0000000000 --- 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 8d04d632c0..0000000000 --- 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 98c352eb49..0000000000 --- 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 4bd3103fbf..0000000000 --- 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_HsStump/overlay.cfg b/src/overlays/actors/ovl_Obj_HsStump/overlay.cfg deleted file mode 100644 index ddf618a65d..0000000000 --- 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 19cd6470bf..0000000000 --- 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 baf0417f66..0000000000 --- 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_Hunsui/overlay.cfg b/src/overlays/actors/ovl_Obj_Hunsui/overlay.cfg deleted file mode 100644 index 939fc35641..0000000000 --- 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 f35d270a03..a861e9e63e 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 d77c80fcbf..0000000000 --- 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_Iceblock/overlay.cfg b/src/overlays/actors/ovl_Obj_Iceblock/overlay.cfg deleted file mode 100644 index a72f4e3c80..0000000000 --- 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_Jg_Gakki/overlay.cfg b/src/overlays/actors/ovl_Obj_Jg_Gakki/overlay.cfg deleted file mode 100644 index f4ae147d73..0000000000 --- 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 932e67c12e..0000000000 --- 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 e1992b42b3..0000000000 --- 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 8a6c7b560d..0000000000 --- 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 d0a8b240a3..0000000000 --- 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 436504fc83..0000000000 --- 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 071ad6a34d..0000000000 --- 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 c2a20d7055..0000000000 --- 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 fca4821746..0000000000 --- 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 ecf5da6faa..0000000000 --- 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 cafaebb115..0000000000 --- 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 ad62438910..0000000000 --- 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 d636029699..0000000000 --- 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_Makeoshihiki/overlay.cfg b/src/overlays/actors/ovl_Obj_Makeoshihiki/overlay.cfg deleted file mode 100644 index 7d4fbe22da..0000000000 --- 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 a5f995b328..0000000000 --- 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_Mine/overlay.cfg b/src/overlays/actors/ovl_Obj_Mine/overlay.cfg deleted file mode 100644 index 7d0fb28e9f..0000000000 --- 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 0b388c672f..0000000000 --- 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_Mu_Pict/overlay.cfg b/src/overlays/actors/ovl_Obj_Mu_Pict/overlay.cfg deleted file mode 100644 index 77c10a6df0..0000000000 --- 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_Mure/overlay.cfg b/src/overlays/actors/ovl_Obj_Mure/overlay.cfg deleted file mode 100644 index 99c755b9a0..0000000000 --- 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 dcb1eb3ac9..0000000000 --- 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 7774442db7..0000000000 --- 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 00f0cc5d74..c8f657c13c 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 9173a80559..0000000000 --- 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_Ocarinalift/overlay.cfg b/src/overlays/actors/ovl_Obj_Ocarinalift/overlay.cfg deleted file mode 100644 index 3d9eef7c45..0000000000 --- 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 48cf4049fb..0000000000 --- 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 966356722d..0000000000 --- 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_Pzlblock/overlay.cfg b/src/overlays/actors/ovl_Obj_Pzlblock/overlay.cfg deleted file mode 100644 index d2b05c1ff0..0000000000 --- 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 69c3fc70c5..0000000000 --- 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 b4eef84273..0000000000 --- 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 7c2884ce4a..0000000000 --- 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 9b5210eb47..0000000000 --- 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 bb4e2fec88..0000000000 --- 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_Smork/overlay.cfg b/src/overlays/actors/ovl_Obj_Smork/overlay.cfg deleted file mode 100644 index 35a105b7d0..0000000000 --- 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 45a8a39bda..0000000000 --- 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 5d740b086a..0000000000 --- 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 d1863878bc..0000000000 --- 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 f5f13b8ad0..0000000000 --- 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_Spinyroll/overlay.cfg b/src/overlays/actors/ovl_Obj_Spinyroll/overlay.cfg deleted file mode 100644 index 38ea69b6d7..0000000000 --- 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 683d4ae005..0000000000 --- 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_Swprize/overlay.cfg b/src/overlays/actors/ovl_Obj_Swprize/overlay.cfg deleted file mode 100644 index 4b73ca304f..0000000000 --- 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_Syokudai/overlay.cfg b/src/overlays/actors/ovl_Obj_Syokudai/overlay.cfg deleted file mode 100644 index e03e132b7c..0000000000 --- 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_Takaraya_Wall/overlay.cfg b/src/overlays/actors/ovl_Obj_Takaraya_Wall/overlay.cfg deleted file mode 100644 index 71b838a3a4..0000000000 --- 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 70ba0b5b39..0000000000 --- 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 0a249ec38c..0000000000 --- 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 1f100873ca..0000000000 --- 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 3182fc3f45..0000000000 --- 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 57bac89fa6..0000000000 --- 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 4458dfd697..0000000000 --- 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 704bc58c34..7d2ed19995 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c @@ -452,12 +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; + play->transitionType = TRANS_TYPE_FADE_BLACK; if (gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams == PLAYER_PARAMS(0xFF, PLAYER_INITMODE_TELESCOPE)) { - gSaveContext.nextTransitionType = TRANS_TYPE_21; + gSaveContext.nextTransitionType = TRANS_TYPE_CIRCLE; } else { - gSaveContext.nextTransitionType = TRANS_TYPE_02; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; } } this->actionFunc = ObjTokeidai_DoNothing; 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 fec5d2975c..0000000000 --- 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 c3a0007c9e..0000000000 --- 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 00f17aeb56..0000000000 --- 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 a8eb50a9b0..0000000000 --- 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 93a110a081..c9ac4899c5 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -698,7 +698,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { sp54 = false; this->flags |= OBJ_UM_FLAG_0100; ObjUm_SetupAction(this, func_80B7A144); - func_800FE484(); + Environment_StopTime(); } else { // Waiting for player @@ -722,7 +722,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { 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); @@ -735,7 +735,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { this->pathIndex = this->initialPathIndex; sp54 = false; - func_800FE484(); + Environment_StopTime(); ObjUm_SetupAction(this, ObjUm_StartCs); this->unk_354 = 0; ObjUm_RotatePlayer(this, play, 0); @@ -747,7 +747,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { this->pathIndex = this->initialPathIndex; sp54 = false; - func_800FE484(); + Environment_StopTime(); ObjUm_SetupAction(this, ObjUm_PostMilkRunStartCs); this->unk_354 = 0; ObjUm_RotatePlayer(this, play, 0); @@ -838,7 +838,7 @@ s32 func_80B795A0(PlayState* play, ObjUm* this, s32 arg2) { 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 { @@ -1142,7 +1142,7 @@ void ObjUm_RanchWaitPathFinished(ObjUm* this, PlayState* play) { 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; @@ -1303,14 +1303,14 @@ void ObjUm_RunMinigame(ObjUm* this, PlayState* play) { 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; 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; SET_WEEKEVENTREG(WEEKEVENTREG_52_02); CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_01); @@ -1552,7 +1552,7 @@ void ObjUm_PostMilkRunWaitPathFinished(ObjUm* this, PlayState* play) { 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; } 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 82fd486bbf..0000000000 --- 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_Visiblock/overlay.cfg b/src/overlays/actors/ovl_Obj_Visiblock/overlay.cfg deleted file mode 100644 index 9436fe9e31..0000000000 --- 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 0b324c9664..0000000000 --- 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 2f3fe66eab..0000000000 --- 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_Wind/overlay.cfg b/src/overlays/actors/ovl_Obj_Wind/overlay.cfg deleted file mode 100644 index 7f65da5cf7..0000000000 --- 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 07e4b563d2..0000000000 --- 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 184fed3d67..067618491d 100644 --- a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c +++ b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c @@ -70,7 +70,7 @@ 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, PLAYER_CSMODE_21); subCamAt.x = player->actor.focus.pos.x; @@ -99,7 +99,7 @@ void func_808A7C04(ObjWturn* this, PlayState* play) { 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 432bb3e7fc..0000000000 --- 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 913e424059..0000000000 --- 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 091dbfce7a..0000000000 --- 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_Yasi/overlay.cfg b/src/overlays/actors/ovl_Obj_Yasi/overlay.cfg deleted file mode 100644 index e1d3b9f4e0..0000000000 --- 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 9c4704cae2..0000000000 --- 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 e302cce9a0..0000000000 --- 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 a19cb276aa..731fe6b775 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 6845a11171..0000000000 --- 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 c10e855cf6..0000000000 --- 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 a8d56b9bba..0000000000 --- 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 5aca74d993..0000000000 --- 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 64cd25b042..0000000000 --- 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 274c53c0fc..0000000000 --- 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 722d519790..0000000000 --- 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 0956cdd61b..0000000000 --- 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 bd210022d0..0000000000 --- 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 dea819c7dd..74e711cfa5 100644 --- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c +++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c @@ -170,10 +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[PLAYER_BODYPART_HEAD].x + (play->envCtx.unk_4 * (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.unk_8 * (1.0f / 6.0f)); - cylinderPos.z = player->bodyPartsPos[PLAYER_BODYPART_HEAD].z + (play->envCtx.unk_C * (1.0f / 6.0f)); + (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 d0341bf095..0000000000 --- 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 2d48492357..0000000000 --- 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 3035ab72e6..0000000000 --- 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 2bb72beac6..0000000000 --- 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 93353f28cc..c903bac6d4 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 f964deb729..0000000000 --- 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 bdf4b40698..0000000000 --- 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 2c439ec558..0000000000 --- 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 61ff413120..0000000000 --- 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 86355de674..0000000000 --- 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 40a9f45d15..0000000000 --- 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 f3b368b9ee..0000000000 --- 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 fa47efe59e..0000000000 --- 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 0652dd2355..0000000000 --- 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 a761dda6e6..0000000000 --- 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_Extra/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Extra/overlay.cfg deleted file mode 100644 index b83dab7ec3..0000000000 --- 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 1ec1ab41d5..bf21a87416 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 3b701b7377..0000000000 --- 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_Fire_Tail/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/overlay.cfg deleted file mode 100644 index 233962db36..0000000000 --- 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 0041d4fac3..0000000000 --- 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 f5997e9086..0000000000 --- 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 d49c555de5..0000000000 --- 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 6f49625f8c..0000000000 --- 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 fd5cb9c8fd..0000000000 --- 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 3623bfcfc9..0000000000 --- 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 643644dd74..0000000000 --- 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_Smoke/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/overlay.cfg deleted file mode 100644 index 854b90889e..0000000000 --- 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 0d9080c15c..0000000000 --- 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 4a7f62d118..0000000000 --- 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 02edf776c2..0000000000 --- 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 b698e915ff..0000000000 --- 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 c958b3df5d..0000000000 --- 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_Sibuki/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Sibuki/overlay.cfg deleted file mode 100644 index 66dfae07c4..0000000000 --- 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 82cde43688..0000000000 --- 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 5f691232a2..0000000000 --- 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 a6706c0140..0000000000 --- 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 d5f678c11f..0000000000 --- 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 00e7cfabda..f4f68d2302 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 06d807a08e..cd7f4563e1 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 5b3efc6add..0000000000 --- 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 ed12d400ed..1ce5f0d598 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 971940bb2c..39f881b390 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 73258114b9..0000000000 --- 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 c33f3c8c78..759e1511c4 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 8fed0dcfe9..b023ecb8bb 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 e18ed98587..0000000000 --- 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 e91d8ab5e0..1acb8c07a3 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 8a677c2a4b..b0aec44be4 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 297aa770c7..0000000000 --- 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 a3839bc400..0c20dba93a 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 d5cd9137d8..c40c4450aa 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 3766a9b419..0000000000 --- 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 b187241613..0000000000 --- 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 6366c3afd5..0000000000 --- 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_select/overlay.cfg b/src/overlays/gamestates/ovl_select/overlay.cfg deleted file mode 100644 index 5250bd7fb7..0000000000 --- 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 3699f22cd1..183f6b0692 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); diff --git a/src/overlays/gamestates/ovl_title/overlay.cfg b/src/overlays/gamestates/ovl_title/overlay.cfg deleted file mode 100644 index 11343031f7..0000000000 --- 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 2b23bf565e..e31e31c7db 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 c35d945184..0000000000 --- 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 3d819423c0..fe72ee8405 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 @@ -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 1152db2029..b8858b7ca4 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_mask.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c index 02cb7ce462..219ecd7a9e 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 @@ -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 7349db241d..849c7020e3 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 77f0a37c4f..d1c42dd73f 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 ddbb4547d3..3144cab206 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 87b9a05a28..db5ad1a795 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 5bdfc7aa6d..341f72ceb1 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 6c5552d8f8..9a5ea19d14 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 9c4dde7122..48535a51cf 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 2b47a8039b..e725f94f8b 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 448aea0339..bb96bab1b0 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 0000000000..3568665365 --- /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 0000000000..102778bec1 --- /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 ae29ba28fa..777cf9d49c 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 c478d16ceb..2a783d10a8 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 8accb6b4e1..307945b40e 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 9e05a2eed1..0b1f4806c0 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 531edc0946..2563154e51 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 b69f47321d..edefbc0518 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 a716176b9b..8ae4c69d7d 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 113c4ef339..0000000000 --- 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 98ead90132..0000000000 --- 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 f3bb35a3f2..505e411005 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 4de236fad4..ce89882fed 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 0000000000..ee5cb4d445 --- /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 0000000000..7cc63da2fe --- /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 d4f55d6c85..0a9797ba09 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 992332db78..5bd3d93a69 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 7481a8526b..35c632144c 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 eb2c14ab9b..c4eb2d461d 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 9596d2253d..64b98ba1d9 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 62f814b13d..a3bfe0e07d 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 5e9b1b205e..3b50c1fd30 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 b81399e2a4..09776505d6 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 275e27f1b3..e4980eb68d 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 e19513db34..0dac87a1b1 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 35984679c7..f97b259c6c 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 60391a9d1d..15f2c6b451 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 919d86f573..4d16f9377e 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 7b341256cd..9122c15bb0 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 629d4a0b05..1687b54620 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 5cf0a3d034..ada1a1038f 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 3820203ef8..51df68ca1a 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 8099bacf12..c92f56c4ee 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 ddc4c5d43e..80ccc6b057 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 2e023ff206..0d0f0ff79a 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 08cd83d141..ba5785cfcb 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 ba0bbe2c24..89c8c8c88e 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 ec432b7d99..b1985f8904 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 be5d8f15d1..a5aac2a543 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 5b18b3dd78..fcf7ad7a6f 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 fdd41e6cb4..3048aa2d49 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 20138dd4d7..24969a14d8 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 f75b5e0d5e..14ca16a962 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 a33d1c6e1c..67e3e4e184 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 94e08de0d2..667407c363 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 b3f7ce8c01..ca680c5f5e 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 0000000000..27e73accc2 --- /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 0000000000..3bbddee8ce --- /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 a9cb539413..74b7c7d106 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 6f2c499359..8cece3ff24 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 a5a059e354..607aac86d3 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 084152f794..7bc5d2950f 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 2289927d86..8560d6b094 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 c0ef260dd7..4b91c2aeb6 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 89ce33a6e1..edbdf857f1 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 63d025a58e..0000000000 --- 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 f997b5dfc9..0000000000 --- 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 4ace66514d..0000000000 --- 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 42f26805bf..0000000000 --- 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 6f8da02854..0000000000 --- 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 8619c7385d..0000000000 --- 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 238598e97b..0000000000 --- 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 3bfc2333c9..0000000000 --- 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 642fd2907e..0000000000 --- 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 552f000294..0000000000 --- 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 d18756a9af..0000000000 --- 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 2baf5a77cc..0000000000 --- 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 8f44412936..1473246cec 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 f5dcafc0dc..7540406fb4 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 666f6e917b..0dae635f26 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 a61c8e0196..198f8adc59 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 64cfd3aad5..add34b0296 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 0ca13a819b..5cea0edc83 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 aeabd07d1f..01c6b3d841 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 824e089e07..941ac1ffdb 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 ed692bf53d..d073407062 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 5b3156e443..346b37e79e 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 0cc3703ec9..97656aac53 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 c546c1f69b..2a79674bf6 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 f33d4f0801..56497c34dc 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",), @@ -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",), @@ -2092,23 +2092,23 @@ 0x8010D9F4:("Gfx_DrawTexRect4b",), 0x8010DC58:("Gfx_DrawTexQuadIA8",), 0x8010DE38:("Gfx_DrawTexQuad4b",), - 0x8010E028:("func_8010E028",), + 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",), @@ -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",), @@ -2786,7 +2786,7 @@ 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",), @@ -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",), @@ -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",), @@ -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 b91d5471f7..f88af903e3 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), diff --git a/tools/namefixer.py b/tools/namefixer.py index 37a3c8fee6..564a9b2b38 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -450,6 +450,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", @@ -477,6 +478,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", @@ -494,7 +503,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", @@ -506,6 +515,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", @@ -615,6 +627,8 @@ wordReplace = { "Entrance_CreateIndex": "Entrance_Create", "Entrance_CreateIndexFromSpawn": "Entrance_CreateFromSpawn", + "func_80102544": "LightContext_SetFog", + # Structs "ActorAnimationEntry": "AnimationInfo", "ActorAnimationEntryS": "AnimationInfoS", @@ -666,7 +680,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", @@ -691,6 +706,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", @@ -731,6 +748,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", @@ -775,6 +797,8 @@ wordReplace = { "ICHAIN_F32_DIV1000(minVelocityY,": "ICHAIN_F32_DIV1000(terminalVelocity,", "ICHAIN_F32(minVelocityY,": "ICHAIN_F32(terminalVelocity,", + "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", @@ -791,6 +815,30 @@ wordReplace = { "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/permuter_settings.toml b/tools/permuter_settings.toml index 691913cdcd..5f42d30d69 100644 --- a/tools/permuter_settings.toml +++ b/tools/permuter_settings.toml @@ -20,6 +20,7 @@ CLOCK_TIME = "int" CURRENT_DAY = "int" CHECK_NEWF = "int" NULL = "int" +"SCREEN_.*" = "int" GET_PLAYER = "int" CHECK_WEEKEVENTREG = "int" SET_WEEKEVENTREG = "int" diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 222c34b7a2..7f671add19 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 @@ -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 @@ -1606,23 +1606,23 @@ asm/non_matchings/code/z_parameter/Gfx_DrawTexRectI8.s,Gfx_DrawTexRectI8,0x8010D 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/func_8010E028.s,func_8010E028,0x8010E028,0x250 +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 @@ -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 @@ -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 @@ -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 index 4e8ca13113..e2092e5959 100755 --- a/tools/weekeventregconvert.py +++ b/tools/weekeventregconvert.py @@ -119,7 +119,7 @@ weekEventReg = { (14 << 8) | 0x01: "WEEKEVENTREG_14_01", (14 << 8) | 0x02: "WEEKEVENTREG_14_02", (14 << 8) | 0x04: "WEEKEVENTREG_14_04", - (14 << 8) | 0x08: "WEEKEVENTREG_14_08", + (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", diff --git a/undefined_syms.txt b/undefined_syms.txt index 76e431295f..649b781ced 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