A stab at audio engine.

This commit is contained in:
PikalaxALT 2015-12-06 22:36:09 -05:00
parent 6eac26732a
commit 02d05255fe
14 changed files with 1904 additions and 1846 deletions

File diff suppressed because it is too large Load Diff

View File

@ -13,13 +13,13 @@ Music_Evolution_Ch1: ; f06ed
dutycycle $2 dutycycle $2
notetype $c, $92 notetype $c, $92
octave 3 octave 3
unknownmusic0xe0 $0, $4a unknownmusic0xe0 $0, 4, A_
note C_, 1 note C_, 1
unknownmusic0xe0 $0, $4a unknownmusic0xe0 $0, 4, A_
note G_, 1 note G_, 1
unknownmusic0xe0 $0, $4a unknownmusic0xe0 $0, 4, A_
note C_, 1 note C_, 1
unknownmusic0xe0 $0, $4a unknownmusic0xe0 $0, 4, A_
note G_, 1 note G_, 1
note __, 4 note __, 4
dutycycle $3 dutycycle $3

View File

@ -11,16 +11,16 @@ Music_HealPokemon_Ch1: ; f06a0
tone $0001 tone $0001
notetype $c, $81 notetype $c, $81
note __, 2 note __, 2
unknownmusic0xe0 $0, $40 unknownmusic0xe0 $0, 4, __
note B_, 2 note B_, 2
unknownmusic0xe0 $0, $55 unknownmusic0xe0 $0, 5, E_
note B_, 2 note B_, 2
unknownmusic0xe0 $0, $45 unknownmusic0xe0 $0, 4, E_
note E_, 2 note E_, 2
note __, 4 note __, 4
unknownmusic0xe0 $0, $30 unknownmusic0xe0 $0, 3, __
note E_, 4 note E_, 4
unknownmusic0xe0 $0, $40 unknownmusic0xe0 $0, 4, __
note B_, 4 note B_, 4
endchannel endchannel
; f06c4 ; f06c4

View File

@ -702,22 +702,23 @@ Function104ddd: ; 104ddd (41:4ddd)
ld e, d ld e, d
ld a, $1 ld a, $1
ld [hPrintNum9], a ld [hPrintNum9], a
.asm_104de4 .loop
call Function105038 call Function105038
ld b, $2 ld b, $2
ld c, rRP % $100 ld c, rRP % $100
ld a, [hMoneyTemp + 1] ld a, [hMoneyTemp + 1]
bit 1, a bit 1, a
jr z, .asm_104df6 jr z, .next
ld a, $10 ld a, $10
ld [hPrintNum10], a ld [hPrintNum10], a
ret ret
.asm_104df6
.next
bit 0, a bit 0, a
jr nz, asm_104e3a jr nz, asm_104e3a
ld a, [$ff00+c] ld a, [$ff00+c]
and b and b
jr nz, .asm_104de4 jr nz, .loop
Function104dfe: ; 104dfe (41:4dfe) Function104dfe: ; 104dfe (41:4dfe)
ld c, rRP % $100 ld c, rRP % $100
@ -1181,11 +1182,11 @@ RestoreMysteryGift: ; 1050ea (41:50ea)
Function1050fb: ; 1050fb (41:50fb) Function1050fb: ; 1050fb (41:50fb)
ld hl, wMysteryGiftTrainerData ld hl, wMysteryGiftTrainerData
xor a xor a
ld b, $26 ld b, wMysteryGiftTrainerDataEnd - wMysteryGiftTrainerData
.asm_105101 .loop
ld [hli], a ld [hli], a
dec b dec b
jr nz, .asm_105101 jr nz, .loop
ret ret

229
engine/mysterygift2.asm Executable file
View File

@ -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

276
engine/search.asm Executable file
View File

@ -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

View File

