summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2015-12-06 22:36:09 -0500
committerPikalaxALT <PikalaxALT@gmail.com>2015-12-06 22:36:09 -0500
commit02d05255fe96e9c06d176c0960395fb5aeb36211 (patch)
tree20bdf048c0a1d35c2f567a83861388efa9a37b24 /engine
parent6eac26732a7d19e08374e7e8e6f122da38b4a395 (diff)
A stab at audio engine.
Diffstat (limited to 'engine')
-rwxr-xr-xengine/mysterygift.asm15
-rwxr-xr-xengine/mysterygift2.asm229
-rwxr-xr-xengine/search.asm276
-rwxr-xr-xengine/sprite_anims.asm36
4 files changed, 531 insertions, 25 deletions
diff --git a/engine/mysterygift.asm b/engine/mysterygift.asm
index 43cbe52d1..91b0a3929 100755
--- a/engine/mysterygift.asm
+++ b/engine/mysterygift.asm
@@ -702,22 +702,23 @@ Function104ddd: ; 104ddd (41:4ddd)
ld e, d
ld a, $1
ld [hPrintNum9], a
-.asm_104de4
+.loop
call Function105038
ld b, $2
ld c, rRP % $100
ld a, [hMoneyTemp + 1]
bit 1, a
- jr z, .asm_104df6
+ jr z, .next
ld a, $10
ld [hPrintNum10], a
ret
-.asm_104df6
+
+.next
bit 0, a
jr nz, asm_104e3a
ld a, [$ff00+c]
and b
- jr nz, .asm_104de4
+ jr nz, .loop
Function104dfe: ; 104dfe (41:4dfe)
ld c, rRP % $100
@@ -1181,11 +1182,11 @@ RestoreMysteryGift: ; 1050ea (41:50ea)
Function1050fb: ; 1050fb (41:50fb)
ld hl, wMysteryGiftTrainerData
xor a
- ld b, $26
-.asm_105101
+ ld b, wMysteryGiftTrainerDataEnd - wMysteryGiftTrainerData
+.loop
ld [hli], a
dec b
- jr nz, .asm_105101
+ jr nz, .loop
ret
diff --git a/engine/mysterygift2.asm b/engine/mysterygift2.asm
new file mode 100755
index 000000000..0f70e4bfc
--- /dev/null
+++ b/engine/mysterygift2.asm
@@ -0,0 +1,229 @@
+Function2c642: ; 2c642 (b:4642)
+ ld de, wc800
+ ld a, $1
+ ld [de], a
+ inc de
+ ld a, BANK(sGameData)
+ call GetSRAMBank
+ ld hl, sPlayerData + PlayerID - wPlayerData
+ ld a, [hli]
+ ld [de], a
+ ld b, a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ ld c, a
+ inc de
+ push bc
+ ld hl, sPlayerData + PlayerName - wPlayerData
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ push de
+ ld hl, sPokemonData + PokedexCaught - wPokemonData
+ ld b, (NUM_POKEMON + 7) / 8
+ call CountSetBits
+ pop de
+ pop bc
+ ld a, [wd265]
+ ld [de], a
+ inc de
+ call CloseSRAM
+ call Random
+ and $1
+ ld [de], a
+ inc de
+ call Function2c6ac
+ ld [de], a
+ inc de
+ ld a, c
+ ld c, b
+ ld b, a
+ call Function2c6ac
+ ld [de], a
+ inc de
+ ld a, BANK(sBackupMysteryGiftItem)
+ call GetSRAMBank
+ ld a, [sBackupMysteryGiftItem]
+ ld [de], a
+ inc de
+ ld a, [sBackupMysteryGiftItem + 1]
+ ld [de], a
+ ld a, $14
+ ld [wca00], a
+ call CloseSRAM
+ ld hl, wc800
+ ld de, wc950
+ ld bc, $14
+ jp CopyBytes
+
+Function2c6ac: ; 2c6ac (b:46ac)
+ push de
+ call Random
+ cp $19 ; 10 percent
+ jr c, .tenpercent
+ call Random
+ and $7
+ ld d, a
+ rl d
+ ld e, $80
+.loop
+ rlc e
+ dec a
+ jr nz, .loop
+ ld a, e
+ and c
+ jr z, .skip
+ ld a, $1
+.skip
+ add d
+ jr .done
+
+.tenpercent
+ call Random
+ cp $32 ; 20 percent
+ jr c, .twopercent
+ call Random
+ and $3
+ ld d, a
+ rl d
+ ld e, $80
+.loop2
+ rlc e
+ dec a
+ jr nz, .loop2
+ ld a, e
+ and b
+ jr z, .skip2
+ ld a, $1
+.skip2
+ add d
+ add $10
+ jr .done
+
+.twopercent
+ call Random
+ cp $32 ; 50 ; 20 percent
+ jr c, .pointfourpercent
+ ld a, b
+ swap a
+ and $7
+ add $18
+ jr .done
+
+.pointfourpercent
+ ld a, b
+ and $80
+ ld a, $20
+ jr z, .done
+ ld a, $21
+
+.done
+ pop de
+ ret
+
+MysteryGiftGetItemHeldEffect: ; 2c708 (b:4708)
+ ld a, c
+ cp $25 ; 37
+ jr nc, Function2c722
+ ld hl, Unknown_2c725
+ ld b, 0
+ add hl, bc
+ ld c, [hl]
+ ret
+
+MysteryGiftGetDecoration: ; 2c715 (b:4715)
+ ld a, c
+ cp $25 ; 37
+ jr nc, Function2c722
+ ld hl, Unknown_2c74a
+ ld b, 0
+ add hl, bc
+ ld c, [hl]
+ ret
+
+Function2c722: ; 2c722 (b:4722)
+ ld c, DECO_POLKADOT_BED ; GREAT_BALL
+ ret
+; 2c725 (b:4725)
+
+Unknown_2c725: ; 2c725
+; May or may not be items.
+ db BERRY
+ db PRZCUREBERRY
+ db MINT_BERRY
+ db ICE_BERRY
+ db BURNT_BERRY
+ db PSNCUREBERRY
+ db GUARD_SPEC
+ db X_DEFEND
+ db X_ATTACK
+ db BITTER_BERRY
+ db DIRE_HIT
+ db X_SPECIAL
+ db X_ACCURACY
+ db EON_MAIL
+ db MORPH_MAIL
+ db MUSIC_MAIL
+ db MIRACLEBERRY
+ db GOLD_BERRY
+ db REVIVE
+ db GREAT_BALL
+ db SUPER_REPEL
+ db MAX_REPEL
+ db ELIXER
+ db ETHER
+ db WATER_STONE
+ db FIRE_STONE
+ db LEAF_STONE
+ db THUNDERSTONE
+ db MAX_ETHER
+ db MAX_ELIXER
+ db MAX_REVIVE
+ db SCOPE_LENS
+ db HP_UP
+ db PP_UP
+ db RARE_CANDY
+ db BLUESKY_MAIL
+ db MIRAGE_MAIL
+; 2c74a
+
+Unknown_2c74a: ; 2c74a
+; May or may not be items.
+ db DECO_SNES
+ db DECO_BIG_SNORLAX_DOLL
+ db DECO_BIG_ONIX_DOLL
+ db DECO_BIG_LAPRAS_DOLL
+ db DECO_DOLLS
+ db DECO_PIKACHU_DOLL
+ db DECO_SURF_PIKACHU_DOLL
+ db DECO_CLEFAIRY_DOLL
+ db DECO_JIGGLYPUFF_DOLL
+ db DECO_BULBASAUR_DOLL
+ db DECO_TROPICPLANT
+ db DECO_JUMBOPLANT
+ db DECO_TOWN_MAP
+ db DECO_CHARMANDER_DOLL
+ db DECO_POLIWAG_DOLL
+ db DECO_DIGLETT_DOLL
+ db DECO_BLUE_CARPET
+ db DECO_YELLOW_CARPET
+ db DECO_POSTERS
+ db DECO_PIKACHU_POSTER
+ db DECO_N64
+ db DECO_BIG_DOLLS
+ db DECO_BEDS
+ db DECO_FEATHERY_BED
+ db DECO_POLKADOT_BED
+ db DECO_PIKACHU_BED
+ db DECO_CARPETS
+ db DECO_RED_CARPET
+ db DECO_GREEN_CARPET
+ db DECO_CLEFAIRY_POSTER
+ db DECO_ODDISH_DOLL
+ db DECO_MAGNAPLANT
+ db DECO_GENGAR_DOLL
+ db DECO_CONSOLES
+ db DECO_PINK_BED
+ db DECO_SQUIRTLE_DOLL
+ db DECO_STARMIE_DOLL
+; 2c76f
diff --git a/engine/search.asm b/engine/search.asm
new file mode 100755
index 000000000..662623296
--- /dev/null
+++ b/engine/search.asm
@@ -0,0 +1,276 @@
+SpecialBeastsCheck: ; 0x4a6e8
+; Check if the player owns all three legendary beasts.
+; They must exist in either party or PC, and have the player's OT and ID.
+; Return the result in ScriptVar.
+
+ ld a, RAIKOU
+ ld [ScriptVar], a
+ call CheckOwnMonAnywhere
+ jr nc, .notexist
+
+ ld a, ENTEI
+ ld [ScriptVar], a
+ call CheckOwnMonAnywhere
+ jr nc, .notexist
+
+ ld a, SUICUNE
+ ld [ScriptVar], a
+ call CheckOwnMonAnywhere
+ jr nc, .notexist
+
+ ; they exist
+ ld a, 1
+ ld [ScriptVar], a
+ ret
+
+.notexist
+ xor a
+ ld [ScriptVar], a
+ ret
+
+
+SpecialMonCheck: ; 0x4a711
+; Check if the player owns any monsters of the species in ScriptVar.
+; Return the result in ScriptVar.
+
+ call CheckOwnMonAnywhere
+ jr c, .exists
+
+ ; doesn't exist
+ xor a
+ ld [ScriptVar], a
+ ret
+
+.exists
+ ld a, 1
+ ld [ScriptVar], a
+ ret
+
+
+CheckOwnMonAnywhere: ; 0x4a721
+; Check if the player owns any monsters of the species in ScriptVar.
+; It must exist in either party or PC, and have the player's OT and ID.
+
+ ; If there are no monsters in the party,
+ ; the player must not own any yet.
+ ld a, [PartyCount]
+ and a
+ ret z
+
+ ld d, a
+ ld e, 0
+ ld hl, PartyMon1Species
+ ld bc, PartyMonOT
+
+ ; Run CheckOwnMon on each Pokémon in the party.
+.partymon
+ call CheckOwnMon
+ ret c ; found!
+
+ push bc
+ ld bc, PARTYMON_STRUCT_LENGTH
+ add hl, bc
+ pop bc
+ call UpdateOTPointer
+ dec d
+ jr nz, .partymon
+
+ ; Run CheckOwnMon on each Pokémon in the PC.
+ ld a, BANK(sBoxCount)
+ call GetSRAMBank
+ ld a, [sBoxCount]
+ and a
+ jr z, .boxes
+
+ ld d, a
+ ld hl, sBoxMon1Species
+ ld bc, sBoxMonOT
+.openboxmon
+ call CheckOwnMon
+ jr nc, .loop
+
+ ; found!
+ call CloseSRAM
+ ret
+
+.loop
+ push bc
+ ld bc, BOXMON_STRUCT_LENGTH
+ add hl, bc
+ pop bc
+ call UpdateOTPointer
+ dec d
+ jr nz, .openboxmon
+
+ ; Run CheckOwnMon on each monster in the other 13 PC boxes.
+.boxes
+ call CloseSRAM
+
+ ld c, 0
+.box
+ ; Don't search the current box again.
+ ld a, [wCurBox]
+ and $f
+ cp c
+ jr z, .loopbox
+
+ ; Load the box.
+ ld hl, BoxAddressTable1
+ ld b, 0
+rept 3
+ add hl, bc
+endr
+ ld a, [hli]
+ call GetSRAMBank
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+ ; Number of monsters in the box
+ ld a, [hl]
+ and a
+ jr z, .loopbox
+
+ push bc
+
+ push hl
+ ld de, sBoxMons - sBoxCount
+ add hl, de
+ ld d, h
+ ld e, l
+ pop hl
+ push de
+ ld de, sBoxMonOT - sBoxCount
+ add hl, de
+ ld b, h
+ ld c, l
+ pop hl
+
+ ld d, a
+
+.boxmon
+ call CheckOwnMon
+ jr nc, .loopboxmon
+
+ ; found!
+ pop bc
+ call CloseSRAM
+ ret
+
+.loopboxmon
+ push bc
+ ld bc, BOXMON_STRUCT_LENGTH
+ add hl, bc
+ pop bc
+ call UpdateOTPointer
+ dec d
+ jr nz, .boxmon
+ pop bc
+
+.loopbox
+ inc c
+ ld a, c
+ cp NUM_BOXES
+ jr c, .box
+
+ ; not found
+ call CloseSRAM
+ and a
+ ret
+
+
+CheckOwnMon: ; 0x4a7ba
+; Check if a Pokémon belongs to the player and is of a specific species.
+
+; inputs:
+; hl, pointer to PartyMonNSpecies
+; bc, pointer to PartyMonNOT
+; ScriptVar should contain the species we're looking for
+
+; outputs:
+; sets carry if monster matches species, ID, and OT name.
+
+ push bc
+ push hl
+ push de
+ ld d, b
+ ld e, c
+
+; check species
+ ld a, [ScriptVar] ; species we're looking for
+ ld b, [hl] ; species we have
+ cp b
+ jr nz, .notfound ; species doesn't match
+
+; check ID number
+ ld bc, MON_ID
+ add hl, bc ; now hl points to ID number
+ ld a, [PlayerID]
+ cp [hl]
+ jr nz, .notfound ; ID doesn't match
+ inc hl
+ ld a, [PlayerID + 1]
+ cp [hl]
+ jr nz, .notfound ; ID doesn't match
+
+; check OT
+; This only checks five characters, which is fine for the Japanese version,
+; but in the English version the player name is 7 characters, so this is wrong.
+
+ ld hl, PlayerName
+
+ rept 4
+ ld a, [de]
+ cp [hl]
+ jr nz, .notfound
+ cp "@"
+ jr z, .found ; reached end of string
+ inc hl
+ inc de
+ endr
+
+ ld a, [de]
+ cp [hl]
+ jr z, .found
+
+.notfound
+ pop de
+ pop hl
+ pop bc
+ and a
+ ret
+
+.found
+ pop de
+ pop hl
+ pop bc
+ scf
+ ret
+; 0x4a810
+
+BoxAddressTable1: ; 4a810
+ dba sBox1
+ dba sBox2
+ dba sBox3
+ dba sBox4
+ dba sBox5
+ dba sBox6
+ dba sBox7
+ dba sBox8
+ dba sBox9
+ dba sBox10
+ dba sBox11
+ dba sBox12
+ dba sBox13
+ dba sBox14
+; 4a83a
+
+UpdateOTPointer: ; 0x4a83a
+ push hl
+ ld hl, NAME_LENGTH
+ add hl, bc
+ ld b, h
+ ld c, l
+ pop hl
+ ret
+; 0x4a843
diff --git a/engine/sprite_anims.asm b/engine/sprite_anims.asm
index 25015d645..54fda6342 100755
--- a/engine/sprite_anims.asm
+++ b/engine/sprite_anims.asm
@@ -16,9 +16,9 @@ endr
.Jumptable: ; 8d25b (23:525b)
dw .zero ; town map
- dw .one ; bouncing mon icons
- dw .two
- dw .three
+ dw .one ; bouncing mon icon
+ dw .two ; bouncing mon icon, selected
+ dw .three ; bouncing mon icon, menu open
dw .four
dw .five
dw .six ; Game Freak logo
@@ -46,7 +46,7 @@ endr
dw .twentyeight
dw .twentynine ; intro suicune
dw .thirty ; intro pichu wooper
- dw .thirtyone
+ dw .thirtyone ; celebi
dw .thirtytwo ; intro unown
dw .thirtythree ; intro unown F with suicune leaping up
dw .thirtyfour ; intro suicune facing away from us
@@ -65,7 +65,7 @@ endr
ld hl, SPRITEANIMSTRUCT_XCOORD
add hl, bc
- ld [hl], $10
+ ld [hl], 8 * 2
ld hl, SPRITEANIMSTRUCT_YOFFSET
add hl, bc
@@ -75,7 +75,7 @@ endr
.two: ; 8d2b9 (23:52b9)
ld hl, SPRITEANIMSTRUCT_XCOORD
add hl, bc
- ld [hl], $18
+ ld [hl], 8 * 3
ld hl, SPRITEANIMSTRUCT_0C
add hl, bc
@@ -93,24 +93,24 @@ endr
add hl, bc
ld a, d
and $10 ; bit 4
- jr z, .asm_8d2df
+ jr z, .load_zero
ld a, e
and a
- jr z, .asm_8d2e6
+ jr z, .load_minus_two
cp $1
- jr z, .asm_8d2e2
-.asm_8d2df
+ jr z, .load_minus_one
+.load_zero
xor a
ld [hl], a
ret
-.asm_8d2e2
- ld a, $ff
+.load_minus_one
+ ld a, -1
ld [hl], a
ret
-.asm_8d2e6
- ld a, $fe
+.load_minus_two
+ ld a, -2
ld [hl], a
ret
@@ -120,17 +120,17 @@ endr
ld hl, SPRITEANIMSTRUCT_INDEX
add hl, bc
cp [hl]
- jr z, .asm_8d2fb
+ jr z, .three_offset_right
ld hl, SPRITEANIMSTRUCT_XCOORD
add hl, bc
- ld [hl], $10
+ ld [hl], 8 * 2
ret
-.asm_8d2fb
+.three_offset_right
ld hl, SPRITEANIMSTRUCT_XCOORD
add hl, bc
- ld [hl], $18
+ ld [hl], 8 * 3
ret
.four: ; 8d302 (23:5302)