ref: 02d05255fe96e9c06d176c0960395fb5aeb36211
parent: 6eac26732a7d19e08374e7e8e6f122da38b4a395
author: PikalaxALT <[email protected]>
date: Sun Dec 6 17:36:09 EST 2015
A stab at audio engine.
--- a/audio/engine.asm
+++ b/audio/engine.asm
@@ -22,7 +22,7 @@
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
@@ -29,7 +29,7 @@
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 @@
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 @@
; e8051
MusicOn: ; e8051
- ld a, $01
+ ld a, 1
ld [MusicPlaying], a
ret
; e8057
@@ -104,7 +104,7 @@
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 @@
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 @@
.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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
ld a, [wc294]
ld [rNR13], a
ld a, [wc295]
- or a, $80
+ or $80
ld [rNR14], a
ret
@@ -321,7 +321,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
ld [rWave_f], a
pop hl
ld a, [wc293]
- and a, $f0
+ and $f0
sla a
ld [rNR32], a
ret
@@ -473,7 +473,7 @@
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 @@
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,19 +543,19 @@
.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
@@ -562,7 +562,7 @@
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
@@ -569,7 +569,7 @@
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 @@
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 @@
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 @@
.fadein
; are we done?
- cp a, $07
+ cp $7
jr nc, .maxvolume
; inc volume
inc a
@@ -696,7 +696,7 @@
ld hl, wc297 ; ????
sub [hl]
jr nc, .ok
- ld a, $01
+ ld a, 1
.ok
ld [hl], a
; get frequency
@@ -706,16 +706,16 @@
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 @@
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,16 +757,16 @@
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
@@ -773,7 +773,7 @@
.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 @@
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 @@
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 @@
ld hl, Channel1VibratoRate - Channel1
add hl, bc
ld a, [hl]
- and a, $0f ; count
+ and $f ; count
jr z, .toggle
.subexit
dec [hl]
@@ -893,13 +893,13 @@
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
@@ -906,7 +906,7 @@
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 @@
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 @@
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 @@
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 @@
; 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 @@
add hl, bc
set 4, [hl]
jp LoadNote
+
.rest
; note = rest
ld hl, Channel1NoteFlags - Channel1
@@ -1174,14 +1175,14 @@
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]
@@ -1188,7 +1189,7 @@
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 @@
RestoreVolume: ; e8679
; ch5 only
ld a, [CurChannel]
- cp a, $04
+ cp $4
ret nz
xor a
ld hl, Channel6CryPitch
@@ -1253,8 +1254,8 @@
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 @@
; 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 @@
.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 @@
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 @@
; 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 @@
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 @@
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 @@
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 @@
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 @@
ret
; e87bc
-MusicFC: ; e87bc
+Music_JumpChannel: ; e87bc
; jump
; parameters: ll hh ; pointer
; get pointer from next 2 bytes
@@ -1477,7 +1478,7 @@
ret
; e87cc
-MusicFD: ; e87cc
+Music_LoopChannel: ; e87cc
; loops xx - 1 times
; 00: infinite
; params: 3
@@ -1539,7 +1540,7 @@
ret
; e880e
-MusicFA: ; e880e
+Music_SetCondition: ; e880e
; set condition for a jump
; used with FB
; params: 1
@@ -1553,7 +1554,7 @@
ret
; e8817
-MusicFB: ; e8817
+Music_JumpIf: ; e8817
; conditional jump
; used with FA
; params: 3
@@ -1610,9 +1611,9 @@
; 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 @@
ret
.jump
; reset jump flag
- ld [hl], $00
+ ld [hl], 0
; de = pointer
call GetMusicByte
ld e, a
@@ -1657,7 +1658,7 @@
; sets some flag
; seems to be unused
; params: 0
- ld a, $01
+ ld a, 1
ld [wc2b5], a
ret
; e8873
@@ -1666,7 +1667,7 @@
; 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 @@
ret
; e8882
-MusicE1: ; e8882
+Music_Vibrato: ; e8882
; vibrato
; params: 2
; 1: [xx]
@@ -1710,11 +1711,11 @@
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 @@
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 @@
; 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 @@
ret
; e88e4
-MusicE6: ; e88e4
+Music_Tone: ; e88e4
; tone
; params: 2
ld hl, Channel1Flags2 - Channel1
@@ -1779,7 +1782,7 @@
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 @@
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 @@
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 @@
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 @@
ret
; e894f
-MusicF0: ; e894f
+Music_SFXToggleNoise: ; e894f
; toggle sfx noise sampling
; params:
; on: 1
@@ -1877,26 +1880,26 @@
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,13 +1910,13 @@
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
@@ -1920,7 +1923,7 @@
ret
; e8991
-MusicDC: ; e8991
+Music_Intensity: ; e8991
; intensity
; params: 1
; hi: pressure
@@ -1932,7 +1935,7 @@
ret
; e899a
-MusicDA: ; e899a
+Music_Tempo: ; e899a
; global tempo
; params: 2
; de: tempo
@@ -1944,14 +1947,14 @@
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 @@
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 @@
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 @@
ret
; e89d2
-MusicE5: ; e89d2
+Music_Volume: ; e89d2
; set volume
; params: 1
; see Volume
@@ -2013,19 +2016,19 @@
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 @@
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 @@
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 @@
ret
; e8a30
-MusicEB: ; e8a30
+Music_NewSong: ; e8a30
; new song
; params: 2
; de: song id
@@ -2151,7 +2154,7 @@
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 @@
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 @@
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 @@
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 @@
; 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 @@
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 @@
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 @@
; 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 @@
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 @@
ld [hl], d
; clear ????
xor a
- ld hl, $0016
+ ld hl, Channel1Field0x16 - Channel1
add hl, bc
ld [hl], a
ret
@@ -2311,9 +2315,9 @@
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 @@
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 @@
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 @@
; Top 2 bits contain the number of channels
rlca
rlca
- and a, 3
+ and 3
; For each channel:
inc a
@@ -2425,7 +2429,7 @@
; No tempo for channel 4
ld a, [CurChannel]
- and a, 3
+ and 3
cp 3
jr nc, .start
@@ -2454,7 +2458,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
call LoadMusicByte
rlca ; top 2
rlca ; bits
- and a, $03
+ and $3
inc a ; # channels -> # loops
.startchannels
push af
@@ -2633,7 +2637,7 @@
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 @@
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 @@
add hl, bc
set 7, [hl]
-.asm_e8d0c
+.skip
pop de
; turn channel on
@@ -2693,10 +2697,10 @@
; 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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
ld a, $80
ld [hli], a
ld hl, rNR10
- ld e, $04
+ ld e, $4
.loop
call ClearChannel
dec e
@@ -3187,7 +3191,7 @@
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
--- a/audio/music/evolution.asm
+++ b/audio/music/evolution.asm
@@ -13,13 +13,13 @@
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
--- a/audio/music/healpokemon.asm
+++ b/audio/music/healpokemon.asm
@@ -11,16 +11,16 @@
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
--- a/engine/mysterygift.asm
+++ b/engine/mysterygift.asm
@@ -702,22 +702,23 @@
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 @@
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
--- /dev/null
+++ b/engine/mysterygift2.asm
@@ -1,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
--- /dev/null
+++ b/engine/search.asm
@@ -1,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
--- a/engine/sprite_anims.asm
+++ b/engine/sprite_anims.asm
@@ -16,9 +16,9 @@
.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 @@
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 @@
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 @@
.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 @@
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 @@
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)
--- a/event/celebi.asm
+++ b/event/celebi.asm
@@ -76,7 +76,7 @@
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 @@
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
--- a/gbhw.asm
+++ b/gbhw.asm
@@ -105,8 +105,10 @@
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
--- a/macros/sound.asm
+++ b/macros/sound.asm
@@ -29,13 +29,14 @@
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
@@ -42,188 +43,228 @@
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
--- a/main.asm
+++ b/main.asm
@@ -12578,237 +12578,8 @@
INCLUDE "event/move_deleter.asm"
+INCLUDE "engine/mysterygift2.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
-
Function2c76f: ; 2c76f (b:476f)
ld a, $1
ld [hInMenu], a
@@ -15136,1224 +14907,9 @@
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
--- a/maps/IlexForest.asm
+++ b/maps/IlexForest.asm
@@ -89,7 +89,7 @@
appear ILEXFOREST_BIRD
return
-YoungsterScript_0x6eb7b:
+IlexForestCharcoalApprenticeScript:
faceplayer
loadfont
checkevent EVENT_HERDED_FARFETCHD
@@ -347,16 +347,16 @@
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 @@
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 @@
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 @@
jumpstd strengthboulder
MapIlexForestSignpost0Script:
- jumptext UnknownText_0x6f2de
+ jumptext Text_IlexForestSignpost0
MapIlexForestSignpost4Script:
checkevent EVENT_FOREST_IS_RESTLESS
@@ -443,11 +443,11 @@
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 @@
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 @@
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 "FARFETCH'D: Kwaa!"
done
-UnknownText_0x6f099:
+Text_CharcoalMasterIntro:
text "Ah! My FARFETCH'D!"
para "You found it for"
@@ -802,7 +802,7 @@
line "this."
done
-UnknownText_0x6f141:
+Text_CharcoalMasterOutro:
text "That's the CUT HM."
line "Teach that to a"
@@ -816,7 +816,7 @@
line "AZALEA to use it."
done
-UnknownText_0x6f1c0:
+Text_CharcoalMasterTalkAfter:
text "Do you want to"
line "apprentice as a"
@@ -827,7 +827,7 @@
line "rate in ten years!"
done
-UnknownText_0x6f21b:
+Text_HeadbuttIntro:
text "What am I doing?"
para "I'm shaking trees"
@@ -837,7 +837,7 @@
line "you try it too!"
done
-UnknownText_0x6f26d:
+Text_HeadbuttOutro:
text "Rattle trees with"
line "HEADBUTT. Some-"
cont "times, sleeping"
@@ -844,13 +844,13 @@
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 @@
cont "have been dropped."
done
-UnknownText_0x6f358:
+Text_IlexForestShrine:
text "ILEX FOREST"
line "SHRINE…"
@@ -871,7 +871,7 @@
cont "protector…"
done
-UnknownText_0x6f394:
+Text_ShrineCelebiEvent:
text "ILEX FOREST"
line "SHRINE…"
@@ -891,12 +891,12 @@
line "BALL here?"
done
-UnknownText_0x6f43b:
+Text_InsertGSBall:
text "<PLAYER> put in the"
line "GS BALL."
done
-UnknownText_0x6f452:
+Text_KurtCaughtCelebi:
text "Whew, wasn't that"
line "something!"
@@ -929,7 +929,7 @@
line "#MON before…"
done
-UnknownText_0x6f571:
+Bug_catcherWayneAfterText:
text "A #MON I've"
line "never seen before"
@@ -966,12 +966,12 @@
.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
--- /dev/null
+++ b/misc/mobile_12_2.asm
@@ -1,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
--- a/wram.asm
+++ b/wram.asm
@@ -104,28 +104,30 @@
\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,12 +1067,20 @@
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
@@ -1077,6 +1087,7 @@
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 @@
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