@ -16,9 +16,9 @@ endr
.Jumptable: ; 8d25b (23:525b) .Jumptable: ; 8d25b (23:525b)
dw .zero ; town map dw .zero ; town map
dw .one ; bouncing mon icons dw .one ; bouncing mon icon
dw .two dw .two ; bouncing mon icon, selected
dw .three dw .three ; bouncing mon icon, menu open
dw .four dw .four
dw .five dw .five
dw .six ; Game Freak logo dw .six ; Game Freak logo
@ -46,7 +46,7 @@ endr
dw .twentyeight dw .twentyeight
dw .twentynine ; intro suicune dw .twentynine ; intro suicune
dw .thirty ; intro pichu wooper dw .thirty ; intro pichu wooper
dw .thirtyone dw .thirtyone ; celebi
dw .thirtytwo ; intro unown dw .thirtytwo ; intro unown
dw .thirtythree ; intro unown F with suicune leaping up dw .thirtythree ; intro unown F with suicune leaping up
dw .thirtyfour ; intro suicune facing away from us dw .thirtyfour ; intro suicune facing away from us
@ -65,7 +65,7 @@ endr
ld hl, SPRITEANIMSTRUCT_XCOORD ld hl, SPRITEANIMSTRUCT_XCOORD
add hl, bc add hl, bc
ld [hl], $10 ld [hl], 8 * 2
ld hl, SPRITEANIMSTRUCT_YOFFSET ld hl, SPRITEANIMSTRUCT_YOFFSET
add hl, bc add hl, bc
@ -75,7 +75,7 @@ endr
.two: ; 8d2b9 (23:52b9) .two: ; 8d2b9 (23:52b9)
ld hl, SPRITEANIMSTRUCT_XCOORD ld hl, SPRITEANIMSTRUCT_XCOORD
add hl, bc add hl, bc
ld [hl], $18 ld [hl], 8 * 3
ld hl, SPRITEANIMSTRUCT_0C ld hl, SPRITEANIMSTRUCT_0C
add hl, bc add hl, bc
@ -93,24 +93,24 @@ endr
add hl, bc add hl, bc
ld a, d ld a, d
and $10 ; bit 4 and $10 ; bit 4
jr z, .asm_8d2df jr z, .load_zero
ld a, e ld a, e
and a and a
jr z, .asm_8d2e6 jr z, .load_minus_two
cp $1 cp $1
jr z, .asm_8d2e2 jr z, .load_minus_one
.asm_8d2df .load_zero
xor a xor a
ld [hl], a ld [hl], a
ret ret
.asm_8d2e2 .load_minus_one
ld a, $ff ld a, -1
ld [hl], a ld [hl], a
ret ret
.asm_8d2e6 .load_minus_two
ld a, $fe ld a, -2
ld [hl], a ld [hl], a
ret ret
@ -120,17 +120,17 @@ endr
ld hl, SPRITEANIMSTRUCT_INDEX ld hl, SPRITEANIMSTRUCT_INDEX
add hl, bc add hl, bc
cp [hl] cp [hl]
jr z, .asm_8d2fb jr z, .three_offset_right
ld hl, SPRITEANIMSTRUCT_XCOORD ld hl, SPRITEANIMSTRUCT_XCOORD
add hl, bc add hl, bc
ld [hl], $10 ld [hl], 8 * 2
ret ret
.asm_8d2fb .three_offset_right
ld hl, SPRITEANIMSTRUCT_XCOORD ld hl, SPRITEANIMSTRUCT_XCOORD
add hl, bc add hl, bc
ld [hl], $18 ld [hl], 8 * 3
ret ret
.four: ; 8d302 (23:5302) .four: ; 8d302 (23:5302)

View File

@ -76,7 +76,7 @@ LoadCelebiGFX: ; 49912
lb bc, BANK(SpecialCelebiLeafGFX), 4 lb bc, BANK(SpecialCelebiLeafGFX), 4
call Request2bpp call Request2bpp
ld de, SpecialCelebiGFX ld de, SpecialCelebiGFX
ld hl, VTiles1 tile $04 ld hl, VTiles0 tile $84
lb bc, BANK(SpecialCelebiGFX), $10 lb bc, BANK(SpecialCelebiGFX), $10
call Request2bpp call Request2bpp
xor a xor a
@ -240,12 +240,12 @@ CelebiEvent_Cosine: ; 49b3b (12:5b3b)
add $10 add $10
and $3f and $3f
cp $20 cp $20
jr nc, .asm_49b48 jr nc, .negative
call .SineFunction call .SineFunction
ld a, h ld a, h
ret ret
.asm_49b48 .negative
and $1f and $1f
call .SineFunction call .SineFunction
ld a, h ld a, h

View File

