You've already forked pokecrystal-board
mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2025-09-08 08:13:02 -07:00
A stab at audio engine.
This commit is contained in:
@@ -702,22 +702,23 @@ Function104ddd: ; 104ddd (41:4ddd)
|
||||
ld e, d
|
||||
ld a, $1
|
||||
ld [hPrintNum9], a
|
||||
.asm_104de4
|
||||
.loop
|
||||
call Function105038
|
||||
ld b, $2
|
||||
ld c, rRP % $100
|
||||
ld a, [hMoneyTemp + 1]
|
||||
bit 1, a
|
||||
jr z, .asm_104df6
|
||||
jr z, .next
|
||||
ld a, $10
|
||||
ld [hPrintNum10], a
|
||||
ret
|
||||
.asm_104df6
|
||||
|
||||
.next
|
||||
bit 0, a
|
||||
jr nz, asm_104e3a
|
||||
ld a, [$ff00+c]
|
||||
and b
|
||||
jr nz, .asm_104de4
|
||||
jr nz, .loop
|
||||
|
||||
Function104dfe: ; 104dfe (41:4dfe)
|
||||
ld c, rRP % $100
|
||||
@@ -1181,11 +1182,11 @@ RestoreMysteryGift: ; 1050ea (41:50ea)
|
||||
Function1050fb: ; 1050fb (41:50fb)
|
||||
ld hl, wMysteryGiftTrainerData
|
||||
xor a
|
||||
ld b, $26
|
||||
.asm_105101
|
||||
ld b, wMysteryGiftTrainerDataEnd - wMysteryGiftTrainerData
|
||||
.loop
|
||||
ld [hli], a
|
||||
dec b
|
||||
jr nz, .asm_105101
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
|
||||
|
||||
229
engine/mysterygift2.asm
Executable file
229
engine/mysterygift2.asm
Executable 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
276
engine/search.asm
Executable 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
|
||||
@@ -16,9 +16,9 @@ endr
|
||||
|
||||
.Jumptable: ; 8d25b (23:525b)
|
||||
dw .zero ; town map
|
||||
dw .one ; bouncing mon icons
|
||||
dw .two
|
||||
dw .three
|
||||
dw .one ; bouncing mon icon
|
||||
dw .two ; bouncing mon icon, selected
|
||||
dw .three ; bouncing mon icon, menu open
|
||||
dw .four
|
||||
dw .five
|
||||
dw .six ; Game Freak logo
|
||||
@@ -46,7 +46,7 @@ endr
|
||||
dw .twentyeight
|
||||
dw .twentynine ; intro suicune
|
||||
dw .thirty ; intro pichu wooper
|
||||
dw .thirtyone
|
||||
dw .thirtyone ; celebi
|
||||
dw .thirtytwo ; intro unown
|
||||
dw .thirtythree ; intro unown F with suicune leaping up
|
||||
dw .thirtyfour ; intro suicune facing away from us
|
||||
@@ -65,7 +65,7 @@ endr
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_XCOORD
|
||||
add hl, bc
|
||||
ld [hl], $10
|
||||
ld [hl], 8 * 2
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_YOFFSET
|
||||
add hl, bc
|
||||
@@ -75,7 +75,7 @@ endr
|
||||
.two: ; 8d2b9 (23:52b9)
|
||||
ld hl, SPRITEANIMSTRUCT_XCOORD
|
||||
add hl, bc
|
||||
ld [hl], $18
|
||||
ld [hl], 8 * 3
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_0C
|
||||
add hl, bc
|
||||
@@ -93,24 +93,24 @@ endr
|
||||
add hl, bc
|
||||
ld a, d
|
||||
and $10 ; bit 4
|
||||
jr z, .asm_8d2df
|
||||
jr z, .load_zero
|
||||
ld a, e
|
||||
and a
|
||||
jr z, .asm_8d2e6
|
||||
jr z, .load_minus_two
|
||||
cp $1
|
||||
jr z, .asm_8d2e2
|
||||
.asm_8d2df
|
||||
jr z, .load_minus_one
|
||||
.load_zero
|
||||
xor a
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
.asm_8d2e2
|
||||
ld a, $ff
|
||||
.load_minus_one
|
||||
ld a, -1
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
.asm_8d2e6
|
||||
ld a, $fe
|
||||
.load_minus_two
|
||||
ld a, -2
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
@@ -120,17 +120,17 @@ endr
|
||||
ld hl, SPRITEANIMSTRUCT_INDEX
|
||||
add hl, bc
|
||||
cp [hl]
|
||||
jr z, .asm_8d2fb
|
||||
jr z, .three_offset_right
|
||||
|
||||
ld hl, SPRITEANIMSTRUCT_XCOORD
|
||||
add hl, bc
|
||||
ld [hl], $10
|
||||
ld [hl], 8 * 2
|
||||
ret
|
||||
|
||||
.asm_8d2fb
|
||||
.three_offset_right
|
||||
ld hl, SPRITEANIMSTRUCT_XCOORD
|
||||
add hl, bc
|
||||
ld [hl], $18
|
||||
ld [hl], 8 * 3
|
||||
ret
|
||||
|
||||
.four: ; 8d302 (23:5302)
|
||||
|
||||
Reference in New Issue
Block a user