Merge remote-tracking branch 'upstream/master' into skelanimecleanup

This commit is contained in:
angie
2023-01-14 14:34:12 -03:00
946 changed files with 11512 additions and 10432 deletions
+644
View File
@@ -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
+20
View File
@@ -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
+108 -161
View File
@@ -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
+9 -2
View File
@@ -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) \
+56 -29
View File
@@ -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
+33 -190
View File
@@ -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];
+69 -188
View File
@@ -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;
+12 -3
View File
@@ -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)
+52 -34
View File
@@ -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
+216
View File
@@ -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
+10 -1
View File
@@ -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,
+5 -7
View File
@@ -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 {
+2 -1
View File
@@ -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))
+7 -7
View File
@@ -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)
+3 -3
View File
@@ -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)
+37 -11
View File
@@ -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[];
+3 -2
View File
@@ -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 {
+24 -24
View File
@@ -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);
+111 -18
View File
@@ -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