@ -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 rOBP1 EQU $ff49 ; Object Palette 1 Data (R/W) - Non CGB Mode Only
rWY EQU $ff4a ; Window Y Position (R/W) rWY EQU $ff4a ; Window Y Position (R/W)
rWX EQU $ff4b ; Window X Position minus 7 (R/W) rWX EQU $ff4b ; Window X Position minus 7 (R/W)
rLCDMODE EQU $ff4c
rKEY1 EQU $ff4d ; CGB Mode Only - Prepare Speed Switch rKEY1 EQU $ff4d ; CGB Mode Only - Prepare Speed Switch
rVBK EQU $ff4f ; CGB Mode Only - VRAM Bank rVBK EQU $ff4f ; CGB Mode Only - VRAM Bank
rBLCK EQU $ff50
rHDMA1 EQU $ff51 ; CGB Mode Only - New DMA Source, High rHDMA1 EQU $ff51 ; CGB Mode Only - New DMA Source, High
rHDMA2 EQU $ff52 ; CGB Mode Only - New DMA Source, Low rHDMA2 EQU $ff52 ; CGB Mode Only - New DMA Source, Low
rHDMA3 EQU $ff53 ; CGB Mode Only - New DMA Destination, High rHDMA3 EQU $ff53 ; CGB Mode Only - New DMA Destination, High

View File

