From 02d05255fe96e9c06d176c0960395fb5aeb36211 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 6 Dec 2015 22:36:09 -0500 Subject: [PATCH] A stab at audio engine. --- audio/engine.asm | 540 ++++++------- audio/music/evolution.asm | 8 +- audio/music/healpokemon.asm | 10 +- engine/mysterygift.asm | 15 +- engine/mysterygift2.asm | 229 ++++++ engine/search.asm | 276 +++++++ engine/sprite_anims.asm | 36 +- event/celebi.asm | 6 +- gbhw.asm | 2 + macros/sound.asm | 127 +-- main.asm | 1450 +---------------------------------- maps/IlexForest.asm | 72 +- misc/mobile_12_2.asm | 937 ++++++++++++++++++++++ wram.asm | 42 +- 14 files changed, 1904 insertions(+), 1846 deletions(-) create mode 100755 engine/mysterygift2.asm create mode 100755 engine/search.asm create mode 100755 misc/mobile_12_2.asm diff --git a/audio/engine.asm b/audio/engine.asm index f3a67e5f3..6a2801631 100644 --- a/audio/engine.asm +++ b/audio/engine.asm @@ -22,14 +22,14 @@ _MapSetup_Sound_Off:: ; e8000 ld [hli], a ; ff26 ; music channels ld hl, rNR10 ; sound channel registers - ld e, $04 ; number of channels + ld e, $4 ; number of channels .clearsound ; sound channel 1 2 3 4 xor a ld [hli], a ; rNR10, rNR20, rNR30, rNR40 ; sweep = 0 ld [hli], a ; rNR11, rNR21, rNR31, rNR41 ; length/wavepattern = 0 - ld a, $08 + ld a, $8 ld [hli], a ; rNR12, rNR22, rNR32, rNR42 ; envelope = 0 xor a ld [hli], a ; rNR13, rNR23, rNR33, rNR43 ; frequency lo = 0 @@ -39,7 +39,7 @@ _MapSetup_Sound_Off:: ; e8000 jr nz, .clearsound ld hl, Channel1 ; start of channel data - ld de, $01bf ; length of area to clear (entire sound wram area) + ld de, $1bf ; length of area to clear (entire sound wram area) .clearchannels ; clear Channel1-$c2bf xor a ld [hli], a @@ -72,7 +72,7 @@ MusicFadeRestart: ; e803d ; e8051 MusicOn: ; e8051 - ld a, $01 + ld a, 1 ld [MusicPlaying], a ret ; e8057 @@ -104,7 +104,7 @@ _UpdateSound:: ; e805c ld hl, Channel1NoteDuration - Channel1 add hl, bc ld a, [hl] - cp a, $02 ; 1 or 0? + cp $2 ; 1 or 0? jr c, .noteover dec [hl] jr .asm_e8093 @@ -147,7 +147,7 @@ _UpdateSound:: ; e805c jr z, .next ; are we in a sfx channel right now? ld a, [CurChannel] - cp a, $04 + cp $4 jr nc, .next ; are any sfx channels active? ; if so, mute @@ -170,9 +170,9 @@ _UpdateSound:: ; e805c .next ; are we in a sfx channel right now? ld a, [CurChannel] - cp a, $04 ; sfx + cp $4 ; sfx jr nc, .asm_e80ee - ld hl, $00cb + ld hl, Channel5Flags - Channel1 add hl, bc bit 0, [hl] jr nz, .asm_e80fc @@ -198,7 +198,7 @@ _UpdateSound:: ; e805c ld a, [CurChannel] inc a ld [CurChannel], a - cp a, $08 ; are we done? + cp $8 ; are we done? jp nz, .loop ; do it all again call PlayDanger @@ -216,10 +216,10 @@ _UpdateSound:: ; e805c UpdateChannels: ; e8125 ld hl, .ChannelFnPtrs ld a, [CurChannel] - and a, $07 + and $7 add a ld e, a - ld d, $00 + ld d, 0 add hl, de ld a, [hli] ld h, [hl] @@ -271,7 +271,7 @@ UpdateChannels: ; e8125 ld a, [wc292] ld d, a ld a, [rNR11] - and a, $3f ; sound length + and $3f ; sound length or d ld [rNR11], a ret @@ -279,7 +279,7 @@ UpdateChannels: ; e8125 ld a, [wc292] ld d, a ld a, [rNR11] - and a, $3f ; sound length + and $3f ; sound length or d ld [rNR11], a ld a, [wc294] @@ -287,7 +287,7 @@ UpdateChannels: ; e8125 ret .ch1rest ld a, [rNR52] - and a, %10001110 ; ch1 off + and %10001110 ; ch1 off ld [rNR52], a ld hl, rNR10 call ClearChannel @@ -302,7 +302,7 @@ UpdateChannels: ; e8125 ld a, [wc294] ld [rNR13], a ld a, [wc295] - or a, $80 + or $80 ld [rNR14], a ret @@ -321,7 +321,7 @@ UpdateChannels: ; e8125 ld a, [wc292] ld d, a ld a, [rNR21] - and a, $3f ; sound length + and $3f ; sound length or d ld [rNR21], a ret @@ -335,7 +335,7 @@ UpdateChannels: ; e8125 ld a, [wc292] ld d, a ld a, [rNR21] - and a, $3f ; sound length + and $3f ; sound length or d ld [rNR21], a ld a, [wc294] @@ -343,7 +343,7 @@ UpdateChannels: ; e8125 ret .ch2rest ld a, [rNR52] - and a, %10001101 ; ch2 off + and %10001101 ; ch2 off ld [rNR52], a ld hl, rNR20 call ClearChannel @@ -358,7 +358,7 @@ UpdateChannels: ; e8125 ld a, [wc294] ld [rNR23], a ld a, [wc295] - or a, $80 ; initial (restart) + or $80 ; initial (restart) ld [rNR24], a ret @@ -385,7 +385,7 @@ UpdateChannels: ; e8125 ret .ch3rest ld a, [rNR52] - and a, %10001011 ; ch3 off + and %10001011 ; ch3 off ld [rNR52], a ld hl, rNR30 call ClearChannel @@ -401,17 +401,17 @@ UpdateChannels: ; e8125 ld a, [wc294] ld [rNR33], a ld a, [wc295] - or a, $80 + or $80 ld [rNR34], a ret .asm_e8268 push hl ld a, [wc293] - and a, $0f ; only 0-9 are valid + and $f ; only 0-9 are valid ld l, a - ld h, $00 + ld h, 0 ; hl << 4 - ; each wavepattern is $0f bytes long + ; each wavepattern is $f bytes long ; so seeking is done in $10s rept 4 add hl, hl @@ -453,7 +453,7 @@ endr ld [rWave_f], a pop hl ld a, [wc293] - and a, $f0 + and $f0 sla a ld [rNR32], a ret @@ -473,7 +473,7 @@ endr ret .ch4rest ld a, [rNR52] - and a, %10000111 ; ch4 off + and %10000111 ; ch4 off ld [rNR52], a ld hl, rNR40 call ClearChannel @@ -515,13 +515,13 @@ PlayDanger: ; e8307 ld a, [Danger] bit 7, a ret z - and a, $7f + and $7f ld d, a call _CheckSFX jr c, .asm_e8335 and a jr z, .asm_e8323 - cp a, 16 ; halfway + cp 16 ; halfway jr z, .asm_e831e jr .asm_e8335 .asm_e831e @@ -543,33 +543,33 @@ PlayDanger: ; e8307 .asm_e8335 ld a, d inc a - cp a, 30 + cp 30 jr c, .asm_e833c xor a .asm_e833c - or a, $80 + or $80 ld [Danger], a ; is hw ch1 on? ld a, [SoundOutput] - and a, $11 + and $11 ret nz ; if not, turn it on ld a, [SoundOutput] - or a, $11 + or $11 ld [SoundOutput], a ret ; e8350 Tablee8350: ; e8350 db $80 ; duty 50% - db $e2 ; volume $e, envelope decrease sweep 2 + db $e2 ; volume 14, envelope decrease sweep 2 db $50 ; frequency: $750 db $87 ; restart sound ; e8354 Tablee8354: ; e8354 db $80 ; duty 50% - db $e2 ; volume $e, envelope decrease sweep 2 + db $e2 ; volume 14, envelope decrease sweep 2 db $ee ; frequency: $6ee db $86 ; restart sound ; e8358 @@ -600,11 +600,11 @@ FadeMusic: ; e8358 ld a, [MusicFade] ld d, a ; get new count - and a, $3f + and $3f ld [MusicFadeCount], a ; get SO1 volume ld a, [Volume] - and a, $07 + and $7 ; which way are we fading? bit 7, d jr nz, .fadein @@ -620,7 +620,7 @@ FadeMusic: ; e8358 ld [Volume], a ; did we just get on a bike? ld a, [PlayerState] - cp a, $01 ; bicycle + cp $1 ; bicycle jr z, .bicycle push bc ; restart sound @@ -664,7 +664,7 @@ FadeMusic: ; e8358 .fadein ; are we done? - cp a, $07 + cp $7 jr nc, .maxvolume ; inc volume inc a @@ -696,7 +696,7 @@ LoadNote: ; e83d1 ld hl, wc297 ; ???? sub [hl] jr nc, .ok - ld a, $01 + ld a, 1 .ok ld [hl], a ; get frequency @@ -706,16 +706,16 @@ LoadNote: ; e83d1 inc hl ld d, [hl] ; ???? - ld hl, $0021 + ld hl, Channel1Field0x21 - Channel1 add hl, bc ld a, e sub [hl] ld e, a ld a, d - sbc a, $00 + sbc a, 0 ld d, a ; ???? - ld hl, $0022 + ld hl, Channel1Field0x22 - Channel1 add hl, bc sub [hl] jr nc, .asm_e8420 @@ -730,16 +730,16 @@ LoadNote: ; e83d1 inc hl ld d, [hl] ; ???? - ld hl, $0021 + ld hl, Channel1Field0x21 - Channel1 add hl, bc ld a, [hl] sub e ld e, a ld a, d - sbc a, $00 + sbc a, 0 ld d, a ; ???? - ld hl, $0022 + ld hl, Channel1Field0x22 - Channel1 add hl, bc ld a, [hl] sub d @@ -757,23 +757,23 @@ LoadNote: ; e83d1 inc hl ld d, [hl] ; ???? - ld hl, $0021 + ld hl, Channel1Field0x21 - Channel1 add hl, bc ld a, e sub [hl] ld e, a ld a, d - sbc a, $00 + sbc a, 0 ld d, a ; ???? - ld hl, $0022 + ld hl, Channel1Field0x22 - Channel1 add hl, bc sub [hl] ld d, a .asm_e843e push bc ld hl, wc297 - ld b, $00 ; loop count + ld b, 0; loop count .loop inc b ld a, e @@ -791,14 +791,14 @@ LoadNote: ; e83d1 ld d, b ; loop count ; ???? pop bc - ld hl, $0023 + ld hl, Channel1Field0x23 - Channel1 add hl, bc ld [hl], d - ld hl, $0024 + ld hl, Channel1Field0x24 - Channel1 add hl, bc ld [hl], a ; clear ???? - ld hl, $0025 + ld hl, Channel1Field0x25 - Channel1 add hl, bc xor a ld [hl], a @@ -812,13 +812,13 @@ Functione8466: ; e8466 add hl, bc bit 2, [hl] jr z, .next - ld hl, $001c + ld hl, Channel1Field0x1c - Channel1 add hl, bc ld a, [hl] rlca rlca ld [hl], a - and a, $c0 + and $c0 ld [wc292], a ld hl, Channel1NoteFlags - Channel1 add hl, bc @@ -869,7 +869,7 @@ Functione8466: ; e8466 ld hl, Channel1VibratoRate - Channel1 add hl, bc ld a, [hl] - and a, $0f ; count + and $f ; count jr z, .toggle .subexit dec [hl] @@ -893,20 +893,20 @@ Functione8466: ; e8466 res 0, [hl] ; get the delay ld a, d - and a, $0f ; lo + and $f ; lo ; ld d, a ld a, e sub d jr nc, .asm_e84ef - ld a, $00 + ld a, 0 jr .asm_e84ef .down ; vibrato up set 0, [hl] ; get the delay ld a, d - and a, $f0 ; hi + and $f0 ; hi swap a ; move it to lo ; add e @@ -940,36 +940,36 @@ Functione84f9: ; e84f9 bit 1, [hl] jr z, .next ; - ld hl, $0023 + ld hl, Channel1Field0x23 - Channel1 add hl, bc ld l, [hl] - ld h, $00 + ld h, 0 add hl, de ld d, h ld e, l ; get ???? - ld hl, $0024 + ld hl, Channel1Field0x24 - Channel1 add hl, bc ld a, [hl] ; add it to ???? - ld hl, $0025 + ld hl, Channel1Field0x25 - Channel1 add hl, bc add [hl] ld [hl], a - ld a, $00 + ld a, 0 adc e ld e, a - ld a, $00 + ld a, 0 adc d ld d, a ; - ld hl, $0022 + ld hl, Channel1Field0x22 - Channel1 add hl, bc ld a, [hl] cp d jp c, .quit1 jr nz, .quit2 - ld hl, $0021 + ld hl, Channel1Field0x21 - Channel1 add hl, bc ld a, [hl] cp e @@ -977,32 +977,32 @@ Functione84f9: ; e84f9 jr .quit2 .next ld a, e - ld hl, $0023 + ld hl, Channel1Field0x23 - Channel1 add hl, bc ld e, [hl] sub e ld e, a ld a, d - sbc a, $00 + sbc a, 0 ld d, a - ld hl, $0024 + ld hl, Channel1Field0x24 - Channel1 add hl, bc ld a, [hl] add a ld [hl], a ld a, e - sbc a, $00 + sbc a, 0 ld e, a ld a, d - sbc a, $00 + sbc a, 0 ld d,a - ld hl, $0022 + ld hl, Channel1Field0x22 - Channel1 add hl, bc ld a, d cp [hl] jr c, .quit1 jr nz, .quit2 - ld hl, $0021 + ld hl, Channel1Field0x21 - Channel1 add hl, bc ld a, e cp [hl] @@ -1108,9 +1108,9 @@ ReadNoiseSample: ; e85af ParseMusic: ; e85e1 ; parses until a note is read or the song is ended call GetMusicByte ; store next byte in a - cp a, $ff ; is the song over? + cp $ff ; is the song over? jr z, .readff - cp a, $d0 ; is it a note? + cp $d0 ; is it a note? jr c, .readnote ; then it's a command .readcommand @@ -1131,13 +1131,13 @@ ParseMusic: ; e85e1 ; normal note ; set note duration (bottom nybble) ld a, [CurMusicByte] - and a, $0f + and $f call SetNoteDuration ; get note pitch (top nybble) ld a, [CurMusicByte] swap a - and a, $0f - jr z, .rest ; pitch $0 -> rest + and $f + jr z, .rest ; pitch 0-> rest ; update pitch ld hl, Channel1Pitch - Channel1 add hl, bc @@ -1160,6 +1160,7 @@ ParseMusic: ; e85e1 add hl, bc set 4, [hl] jp LoadNote + .rest ; note = rest ld hl, Channel1NoteFlags - Channel1 @@ -1174,21 +1175,21 @@ ParseMusic: ; e85e1 bit 1, [hl] ; in a subroutine? jr nz, .readcommand ; execute ld a, [CurChannel] - cp a, $04 ; channels 0-3? - jr nc, .asm_e8651 + cp $4 ; channels 0-3? + jr nc, .chan_5to8 ; ???? - ld hl, $00cb + ld hl, Channel5Flags - Channel1 add hl, bc bit 0, [hl] jr nz, .ok -.asm_e8651 +.chan_5to8 ld hl, Channel1Flags - Channel1 add hl, bc bit 5, [hl] call nz, RestoreVolume ; end music ld a, [CurChannel] - cp a, $04 ; channel 5? + cp $4 ; channel 5? jr nz, .ok ; ???? xor a @@ -1216,7 +1217,7 @@ ParseMusic: ; e85e1 RestoreVolume: ; e8679 ; ch5 only ld a, [CurChannel] - cp a, $04 + cp $4 ret nz xor a ld hl, Channel6CryPitch @@ -1253,8 +1254,8 @@ Functione8698: ; e8698 ld [hl], a ; are we on the last channel? (noise sampling) ld a, [CurChannel] - and a, $03 - cp a, $03 + and $3 + cp $3 ret z ; update hi frequency from next param call GetMusicByte @@ -1268,13 +1269,13 @@ GetNoiseSample: ; e86c5 ; load ptr to sample header in NoiseSampleAddress ; are we on the last channel? ld a, [CurChannel] - and a, $03 - cp a, $03 + and $3 + cp $3 ; ret if not ret nz ; update note duration ld a, [CurMusicByte] - and a, $0f + and $f call SetNoteDuration ; check current channel ld a, [CurChannel] @@ -1290,7 +1291,7 @@ GetNoiseSample: ; e86c5 .next ; load noise sample set id into de ld e, a - ld d, $00 + ld d, 0 ; load ptr to noise sample set in hl ld hl, Drumkits rept 2 @@ -1303,11 +1304,11 @@ endr ld a, [CurMusicByte] swap a ; non-rest note? - and a, $0f + and $f ret z ; use 'pitch' to seek noise sample set ld e, a - ld d, $00 + ld d, 0 rept 2 add hl, de endr @@ -1328,7 +1329,7 @@ ParseMusicCommand: ; e870f ; get command # sub a, $d0 ; first command ld e, a - ld d, $00 + ld d, 0 ; seek command pointer ld hl, MusicCommands rept 2 @@ -1344,39 +1345,39 @@ endr MusicCommands: ; e8720 ; pointer to each command in order ; octaves - dw MusicD0 ; octave 8 - dw MusicD1 ; octave 7 - dw MusicD2 ; octave 6 - dw MusicD3 ; octave 5 - dw MusicD4 ; octave 4 - dw MusicD5 ; octave 3 - dw MusicD6 ; octave 2 - dw MusicD7 ; octave 1 - dw MusicD8 ; note length + intensity - dw MusicD9 ; set starting octave - dw MusicDA ; tempo - dw MusicDB ; duty cycle - dw MusicDC ; intensity - dw MusicDD ; update sound status + dw Music_Octave8 ; octave 8 + dw Music_Octave7 ; octave 7 + dw Music_Octave6 ; octave 6 + dw Music_Octave5 ; octave 5 + dw Music_Octave4 ; octave 4 + dw Music_Octave3 ; octave 3 + dw Music_Octave2 ; octave 2 + dw Music_Octave1 ; octave 1 + dw Music_NoteType ; note length + intensity + dw Music_ForceOctave ; set starting octave + dw Music_Tempo ; tempo + dw Music_DutyCycle ; duty cycle + dw Music_Intensity ; intensity + dw Music_SoundStatus ; update sound status dw MusicDE ; ???? + duty cycle - dw MusicDF ; + dw Music_ToggleSFX ; dw MusicE0 ; - dw MusicE1 ; vibrato + dw Music_Vibrato ; vibrato dw MusicE2 ; - dw MusicE3 ; music noise sampling - dw MusicE4 ; force panning - dw MusicE5 ; volume - dw MusicE6 ; tune + dw Music_ToggleNoise ; music noise sampling + dw Music_Panning ; force panning + dw Music_Volume ; volume + dw Music_Tone ; tune dw MusicE7 ; dw MusicE8 ; - dw MusicE9 ; global tempo - dw MusicEA ; restart current channel from header - dw MusicEB ; new song - dw MusicEC ; sfx priority on - dw MusicED ; sfx priority off + dw Music_GlobalTempo ; global tempo + dw Music_RestartChannel ; restart current channel from header + dw Music_NewSong ; new song + dw Music_SFXPriorityOn ; sfx priority on + dw Music_SFXPriorityOff ; sfx priority off dw MusicEE ; - dw MusicEF ; stereo panning - dw MusicF0 ; sfx noise sampling + dw Music_StereoPanning ; stereo panning + dw Music_SFXToggleNoise ; sfx noise sampling dw MusicF1 ; nothing dw MusicF2 ; nothing dw MusicF3 ; nothing @@ -1386,12 +1387,12 @@ MusicCommands: ; e8720 dw MusicF7 ; nothing dw MusicF8 ; nothing dw MusicF9 ; - dw MusicFA ; - dw MusicFB ; - dw MusicFC ; jump - dw MusicFD ; loop - dw MusicFE ; call - dw MusicFF ; return + dw Music_SetCondition ; + dw Music_JumpIf ; + dw Music_JumpChannel ; jump + dw Music_LoopChannel ; loop + dw Music_CallChannel ; call + dw Music_EndChannel ; return ; e8780 MusicF1: ; e8780 @@ -1405,7 +1406,7 @@ MusicF8: ; e8780 ret ; e8781 -MusicFF: ; e8781 +Music_EndChannel: ; e8781 ; called when $ff is encountered w/ subroutine flag set ; end music stream ; return to caller of the subroutine @@ -1427,7 +1428,7 @@ MusicFF: ; e8781 ret ; e8796 -MusicFE: ; e8796 +Music_CallChannel: ; e8796 ; call music stream (subroutine) ; parameters: ll hh ; pointer to subroutine ; get pointer from next 2 bytes @@ -1461,7 +1462,7 @@ MusicFE: ; e8796 ret ; e87bc -MusicFC: ; e87bc +Music_JumpChannel: ; e87bc ; jump ; parameters: ll hh ; pointer ; get pointer from next 2 bytes @@ -1477,7 +1478,7 @@ MusicFC: ; e87bc ret ; e87cc -MusicFD: ; e87cc +Music_LoopChannel: ; e87cc ; loops xx - 1 times ; 00: infinite ; params: 3 @@ -1539,7 +1540,7 @@ MusicFD: ; e87cc ret ; e880e -MusicFA: ; e880e +Music_SetCondition: ; e880e ; set condition for a jump ; used with FB ; params: 1 @@ -1553,7 +1554,7 @@ MusicFA: ; e880e ret ; e8817 -MusicFB: ; e8817 +Music_JumpIf: ; e8817 ; conditional jump ; used with FA ; params: 3 @@ -1610,9 +1611,9 @@ MusicEE; e883e ; if ????, jump ; get channel ld a, [CurChannel] - and a, $03 ; ch0-3 + and $3 ; ch0-3 ld e, a - ld d, $00 + ld d, 0 ; hl = wc2b8 + channel id ld hl, wc2b8 add hl, de @@ -1638,7 +1639,7 @@ endr ret .jump ; reset jump flag - ld [hl], $00 + ld [hl], 0 ; de = pointer call GetMusicByte ld e, a @@ -1657,7 +1658,7 @@ MusicF9: ; e886d ; sets some flag ; seems to be unused ; params: 0 - ld a, $01 + ld a, 1 ld [wc2b5], a ret ; e8873 @@ -1666,7 +1667,7 @@ MusicE2: ; e8873 ; seems to have been dummied out ; params: 1 call GetMusicByte - ld hl, $002c + ld hl, Channel1Field0x2c - Channel1 add hl, bc ld [hl], a ld hl, Channel1Flags2 - Channel1 @@ -1675,7 +1676,7 @@ MusicE2: ; e8873 ret ; e8882 -MusicE1: ; e8882 +Music_Vibrato: ; e8882 ; vibrato ; params: 2 ; 1: [xx] @@ -1710,11 +1711,11 @@ MusicE1: ; e8882 add hl, bc ld d, a ; get top nybble - and a, $f0 + and $f0 swap a srl a ; halve ld e, a - adc a, $00 ; round up + adc a, 0; round up swap a or e ld [hl], a @@ -1723,7 +1724,7 @@ MusicE1: ; e8882 add hl, bc ; get bottom nybble ld a, d - and a, $0f + and $f ld d, a swap a or d @@ -1736,19 +1737,21 @@ MusicE0: ; e88bd ; params: 2 call GetMusicByte ld [wc297], a + call GetMusicByte ld d, a - and a, $0f + and $f ld e, a + ld a, d swap a - and a, $0f + and $f ld d, a call GetFrequency - ld hl, $0021 + ld hl, Channel1Field0x21 - Channel1 add hl, bc ld [hl], e - ld hl, $0022 + ld hl, Channel1Field0x22 - Channel1 add hl, bc ld [hl], d ld hl, Channel1Flags2 - Channel1 @@ -1757,7 +1760,7 @@ MusicE0: ; e88bd ret ; e88e4 -MusicE6: ; e88e4 +Music_Tone: ; e88e4 ; tone ; params: 2 ld hl, Channel1Flags2 - Channel1 @@ -1779,7 +1782,7 @@ MusicE7: ; e88f7 add hl, bc set 6, [hl] call GetMusicByte - ld hl, $0029 + ld hl, Channel1Field0x29 - Channel1 add hl, bc ld [hl], a ret @@ -1796,11 +1799,11 @@ MusicDE: ; e8906 call GetMusicByte rrca rrca - ld hl, $001c + ld hl, Channel1Field0x1c - Channel1 add hl, bc ld [hl], a ; update duty cycle - and a, $c0 ; only uses top 2 bits + and $c0 ; only uses top 2 bits ld hl, Channel1DutyCycle - Channel1 add hl, bc ld [hl], a @@ -1814,13 +1817,13 @@ MusicE8: ; e891e add hl, bc set 5, [hl] call GetMusicByte - ld hl, $002a + ld hl, Channel1Field0x2a - Channel1 add hl, bc ld [hl], a ret ; e892d -MusicDF: ; e892d +Music_ToggleSFX: ; e892d ; toggle something ; params: none ld hl, Channel1Flags - Channel1 @@ -1834,7 +1837,7 @@ MusicDF: ; e892d ret ; e893b -MusicE3: ; e893b +Music_ToggleNoise: ; e893b ; toggle music noise sampling ; can't be used as a straight toggle since the param is not read from on->off ; params: @@ -1856,7 +1859,7 @@ MusicE3: ; e893b ret ; e894f -MusicF0: ; e894f +Music_SFXToggleNoise: ; e894f ; toggle sfx noise sampling ; params: ; on: 1 @@ -1877,26 +1880,26 @@ MusicF0: ; e894f ret ; e8963 -MusicD8: ; e8963 +Music_NoteType: ; e8963 ; note length ; # frames per 16th note -; intensity: see MusicDC +; intensity: see Music_Intensity ; params: 2 ; note length call GetMusicByte - ld hl, $002d + ld hl, Channel1NoteLength - Channel1 add hl, bc ld [hl], a ld a, [CurChannel] - and a, $03 - cp a, $03 + and $3 + cp $3 ret z ; intensity - call MusicDC + call Music_Intensity ret ; e8977 -MusicDD: ; e8977 +Music_SoundStatus: ; e8977 ; update sound status ; params: 1 call GetMusicByte @@ -1907,20 +1910,20 @@ MusicDD: ; e8977 ret ; e8984 -MusicDB: ; e8984 +Music_DutyCycle: ; e8984 ; duty cycle ; params: 1 call GetMusicByte rrca rrca - and a, $c0 + and $c0 ld hl, Channel1DutyCycle - Channel1 add hl, bc ld [hl], a ret ; e8991 -MusicDC: ; e8991 +Music_Intensity: ; e8991 ; intensity ; params: 1 ; hi: pressure @@ -1932,7 +1935,7 @@ MusicDC: ; e8991 ret ; e899a -MusicDA: ; e899a +Music_Tempo: ; e899a ; global tempo ; params: 2 ; de: tempo @@ -1944,14 +1947,14 @@ MusicDA: ; e899a ret ; e89a6 -MusicD0: ; e89a6 -MusicD1: ; e89a6 -MusicD2: ; e89a6 -MusicD3: ; e89a6 -MusicD4: ; e89a6 -MusicD5: ; e89a6 -MusicD6: ; e89a6 -MusicD7: ; e89a6 +Music_Octave8: ; e89a6 +Music_Octave7: ; e89a6 +Music_Octave6: ; e89a6 +Music_Octave5: ; e89a6 +Music_Octave4: ; e89a6 +Music_Octave3: ; e89a6 +Music_Octave2: ; e89a6 +Music_Octave1: ; e89a6 ; set octave based on lo nybble of the command ld hl, Channel1Octave - Channel1 add hl, bc @@ -1961,7 +1964,7 @@ MusicD7: ; e89a6 ret ; e89b1 -MusicD9: ; e89b1 +Music_ForceOctave: ; e89b1 ; set starting octave ; this forces all notes up by the starting octave ; params: 1 @@ -1972,19 +1975,19 @@ MusicD9: ; e89b1 ret ; e89ba -MusicEF: ; e89ba +Music_StereoPanning: ; e89ba ; stereo panning ; params: 1 ; stereo on? ld a, [Options] bit 5, a ; stereo - jr nz, MusicE4 + jr nz, Music_Panning ; skip param call GetMusicByte ret ; e89c5 -MusicE4: ; e89c5 +Music_Panning: ; e89c5 ; force panning ; params: 1 call SetLRTracks @@ -1996,7 +1999,7 @@ MusicE4: ; e89c5 ret ; e89d2 -MusicE5: ; e89d2 +Music_Volume: ; e89d2 ; set volume ; params: 1 ; see Volume @@ -2013,19 +2016,19 @@ MusicE5: ; e89d2 ret ; e89e1 -MusicE9: ; e89e1 +Music_GlobalTempo: ; e89e1 ; set global tempo to current channel tempo +- param ; params: 1 signed call GetMusicByte ld e, a ; check sign - cp a, $80 + cp $80 jr nc, .negative ;positive - ld d, $00 + ld d, 0 jr .ok .negative - ld d, $ff + ld d, -1 .ok ld hl, Channel1Tempo - Channel1 add hl, bc @@ -2039,15 +2042,15 @@ MusicE9: ; e89e1 ret ; e89fd -MusicEC: ; e89fd +Music_SFXPriorityOn: ; e89fd ; turn sfx priority on ; params: none - ld a, $01 + ld a, 1 ld [SFXPriority], a ret ; e8a03 -MusicED: ; e8a03 +Music_SFXPriorityOff: ; e8a03 ; turn sfx priority off ; params: none xor a @@ -2055,7 +2058,7 @@ MusicED: ; e8a03 ret ; e8a08 -MusicEA: ; e8a08 +Music_RestartChannel: ; e8a08 ; restart current channel from channel header (same bank) ; params: 2 (5) ; ll hh: pointer to new channel header @@ -2090,7 +2093,7 @@ MusicEA: ; e8a08 ret ; e8a30 -MusicEB: ; e8a30 +Music_NewSong: ; e8a30 ; new song ; params: 2 ; de: song id @@ -2151,7 +2154,7 @@ GetFrequency: ; e8a5d add hl, bc ld a, [hl] swap a ; hi nybble - and a, $0f + and $f ; add current octave add d push af ; we'll use this later @@ -2159,10 +2162,10 @@ GetFrequency: ; e8a5d ld hl, Channel1StartingOctave - Channel1 add hl, bc ld a, [hl] - and a, $0f ; lo nybble + and $f ; lo nybble ; ld l, a ; ok - ld d, $00 + ld d, 0 ld h, d add hl, de ; add current pitch add hl, hl ; skip 2 bytes for each @@ -2173,9 +2176,10 @@ GetFrequency: ; e8a5d ld d, [hl] ; get our octave pop af + ; shift right by [7 - octave] bits .loop ; [7 - octave] loops - cp a, $07 + cp $7 jr nc, .ok ; sra de sra d @@ -2184,7 +2188,7 @@ GetFrequency: ; e8a5d jr .loop .ok ld a, d - and a, $07 ; top 3 bits for frequency (11 total) + and $7 ; top 3 bits for frequency (11 total) ld d, a ret ; e8a8d @@ -2194,13 +2198,13 @@ SetNoteDuration: ; e8a8d ; store delay units in de inc a ld e, a - ld d, $00 + ld d, 0 ; store NoteLength in a ld hl, Channel1NoteLength - Channel1 add hl, bc ld a, [hl] ; multiply NoteLength by delay units - ld l, $00 ; just multiply + ld l, 0; just multiply call MultiplySimple ld a, l ; % $100 ; store Tempo in de @@ -2210,7 +2214,7 @@ SetNoteDuration: ; e8a8d inc hl ld d, [hl] ; add ???? to the next result - ld hl, $0016 + ld hl, Channel1Field0x16 - Channel1 add hl, bc ld l, [hl] ; multiply Tempo by last result (NoteLength * delay % $100) @@ -2219,7 +2223,7 @@ SetNoteDuration: ; e8a8d ld e, l ld d, h ; store result in ???? - ld hl, $0016 + ld hl, Channel1Field0x16 - Channel1 add hl, bc ld [hl], e ; store result in NoteDuration @@ -2233,7 +2237,7 @@ MultiplySimple: ; e8ab8 ; multiplies a and de ; adds the result to l ; stores the result in hl - ld h, $00 + ld h, 0 .loop ; halve a srl a @@ -2255,7 +2259,7 @@ SetGlobalTempo: ; e8ac7 push bc ; save current channel ; are we dealing with music or sfx? ld a, [CurChannel] - cp a, $04 + cp $4 jr nc, .sfxchannels ld bc, Channel1 call SetTempo @@ -2291,7 +2295,7 @@ SetTempo: ; e8b03 ld [hl], d ; clear ???? xor a - ld hl, $0016 + ld hl, Channel1Field0x16 - Channel1 add hl, bc ld [hl], a ret @@ -2311,9 +2315,9 @@ SetLRTracks: ; e8b1b push de ; store current channel in de ld a, [CurChannel] - and a, $03 + and $3 ld e, a - ld d, $00 + ld d, 0 ; get this channel's lr tracks call GetLRTracks add hl, de ; de = channel 0-3 @@ -2332,7 +2336,7 @@ _PlayMusic:: ; e8b30 ld hl, MusicID ld [hl], e ; song number inc hl - ld [hl], d ; MusicIDHi (always $00) + ld [hl], d ; MusicIDHi (always $) ld hl, Music add hl, de ; three add hl, de ; byte @@ -2345,7 +2349,7 @@ _PlayMusic:: ; e8b30 call LoadMusicByte ; store first byte of music header in a rlca rlca - and a, $03 ; get number of channels + and $3 ; get number of channels inc a .loop ; start playing channels @@ -2400,7 +2404,7 @@ endr ; Top 2 bits contain the number of channels rlca rlca - and a, 3 + and 3 ; For each channel: inc a @@ -2425,7 +2429,7 @@ endr ; No tempo for channel 4 ld a, [CurChannel] - and a, 3 + and 3 cp 3 jr nc, .start @@ -2454,7 +2458,7 @@ endr add hl, bc ld a, [hl] ld hl, CryTracks - and a, [hl] + and [hl] ld hl, Channel1Tracks - Channel1 add hl, bc ld [hl], a @@ -2491,7 +2495,7 @@ _PlaySFX:: ; e8c04 res 0, [hl] ; turn it off xor a ld [rNR11], a ; length/wavepattern = 0 - ld a, $08 + ld a, $8 ld [rNR12], a ; envelope = 0 xor a ld [rNR13], a ; frequency lo = 0 @@ -2507,7 +2511,7 @@ _PlaySFX:: ; e8c04 res 0, [hl] ; turn it off xor a ld [rNR21], a ; length/wavepattern = 0 - ld a, $08 + ld a, $8 ld [rNR22], a ; envelope = 0 xor a ld [rNR23], a ; frequency lo = 0 @@ -2521,7 +2525,7 @@ _PlaySFX:: ; e8c04 xor a ld [rNR30], a ; sound mode #3 off ld [rNR31], a ; length/wavepattern = 0 - ld a, $08 + ld a, $8 ld [rNR32], a ; envelope = 0 xor a ld [rNR33], a ; frequency lo = 0 @@ -2534,7 +2538,7 @@ _PlaySFX:: ; e8c04 res 0, [hl] ; turn it off xor a ld [rNR41], a ; length/wavepattern = 0 - ld a, $08 + ld a, $8 ld [rNR42], a ; envelope = 0 xor a ld [rNR43], a ; frequency lo = 0 @@ -2564,7 +2568,7 @@ _PlaySFX:: ; e8c04 call LoadMusicByte rlca ; top 2 rlca ; bits - and a, $03 + and $3 inc a ; # channels -> # loops .startchannels push af @@ -2633,7 +2637,7 @@ endr ld a, [CurChannel] and 3 ; ch1-4 ld e, a - ld d, $0 + ld d, 0 call GetLRTracks add hl, de ld a, [hl] @@ -2644,22 +2648,22 @@ endr add hl, bc ld [hl], a - ld hl, $0030 ; $c131 - Channel1 + ld hl, Channel1Field0x30 - Channel1 ; $c131 - Channel1 add hl, bc ld [hl], a ld a, [CryTracks] cp 2 ; ch 1-2 - jr c, .asm_e8d0c + jr c, .skip ; ch3-4 ld a, [wc2be] - ld hl, $002e ; $c12f - Channel1 + ld hl, Channel1Field0x2e - Channel1 ; $c12f - Channel1 add hl, bc ld [hl], a - ld hl, $002f ; $c130 - Channel1 + ld hl, Channel1Field0x2f - Channel1 ; $c130 - Channel1 add hl, bc ld [hl], a @@ -2667,7 +2671,7 @@ endr add hl, bc set 7, [hl] -.asm_e8d0c +.skip pop de ; turn channel on @@ -2693,10 +2697,10 @@ LoadChannel: ; e8d1b ; get pointer to current channel call LoadMusicByte inc de - and a, $07 ; bit 0-2 (current channel) + and $7 ; bit 0-2 (current channel) ld [CurChannel], a ld c, a - ld b, $00 + ld b, 0 ld hl, ChannelPointers rept 2 add hl, bc @@ -2755,7 +2759,7 @@ ChannelInit: ; e8d5b ld [hli], a inc a ld [hl], a - ; set note length to default ($01) (fast) + ; set note length to default ($1) (fast) ld hl, Channel1NoteLength - Channel1 add hl, bc ld [hl], a @@ -2805,16 +2809,16 @@ FrequencyTable: ; e8d80 WaveSamples: ; e8db2 ; these are streams of 32 4-bit values used as wavepatterns ; nothing interesting here! - db $02, $46, $8a, $ce, $ff, $fe, $ed, $dc, $cb, $a9, $87, $65, $44, $33, $22, $11 - db $02, $46, $8a, $ce, $ef, $ff, $fe, $ee, $dd, $cb, $a9, $87, $65, $43, $22, $11 - db $13, $69, $bd, $ee, $ee, $ff, $ff, $ed, $de, $ff, $ff, $ee, $ee, $db, $96, $31 - db $02, $46, $8a, $cd, $ef, $fe, $de, $ff, $ee, $dc, $ba, $98, $76, $54, $32, $10 - db $01, $23, $45, $67, $8a, $cd, $ee, $f7, $7f, $ee, $dc, $a8, $76, $54, $32, $10 - db $00, $11, $22, $33, $44, $33, $22, $11, $ff, $ee, $cc, $aa, $88, $aa, $cc, $ee - db $02, $46, $8a, $ce, $cb, $a9, $87, $65, $ff, $fe, $ed, $dc, $44, $33, $22, $11 - db $c0, $a9, $87, $f5, $ff, $fe, $ed, $dc, $44, $33, $22, $f1, $02, $46, $8a, $ce - db $44, $33, $22, $1f, $00, $46, $8a, $ce, $f8, $fe, $ed, $dc, $cb, $a9, $87, $65 - db $11, $00, $00, $08, $00, $13, $57, $9a, $b4, $ba, $a9, $98, $87, $65, $43, $21 + dn 0, 2, 4, 6, 8, 10, 12, 14, 15, 15, 15, 14, 14, 13, 13, 12, 12, 11, 10, 9, 8, 7, 6, 5, 4, 4, 3, 3, 2, 2, 1, 1 + dn 0, 2, 4, 6, 8, 10, 12, 14, 14, 15, 15, 15, 15, 14, 14, 14, 13, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 2, 1, 1 + dn 1, 3, 6, 9, 11, 13, 14, 14, 14, 14, 15, 15, 15, 15, 14, 13, 13, 14, 15, 15, 15, 15, 14, 14, 14, 14, 13, 11, 9, 6, 3, 1 + dn 0, 2, 4, 6, 8, 10, 12, 13, 14, 15, 15, 14, 13, 14, 15, 15, 14, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 + dn 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 14, 15, 7, 7, 15, 14, 14, 13, 12, 10, 8, 7, 6, 5, 4, 3, 2, 1, 0 + dn 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 3, 3, 2, 2, 1, 1, 15, 15, 14, 14, 12, 12, 10, 10, 8, 8, 10, 10, 12, 12, 14, 14 + dn 0, 2, 4, 6, 8, 10, 12, 14, 12, 11, 10, 9, 8, 7, 6, 5, 15, 15, 15, 14, 14, 13, 13, 12, 4, 4, 3, 3, 2, 2, 1, 1 + dn 12, 0, 10, 9, 8, 7, 15, 5, 15, 15, 15, 14, 14, 13, 13, 12, 4, 4, 3, 3, 2, 2, 15, 1, 0, 2, 4, 6, 8, 10, 12, 14 + dn 4, 4, 3, 3, 2, 2, 1, 15, 0, 0, 4, 6, 8, 10, 12, 14, 15, 8, 15, 14, 14, 13, 13, 12, 12, 11, 10, 9, 8, 7, 6, 5 + dn 1, 1, 0, 0, 0, 0, 0, 8, 0, 0, 1, 3, 5, 7, 9, 10, 11, 4, 11, 10, 10, 9, 9, 8, 8, 7, 6, 5, 4, 3, 2, 1 ; e8e52 Drumkits: ; e8e52 @@ -2915,27 +2919,27 @@ Drumkit5: ; e8ee0 Drum00: ; e8efa ; unused noise $20, $11, $00 - db $ff ; end + endchannel ; e8efe Snare1: ; e8efe noise $20, $c1, $33 - db $ff ; end + endchannel ; e8f02 Snare2: ; e8f02 noise $20, $b1, $33 - db $ff ; end + endchannel ; e8f06 Snare3: ; e8f06 noise $20, $a1, $33 - db $ff ; end + endchannel ; e8f0a Snare4: ; e8f0a noise $20, $81, $33 - db $ff ; end + endchannel ; e8f0e Drum05: ; e8f0e @@ -2945,85 +2949,85 @@ Drum05: ; e8f0e noise $24, $83, $34 noise $23, $82, $33 noise $22, $81, $32 - db $ff ; end + endchannel ; e8f21 Triangle1: ; e8f21 noise $20, $51, $2a - db $ff ; end + endchannel ; e8f25 Triangle2: ; e8f25 noise $21, $41, $2b noise $20, $61, $2a - db $ff ; end + endchannel ; e8f2c HiHat1: ; e8f2c noise $20, $81, $10 - db $ff ; end + endchannel ; e8f30 Snare5: ; e8f30 noise $20, $82, $23 - db $ff ; end + endchannel ; e8f34 Snare6: ; e8f34 noise $20, $82, $25 - db $ff ; end + endchannel ; e8f38 Snare7: ; e8f38 noise $20, $82, $26 - db $ff ; end + endchannel ; e8f3c HiHat2: ; e8f3c noise $20, $a1, $10 - db $ff ; end + endchannel ; e8f40 HiHat3: ; e8f40 noise $20, $a2, $11 - db $ff ; end + endchannel ; e8f44 Snare8: ; e8f44 noise $20, $a2, $50 - db $ff ; end + endchannel ; e8f48 Triangle3: ; e8f48 noise $20, $a1, $18 noise $20, $31, $33 - db $ff ; end + endchannel ; e8f4f Triangle4: ; e8f4f noise $22, $91, $28 noise $20, $71, $18 - db $ff ; end + endchannel ; e8f56 Snare9: ; e8f56 noise $20, $91, $22 - db $ff ; end + endchannel ; e8f5a Snare10: ; e8f5a noise $20, $71, $22 - db $ff ; end + endchannel ; e8f5e Snare11: ; e8f5e noise $20, $61, $22 - db $ff ; end + endchannel ; e8f62 Drum20: ; e8f62 noise $20, $11, $11 - db $ff ; end + endchannel ; e8f66 Drum21: ; e8f66 @@ -3032,91 +3036,91 @@ Drum21: ; e8f66 Snare12: ; e8f67 noise $20, $91, $33 - db $ff ; end + endchannel ; e8f6b Snare13: ; e8f6b noise $20, $51, $32 - db $ff ; end + endchannel ; e8f6f Snare14: ; e8f6f noise $20, $81, $31 - db $ff ; end + endchannel ; e8f73 Kick1: ; e8f73 noise $20, $88, $6b noise $20, $71, $00 - db $ff ; end + endchannel ; e8f7a Triangle5: ; e8f7a noise $30, $91, $18 - db $ff ; end + endchannel ; e8f7e Drum27: ; e8f7e noise $27, $92, $10 - db $ff ; end + endchannel ; e8f82 Drum28: ; e8f82 noise $33, $91, $00 noise $33, $11, $00 - db $ff ; end + endchannel ; e8f89 Drum29: ; e8f89 noise $33, $91, $11 noise $33, $11, $00 - db $ff ; end + endchannel ; e8f90 Crash1: ; e8f90 noise $33, $88, $15 noise $20, $65, $12 - db $ff ; end + endchannel ; e8f97 Drum31: ; e8f97 noise $33, $51, $21 noise $33, $11, $11 - db $ff ; end + endchannel ; e8f9e Drum32: ; e8f9e noise $33, $51, $50 noise $33, $11, $11 - db $ff ; end + endchannel ; e8fa5 Drum33: ; e8fa5 noise $20, $a1, $31 - db $ff ; end + endchannel ; e8fa9 Crash2: ; e8fa9 noise $20, $84, $12 - db $ff ; end + endchannel ; e8fad Drum35: ; e8fad noise $33, $81, $00 noise $33, $11, $00 - db $ff ; end + endchannel ; e8fb4 Drum36: ; e8fb4 noise $33, $81, $21 noise $33, $11, $11 - db $ff ; end + endchannel ; e8fbb Kick2: ; e8fbb noise $20, $a8, $6b noise $20, $71, $00 - db $ff ; end + endchannel ; e8fc2 GetLRTracks: ; e8fc2 @@ -3170,7 +3174,7 @@ endr ld a, $80 ld [hli], a ld hl, rNR10 - ld e, $04 + ld e, $4 .loop call ClearChannel dec e @@ -3187,7 +3191,7 @@ ClearChannel: ; e8ffe ld [hli], a ; rNR10, rNR20, rNR30, rNR40 ; sweep = 0 ld [hli], a ; rNR11, rNR21, rNR31, rNR41 ; length/wavepattern = 0 - ld a, $08 + ld a, $8 ld [hli], a ; rNR12, rNR22, rNR32, rNR42 ; envelope = 0 xor a ld [hli], a ; rNR13, rNR23, rNR33, rNR43 ; frequency lo = 0 diff --git a/audio/music/evolution.asm b/audio/music/evolution.asm index 05d199c84..523646994 100644 --- a/audio/music/evolution.asm +++ b/audio/music/evolution.asm @@ -13,13 +13,13 @@ Music_Evolution_Ch1: ; f06ed dutycycle $2 notetype $c, $92 octave 3 - unknownmusic0xe0 $0, $4a + unknownmusic0xe0 $0, 4, A_ note C_, 1 - unknownmusic0xe0 $0, $4a + unknownmusic0xe0 $0, 4, A_ note G_, 1 - unknownmusic0xe0 $0, $4a + unknownmusic0xe0 $0, 4, A_ note C_, 1 - unknownmusic0xe0 $0, $4a + unknownmusic0xe0 $0, 4, A_ note G_, 1 note __, 4 dutycycle $3 diff --git a/audio/music/healpokemon.asm b/audio/music/healpokemon.asm index 7b50731d6..74e58404b 100644 --- a/audio/music/healpokemon.asm +++ b/audio/music/healpokemon.asm @@ -11,16 +11,16 @@ Music_HealPokemon_Ch1: ; f06a0 tone $0001 notetype $c, $81 note __, 2 - unknownmusic0xe0 $0, $40 + unknownmusic0xe0 $0, 4, __ note B_, 2 - unknownmusic0xe0 $0, $55 + unknownmusic0xe0 $0, 5, E_ note B_, 2 - unknownmusic0xe0 $0, $45 + unknownmusic0xe0 $0, 4, E_ note E_, 2 note __, 4 - unknownmusic0xe0 $0, $30 + unknownmusic0xe0 $0, 3, __ note E_, 4 - unknownmusic0xe0 $0, $40 + unknownmusic0xe0 $0, 4, __ note B_, 4 endchannel ; f06c4 diff --git a/engine/mysterygift.asm b/engine/mysterygift.asm index 43cbe52d1..91b0a3929 100755 --- a/engine/mysterygift.asm +++ b/engine/mysterygift.asm @@ -702,22 +702,23 @@ Function104ddd: ; 104ddd (41:4ddd) ld e, d ld a, $1 ld [hPrintNum9], a -.asm_104de4 +.loop call Function105038 ld b, $2 ld c, rRP % $100 ld a, [hMoneyTemp + 1] bit 1, a - jr z, .asm_104df6 + jr z, .next ld a, $10 ld [hPrintNum10], a ret -.asm_104df6 + +.next bit 0, a jr nz, asm_104e3a ld a, [$ff00+c] and b - jr nz, .asm_104de4 + jr nz, .loop Function104dfe: ; 104dfe (41:4dfe) ld c, rRP % $100 @@ -1181,11 +1182,11 @@ RestoreMysteryGift: ; 1050ea (41:50ea) Function1050fb: ; 1050fb (41:50fb) ld hl, wMysteryGiftTrainerData xor a - ld b, $26 -.asm_105101 + ld b, wMysteryGiftTrainerDataEnd - wMysteryGiftTrainerData +.loop ld [hli], a dec b - jr nz, .asm_105101 + jr nz, .loop ret diff --git a/engine/mysterygift2.asm b/engine/mysterygift2.asm new file mode 100755 index 000000000..0f70e4bfc --- /dev/null +++ b/engine/mysterygift2.asm @@ -0,0 +1,229 @@ +Function2c642: ; 2c642 (b:4642) + ld de, wc800 + ld a, $1 + ld [de], a + inc de + ld a, BANK(sGameData) + call GetSRAMBank + ld hl, sPlayerData + PlayerID - wPlayerData + ld a, [hli] + ld [de], a + ld b, a + inc de + ld a, [hl] + ld [de], a + ld c, a + inc de + push bc + ld hl, sPlayerData + PlayerName - wPlayerData + ld bc, NAME_LENGTH + call CopyBytes + push de + ld hl, sPokemonData + PokedexCaught - wPokemonData + ld b, (NUM_POKEMON + 7) / 8 + call CountSetBits + pop de + pop bc + ld a, [wd265] + ld [de], a + inc de + call CloseSRAM + call Random + and $1 + ld [de], a + inc de + call Function2c6ac + ld [de], a + inc de + ld a, c + ld c, b + ld b, a + call Function2c6ac + ld [de], a + inc de + ld a, BANK(sBackupMysteryGiftItem) + call GetSRAMBank + ld a, [sBackupMysteryGiftItem] + ld [de], a + inc de + ld a, [sBackupMysteryGiftItem + 1] + ld [de], a + ld a, $14 + ld [wca00], a + call CloseSRAM + ld hl, wc800 + ld de, wc950 + ld bc, $14 + jp CopyBytes + +Function2c6ac: ; 2c6ac (b:46ac) + push de + call Random + cp $19 ; 10 percent + jr c, .tenpercent + call Random + and $7 + ld d, a + rl d + ld e, $80 +.loop + rlc e + dec a + jr nz, .loop + ld a, e + and c + jr z, .skip + ld a, $1 +.skip + add d + jr .done + +.tenpercent + call Random + cp $32 ; 20 percent + jr c, .twopercent + call Random + and $3 + ld d, a + rl d + ld e, $80 +.loop2 + rlc e + dec a + jr nz, .loop2 + ld a, e + and b + jr z, .skip2 + ld a, $1 +.skip2 + add d + add $10 + jr .done + +.twopercent + call Random + cp $32 ; 50 ; 20 percent + jr c, .pointfourpercent + ld a, b + swap a + and $7 + add $18 + jr .done + +.pointfourpercent + ld a, b + and $80 + ld a, $20 + jr z, .done + ld a, $21 + +.done + pop de + ret + +MysteryGiftGetItemHeldEffect: ; 2c708 (b:4708) + ld a, c + cp $25 ; 37 + jr nc, Function2c722 + ld hl, Unknown_2c725 + ld b, 0 + add hl, bc + ld c, [hl] + ret + +MysteryGiftGetDecoration: ; 2c715 (b:4715) + ld a, c + cp $25 ; 37 + jr nc, Function2c722 + ld hl, Unknown_2c74a + ld b, 0 + add hl, bc + ld c, [hl] + ret + +Function2c722: ; 2c722 (b:4722) + ld c, DECO_POLKADOT_BED ; GREAT_BALL + ret +; 2c725 (b:4725) + +Unknown_2c725: ; 2c725 +; May or may not be items. + db BERRY + db PRZCUREBERRY + db MINT_BERRY + db ICE_BERRY + db BURNT_BERRY + db PSNCUREBERRY + db GUARD_SPEC + db X_DEFEND + db X_ATTACK + db BITTER_BERRY + db DIRE_HIT + db X_SPECIAL + db X_ACCURACY + db EON_MAIL + db MORPH_MAIL + db MUSIC_MAIL + db MIRACLEBERRY + db GOLD_BERRY + db REVIVE + db GREAT_BALL + db SUPER_REPEL + db MAX_REPEL + db ELIXER + db ETHER + db WATER_STONE + db FIRE_STONE + db LEAF_STONE + db THUNDERSTONE + db MAX_ETHER + db MAX_ELIXER + db MAX_REVIVE + db SCOPE_LENS + db HP_UP + db PP_UP + db RARE_CANDY + db BLUESKY_MAIL + db MIRAGE_MAIL +; 2c74a + +Unknown_2c74a: ; 2c74a +; May or may not be items. + db DECO_SNES + db DECO_BIG_SNORLAX_DOLL + db DECO_BIG_ONIX_DOLL + db DECO_BIG_LAPRAS_DOLL + db DECO_DOLLS + db DECO_PIKACHU_DOLL + db DECO_SURF_PIKACHU_DOLL + db DECO_CLEFAIRY_DOLL + db DECO_JIGGLYPUFF_DOLL + db DECO_BULBASAUR_DOLL + db DECO_TROPICPLANT + db DECO_JUMBOPLANT + db DECO_TOWN_MAP + db DECO_CHARMANDER_DOLL + db DECO_POLIWAG_DOLL + db DECO_DIGLETT_DOLL + db DECO_BLUE_CARPET + db DECO_YELLOW_CARPET + db DECO_POSTERS + db DECO_PIKACHU_POSTER + db DECO_N64 + db DECO_BIG_DOLLS + db DECO_BEDS + db DECO_FEATHERY_BED + db DECO_POLKADOT_BED + db DECO_PIKACHU_BED + db DECO_CARPETS + db DECO_RED_CARPET + db DECO_GREEN_CARPET + db DECO_CLEFAIRY_POSTER + db DECO_ODDISH_DOLL + db DECO_MAGNAPLANT + db DECO_GENGAR_DOLL + db DECO_CONSOLES + db DECO_PINK_BED + db DECO_SQUIRTLE_DOLL + db DECO_STARMIE_DOLL +; 2c76f diff --git a/engine/search.asm b/engine/search.asm new file mode 100755 index 000000000..662623296 --- /dev/null +++ b/engine/search.asm @@ -0,0 +1,276 @@ +SpecialBeastsCheck: ; 0x4a6e8 +; Check if the player owns all three legendary beasts. +; They must exist in either party or PC, and have the player's OT and ID. +; Return the result in ScriptVar. + + ld a, RAIKOU + ld [ScriptVar], a + call CheckOwnMonAnywhere + jr nc, .notexist + + ld a, ENTEI + ld [ScriptVar], a + call CheckOwnMonAnywhere + jr nc, .notexist + + ld a, SUICUNE + ld [ScriptVar], a + call CheckOwnMonAnywhere + jr nc, .notexist + + ; they exist + ld a, 1 + ld [ScriptVar], a + ret + +.notexist + xor a + ld [ScriptVar], a + ret + + +SpecialMonCheck: ; 0x4a711 +; Check if the player owns any monsters of the species in ScriptVar. +; Return the result in ScriptVar. + + call CheckOwnMonAnywhere + jr c, .exists + + ; doesn't exist + xor a + ld [ScriptVar], a + ret + +.exists + ld a, 1 + ld [ScriptVar], a + ret + + +CheckOwnMonAnywhere: ; 0x4a721 +; Check if the player owns any monsters of the species in ScriptVar. +; It must exist in either party or PC, and have the player's OT and ID. + + ; If there are no monsters in the party, + ; the player must not own any yet. + ld a, [PartyCount] + and a + ret z + + ld d, a + ld e, 0 + ld hl, PartyMon1Species + ld bc, PartyMonOT + + ; Run CheckOwnMon on each Pokémon in the party. +.partymon + call CheckOwnMon + ret c ; found! + + push bc + ld bc, PARTYMON_STRUCT_LENGTH + add hl, bc + pop bc + call UpdateOTPointer + dec d + jr nz, .partymon + + ; Run CheckOwnMon on each Pokémon in the PC. + ld a, BANK(sBoxCount) + call GetSRAMBank + ld a, [sBoxCount] + and a + jr z, .boxes + + ld d, a + ld hl, sBoxMon1Species + ld bc, sBoxMonOT +.openboxmon + call CheckOwnMon + jr nc, .loop + + ; found! + call CloseSRAM + ret + +.loop + push bc + ld bc, BOXMON_STRUCT_LENGTH + add hl, bc + pop bc + call UpdateOTPointer + dec d + jr nz, .openboxmon + + ; Run CheckOwnMon on each monster in the other 13 PC boxes. +.boxes + call CloseSRAM + + ld c, 0 +.box + ; Don't search the current box again. + ld a, [wCurBox] + and $f + cp c + jr z, .loopbox + + ; Load the box. + ld hl, BoxAddressTable1 + ld b, 0 +rept 3 + add hl, bc +endr + ld a, [hli] + call GetSRAMBank + ld a, [hli] + ld h, [hl] + ld l, a + + ; Number of monsters in the box + ld a, [hl] + and a + jr z, .loopbox + + push bc + + push hl + ld de, sBoxMons - sBoxCount + add hl, de + ld d, h + ld e, l + pop hl + push de + ld de, sBoxMonOT - sBoxCount + add hl, de + ld b, h + ld c, l + pop hl + + ld d, a + +.boxmon + call CheckOwnMon + jr nc, .loopboxmon + + ; found! + pop bc + call CloseSRAM + ret + +.loopboxmon + push bc + ld bc, BOXMON_STRUCT_LENGTH + add hl, bc + pop bc + call UpdateOTPointer + dec d + jr nz, .boxmon + pop bc + +.loopbox + inc c + ld a, c + cp NUM_BOXES + jr c, .box + + ; not found + call CloseSRAM + and a + ret + + +CheckOwnMon: ; 0x4a7ba +; Check if a Pokémon belongs to the player and is of a specific species. + +; inputs: +; hl, pointer to PartyMonNSpecies +; bc, pointer to PartyMonNOT +; ScriptVar should contain the species we're looking for + +; outputs: +; sets carry if monster matches species, ID, and OT name. + + push bc + push hl + push de + ld d, b + ld e, c + +; check species + ld a, [ScriptVar] ; species we're looking for + ld b, [hl] ; species we have + cp b + jr nz, .notfound ; species doesn't match + +; check ID number + ld bc, MON_ID + add hl, bc ; now hl points to ID number + ld a, [PlayerID] + cp [hl] + jr nz, .notfound ; ID doesn't match + inc hl + ld a, [PlayerID + 1] + cp [hl] + jr nz, .notfound ; ID doesn't match + +; check OT +; This only checks five characters, which is fine for the Japanese version, +; but in the English version the player name is 7 characters, so this is wrong. + + ld hl, PlayerName + + rept 4 + ld a, [de] + cp [hl] + jr nz, .notfound + cp "@" + jr z, .found ; reached end of string + inc hl + inc de + endr + + ld a, [de] + cp [hl] + jr z, .found + +.notfound + pop de + pop hl + pop bc + and a + ret + +.found + pop de + pop hl + pop bc + scf + ret +; 0x4a810 + +BoxAddressTable1: ; 4a810 + dba sBox1 + dba sBox2 + dba sBox3 + dba sBox4 + dba sBox5 + dba sBox6 + dba sBox7 + dba sBox8 + dba sBox9 + dba sBox10 + dba sBox11 + dba sBox12 + dba sBox13 + dba sBox14 +; 4a83a + +UpdateOTPointer: ; 0x4a83a + push hl + ld hl, NAME_LENGTH + add hl, bc + ld b, h + ld c, l + pop hl + ret +; 0x4a843 diff --git a/engine/sprite_anims.asm b/engine/sprite_anims.asm index 25015d645..54fda6342 100755 --- a/engine/sprite_anims.asm +++ b/engine/sprite_anims.asm @@ -16,9 +16,9 @@ endr .Jumptable: ; 8d25b (23:525b) dw .zero ; town map - dw .one ; bouncing mon icons - dw .two - dw .three + dw .one ; bouncing mon icon + dw .two ; bouncing mon icon, selected + dw .three ; bouncing mon icon, menu open dw .four dw .five dw .six ; Game Freak logo @@ -46,7 +46,7 @@ endr dw .twentyeight dw .twentynine ; intro suicune dw .thirty ; intro pichu wooper - dw .thirtyone + dw .thirtyone ; celebi dw .thirtytwo ; intro unown dw .thirtythree ; intro unown F with suicune leaping up dw .thirtyfour ; intro suicune facing away from us @@ -65,7 +65,7 @@ endr ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc - ld [hl], $10 + ld [hl], 8 * 2 ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc @@ -75,7 +75,7 @@ endr .two: ; 8d2b9 (23:52b9) ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc - ld [hl], $18 + ld [hl], 8 * 3 ld hl, SPRITEANIMSTRUCT_0C add hl, bc @@ -93,24 +93,24 @@ endr add hl, bc ld a, d and $10 ; bit 4 - jr z, .asm_8d2df + jr z, .load_zero ld a, e and a - jr z, .asm_8d2e6 + jr z, .load_minus_two cp $1 - jr z, .asm_8d2e2 -.asm_8d2df + jr z, .load_minus_one +.load_zero xor a ld [hl], a ret -.asm_8d2e2 - ld a, $ff +.load_minus_one + ld a, -1 ld [hl], a ret -.asm_8d2e6 - ld a, $fe +.load_minus_two + ld a, -2 ld [hl], a ret @@ -120,17 +120,17 @@ endr ld hl, SPRITEANIMSTRUCT_INDEX add hl, bc cp [hl] - jr z, .asm_8d2fb + jr z, .three_offset_right ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc - ld [hl], $10 + ld [hl], 8 * 2 ret -.asm_8d2fb +.three_offset_right ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc - ld [hl], $18 + ld [hl], 8 * 3 ret .four: ; 8d302 (23:5302) diff --git a/event/celebi.asm b/event/celebi.asm index 8388caa20..865bd579b 100755 --- a/event/celebi.asm +++ b/event/celebi.asm @@ -76,7 +76,7 @@ LoadCelebiGFX: ; 49912 lb bc, BANK(SpecialCelebiLeafGFX), 4 call Request2bpp ld de, SpecialCelebiGFX - ld hl, VTiles1 tile $04 + ld hl, VTiles0 tile $84 lb bc, BANK(SpecialCelebiGFX), $10 call Request2bpp xor a @@ -240,12 +240,12 @@ CelebiEvent_Cosine: ; 49b3b (12:5b3b) add $10 and $3f cp $20 - jr nc, .asm_49b48 + jr nc, .negative call .SineFunction ld a, h ret -.asm_49b48 +.negative and $1f call .SineFunction ld a, h diff --git a/gbhw.asm b/gbhw.asm index fac373647..c55f1a9ec 100644 --- a/gbhw.asm +++ b/gbhw.asm @@ -105,8 +105,10 @@ rOBP0 EQU $ff48 ; Object Palette 0 Data (R/W) - Non CGB Mode Only rOBP1 EQU $ff49 ; Object Palette 1 Data (R/W) - Non CGB Mode Only rWY EQU $ff4a ; Window Y Position (R/W) rWX EQU $ff4b ; Window X Position minus 7 (R/W) +rLCDMODE EQU $ff4c rKEY1 EQU $ff4d ; CGB Mode Only - Prepare Speed Switch rVBK EQU $ff4f ; CGB Mode Only - VRAM Bank +rBLCK EQU $ff50 rHDMA1 EQU $ff51 ; CGB Mode Only - New DMA Source, High rHDMA2 EQU $ff52 ; CGB Mode Only - New DMA Source, Low rHDMA3 EQU $ff53 ; CGB Mode Only - New DMA Destination, High diff --git a/macros/sound.asm b/macros/sound.asm index ae1c192fb..cb81fd7d3 100644 --- a/macros/sound.asm +++ b/macros/sound.asm @@ -29,201 +29,242 @@ A_ EQU 10 A# EQU 11 B_ EQU 12 - + enum_start $d8 + enum notetype_cmd octave: macro - db $d8 - (\1) + db notetype_cmd - (\1) endm notetype: macro - db $d8 + db notetype_cmd db \1 ; note_length if _NARG >= 2 db \2 ; intensity endc endm + enum forceoctave_cmd forceoctave: macro - db $d9 + db forceoctave_cmd db \1 ; octave endm + enum tempo_cmd tempo: macro - db $da + db tempo_cmd bigdw \1 ; tempo endm + enum dutycycle_cmd dutycycle: macro - db $db + db dutycycle_cmd db \1 ; duty_cycle endm + enum intensity_cmd intensity: macro - db $dc + db intensity_cmd db \1 ; intensity endm + enum soundinput_cmd soundinput: macro - db $dd + db soundinput_cmd db \1 ; input endm + enum unknownmusic0xde_cmd unknownmusic0xde: macro - db $de + db unknownmusic0xde_cmd db \1 ; unknown endm + enum togglesfx_cmd togglesfx: macro - db $df + db togglesfx_cmd endm + enum unknownmusic0xe0_cmd unknownmusic0xe0: macro - db $e0 + db unknownmusic0xe0_cmd db \1 ; unknown - db \2 ; unknown + ; db \2 ; unknown + dn \2, \3 ; octave, pitch endm + enum vibrato_cmd vibrato: macro - db $e1 + db vibrato_cmd db \1 ; delay db \2 ; extent endm + enum unknownmusic0xe2_cmd unknownmusic0xe2: macro - db $e2 + db unknownmusic0xe2_cmd db \1 ; unknown endm + enum togglenoise_cmd togglenoise: macro - db $e3 + db togglenoise_cmd db \1 ; id endm + enum panning_cmd panning: macro - db $e4 + db panning_cmd db \1 ; tracks endm + enum volume_cmd volume: macro - db $e5 + db volume_cmd db \1 ; volume endm + enum tone_cmd tone: macro - db $e6 + db tone_cmd bigdw \1 ; tone endm + enum unknownmusic0xe7_cmd unknownmusic0xe7: macro - db $e7 + db unknownmusic0xe7_cmd db \1 ; unknown endm + enum unknownmusic0xe8_cmd unknownmusic0xe8: macro - db $e8 + db unknownmusic0xe8_cmd db \1 ; unknown endm + enum globaltempo_cmd globaltempo: macro - db $e9 + db globaltempo_cmd bigdw \1 ; value endm + enum restartchannel_cmd restartchannel: macro - db $ea + db restartchannel_cmd dw \1 ; address endm + enum newsong_cmd newsong: macro - db $eb + db newsong_cmd bigdw \1 ; id endm + enum sfxpriorityon_cmd sfxpriorityon: macro - db $ec + db sfxpriorityon_cmd endm + enum sfxpriorityoff_cmd sfxpriorityoff: macro - db $ed + db sfxpriorityoff_cmd endm + enum unknownmusic0xee_cmd unknownmusic0xee: macro - db $ee + db unknownmusic0xee_cmd dw \1 ; address endm + enum stereopanning_cmd stereopanning: macro - db $ef + db stereopanning_cmd db \1 ; tracks endm + enum sfxtogglenoise_cmd sfxtogglenoise: macro - db $f0 + db sfxtogglenoise_cmd db \1 ; id endm + enum music0xf1_cmd music0xf1: macro - db $f1 + db music0xf1_cmd endm + enum music0xf2_cmd music0xf2: macro - db $f2 + db music0xf2_cmd endm + enum music0xf3_cmd music0xf3: macro - db $f3 + db music0xf3_cmd endm + enum music0xf4_cmd music0xf4: macro - db $f4 + db music0xf4_cmd endm + enum music0xf5_cmd music0xf5: macro - db $f5 + db music0xf5_cmd endm + enum music0xf6_cmd music0xf6: macro - db $f6 + db music0xf6_cmd endm + enum music0xf7_cmd music0xf7: macro - db $f7 + db music0xf7_cmd endm + enum music0xf8_cmd music0xf8: macro - db $f8 + db music0xf8_cmd endm + enum unknownmusic0xf9_cmd unknownmusic0xf9: macro - db $f9 + db unknownmusic0xf9_cmd endm + enum setcondition_cmd setcondition: macro - db $fa + db setcondition_cmd db \1 ; condition endm + enum jumpif_cmd jumpif: macro - db $fb + db jumpif_cmd db \1 ; condition dw \2 ; address endm + enum jumpchannel_cmd jumpchannel: macro - db $fc + db jumpchannel_cmd dw \1 ; address endm + enum loopchannel_cmd loopchannel: macro - db $fd + db loopchannel_cmd db \1 ; count dw \2 ; address endm + enum callchannel_cmd callchannel: macro - db $fe + db callchannel_cmd dw \1 ; address endm + enum endchannel_cmd endchannel: macro - db $ff + db endchannel_cmd endm diff --git a/main.asm b/main.asm index b009ee400..4ef49f11a 100644 --- a/main.asm +++ b/main.asm @@ -12578,236 +12578,7 @@ AI_Redundant: ; 2c41a INCLUDE "event/move_deleter.asm" - -Function2c642: ; 2c642 (b:4642) - ld de, OverworldMap - ld a, $1 - ld [de], a - inc de - ld a, BANK(sGameData) - call GetSRAMBank - ld hl, sPlayerData + PlayerID - wPlayerData - ld a, [hli] - ld [de], a - ld b, a - inc de - ld a, [hl] - ld [de], a - ld c, a - inc de - push bc - ld hl, sPlayerData + PlayerName - wPlayerData - ld bc, NAME_LENGTH - call CopyBytes - push de - ld hl, sPokemonData + PokedexCaught - wPokemonData - ld b, (NUM_POKEMON + 7) / 8 - call CountSetBits - pop de - pop bc - ld a, [wd265] - ld [de], a - inc de - call CloseSRAM - call Random - and $1 - ld [de], a - inc de - call Function2c6ac - ld [de], a - inc de - ld a, c - ld c, b - ld b, a - call Function2c6ac - ld [de], a - inc de - ld a, BANK(sBackupMysteryGiftItem) - call GetSRAMBank - ld a, [sBackupMysteryGiftItem] - ld [de], a - inc de - ld a, [sBackupMysteryGiftItem + 1] - ld [de], a - ld a, $14 - ld [wca00], a - call CloseSRAM - ld hl, OverworldMap - ld de, wc950 - ld bc, SCREEN_WIDTH - jp CopyBytes - -Function2c6ac: ; 2c6ac (b:46ac) - push de - call Random - cp $19 ; 10 percent - jr c, .tenpercent - call Random - and $7 - ld d, a - rl d - ld e, $80 -.loop - rlc e - dec a - jr nz, .loop - ld a, e - and c - jr z, .skip - ld a, $1 -.skip - add d - jr .done - -.tenpercent - call Random - cp $32 ; 20 percent - jr c, .twopercent - call Random - and $3 - ld d, a - rl d - ld e, $80 -.loop2 - rlc e - dec a - jr nz, .loop2 - ld a, e - and b - jr z, .skip2 - ld a, $1 -.skip2 - add d - add $10 - jr .done - -.twopercent - call Random - cp $32 ; 50 ; 20 percent - jr c, .pointfourpercent - ld a, b - swap a - and $7 - add $18 - jr .done - -.pointfourpercent - ld a, b - and $80 - ld a, $20 - jr z, .done - ld a, $21 - -.done - pop de - ret - -MysteryGiftGetItemHeldEffect: ; 2c708 (b:4708) - ld a, c - cp $25 ; 37 - jr nc, Function2c722 - ld hl, Unknown_2c725 - ld b, 0 - add hl, bc - ld c, [hl] - ret - -MysteryGiftGetDecoration: ; 2c715 (b:4715) - ld a, c - cp $25 ; 37 - jr nc, Function2c722 - ld hl, Unknown_2c74a - ld b, 0 - add hl, bc - ld c, [hl] - ret - -Function2c722: ; 2c722 (b:4722) - ld c, DECO_POLKADOT_BED ; GREAT_BALL - ret -; 2c725 (b:4725) - -Unknown_2c725: ; 2c725 -; May or may not be items. - db BERRY - db PRZCUREBERRY - db MINT_BERRY - db ICE_BERRY - db BURNT_BERRY - db PSNCUREBERRY - db GUARD_SPEC - db X_DEFEND - db X_ATTACK - db BITTER_BERRY - db DIRE_HIT - db X_SPECIAL - db X_ACCURACY - db EON_MAIL - db MORPH_MAIL - db MUSIC_MAIL - db MIRACLEBERRY - db GOLD_BERRY - db REVIVE - db GREAT_BALL - db SUPER_REPEL - db MAX_REPEL - db ELIXER - db ETHER - db WATER_STONE - db FIRE_STONE - db LEAF_STONE - db THUNDERSTONE - db MAX_ETHER - db MAX_ELIXER - db MAX_REVIVE - db SCOPE_LENS - db HP_UP - db PP_UP - db RARE_CANDY - db BLUESKY_MAIL - db MIRAGE_MAIL -; 2c74a - -Unknown_2c74a: ; 2c74a -; May or may not be items. - db DECO_SNES - db DECO_BIG_SNORLAX_DOLL - db DECO_BIG_ONIX_DOLL - db DECO_BIG_LAPRAS_DOLL - db DECO_DOLLS - db DECO_PIKACHU_DOLL - db DECO_SURF_PIKACHU_DOLL - db DECO_CLEFAIRY_DOLL - db DECO_JIGGLYPUFF_DOLL - db DECO_BULBASAUR_DOLL - db DECO_TROPICPLANT - db DECO_JUMBOPLANT - db DECO_TOWN_MAP - db DECO_CHARMANDER_DOLL - db DECO_POLIWAG_DOLL - db DECO_DIGLETT_DOLL - db DECO_BLUE_CARPET - db DECO_YELLOW_CARPET - db DECO_POSTERS - db DECO_PIKACHU_POSTER - db DECO_N64 - db DECO_BIG_DOLLS - db DECO_BEDS - db DECO_FEATHERY_BED - db DECO_POLKADOT_BED - db DECO_PIKACHU_BED - db DECO_CARPETS - db DECO_RED_CARPET - db DECO_GREEN_CARPET - db DECO_CLEFAIRY_POSTER - db DECO_ODDISH_DOLL - db DECO_MAGNAPLANT - db DECO_GENGAR_DOLL - db DECO_CONSOLES - db DECO_PINK_BED - db DECO_SQUIRTLE_DOLL - db DECO_STARMIE_DOLL -; 2c76f +INCLUDE "engine/mysterygift2.asm" Function2c76f: ; 2c76f (b:476f) ld a, $1 @@ -15136,1224 +14907,9 @@ Unknown_4985a: ; unreferenced INCLUDE "event/celebi.asm" INCLUDE "engine/main_menu.asm" - -SpecialBeastsCheck: ; 0x4a6e8 -; Check if the player owns all three legendary beasts. -; They must exist in either party or PC, and have the player's OT and ID. -; Return the result in ScriptVar. - - ld a, RAIKOU - ld [ScriptVar], a - call CheckOwnMonAnywhere - jr nc, .notexist - - ld a, ENTEI - ld [ScriptVar], a - call CheckOwnMonAnywhere - jr nc, .notexist - - ld a, SUICUNE - ld [ScriptVar], a - call CheckOwnMonAnywhere - jr nc, .notexist - - ; they exist - ld a, 1 - ld [ScriptVar], a - ret - -.notexist - xor a - ld [ScriptVar], a - ret - - -SpecialMonCheck: ; 0x4a711 -; Check if the player owns any monsters of the species in ScriptVar. -; Return the result in ScriptVar. - - call CheckOwnMonAnywhere - jr c, .exists - - ; doesn't exist - xor a - ld [ScriptVar], a - ret - -.exists - ld a, 1 - ld [ScriptVar], a - ret - - -CheckOwnMonAnywhere: ; 0x4a721 -; Check if the player owns any monsters of the species in ScriptVar. -; It must exist in either party or PC, and have the player's OT and ID. - - ; If there are no monsters in the party, - ; the player must not own any yet. - ld a, [PartyCount] - and a - ret z - - ld d, a - ld e, 0 - ld hl, PartyMon1Species - ld bc, PartyMonOT - - ; Run CheckOwnMon on each Pokémon in the party. -.partymon - call CheckOwnMon - ret c ; found! - - push bc - ld bc, PARTYMON_STRUCT_LENGTH - add hl, bc - pop bc - call UpdateOTPointer - dec d - jr nz, .partymon - - ; Run CheckOwnMon on each Pokémon in the PC. - ld a, BANK(sBoxCount) - call GetSRAMBank - ld a, [sBoxCount] - and a - jr z, .boxes - - ld d, a - ld hl, sBoxMon1Species - ld bc, sBoxMonOT -.openboxmon - call CheckOwnMon - jr nc, .loop - - ; found! - call CloseSRAM - ret - -.loop - push bc - ld bc, BOXMON_STRUCT_LENGTH - add hl, bc - pop bc - call UpdateOTPointer - dec d - jr nz, .openboxmon - - ; Run CheckOwnMon on each monster in the other 13 PC boxes. -.boxes - call CloseSRAM - - ld c, 0 -.box - ; Don't search the current box again. - ld a, [wCurBox] - and $f - cp c - jr z, .loopbox - - ; Load the box. - ld hl, BoxAddressTable1 - ld b, 0 -rept 3 - add hl, bc -endr - ld a, [hli] - call GetSRAMBank - ld a, [hli] - ld h, [hl] - ld l, a - - ; Number of monsters in the box - ld a, [hl] - and a - jr z, .loopbox - - push bc - - push hl - ld de, sBoxMons - sBoxCount - add hl, de - ld d, h - ld e, l - pop hl - push de - ld de, sBoxMonOT - sBoxCount - add hl, de - ld b, h - ld c, l - pop hl - - ld d, a - -.boxmon - call CheckOwnMon - jr nc, .loopboxmon - - ; found! - pop bc - call CloseSRAM - ret - -.loopboxmon - push bc - ld bc, BOXMON_STRUCT_LENGTH - add hl, bc - pop bc - call UpdateOTPointer - dec d - jr nz, .boxmon - pop bc - -.loopbox - inc c - ld a, c - cp NUM_BOXES - jr c, .box - - ; not found - call CloseSRAM - and a - ret - - -CheckOwnMon: ; 0x4a7ba -; Check if a Pokémon belongs to the player and is of a specific species. - -; inputs: -; hl, pointer to PartyMonNSpecies -; bc, pointer to PartyMonNOT -; ScriptVar should contain the species we're looking for - -; outputs: -; sets carry if monster matches species, ID, and OT name. - - push bc - push hl - push de - ld d, b - ld e, c - -; check species - ld a, [ScriptVar] ; species we're looking for - ld b, [hl] ; species we have - cp b - jr nz, .notfound ; species doesn't match - -; check ID number - ld bc, MON_ID - add hl, bc ; now hl points to ID number - ld a, [PlayerID] - cp [hl] - jr nz, .notfound ; ID doesn't match - inc hl - ld a, [PlayerID + 1] - cp [hl] - jr nz, .notfound ; ID doesn't match - -; check OT -; This only checks five characters, which is fine for the Japanese version, -; but in the English version the player name is 7 characters, so this is wrong. - - ld hl, PlayerName - - rept 4 - ld a, [de] - cp [hl] - jr nz, .notfound - cp "@" - jr z, .found ; reached end of string - inc hl - inc de - endr - - ld a, [de] - cp [hl] - jr z, .found - -.notfound - pop de - pop hl - pop bc - and a - ret - -.found - pop de - pop hl - pop bc - scf - ret -; 0x4a810 - -BoxAddressTable1: ; 4a810 - dba sBox1 - dba sBox2 - dba sBox3 - dba sBox4 - dba sBox5 - dba sBox6 - dba sBox7 - dba sBox8 - dba sBox9 - dba sBox10 - dba sBox11 - dba sBox12 - dba sBox13 - dba sBox14 -; 4a83a - -UpdateOTPointer: ; 0x4a83a - push hl - ld hl, NAME_LENGTH - add hl, bc - ld b, h - ld c, l - pop hl - ret -; 0x4a843 - - -MobileCheckOwnMonAnywhere: ; 4a843 -; Like CheckOwnMonAnywhere, but only check for species. -; OT/ID don't matter. - - ld a, [PartyCount] - and a - ret z - - ld d, a - ld e, 0 - ld hl, PartyMon1Species - ld bc, PartyMonOT -.asm_4a851 - call .CheckMatch - ret c - push bc - ld bc, PARTYMON_STRUCT_LENGTH - add hl, bc - pop bc - call .CopyName - dec d - jr nz, .asm_4a851 - ld a, BANK(sBoxCount) - call GetSRAMBank - ld a, [sBoxCount] - and a - jr z, .asm_4a888 - ld d, a - ld hl, sBoxMon1Species - ld bc, sBoxMonOT -.asm_4a873 - call .CheckMatch - jr nc, .asm_4a87c - call CloseSRAM - ret - -.asm_4a87c - push bc - ld bc, BOXMON_STRUCT_LENGTH - add hl, bc - pop bc - call .CopyName - dec d - jr nz, .asm_4a873 - -.asm_4a888 - call CloseSRAM - ld c, 0 -.asm_4a88d - ld a, [wCurBox] - and $f - cp c - jr z, .asm_4a8d1 - ld hl, .BoxAddrs - ld b, 0 -rept 3 - add hl, bc -endr - ld a, [hli] - call GetSRAMBank - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [hl] - and a - jr z, .asm_4a8d1 - push bc - push hl - ld de, sBoxMons - sBoxCount - add hl, de - ld d, h - ld e, l - pop hl - push de - ld de, sBoxMonOT - sBoxCount - add hl, de - ld b, h - ld c, l - pop hl - ld d, a -.asm_4a8ba - call .CheckMatch - jr nc, .asm_4a8c4 - pop bc - call CloseSRAM - ret - -.asm_4a8c4 - push bc - ld bc, BOXMON_STRUCT_LENGTH - add hl, bc - pop bc - call .CopyName - dec d - jr nz, .asm_4a8ba - pop bc - -.asm_4a8d1 - inc c - ld a, c - cp NUM_BOXES - jr c, .asm_4a88d - call CloseSRAM - and a - ret -; 4a8dc - -.CheckMatch: ; 4a8dc - push bc - push hl - push de - ld d, b - ld e, c - ld a, [ScriptVar] - ld b, [hl] - cp b - jr nz, .no_match - jr .match - -.no_match - pop de - pop hl - pop bc - and a - ret - -.match - pop de - pop hl - pop bc - scf - ret -; 4a8f4 - -.BoxAddrs: ; 4a8f4 - dba sBox1 - dba sBox2 - dba sBox3 - dba sBox4 - dba sBox5 - dba sBox6 - dba sBox7 - dba sBox8 - dba sBox9 - dba sBox10 - dba sBox11 - dba sBox12 - dba sBox13 - dba sBox14 -; 4a91e - -.CopyName: ; 4a91e - push hl - ld hl, NAME_LENGTH - add hl, bc - ld b, h - ld c, l - pop hl - ret -; 4a927 - - -FindItemInPCOrBag: ; 4a927 - ld a, [ScriptVar] - ld [CurItem], a - ld hl, PCItems - call CheckItem - jr c, .found - - ld a, [ScriptVar] - ld [CurItem], a - ld hl, NumItems - call CheckItem - jr c, .found - - xor a - ld [ScriptVar], a - ret - -.found - ld a, 1 - ld [ScriptVar], a - ret -; 4a94e - +INCLUDE "engine/search.asm" +INCLUDE "misc/mobile_12_2.asm" ; mobile battle selection -Function4a94e: ; 4a94e - call FadeToMenu - ld a, -1 - ld hl, wd002 - ld bc, 3 - call ByteFill - xor a - ld [wd018], a - ld [wd019], a - ld b, SCGB_14 - call GetSGBLayout - call SetPalettes - call Function4aa22 - jr c, .asm_4a985 - jr z, .asm_4a9a1 - jr .asm_4a97b - -.asm_4a974 - call Function4aa25 - jr c, .asm_4a985 - jr z, .asm_4a9a1 - -.asm_4a97b - call Function4ac58 - ld hl, wd019 - res 1, [hl] - jr .asm_4a974 - -.asm_4a985 - ld a, [wd018] - and a - jr nz, .asm_4a990 - call Function4aba8 - jr c, .asm_4a974 - -.asm_4a990 - call CloseSubmenu - ld hl, wd002 - ld a, -1 - ld bc, 3 - call ByteFill - scf - jr .asm_4a9af - -.asm_4a9a1 - call Function4a9c3 - jr c, .asm_4a9b0 - call Function4a9d7 - jr c, .asm_4a974 - call CloseSubmenu - and a - -.asm_4a9af - ret - -.asm_4a9b0 - ld de, SFX_WRONG - call PlaySFX - ld hl, UnknownText_0x4a9be - call PrintText - jr .asm_4a974 -; 4a9be - -UnknownText_0x4a9be: ; 0x4a9be - ; Pick three #MON for battle. - text_jump UnknownText_0x1c51d7 - db "@" -; 0x4a9c3 - -Function4a9c3: ; 4a9c3 - ld hl, wd002 - ld a, $ff - cp [hl] - jr z, .asm_4a9d5 - inc hl - cp [hl] - jr z, .asm_4a9d5 - inc hl - cp [hl] - jr z, .asm_4a9d5 - and a - ret - -.asm_4a9d5 - scf - ret -; 4a9d7 - -Function4a9d7: ; 4a9d7 - ld a, [wd002] - ld hl, PartyMonNicknames - call GetNick - ld h, d - ld l, e - ld de, EndFlypoint - ld bc, 6 - call CopyBytes - ld a, [wd003] - ld hl, PartyMonNicknames - call GetNick - ld h, d - ld l, e - ld de, wd00c - ld bc, 6 - call CopyBytes - ld a, [wd004] - ld hl, PartyMonNicknames - call GetNick - ld h, d - ld l, e - ld de, wd012 - ld bc, 6 - call CopyBytes - ld hl, UnknownText_0x4aa1d - call PrintText - call YesNoBox - ret -; 4aa1d - -UnknownText_0x4aa1d: ; 0x4aa1d - ; , @ and @ . Use these three? - text_jump UnknownText_0x1c51f4 - db "@" -; 0x4aa22 - -Function4aa22: ; 4aa22 - call ClearBGPalettes - -Function4aa25: ; 4aa25 - callba LoadPartyMenuGFX - callba InitPartyMenuWithCancel - call Function4aad3 - -Function4aa34: ; 4aa34 - ld a, $9 - ld [PartyMenuActionText], a - callba WritePartyMenuTilemap - xor a - ld [PartyMenuActionText], a - callba PrintPartyMenuText - call Function4aab6 - call WaitBGMap - call SetPalettes - call DelayFrame - call Function4ab1a - jr z, .asm_4aa66 - push af - call Function4aafb - jr c, .asm_4aa67 - call Function4ab06 - jr c, .asm_4aa67 - pop af - -.asm_4aa66 - ret - -.asm_4aa67 - ld hl, wd019 - set 1, [hl] - pop af - ret -; 4aa6e - -Function4aa6e: ; 4aa6e - pop af - ld de, SFX_WRONG - call PlaySFX - call WaitSFX - jr Function4aa34 -; 4aa7a - -Function4aa7a: ; 4aa7a - ld hl, wd002 - ld d, $3 -.loop - ld e, PARTY_LENGTH - ld a, [hli] - push de - push hl - cp -1 - jr z, .done - ld hl, wSpriteAnimationStructs - inc a - ld d, a -.inner_loop - ld a, [hl] - and a - jr z, .next - cp d - jr z, .same_as_d - jr .next - - ld a, $3 - jr .proceed - -.same_as_d - ld a, $2 - -.proceed - push hl - ld c, l - ld b, h - ld hl, $2 - add hl, bc - ld [hl], a - pop hl - -.next - ld bc, $10 - add hl, bc - dec e - jr nz, .inner_loop - pop hl - pop de - dec d - jr nz, .loop - jr .finished - -.done - pop hl - pop de - -.finished - ret -; 4aab6 - -Function4aab6: ; 4aab6 - ld hl, wd002 - ld d, $3 -.loop - ld a, [hli] - cp -1 - jr z, .done - push de - push hl - hlcoord 0, 1 - ld bc, $28 - call AddNTimes - ld [hl], $ec - pop hl - pop de - dec d - jr nz, .loop - -.done - ret -; 4aad3 - -Function4aad3: ; 4aad3 - ld hl, PartyCount - ld a, [hli] - and a - ret z ; Nothing in your party - - ld c, a - xor a - ld [hObjectStructIndexBuffer], a -.loop - push bc - push hl - ld e, 0 - callba Function8e83f - ld a, [hObjectStructIndexBuffer] - inc a - ld [hObjectStructIndexBuffer], a - pop hl - pop bc - dec c - jr nz, .loop - - call Function4aa7a - callba PlaySpriteAnimations - ret -; 4aafb - -Function4aafb: ; 4aafb - ld a, [CurPartySpecies] - cp EGG - jr z, .egg - and a - ret - -.egg - scf - ret -; 4ab06 - -Function4ab06: ; 4ab06 - ld a, [CurPartyMon] - ld bc, PARTYMON_STRUCT_LENGTH - ld hl, PartyMon1HP - call AddNTimes - ld a, [hli] - ld b, a - ld a, [hl] - or b - jr nz, .NotFainted - scf - -.NotFainted - ret -; 4ab1a - -Function4ab1a: ; 4ab1a -.asm_4ab1a - ld a, $fb - ld [wcfa8], a - ld a, $26 - ld [wcfa7], a - ld a, $2 - ld [wcfa4], a - call Function4adf7 - call Function1bc9 - call Function4abc3 - jr c, .asm_4ab1a - push af - call Function4ab99 - call nc, Function1bee - pop af - bit 1, a - jr nz, .asm_4ab6d - ld a, [PartyCount] - inc a - ld b, a - ld a, [MenuSelection2] - ld [wd0d8], a - cp b - jr z, .asm_4ab7e - ld a, [MenuSelection2] - dec a - ld [CurPartyMon], a - ld c, a - ld b, $0 - ld hl, PartySpecies - add hl, bc - ld a, [hl] - ld [CurPartySpecies], a - ld de, SFX_READ_TEXT_2 - call PlaySFX - call WaitSFX - ld a, $1 - and a - ret - -.asm_4ab6d - ld a, [MenuSelection2] - ld [wd0d8], a -.asm_4ab73 - ld de, SFX_READ_TEXT_2 - call PlaySFX - call WaitSFX - scf - ret - -.asm_4ab7e - ld a, $1 - ld [wd018], a - ld a, [wcfaa] - cp $2 - jr z, .asm_4ab73 - ld de, SFX_READ_TEXT_2 - call PlaySFX - call WaitSFX - xor a - ld [wd018], a - and a - ret -; 4ab99 - -Function4ab99: ; 4ab99 - bit 1, a - jr z, .asm_4aba6 - ld a, [wd002] - cp $ff - jr z, .asm_4aba6 - scf - ret - -.asm_4aba6 - and a - ret -; 4aba8 - -Function4aba8: ; 4aba8 - ld hl, wd004 - ld a, [hl] - cp $ff - jr nz, .asm_4abbe - dec hl - ld a, [hl] - cp $ff - jr nz, .asm_4abbe - dec hl - ld a, [hl] - cp $ff - jr nz, .asm_4abbe - and a - ret - -.asm_4abbe - ld a, $ff - ld [hl], a - scf - ret -; 4abc3 - -Function4abc3: ; 4abc3 - bit 3, a - jr z, .asm_4abd5 - ld a, [PartyCount] - inc a - ld [MenuSelection2], a - ld a, $1 - ld [wcfaa], a - jr .asm_4ac29 - -.asm_4abd5 - bit 6, a - jr z, .asm_4abeb - ld a, [MenuSelection2] - ld [MenuSelection2], a - and a - jr nz, .asm_4ac29 - ld a, [PartyCount] - inc a - ld [MenuSelection2], a - jr .asm_4ac29 - -.asm_4abeb - bit 7, a - jr z, .asm_4ac08 - ld a, [MenuSelection2] - ld [MenuSelection2], a - ld a, [PartyCount] -rept 2 - inc a -endr - ld b, a - ld a, [MenuSelection2] - cp b - jr nz, .asm_4ac29 - ld a, $1 - ld [MenuSelection2], a - jr .asm_4ac29 - -.asm_4ac08 - bit 4, a - jr nz, .asm_4ac10 - bit 5, a - jr z, .asm_4ac56 - -.asm_4ac10 - ld a, [MenuSelection2] - ld b, a - ld a, [PartyCount] - inc a - cp b - jr nz, .asm_4ac29 - ld a, [wcfaa] - cp $1 - jr z, .asm_4ac26 - ld a, $1 - jr .asm_4ac29 - -.asm_4ac26 - ld [wcfaa], a - -.asm_4ac29 - hlcoord 0, 1 - lb bc, 13, 1 - call ClearBox - call Function4aab6 - ld a, [PartyCount] - hlcoord 6, 1 -.asm_4ac3b - ld bc, $28 - add hl, bc - dec a - jr nz, .asm_4ac3b - ld [hl], $7f - ld a, [MenuSelection2] - ld b, a - ld a, [PartyCount] - inc a - cp b - jr z, .asm_4ac54 - ld a, $1 - ld [wcfaa], a - -.asm_4ac54 - scf - ret - -.asm_4ac56 - and a - ret -; 4ac58 - -Function4ac58: ; 4ac58 - lb bc, 2, 18 - hlcoord 1, 15 - call ClearBox - callba FreezeMonIcons - ld hl, MenuDataHeader_0x4aca2 - call LoadMenuDataHeader - ld hl, wd019 - bit 1, [hl] - jr z, .asm_4ac89 - hlcoord 11, 13 - ld b, $3 - ld c, $7 - call TextBox - hlcoord 13, 14 - ld de, String_4ada7 - call PlaceString - jr .asm_4ac96 - -.asm_4ac89 - hlcoord 11, 9 - ld b, $7 - ld c, $7 - call TextBox - call Function4ad68 - -.asm_4ac96 - ld a, $1 - ld [hBGMapMode], a - call Function4acaa - call ExitMenu - and a - ret -; 4aca2 - -MenuDataHeader_0x4aca2: ; 0x4aca2 - db $40 ; flags - db 09, 11 ; start coords - db 17, 19 ; end coords - dw NULL - db 1 ; default option -; 0x4acaa - -Function4acaa: ; 4acaa -.asm_4acaa - ld a, $a0 - ld [wMenuData2Flags], a - ld a, [wd019] - bit 1, a - jr z, .asm_4acc2 - ld a, $2 - ld [wMenuData2Items], a - ld a, $c - ld [wMenuBorderTopCoord], a - jr .asm_4accc - -.asm_4acc2 - ld a, $4 - ld [wMenuData2Items], a - ld a, $8 - ld [wMenuBorderTopCoord], a - -.asm_4accc - ld a, $b - ld [wMenuBorderLeftCoord], a - ld a, $1 - ld [wMenuCursorBuffer], a - call Function1c10 - ld hl, wcfa5 - set 6, [hl] - call Function1bc9 - ld de, SFX_READ_TEXT_2 - call PlaySFX - ld a, [hJoyPressed] - bit 0, a - jr nz, .asm_4acf4 - bit 1, a - jr nz, .asm_4acf3 - jr .asm_4acaa - -.asm_4acf3 - ret - -.asm_4acf4 - ld a, [wd019] - bit 1, a - jr nz, .asm_4ad0e - ld a, [MenuSelection2] - cp $1 - jr z, Function4ad17 - cp $2 - jp z, Function4ad56 - cp $3 - jp z, Function4ad60 - jr .asm_4acf3 - -.asm_4ad0e - ld a, [MenuSelection2] - cp $1 - jr z, Function4ad56 - jr .asm_4acf3 - -Function4ad17: ; 4ad17 - call Function4adb2 - jr z, .asm_4ad4a - ld hl, wd002 - ld a, $ff - cp [hl] - jr z, .asm_4ad39 - inc hl - cp [hl] - jr z, .asm_4ad39 - inc hl - cp [hl] - jr z, .asm_4ad39 - ld de, SFX_WRONG - call WaitPlaySFX - ld hl, UnknownText_0x4ad51 - call PrintText - ret - -.asm_4ad39 - ld a, [CurPartyMon] - ld [hl], a - call Function4a9c3 - ret c - ld a, [wd019] - set 0, a - ld [wd019], a - ret - -.asm_4ad4a - ld a, $ff - ld [hl], a - call Function4adc2 - ret - -UnknownText_0x4ad51: ; 0x4ad51 - ; Only three #MON may enter. - text_jump UnknownText_0x1c521c - db "@" -; 0x4ad56 - -Function4ad56: ; 4ad56 - callba OpenPartyStats - call Function3200 - ret -; 4ad60 - -Function4ad60: ; 4ad60 - callba ManagePokemonMoves - ret -; 4ad67 - -Function4ad67: ; 4ad67 - ret -; 4ad68 - -Function4ad68: ; 4ad68 - hlcoord 13, 12 - ld de, String_4ad88 - call PlaceString - call Function4adb2 - jr c, .asm_4ad7e - hlcoord 13, 10 - ld de, String_4ada0 - jr .asm_4ad84 - -.asm_4ad7e - hlcoord 13, 10 - ld de, String_4ad9a - -.asm_4ad84 - call PlaceString - ret -; 4ad88 - -String_4ad88: ; 4ad88 - db "つよさをみる" - next "つかえるわざ" - next "もどる@" -; 4ad9a - -String_4ad9a: ; 4ad9a - db "さんかする@" -; 4ada0 - -String_4ada0: ; 4ada0 - db "さんかしない@" -; 4ada7 - -String_4ada7: ; 4ada7 - db "つよさをみる" - next "もどる@" ; BACK -; 4adb2 - -Function4adb2: ; 4adb2 - ld hl, wd002 - ld a, [CurPartyMon] - cp [hl] - ret z - inc hl - cp [hl] - ret z - inc hl - cp [hl] - ret z - scf - ret -; 4adc2 - -Function4adc2: ; 4adc2 - ld a, [wd002] - cp $ff - jr nz, .skip - ld a, [wd003] - cp $ff - jr nz, .skip2 - ld a, [wd004] - ld [wd002], a - ld a, $ff - ld [wd004], a - jr .skip - -.skip2 - ld [wd002], a - ld a, $ff - ld [wd003], a - -.skip - ld a, [wd003] - cp $ff - ret nz - ld b, a - ld a, [wd004] - ld [wd003], a - ld a, b - ld [wd004], a - ret -; 4adf7 - -Function4adf7: ; 4adf7 - ld a, [wd019] - bit 0, a - ret z - ld a, [PartyCount] - inc a - ld [MenuSelection2], a - ld a, $1 - ld [wcfaa], a - ld a, [wd019] - res 0, a - ld [wd019], a - ret -; 4ae12 AskRememberPassword: ; 4ae12 call .DoMenu diff --git a/maps/IlexForest.asm b/maps/IlexForest.asm index 9f55505d9..cb1ff2870 100644 --- a/maps/IlexForest.asm +++ b/maps/IlexForest.asm @@ -89,7 +89,7 @@ IlexForest_MapScriptHeader: appear ILEXFOREST_BIRD return -YoungsterScript_0x6eb7b: +IlexForestCharcoalApprenticeScript: faceplayer loadfont checkevent EVENT_HERDED_FARFETCHD @@ -347,16 +347,16 @@ IlexForestFarfetchdScript: checkcode VAR_FACING end -BlackBeltScript_0x6edae: +IlexForestCharcoalMasterScript: faceplayer loadfont checkevent EVENT_GOT_HM01_CUT iftrue .AlreadyGotCut - writetext UnknownText_0x6f099 + writetext Text_CharcoalMasterIntro buttonsound verbosegiveitem HM_CUT setevent EVENT_GOT_HM01_CUT - writetext UnknownText_0x6f141 + writetext Text_CharcoalMasterOutro waitbutton closetext setevent EVENT_ILEX_FOREST_FARFETCHD @@ -368,25 +368,25 @@ BlackBeltScript_0x6edae: end .AlreadyGotCut: - writetext UnknownText_0x6f1c0 + writetext Text_CharcoalMasterTalkAfter waitbutton closetext end -RockerScript_0x6edde: +IlexForestHeadbuttGuyScript: faceplayer loadfont checkevent EVENT_GOT_TM02_HEADBUTT - iftrue UnknownScript_0x6edf3 - writetext UnknownText_0x6f21b + iftrue .AlreadyGotHeadbutt + writetext Text_HeadbuttIntro buttonsound verbosegiveitem TM_HEADBUTT - iffalse UnknownScript_0x6edf7 + iffalse .BagFull setevent EVENT_GOT_TM02_HEADBUTT -UnknownScript_0x6edf3: - writetext UnknownText_0x6f26d +.AlreadyGotHeadbutt: + writetext Text_HeadbuttOutro waitbutton -UnknownScript_0x6edf7: +.BagFull: closetext end @@ -396,13 +396,13 @@ TrainerBug_catcherWayne: Bug_catcherWayneScript: end_if_just_battled loadfont - writetext UnknownText_0x6f571 + writetext Bug_catcherWayneAfterText waitbutton closetext end -LassScript_0x6ee0d: - jumptextfaceplayer UnknownText_0x6f2af +IlexForestLassScript: + jumptextfaceplayer Text_IlexForestLass ItemFragment_0x6ee10: db REVIVE, 1 @@ -432,7 +432,7 @@ IlexForestBoulder: jumpstd strengthboulder MapIlexForestSignpost0Script: - jumptext UnknownText_0x6f2de + jumptext Text_IlexForestSignpost0 MapIlexForestSignpost4Script: checkevent EVENT_FOREST_IS_RESTLESS @@ -443,11 +443,11 @@ MapIlexForestSignpost4Script: checkitem GS_BALL iftrue .AskCelebiEvent .DontDoCelebiEvent: - jumptext UnknownText_0x6f358 + jumptext Text_IlexForestShrine .AskCelebiEvent: loadfont - writetext UnknownText_0x6f394 + writetext Text_ShrineCelebiEvent yesorno iftrue .CelebiEvent closetext @@ -459,7 +459,7 @@ MapIlexForestSignpost4Script: setevent EVENT_AZALEA_TOWN_KURT disappear ILEXFOREST_LASS clearevent EVENT_ROUTE_34_ILEX_FOREST_GATE_LASS - writetext UnknownText_0x6f43b + writetext Text_InsertGSBall waitbutton closetext pause 20 @@ -480,7 +480,7 @@ MapIlexForestSignpost4Script: appear ILEXFOREST_KURT applymovement ILEXFOREST_KURT, MovementData_0x6ef4e loadfont - writetext UnknownText_0x6f452 + writetext Text_KurtCaughtCelebi waitbutton closetext applymovement ILEXFOREST_KURT, MovementData_0x6ef53 @@ -781,7 +781,7 @@ Text_Kwaaaa: text "FARFETCH'D: Kwaa!" done -UnknownText_0x6f099: +Text_CharcoalMasterIntro: text "Ah! My FARFETCH'D!" para "You found it for" @@ -802,7 +802,7 @@ UnknownText_0x6f099: line "this." done -UnknownText_0x6f141: +Text_CharcoalMasterOutro: text "That's the CUT HM." line "Teach that to a" @@ -816,7 +816,7 @@ UnknownText_0x6f141: line "AZALEA to use it." done -UnknownText_0x6f1c0: +Text_CharcoalMasterTalkAfter: text "Do you want to" line "apprentice as a" @@ -827,7 +827,7 @@ UnknownText_0x6f1c0: line "rate in ten years!" done -UnknownText_0x6f21b: +Text_HeadbuttIntro: text "What am I doing?" para "I'm shaking trees" @@ -837,20 +837,20 @@ UnknownText_0x6f21b: line "you try it too!" done -UnknownText_0x6f26d: +Text_HeadbuttOutro: text "Rattle trees with" line "HEADBUTT. Some-" cont "times, sleeping" cont "#MON fall out." done -UnknownText_0x6f2af: +Text_IlexForestLass: text "Did something" line "happen to the" cont "forest's guardian?" done -UnknownText_0x6f2de: +Text_IlexForestSignpost0: text "ILEX FOREST is" line "so overgrown with" @@ -862,7 +862,7 @@ UnknownText_0x6f2de: cont "have been dropped." done -UnknownText_0x6f358: +Text_IlexForestShrine: text "ILEX FOREST" line "SHRINE…" @@ -871,7 +871,7 @@ UnknownText_0x6f358: cont "protector…" done -UnknownText_0x6f394: +Text_ShrineCelebiEvent: text "ILEX FOREST" line "SHRINE…" @@ -891,12 +891,12 @@ UnknownText_0x6f394: line "BALL here?" done -UnknownText_0x6f43b: +Text_InsertGSBall: text " put in the" line "GS BALL." done -UnknownText_0x6f452: +Text_KurtCaughtCelebi: text "Whew, wasn't that" line "something!" @@ -929,7 +929,7 @@ Bug_catcherWayneBeatenText: line "#MON before…" done -UnknownText_0x6f571: +Bug_catcherWayneAfterText: text "A #MON I've" line "never seen before" @@ -966,12 +966,12 @@ IlexForest_MapEventHeader: .PersonEvents: db 11 person_event SPRITE_BIRD, 31, 14, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, IlexForestFarfetchdScript, EVENT_ILEX_FOREST_FARFETCHD - person_event SPRITE_YOUNGSTER, 28, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x6eb7b, EVENT_ILEX_FOREST_APPRENTICE - person_event SPRITE_BLACK_BELT, 28, 5, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BlackBeltScript_0x6edae, EVENT_ILEX_FOREST_CHARCOAL_MASTER - person_event SPRITE_ROCKER, 14, 15, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, RockerScript_0x6edde, -1 + person_event SPRITE_YOUNGSTER, 28, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, IlexForestCharcoalApprenticeScript, EVENT_ILEX_FOREST_APPRENTICE + person_event SPRITE_BLACK_BELT, 28, 5, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, IlexForestCharcoalMasterScript, EVENT_ILEX_FOREST_CHARCOAL_MASTER + person_event SPRITE_ROCKER, 14, 15, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, IlexForestHeadbuttGuyScript, -1 person_event SPRITE_POKE_BALL, 32, 20, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x6ee10, EVENT_ILEX_FOREST_REVIVE person_event SPRITE_KURT, 29, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_ILEX_FOREST_KURT - person_event SPRITE_LASS, 24, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LassScript_0x6ee0d, EVENT_ILEX_FOREST_LASS + person_event SPRITE_LASS, 24, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, IlexForestLassScript, EVENT_ILEX_FOREST_LASS person_event SPRITE_YOUNGSTER, 1, 12, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 0, TrainerBug_catcherWayne, -1 person_event SPRITE_POKE_BALL, 17, 9, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x6ee12, EVENT_ILEX_FOREST_X_ATTACK person_event SPRITE_POKE_BALL, 7, 17, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x6ee14, EVENT_ILEX_FOREST_ANTIDOTE diff --git a/misc/mobile_12_2.asm b/misc/mobile_12_2.asm new file mode 100755 index 000000000..4b7af3c4d --- /dev/null +++ b/misc/mobile_12_2.asm @@ -0,0 +1,937 @@ +MobileCheckOwnMonAnywhere: ; 4a843 +; Like CheckOwnMonAnywhere, but only check for species. +; OT/ID don't matter. + + ld a, [PartyCount] + and a + ret z + + ld d, a + ld e, 0 + ld hl, PartyMon1Species + ld bc, PartyMonOT +.asm_4a851 + call .CheckMatch + ret c + push bc + ld bc, PARTYMON_STRUCT_LENGTH + add hl, bc + pop bc + call .CopyName + dec d + jr nz, .asm_4a851 + ld a, BANK(sBoxCount) + call GetSRAMBank + ld a, [sBoxCount] + and a + jr z, .asm_4a888 + ld d, a + ld hl, sBoxMon1Species + ld bc, sBoxMonOT +.asm_4a873 + call .CheckMatch + jr nc, .asm_4a87c + call CloseSRAM + ret + +.asm_4a87c + push bc + ld bc, BOXMON_STRUCT_LENGTH + add hl, bc + pop bc + call .CopyName + dec d + jr nz, .asm_4a873 + +.asm_4a888 + call CloseSRAM + ld c, 0 +.asm_4a88d + ld a, [wCurBox] + and $f + cp c + jr z, .asm_4a8d1 + ld hl, .BoxAddrs + ld b, 0 +rept 3 + add hl, bc +endr + ld a, [hli] + call GetSRAMBank + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [hl] + and a + jr z, .asm_4a8d1 + push bc + push hl + ld de, sBoxMons - sBoxCount + add hl, de + ld d, h + ld e, l + pop hl + push de + ld de, sBoxMonOT - sBoxCount + add hl, de + ld b, h + ld c, l + pop hl + ld d, a +.asm_4a8ba + call .CheckMatch + jr nc, .asm_4a8c4 + pop bc + call CloseSRAM + ret + +.asm_4a8c4 + push bc + ld bc, BOXMON_STRUCT_LENGTH + add hl, bc + pop bc + call .CopyName + dec d + jr nz, .asm_4a8ba + pop bc + +.asm_4a8d1 + inc c + ld a, c + cp NUM_BOXES + jr c, .asm_4a88d + call CloseSRAM + and a + ret +; 4a8dc + +.CheckMatch: ; 4a8dc + push bc + push hl + push de + ld d, b + ld e, c + ld a, [ScriptVar] + ld b, [hl] + cp b + jr nz, .no_match + jr .match + +.no_match + pop de + pop hl + pop bc + and a + ret + +.match + pop de + pop hl + pop bc + scf + ret +; 4a8f4 + +.BoxAddrs: ; 4a8f4 + dba sBox1 + dba sBox2 + dba sBox3 + dba sBox4 + dba sBox5 + dba sBox6 + dba sBox7 + dba sBox8 + dba sBox9 + dba sBox10 + dba sBox11 + dba sBox12 + dba sBox13 + dba sBox14 +; 4a91e + +.CopyName: ; 4a91e + push hl + ld hl, NAME_LENGTH + add hl, bc + ld b, h + ld c, l + pop hl + ret +; 4a927 + +FindItemInPCOrBag: ; 4a927 + ld a, [ScriptVar] + ld [CurItem], a + ld hl, PCItems + call CheckItem + jr c, .found + + ld a, [ScriptVar] + ld [CurItem], a + ld hl, NumItems + call CheckItem + jr c, .found + + xor a + ld [ScriptVar], a + ret + +.found + ld a, 1 + ld [ScriptVar], a + ret +; 4a94e + +Function4a94e: ; 4a94e + call FadeToMenu + ld a, -1 + ld hl, wd002 + ld bc, 3 + call ByteFill + xor a + ld [wd018], a + ld [wd019], a + ld b, SCGB_14 + call GetSGBLayout + call SetPalettes + call Function4aa22 + jr c, .asm_4a985 + jr z, .asm_4a9a1 + jr .asm_4a97b + +.asm_4a974 + call Function4aa25 + jr c, .asm_4a985 + jr z, .asm_4a9a1 + +.asm_4a97b + call Function4ac58 + ld hl, wd019 + res 1, [hl] + jr .asm_4a974 + +.asm_4a985 + ld a, [wd018] + and a + jr nz, .asm_4a990 + call Function4aba8 + jr c, .asm_4a974 + +.asm_4a990 + call CloseSubmenu + ld hl, wd002 + ld a, -1 + ld bc, 3 + call ByteFill + scf + jr .asm_4a9af + +.asm_4a9a1 + call Function4a9c3 + jr c, .asm_4a9b0 + call Function4a9d7 + jr c, .asm_4a974 + call CloseSubmenu + and a + +.asm_4a9af + ret + +.asm_4a9b0 + ld de, SFX_WRONG + call PlaySFX + ld hl, UnknownText_0x4a9be + call PrintText + jr .asm_4a974 +; 4a9be + +UnknownText_0x4a9be: ; 0x4a9be + ; Pick three #MON for battle. + text_jump UnknownText_0x1c51d7 + db "@" +; 0x4a9c3 + +Function4a9c3: ; 4a9c3 + ld hl, wd002 + ld a, $ff + cp [hl] + jr z, .asm_4a9d5 + inc hl + cp [hl] + jr z, .asm_4a9d5 + inc hl + cp [hl] + jr z, .asm_4a9d5 + and a + ret + +.asm_4a9d5 + scf + ret +; 4a9d7 + +Function4a9d7: ; 4a9d7 + ld a, [wd002] + ld hl, PartyMonNicknames + call GetNick + ld h, d + ld l, e + ld de, EndFlypoint + ld bc, 6 + call CopyBytes + ld a, [wd003] + ld hl, PartyMonNicknames + call GetNick + ld h, d + ld l, e + ld de, wd00c + ld bc, 6 + call CopyBytes + ld a, [wd004] + ld hl, PartyMonNicknames + call GetNick + ld h, d + ld l, e + ld de, wd012 + ld bc, 6 + call CopyBytes + ld hl, UnknownText_0x4aa1d + call PrintText + call YesNoBox + ret +; 4aa1d + +UnknownText_0x4aa1d: ; 0x4aa1d + ; , @ and @ . Use these three? + text_jump UnknownText_0x1c51f4 + db "@" +; 0x4aa22 + +Function4aa22: ; 4aa22 + call ClearBGPalettes + +Function4aa25: ; 4aa25 + callba LoadPartyMenuGFX + callba InitPartyMenuWithCancel + call Function4aad3 + +Function4aa34: ; 4aa34 + ld a, $9 + ld [PartyMenuActionText], a + callba WritePartyMenuTilemap + xor a + ld [PartyMenuActionText], a + callba PrintPartyMenuText + call Function4aab6 + call WaitBGMap + call SetPalettes + call DelayFrame + call Function4ab1a + jr z, .asm_4aa66 + push af + call Function4aafb + jr c, .asm_4aa67 + call Function4ab06 + jr c, .asm_4aa67 + pop af + +.asm_4aa66 + ret + +.asm_4aa67 + ld hl, wd019 + set 1, [hl] + pop af + ret +; 4aa6e + +Function4aa6e: ; 4aa6e + pop af + ld de, SFX_WRONG + call PlaySFX + call WaitSFX + jr Function4aa34 +; 4aa7a + +Function4aa7a: ; 4aa7a + ld hl, wd002 + ld d, $3 +.loop + ld e, PARTY_LENGTH + ld a, [hli] + push de + push hl + cp -1 + jr z, .done + ld hl, wSpriteAnimationStructs + inc a + ld d, a +.inner_loop + ld a, [hl] + and a + jr z, .next + cp d + jr z, .same_as_d + jr .next + + ld a, $3 + jr .proceed + +.same_as_d + ld a, $2 + +.proceed + push hl + ld c, l + ld b, h + ld hl, $2 + add hl, bc + ld [hl], a + pop hl + +.next + ld bc, $10 + add hl, bc + dec e + jr nz, .inner_loop + pop hl + pop de + dec d + jr nz, .loop + jr .finished + +.done + pop hl + pop de + +.finished + ret +; 4aab6 + +Function4aab6: ; 4aab6 + ld hl, wd002 + ld d, $3 +.loop + ld a, [hli] + cp -1 + jr z, .done + push de + push hl + hlcoord 0, 1 + ld bc, $28 + call AddNTimes + ld [hl], $ec + pop hl + pop de + dec d + jr nz, .loop + +.done + ret +; 4aad3 + +Function4aad3: ; 4aad3 + ld hl, PartyCount + ld a, [hli] + and a + ret z ; Nothing in your party + + ld c, a + xor a + ld [hObjectStructIndexBuffer], a +.loop + push bc + push hl + ld e, 0 + callba Function8e83f + ld a, [hObjectStructIndexBuffer] + inc a + ld [hObjectStructIndexBuffer], a + pop hl + pop bc + dec c + jr nz, .loop + + call Function4aa7a + callba PlaySpriteAnimations + ret +; 4aafb + +Function4aafb: ; 4aafb + ld a, [CurPartySpecies] + cp EGG + jr z, .egg + and a + ret + +.egg + scf + ret +; 4ab06 + +Function4ab06: ; 4ab06 + ld a, [CurPartyMon] + ld bc, PARTYMON_STRUCT_LENGTH + ld hl, PartyMon1HP + call AddNTimes + ld a, [hli] + ld b, a + ld a, [hl] + or b + jr nz, .NotFainted + scf + +.NotFainted + ret +; 4ab1a + +Function4ab1a: ; 4ab1a +.asm_4ab1a + ld a, $fb + ld [wcfa8], a + ld a, $26 + ld [wcfa7], a + ld a, $2 + ld [wcfa4], a + call Function4adf7 + call Function1bc9 + call Function4abc3 + jr c, .asm_4ab1a + push af + call Function4ab99 + call nc, Function1bee + pop af + bit 1, a + jr nz, .asm_4ab6d + ld a, [PartyCount] + inc a + ld b, a + ld a, [MenuSelection2] + ld [wd0d8], a + cp b + jr z, .asm_4ab7e + ld a, [MenuSelection2] + dec a + ld [CurPartyMon], a + ld c, a + ld b, $0 + ld hl, PartySpecies + add hl, bc + ld a, [hl] + ld [CurPartySpecies], a + ld de, SFX_READ_TEXT_2 + call PlaySFX + call WaitSFX + ld a, $1 + and a + ret + +.asm_4ab6d + ld a, [MenuSelection2] + ld [wd0d8], a +.asm_4ab73 + ld de, SFX_READ_TEXT_2 + call PlaySFX + call WaitSFX + scf + ret + +.asm_4ab7e + ld a, $1 + ld [wd018], a + ld a, [wcfaa] + cp $2 + jr z, .asm_4ab73 + ld de, SFX_READ_TEXT_2 + call PlaySFX + call WaitSFX + xor a + ld [wd018], a + and a + ret +; 4ab99 + +Function4ab99: ; 4ab99 + bit 1, a + jr z, .asm_4aba6 + ld a, [wd002] + cp $ff + jr z, .asm_4aba6 + scf + ret + +.asm_4aba6 + and a + ret +; 4aba8 + +Function4aba8: ; 4aba8 + ld hl, wd004 + ld a, [hl] + cp $ff + jr nz, .asm_4abbe + dec hl + ld a, [hl] + cp $ff + jr nz, .asm_4abbe + dec hl + ld a, [hl] + cp $ff + jr nz, .asm_4abbe + and a + ret + +.asm_4abbe + ld a, $ff + ld [hl], a + scf + ret +; 4abc3 + +Function4abc3: ; 4abc3 + bit 3, a + jr z, .asm_4abd5 + ld a, [PartyCount] + inc a + ld [MenuSelection2], a + ld a, $1 + ld [wcfaa], a + jr .asm_4ac29 + +.asm_4abd5 + bit 6, a + jr z, .asm_4abeb + ld a, [MenuSelection2] + ld [MenuSelection2], a + and a + jr nz, .asm_4ac29 + ld a, [PartyCount] + inc a + ld [MenuSelection2], a + jr .asm_4ac29 + +.asm_4abeb + bit 7, a + jr z, .asm_4ac08 + ld a, [MenuSelection2] + ld [MenuSelection2], a + ld a, [PartyCount] +rept 2 + inc a +endr + ld b, a + ld a, [MenuSelection2] + cp b + jr nz, .asm_4ac29 + ld a, $1 + ld [MenuSelection2], a + jr .asm_4ac29 + +.asm_4ac08 + bit 4, a + jr nz, .asm_4ac10 + bit 5, a + jr z, .asm_4ac56 + +.asm_4ac10 + ld a, [MenuSelection2] + ld b, a + ld a, [PartyCount] + inc a + cp b + jr nz, .asm_4ac29 + ld a, [wcfaa] + cp $1 + jr z, .asm_4ac26 + ld a, $1 + jr .asm_4ac29 + +.asm_4ac26 + ld [wcfaa], a + +.asm_4ac29 + hlcoord 0, 1 + lb bc, 13, 1 + call ClearBox + call Function4aab6 + ld a, [PartyCount] + hlcoord 6, 1 +.asm_4ac3b + ld bc, $28 + add hl, bc + dec a + jr nz, .asm_4ac3b + ld [hl], $7f + ld a, [MenuSelection2] + ld b, a + ld a, [PartyCount] + inc a + cp b + jr z, .asm_4ac54 + ld a, $1 + ld [wcfaa], a + +.asm_4ac54 + scf + ret + +.asm_4ac56 + and a + ret +; 4ac58 + +Function4ac58: ; 4ac58 + lb bc, 2, 18 + hlcoord 1, 15 + call ClearBox + callba FreezeMonIcons + ld hl, MenuDataHeader_0x4aca2 + call LoadMenuDataHeader + ld hl, wd019 + bit 1, [hl] + jr z, .asm_4ac89 + hlcoord 11, 13 + ld b, $3 + ld c, $7 + call TextBox + hlcoord 13, 14 + ld de, String_4ada7 + call PlaceString + jr .asm_4ac96 + +.asm_4ac89 + hlcoord 11, 9 + ld b, $7 + ld c, $7 + call TextBox + call Function4ad68 + +.asm_4ac96 + ld a, $1 + ld [hBGMapMode], a + call Function4acaa + call ExitMenu + and a + ret +; 4aca2 + +MenuDataHeader_0x4aca2: ; 0x4aca2 + db $40 ; flags + db 09, 11 ; start coords + db 17, 19 ; end coords + dw NULL + db 1 ; default option +; 0x4acaa + +Function4acaa: ; 4acaa +.asm_4acaa + ld a, $a0 + ld [wMenuData2Flags], a + ld a, [wd019] + bit 1, a + jr z, .asm_4acc2 + ld a, $2 + ld [wMenuData2Items], a + ld a, $c + ld [wMenuBorderTopCoord], a + jr .asm_4accc + +.asm_4acc2 + ld a, $4 + ld [wMenuData2Items], a + ld a, $8 + ld [wMenuBorderTopCoord], a + +.asm_4accc + ld a, $b + ld [wMenuBorderLeftCoord], a + ld a, $1 + ld [wMenuCursorBuffer], a + call Function1c10 + ld hl, wcfa5 + set 6, [hl] + call Function1bc9 + ld de, SFX_READ_TEXT_2 + call PlaySFX + ld a, [hJoyPressed] + bit 0, a + jr nz, .asm_4acf4 + bit 1, a + jr nz, .asm_4acf3 + jr .asm_4acaa + +.asm_4acf3 + ret + +.asm_4acf4 + ld a, [wd019] + bit 1, a + jr nz, .asm_4ad0e + ld a, [MenuSelection2] + cp $1 + jr z, Function4ad17 + cp $2 + jp z, Function4ad56 + cp $3 + jp z, Function4ad60 + jr .asm_4acf3 + +.asm_4ad0e + ld a, [MenuSelection2] + cp $1 + jr z, Function4ad56 + jr .asm_4acf3 + +Function4ad17: ; 4ad17 + call Function4adb2 + jr z, .asm_4ad4a + ld hl, wd002 + ld a, $ff + cp [hl] + jr z, .asm_4ad39 + inc hl + cp [hl] + jr z, .asm_4ad39 + inc hl + cp [hl] + jr z, .asm_4ad39 + ld de, SFX_WRONG + call WaitPlaySFX + ld hl, UnknownText_0x4ad51 + call PrintText + ret + +.asm_4ad39 + ld a, [CurPartyMon] + ld [hl], a + call Function4a9c3 + ret c + ld a, [wd019] + set 0, a + ld [wd019], a + ret + +.asm_4ad4a + ld a, $ff + ld [hl], a + call Function4adc2 + ret + +UnknownText_0x4ad51: ; 0x4ad51 + ; Only three #MON may enter. + text_jump UnknownText_0x1c521c + db "@" +; 0x4ad56 + +Function4ad56: ; 4ad56 + callba OpenPartyStats + call Function3200 + ret +; 4ad60 + +Function4ad60: ; 4ad60 + callba ManagePokemonMoves + ret +; 4ad67 + +Function4ad67: ; 4ad67 + ret +; 4ad68 + +Function4ad68: ; 4ad68 + hlcoord 13, 12 + ld de, String_4ad88 + call PlaceString + call Function4adb2 + jr c, .asm_4ad7e + hlcoord 13, 10 + ld de, String_4ada0 + jr .asm_4ad84 + +.asm_4ad7e + hlcoord 13, 10 + ld de, String_4ad9a + +.asm_4ad84 + call PlaceString + ret +; 4ad88 + +String_4ad88: ; 4ad88 + db "つよさをみる" + next "つかえるわざ" + next "もどる@" +; 4ad9a + +String_4ad9a: ; 4ad9a + db "さんかする@" +; 4ada0 + +String_4ada0: ; 4ada0 + db "さんかしない@" +; 4ada7 + +String_4ada7: ; 4ada7 + db "つよさをみる" + next "もどる@" ; BACK +; 4adb2 + +Function4adb2: ; 4adb2 + ld hl, wd002 + ld a, [CurPartyMon] + cp [hl] + ret z + inc hl + cp [hl] + ret z + inc hl + cp [hl] + ret z + scf + ret +; 4adc2 + +Function4adc2: ; 4adc2 + ld a, [wd002] + cp $ff + jr nz, .skip + ld a, [wd003] + cp $ff + jr nz, .skip2 + ld a, [wd004] + ld [wd002], a + ld a, $ff + ld [wd004], a + jr .skip + +.skip2 + ld [wd002], a + ld a, $ff + ld [wd003], a + +.skip + ld a, [wd003] + cp $ff + ret nz + ld b, a + ld a, [wd004] + ld [wd003], a + ld a, b + ld [wd004], a + ret +; 4adf7 + +Function4adf7: ; 4adf7 + ld a, [wd019] + bit 0, a + ret z + ld a, [PartyCount] + inc a + ld [MenuSelection2], a + ld a, $1 + ld [wcfaa], a + ld a, [wd019] + res 0, a + ld [wd019], a + ret +; 4ae12 diff --git a/wram.asm b/wram.asm index 4a9bc9ce2..bfa7008b2 100644 --- a/wram.asm +++ b/wram.asm @@ -104,28 +104,30 @@ channel_struct: MACRO \1Octave:: db ; 7-0 (0 is highest) \1StartingOctave:: db ; raises existing octaves (to repeat phrases) \1NoteDuration:: db ; frames remaining for the current note - ds 1 ; c117 +\1Field0x16:: ds 1 ; c117 ds 1 ; c118 \1LoopCount:: db \1Tempo:: dw \1Tracks:: db ; hi:left lo:right - ds 1 ; c11d +\1Field0x1c:: ds 1 ; c11d \1VibratoDelayCount:: db ; initialized by \1VibratoDelay \1VibratoDelay:: db ; number of frames a note plays until vibrato starts \1VibratoExtent:: db \1VibratoRate:: db ; hi:frames for each alt lo:frames to the next alt - ds 1 ; c122 - ds 1 ; c123 - ds 1 ; c124 - ds 1 ; c125 - ds 1 ; c126 +\1Field0x21:: ds 1 ; c122 +\1Field0x22:: ds 1 ; c123 +\1Field0x23:: ds 1 ; c124 +\1Field0x24:: ds 1 ; c125 +\1Field0x25:: ds 1 ; c126 ds 1 ; c127 \1CryPitch:: dw - ds 4 +\1Field0x29:: ds 1 +\1Field0x2a:: ds 2 +\1Field0x2c:: ds 1 \1NoteLength:: db ; frames per 16th note - ds 1 ; c12f - ds 1 ; c130 - ds 1 ; c131 +\1Field0x2e:: ds 1 ; c12f +\1Field0x2f:: ds 1 ; c130 +\1Field0x30:: ds 1 ; c131 ds 1 ; c132 ENDM @@ -1065,18 +1067,27 @@ OverworldMapEnd:: ds OverworldMap - @ wc800:: ds 1 +wMysteryGiftPlayerID:: wc801:: ds 1 wc802:: ds 1 +wMysteryGiftPlayerName:: wc803:: ds 4 -wc807:: ds 9 -wc810:: ds 3 -wc813:: ds 5 +wc807:: ds 7 +wMysteryGiftPlayerDexCaught:: ds 1 +wc80f:: ds 1 +wc810:: ds 1 +wc811:: ds 1 +wMysteryGiftPlayerBackupItem:: +wc812:: ds 1 +wc813:: ds 1 +wc814:: ds 4 wc818:: ds 8 wc820:: ds 1 wc821:: ds 15 wc830:: ds 16 wc840:: ds 16 wMysteryGiftTrainerData:: ds (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 2 +wMysteryGiftTrainerDataEnd:: ds wMysteryGiftTrainerData - @ wc850:: ds 16 wc860:: ds 16 @@ -1102,7 +1113,8 @@ wc930:: ds 16 wc940:: ds 16 wc950:: ds 16 wc960:: ds 2 -wc962:: ds 14 +wc962:: ds 2 +wc964:: ds 12 wc970:: ds 16 wc980:: ds 16 wc990:: ds 16