diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2015-12-06 22:36:09 -0500 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2015-12-06 22:36:09 -0500 |
commit | 02d05255fe96e9c06d176c0960395fb5aeb36211 (patch) | |
tree | 20bdf048c0a1d35c2f567a83861388efa9a37b24 /engine | |
parent | 6eac26732a7d19e08374e7e8e6f122da38b4a395 (diff) |
A stab at audio engine.
Diffstat (limited to 'engine')
-rwxr-xr-x | engine/mysterygift.asm | 15 | ||||
-rwxr-xr-x | engine/mysterygift2.asm | 229 | ||||
-rwxr-xr-x | engine/search.asm | 276 | ||||
-rwxr-xr-x | engine/sprite_anims.asm | 36 |
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) |