@ -29,201 +29,242 @@ A_ EQU 10
A# EQU 11 A# EQU 11
B_ EQU 12 B_ EQU 12
enum_start $d8
enum notetype_cmd
octave: macro octave: macro
db $d8 - (\1) db notetype_cmd - (\1)
endm endm
notetype: macro notetype: macro
db $d8 db notetype_cmd
db \1 ; note_length db \1 ; note_length
if _NARG >= 2 if _NARG >= 2
db \2 ; intensity db \2 ; intensity
endc endc
endm endm
enum forceoctave_cmd
forceoctave: macro forceoctave: macro
db $d9 db forceoctave_cmd
db \1 ; octave db \1 ; octave
endm endm
enum tempo_cmd
tempo: macro tempo: macro
db $da db tempo_cmd
bigdw \1 ; tempo bigdw \1 ; tempo
endm endm
enum dutycycle_cmd
dutycycle: macro dutycycle: macro
db $db db dutycycle_cmd
db \1 ; duty_cycle db \1 ; duty_cycle
endm endm
enum intensity_cmd
intensity: macro intensity: macro
db $dc db intensity_cmd
db \1 ; intensity db \1 ; intensity
endm endm
enum soundinput_cmd
soundinput: macro soundinput: macro
db $dd db soundinput_cmd
db \1 ; input db \1 ; input
endm endm
enum unknownmusic0xde_cmd
unknownmusic0xde: macro unknownmusic0xde: macro
db $de db unknownmusic0xde_cmd
db \1 ; unknown db \1 ; unknown
endm endm
enum togglesfx_cmd
togglesfx: macro togglesfx: macro
db $df db togglesfx_cmd
endm endm
enum unknownmusic0xe0_cmd
unknownmusic0xe0: macro unknownmusic0xe0: macro
db $e0 db unknownmusic0xe0_cmd
db \1 ; unknown db \1 ; unknown
db \2 ; unknown ; db \2 ; unknown
dn \2, \3 ; octave, pitch
endm endm
enum vibrato_cmd
vibrato: macro vibrato: macro
db $e1 db vibrato_cmd
db \1 ; delay db \1 ; delay
db \2 ; extent db \2 ; extent
endm endm
enum unknownmusic0xe2_cmd
unknownmusic0xe2: macro unknownmusic0xe2: macro
db $e2 db unknownmusic0xe2_cmd
db \1 ; unknown db \1 ; unknown
endm endm
enum togglenoise_cmd
togglenoise: macro togglenoise: macro
db $e3 db togglenoise_cmd
db \1 ; id db \1 ; id
endm endm
enum panning_cmd
panning: macro panning: macro
db $e4 db panning_cmd
db \1 ; tracks db \1 ; tracks
endm endm
enum volume_cmd
volume: macro volume: macro
db $e5 db volume_cmd
db \1 ; volume db \1 ; volume
endm endm
enum tone_cmd
tone: macro tone: macro
db $e6 db tone_cmd
bigdw \1 ; tone bigdw \1 ; tone
endm endm
enum unknownmusic0xe7_cmd
unknownmusic0xe7: macro unknownmusic0xe7: macro
db $e7 db unknownmusic0xe7_cmd
db \1 ; unknown db \1 ; unknown
endm endm
enum unknownmusic0xe8_cmd
unknownmusic0xe8: macro unknownmusic0xe8: macro
db $e8 db unknownmusic0xe8_cmd
db \1 ; unknown db \1 ; unknown
endm endm
enum globaltempo_cmd
globaltempo: macro globaltempo: macro
db $e9 db globaltempo_cmd
bigdw \1 ; value bigdw \1 ; value
endm endm
enum restartchannel_cmd
restartchannel: macro restartchannel: macro
db $ea db restartchannel_cmd
dw \1 ; address dw \1 ; address
endm endm
enum newsong_cmd
newsong: macro newsong: macro
db $eb db newsong_cmd
bigdw \1 ; id bigdw \1 ; id
endm endm
enum sfxpriorityon_cmd
sfxpriorityon: macro sfxpriorityon: macro
db $ec db sfxpriorityon_cmd
endm endm
enum sfxpriorityoff_cmd
sfxpriorityoff: macro sfxpriorityoff: macro
db $ed db sfxpriorityoff_cmd
endm endm
enum unknownmusic0xee_cmd
unknownmusic0xee: macro unknownmusic0xee: macro
db $ee db unknownmusic0xee_cmd
dw \1 ; address dw \1 ; address
endm endm
enum stereopanning_cmd
stereopanning: macro stereopanning: macro
db $ef db stereopanning_cmd
db \1 ; tracks db \1 ; tracks
endm endm
enum sfxtogglenoise_cmd
sfxtogglenoise: macro sfxtogglenoise: macro
db $f0 db sfxtogglenoise_cmd
db \1 ; id db \1 ; id
endm endm
enum music0xf1_cmd
music0xf1: macro music0xf1: macro
db $f1 db music0xf1_cmd
endm endm
enum music0xf2_cmd
music0xf2: macro music0xf2: macro
db $f2 db music0xf2_cmd
endm endm
enum music0xf3_cmd
music0xf3: macro music0xf3: macro
db $f3 db music0xf3_cmd
endm endm
enum music0xf4_cmd
music0xf4: macro music0xf4: macro
db $f4 db music0xf4_cmd
endm endm
enum music0xf5_cmd
music0xf5: macro music0xf5: macro
db $f5 db music0xf5_cmd
endm endm
enum music0xf6_cmd
music0xf6: macro music0xf6: macro
db $f6 db music0xf6_cmd
endm endm
enum music0xf7_cmd
music0xf7: macro music0xf7: macro
db $f7 db music0xf7_cmd
endm endm
enum music0xf8_cmd
music0xf8: macro music0xf8: macro
db $f8 db music0xf8_cmd
endm endm
enum unknownmusic0xf9_cmd
unknownmusic0xf9: macro unknownmusic0xf9: macro
db $f9 db unknownmusic0xf9_cmd
endm endm
enum setcondition_cmd
setcondition: macro setcondition: macro
db $fa db setcondition_cmd
db \1 ; condition db \1 ; condition
endm endm
enum jumpif_cmd
jumpif: macro jumpif: macro
db $fb db jumpif_cmd
db \1 ; condition db \1 ; condition
dw \2 ; address dw \2 ; address
endm endm
enum jumpchannel_cmd
jumpchannel: macro jumpchannel: macro
db $fc db jumpchannel_cmd
dw \1 ; address dw \1 ; address
endm endm
enum loopchannel_cmd
loopchannel: macro loopchannel: macro
db $fd db loopchannel_cmd
db \1 ; count db \1 ; count
dw \2 ; address dw \2 ; address
endm endm
enum callchannel_cmd
callchannel: macro callchannel: macro
db $fe db callchannel_cmd
dw \1 ; address dw \1 ; address
endm endm
enum endchannel_cmd
endchannel: macro endchannel: macro
db $ff db endchannel_cmd
endm endm

1450
main.asm

File diff suppressed because it is too large Load Diff

View File

@ -89,7 +89,7 @@ IlexForest_MapScriptHeader:
appear ILEXFOREST_BIRD appear ILEXFOREST_BIRD
return return
YoungsterScript_0x6eb7b: IlexForestCharcoalApprenticeScript:
faceplayer faceplayer
loadfont loadfont
checkevent EVENT_HERDED_FARFETCHD checkevent EVENT_HERDED_FARFETCHD
@ -347,16 +347,16 @@ IlexForestFarfetchdScript:
checkcode VAR_FACING checkcode VAR_FACING
end end
BlackBeltScript_0x6edae: IlexForestCharcoalMasterScript:
faceplayer faceplayer
loadfont loadfont
checkevent EVENT_GOT_HM01_CUT checkevent EVENT_GOT_HM01_CUT
iftrue .AlreadyGotCut iftrue .AlreadyGotCut
writetext UnknownText_0x6f099 writetext Text_CharcoalMasterIntro
buttonsound buttonsound
verbosegiveitem HM_CUT verbosegiveitem HM_CUT
setevent EVENT_GOT_HM01_CUT setevent EVENT_GOT_HM01_CUT
writetext UnknownText_0x6f141 writetext Text_CharcoalMasterOutro
waitbutton waitbutton
closetext closetext
setevent EVENT_ILEX_FOREST_FARFETCHD setevent EVENT_ILEX_FOREST_FARFETCHD
@ -368,25 +368,25 @@ BlackBeltScript_0x6edae:
end end
.AlreadyGotCut: .AlreadyGotCut:
writetext UnknownText_0x6f1c0 writetext Text_CharcoalMasterTalkAfter
waitbutton waitbutton
closetext closetext
end end
RockerScript_0x6edde: IlexForestHeadbuttGuyScript:
faceplayer faceplayer
loadfont loadfont
checkevent EVENT_GOT_TM02_HEADBUTT checkevent EVENT_GOT_TM02_HEADBUTT
iftrue UnknownScript_0x6edf3 iftrue .AlreadyGotHeadbutt
writetext UnknownText_0x6f21b writetext Text_HeadbuttIntro
buttonsound buttonsound
verbosegiveitem TM_HEADBUTT verbosegiveitem TM_HEADBUTT
iffalse UnknownScript_0x6edf7 iffalse .BagFull
setevent EVENT_GOT_TM02_HEADBUTT setevent EVENT_GOT_TM02_HEADBUTT
UnknownScript_0x6edf3: .AlreadyGotHeadbutt:
writetext UnknownText_0x6f26d writetext Text_HeadbuttOutro
waitbutton waitbutton
UnknownScript_0x6edf7: .BagFull:
closetext closetext
end end
@ -396,13 +396,13 @@ TrainerBug_catcherWayne:
Bug_catcherWayneScript: Bug_catcherWayneScript:
end_if_just_battled end_if_just_battled
loadfont loadfont
writetext UnknownText_0x6f571 writetext Bug_catcherWayneAfterText
waitbutton waitbutton
closetext closetext
end end
LassScript_0x6ee0d: IlexForestLassScript:
jumptextfaceplayer UnknownText_0x6f2af jumptextfaceplayer Text_IlexForestLass
ItemFragment_0x6ee10: ItemFragment_0x6ee10:
db REVIVE, 1 db REVIVE, 1
@ -432,7 +432,7 @@ IlexForestBoulder:
jumpstd strengthboulder jumpstd strengthboulder
MapIlexForestSignpost0Script: MapIlexForestSignpost0Script:
jumptext UnknownText_0x6f2de jumptext Text_IlexForestSignpost0
MapIlexForestSignpost4Script: MapIlexForestSignpost4Script:
checkevent EVENT_FOREST_IS_RESTLESS checkevent EVENT_FOREST_IS_RESTLESS
@ -443,11 +443,11 @@ MapIlexForestSignpost4Script:
checkitem GS_BALL checkitem GS_BALL
iftrue .AskCelebiEvent iftrue .AskCelebiEvent
.DontDoCelebiEvent: .DontDoCelebiEvent:
jumptext UnknownText_0x6f358 jumptext Text_IlexForestShrine
.AskCelebiEvent: .AskCelebiEvent:
loadfont loadfont
writetext UnknownText_0x6f394 writetext Text_ShrineCelebiEvent
yesorno yesorno
iftrue .CelebiEvent iftrue .CelebiEvent
closetext closetext
@ -459,7 +459,7 @@ MapIlexForestSignpost4Script:
setevent EVENT_AZALEA_TOWN_KURT setevent EVENT_AZALEA_TOWN_KURT
disappear ILEXFOREST_LASS disappear ILEXFOREST_LASS
clearevent EVENT_ROUTE_34_ILEX_FOREST_GATE_LASS clearevent EVENT_ROUTE_34_ILEX_FOREST_GATE_LASS
writetext UnknownText_0x6f43b writetext Text_InsertGSBall
waitbutton waitbutton
closetext closetext
pause 20 pause 20
@ -480,7 +480,7 @@ MapIlexForestSignpost4Script:
appear ILEXFOREST_KURT appear ILEXFOREST_KURT
applymovement ILEXFOREST_KURT, MovementData_0x6ef4e applymovement ILEXFOREST_KURT, MovementData_0x6ef4e
loadfont loadfont
writetext UnknownText_0x6f452 writetext Text_KurtCaughtCelebi
waitbutton waitbutton
closetext closetext
applymovement ILEXFOREST_KURT, MovementData_0x6ef53 applymovement ILEXFOREST_KURT, MovementData_0x6ef53
@ -781,7 +781,7 @@ Text_Kwaaaa:
text "FARFETCH'D: Kwaa!" text "FARFETCH'D: Kwaa!"
done done
UnknownText_0x6f099: Text_CharcoalMasterIntro:
text "Ah! My FARFETCH'D!" text "Ah! My FARFETCH'D!"
para "You found it for" para "You found it for"
@ -802,7 +802,7 @@ UnknownText_0x6f099:
line "this." line "this."
done done
UnknownText_0x6f141: Text_CharcoalMasterOutro:
text "That's the CUT HM." text "That's the CUT HM."
line "Teach that to a" line "Teach that to a"
@ -816,7 +816,7 @@ UnknownText_0x6f141:
line "AZALEA to use it." line "AZALEA to use it."
done done
UnknownText_0x6f1c0: Text_CharcoalMasterTalkAfter:
text "Do you want to" text "Do you want to"
line "apprentice as a" line "apprentice as a"
@ -827,7 +827,7 @@ UnknownText_0x6f1c0:
line "rate in ten years!" line "rate in ten years!"
done done
UnknownText_0x6f21b: Text_HeadbuttIntro:
text "What am I doing?" text "What am I doing?"
para "I'm shaking trees" para "I'm shaking trees"
@ -837,20 +837,20 @@ UnknownText_0x6f21b:
line "you try it too!" line "you try it too!"
done done
UnknownText_0x6f26d: Text_HeadbuttOutro:
text "Rattle trees with" text "Rattle trees with"
line "HEADBUTT. Some-" line "HEADBUTT. Some-"
cont "times, sleeping" cont "times, sleeping"
cont "#MON fall out." cont "#MON fall out."
done done
UnknownText_0x6f2af: Text_IlexForestLass:
text "Did something" text "Did something"
line "happen to the" line "happen to the"
cont "forest's guardian?" cont "forest's guardian?"
done done
UnknownText_0x6f2de: Text_IlexForestSignpost0:
text "ILEX FOREST is" text "ILEX FOREST is"
line "so overgrown with" line "so overgrown with"
@ -862,7 +862,7 @@ UnknownText_0x6f2de:
cont "have been dropped." cont "have been dropped."
done done
UnknownText_0x6f358: Text_IlexForestShrine:
text "ILEX FOREST" text "ILEX FOREST"
line "SHRINE…" line "SHRINE…"
@ -871,7 +871,7 @@ UnknownText_0x6f358:
cont "protector…" cont "protector…"
done done
UnknownText_0x6f394: Text_ShrineCelebiEvent:
text "ILEX FOREST" text "ILEX FOREST"
line "SHRINE…" line "SHRINE…"
@ -891,12 +891,12 @@ UnknownText_0x6f394:
line "BALL here?" line "BALL here?"
done done
UnknownText_0x6f43b: Text_InsertGSBall:
text "<PLAYER> put in the" text "<PLAYER> put in the"
line "GS BALL." line "GS BALL."
done done
UnknownText_0x6f452: Text_KurtCaughtCelebi:
text "Whew, wasn't that" text "Whew, wasn't that"
line "something!" line "something!"
@ -929,7 +929,7 @@ Bug_catcherWayneBeatenText:
line "#MON before…" line "#MON before…"
done done
UnknownText_0x6f571: Bug_catcherWayneAfterText:
text "A #MON I've" text "A #MON I've"
line "never seen before" line "never seen before"
@ -966,12 +966,12 @@ IlexForest_MapEventHeader:
.PersonEvents: .PersonEvents:
db 11 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_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_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, BlackBeltScript_0x6edae, EVENT_ILEX_FOREST_CHARCOAL_MASTER 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, RockerScript_0x6edde, -1 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_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_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_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, 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 person_event SPRITE_POKE_BALL, 7, 17, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x6ee14, EVENT_ILEX_FOREST_ANTIDOTE

937
misc/mobile_12_2.asm Executable file
View File

@ -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

View File

@ -104,28 +104,30 @@ channel_struct: MACRO
\1Octave:: db ; 7-0 (0 is highest) \1Octave:: db ; 7-0 (0 is highest)
\1StartingOctave:: db ; raises existing octaves (to repeat phrases) \1StartingOctave:: db ; raises existing octaves (to repeat phrases)
\1NoteDuration:: db ; frames remaining for the current note \1NoteDuration:: db ; frames remaining for the current note
ds 1 ; c117 \1Field0x16:: ds 1 ; c117
ds 1 ; c118 ds 1 ; c118
\1LoopCount:: db \1LoopCount:: db
\1Tempo:: dw \1Tempo:: dw
\1Tracks:: db ; hi:left lo:right \1Tracks:: db ; hi:left lo:right
ds 1 ; c11d \1Field0x1c:: ds 1 ; c11d
\1VibratoDelayCount:: db ; initialized by \1VibratoDelay \1VibratoDelayCount:: db ; initialized by \1VibratoDelay
\1VibratoDelay:: db ; number of frames a note plays until vibrato starts \1VibratoDelay:: db ; number of frames a note plays until vibrato starts
\1VibratoExtent:: db \1VibratoExtent:: db
\1VibratoRate:: db ; hi:frames for each alt lo:frames to the next alt \1VibratoRate:: db ; hi:frames for each alt lo:frames to the next alt
ds 1 ; c122 \1Field0x21:: ds 1 ; c122
ds 1 ; c123 \1Field0x22:: ds 1 ; c123
ds 1 ; c124 \1Field0x23:: ds 1 ; c124
ds 1 ; c125 \1Field0x24:: ds 1 ; c125
ds 1 ; c126 \1Field0x25:: ds 1 ; c126
ds 1 ; c127 ds 1 ; c127
\1CryPitch:: dw \1CryPitch:: dw
ds 4 \1Field0x29:: ds 1
\1Field0x2a:: ds 2
\1Field0x2c:: ds 1
\1NoteLength:: db ; frames per 16th note \1NoteLength:: db ; frames per 16th note
ds 1 ; c12f \1Field0x2e:: ds 1 ; c12f
ds 1 ; c130 \1Field0x2f:: ds 1 ; c130
ds 1 ; c131 \1Field0x30:: ds 1 ; c131
ds 1 ; c132 ds 1 ; c132
ENDM ENDM
@ -1065,18 +1067,27 @@ OverworldMapEnd::
ds OverworldMap - @ ds OverworldMap - @
wc800:: ds 1 wc800:: ds 1
wMysteryGiftPlayerID::
wc801:: ds 1 wc801:: ds 1
wc802:: ds 1 wc802:: ds 1
wMysteryGiftPlayerName::
wc803:: ds 4 wc803:: ds 4
wc807:: ds 9 wc807:: ds 7
wc810:: ds 3 wMysteryGiftPlayerDexCaught:: ds 1
wc813:: ds 5 wc80f:: ds 1
wc810:: ds 1
wc811:: ds 1
wMysteryGiftPlayerBackupItem::
wc812:: ds 1
wc813:: ds 1
wc814:: ds 4
wc818:: ds 8 wc818:: ds 8
wc820:: ds 1 wc820:: ds 1
wc821:: ds 15 wc821:: ds 15
wc830:: ds 16 wc830:: ds 16
wc840:: ds 16 wc840:: ds 16
wMysteryGiftTrainerData:: ds (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 2 wMysteryGiftTrainerData:: ds (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 2
wMysteryGiftTrainerDataEnd::
ds wMysteryGiftTrainerData - @ ds wMysteryGiftTrainerData - @
wc850:: ds 16 wc850:: ds 16
wc860:: ds 16 wc860:: ds 16
@ -1102,7 +1113,8 @@ wc930:: ds 16
wc940:: ds 16 wc940:: ds 16
wc950:: ds 16 wc950:: ds 16
wc960:: ds 2 wc960:: ds 2
wc962:: ds 14 wc962:: ds 2
wc964:: ds 12
wc970:: ds 16 wc970:: ds 16
wc980:: ds 16 wc980:: ds 16
wc990:: ds 16 wc990:: ds 16