diff options
author | pikalaxalt <PikalaxALT@gmail.com> | 2016-06-22 14:28:59 -0400 |
---|---|---|
committer | pikalaxalt <PikalaxALT@gmail.com> | 2016-06-22 14:28:59 -0400 |
commit | db563ed25a240b364124c1b3f0519dc046d21246 (patch) | |
tree | 15bb3699e136e70f8105731a7c41c8bbe2aa09ad | |
parent | f5ca2c3e66c0517111905ef3491423182a83ee56 (diff) |
engine/move_mon.asm
-rw-r--r-- | engine/learn.asm | 2 | ||||
-rwxr-xr-x | engine/main_menu.asm | 2 | ||||
-rwxr-xr-x | engine/move_mon.asm | 1642 | ||||
-rwxr-xr-x | event/overworld.asm | 4 | ||||
-rwxr-xr-x | event/special.asm | 4 | ||||
-rw-r--r-- | home/map.asm | 4 | ||||
-rw-r--r-- | main.asm | 112 | ||||
-rw-r--r-- | wram.asm | 8 |
8 files changed, 1705 insertions, 73 deletions
diff --git a/engine/learn.asm b/engine/learn.asm index 892a4c29..feb02ff1 100644 --- a/engine/learn.asm +++ b/engine/learn.asm @@ -4,7 +4,7 @@ LearnMove: ld hl, wPartyMon1Nickname call GetNick ld hl, wStringBuffer1 - ld de, wcf48 + ld de, wMonOrItemNameBuffer ld bc, $b call CopyBytes .loop diff --git a/engine/main_menu.asm b/engine/main_menu.asm index 8638cc64..f02db06a 100755 --- a/engine/main_menu.asm +++ b/engine/main_menu.asm @@ -337,7 +337,7 @@ Function5c41: ; 5c41 (1:5c41) call InitializeMagikarpHouse xor a - ld [wce5f], a + ld [wMonType], a ld [wJohtoBadges], a ld [wKantoBadges], a diff --git a/engine/move_mon.asm b/engine/move_mon.asm new file mode 100755 index 00000000..f4d65683 --- /dev/null +++ b/engine/move_mon.asm @@ -0,0 +1,1642 @@ +TryAddMonToParty:: ; d892 (3:5892) + ld de, wPartyCount + ld a, [wMonType] + and $f + jr z, .asm_d89f + ld de, wOTPartyCount +.asm_d89f + ld a, [de] + inc a + cp $7 + ret nc + ld [de], a + ld a, [de] + ld [hMoveMon], a + add e + ld e, a + jr nc, .asm_d8ad + inc d +.asm_d8ad + ld a, [wd004] + ld [de], a + inc de + ld a, $ff + ld [de], a + ld hl, wPartyMon1OT + ld a, [wMonType] + and $f + jr z, .asm_d8c2 + ld hl, wOTPartyMonOT +.asm_d8c2 + ld a, [hMoveMon] + dec a + call SkipNames + ld d, h + ld e, l + ld hl, wPlayersName + ld bc, NAME_LENGTH + call CopyBytes + ld a, [wMonType] + and a + jr nz, .asm_d8f6 + ld a, [wd004] + ld [wd151], a + call GetPokemonName + ld hl, wPartyMonNicknames + ld a, [hMoveMon] + dec a + call SkipNames + ld d, h + ld e, l + ld hl, wStringBuffer1 + ld bc, NAME_LENGTH + call CopyBytes +.asm_d8f6 + ld hl, wPartyMon1Species + ld a, [wMonType] + and $f + jr z, .asm_d903 + ld hl, wOTPartyMon1 +.asm_d903 + ld a, [hMoveMon] + dec a + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld e, l + ld d, h + push hl + ld a, [wCurPartySpecies] + ld [wce60], a + call GetBaseData + ld a, [wd120] + ld [de], a + inc de + ld a, [wBattleMode] + and a + ld a, $0 + jr z, .asm_d928 + ld a, [wEnemyMonItem] +.asm_d928 + ld [de], a + inc de + push de + ld h, d + ld l, e + ld a, [wBattleMode] + and a + jr z, .asm_d949 + ld a, [wMonType] + and a + jr nz, .asm_d949 + ld de, wEnemyMonMoves + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + ld [hl], a + jr .asm_d956 + +.asm_d949 + xor a + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + ld [wBuffer1], a + predef FillMoves +.asm_d956 + pop de + inc de + inc de + inc de + inc de + ld a, [wPlayerID] + ld [de], a + inc de + ld a, [wPlayerID + 1] + ld [de], a + inc de + push de + ld a, [wCurPartyLevel] + ld d, a + callab CalcExpAtLevel ; 14:5550 + pop de + ld a, [hPrintNum2] + ld [de], a + inc de + ld a, [hStringCmpString2] + ld [de], a + inc de + ld a, [hPrintNum4] + ld [de], a + inc de + xor a + ld b, $a +.asm_d980 + ld [de], a + inc de + dec b + jr nz, .asm_d980 + pop hl + push hl + ld a, [wMonType] + and $f + jr z, .asm_d998 + push hl + callba GetTrainerDVs ; 9:7271 + pop hl + jr .asm_d9bb + +.asm_d998 + ld a, [wd004] + ld [wd151], a + dec a + push de + call CheckCaughtMon + ld a, [wd151] + dec a + call SetSeenAndCaughtMon + pop de + pop hl + push hl + ld a, [wBattleMode] + and a + jr nz, .asm_d9f9 + call Random + ld b, a + call Random + ld c, a +.asm_d9bb + ld a, b + ld [de], a + inc de + ld a, c + ld [de], a + inc de + push hl + push de + inc hl + inc hl + call FillPP + pop de + pop hl + inc de + inc de + inc de + inc de + ld a, $46 + ld [de], a + inc de + xor a + ld [de], a + inc de + ld [de], a + inc de + ld [de], a + inc de + ld a, [wCurPartyLevel] + ld [de], a + inc de + xor a + ld [de], a + inc de + ld [de], a + inc de + ld bc, $a + add hl, bc + ld a, $1 + ld c, a + ld b, $0 + call CalcPkmnStatC + ld a, [hStringCmpString2] + ld [de], a + inc de + ld a, [hPrintNum4] + ld [de], a + inc de + jr .asm_da2f + +.asm_d9f9 + ld a, [wEnemyMonMovesEnd] + ld [de], a + inc de + ld a, [wEnemyMonMovesEnd + 1] + ld [de], a + inc de + push hl + ld hl, wEnemyMonPP + ld b, $4 +.asm_da09 + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .asm_da09 + pop hl + ld a, $46 + ld [de], a + inc de + xor a + ld [de], a + inc de + ld [de], a + inc de + ld [de], a + inc de + ld a, [wCurPartyLevel] + ld [de], a + inc de + ld hl, wEnemyMonStatus + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + inc de +.asm_da2f + ld a, [wBattleMode] + dec a + jr nz, .asm_da41 + ld hl, wEnemyMonMaxHP + ld bc, $c + call CopyBytes + pop hl + jr .asm_da4b + +.asm_da41 + pop hl + ld bc, $a + add hl, bc + ld b, $0 + call CalcPkmnStats +.asm_da4b + ld a, [wMonType] + and $f + jr nz, .asm_da71 + ld a, [wd004] + cp $c9 + jr nz, .asm_da71 + ld hl, wPartyMon1DVs + ld a, [wPokemonData] + dec a + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + predef GetUnownLetter + callab UpdateUnownDex +.asm_da71 + scf + ret + +FillPP: ; da73 (3:5a73) + push bc + ld b, $4 +.asm_da76 + ld a, [hli] + and a + jr z, .asm_da95 + dec a + push hl + push de + push bc + ld hl, $5afe + ld bc, $7 + call AddNTimes + ld de, wStringBuffer1 + ld a, $10 + call FarCopyBytes + pop bc + pop de + pop hl + ld a, [wStringBuffer1 + 5] +.asm_da95 + ld [de], a + inc de + dec b + jr nz, .asm_da76 + pop bc + ret + +AddTempmonToParty: ; da9c (3:5a9c) + ld hl, wPartyCount + ld a, [hl] + cp $6 + scf + ret z + inc a + ld [hl], a + ld c, a + ld b, $0 + add hl, bc + ld a, [wCurPartySpecies] + ld [hli], a + ld [hl], $ff + ld hl, wPartyMon1Species + ld a, [wPartyCount] + dec a + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld e, l + ld d, h + ld hl, wTempMonSpecies + call CopyBytes + ld hl, wPartyMon6StatsEnd + ld a, [wPartyCount] + dec a + call SkipNames + ld d, h + ld e, l + ld hl, wOTPartyMon6StatsEnd + ld a, [wd005] + call SkipNames + ld bc, NAME_LENGTH + call CopyBytes + ld hl, wPartyMonNicknames + ld a, [wPartyCount] + dec a + call SkipNames + ld d, h + ld e, l + ld hl, wOTPartyMon1Nickname + ld a, [wd005] + call SkipNames + ld bc, NAME_LENGTH + call CopyBytes + ld a, [wd004] + ld [wd151], a + cp $fd + jr z, .asm_db18 + dec a + call SetSeenAndCaughtMon + ld hl, wPartyMon1Happiness + ld a, [wPokemonData] + dec a + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld [hl], $46 +.asm_db18 + ld a, [wCurPartySpecies] + cp $c9 + jr nz, .asm_db43 + ld hl, wPartyMon1DVs + ld a, [wPartyCount] + dec a + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + predef GetUnownLetter + callab UpdateUnownDex + ld a, [wdc3f] + and a + jr nz, .asm_db43 + ld a, [wd11e] + ld [wdc3f], a +.asm_db43 + and a + ret + +SentGetPkmnIntoFromBox: ; db45 (3:5b45) + ld a, $1 + call OpenSRAM + ld a, [wd008] + and a + jr z, .asm_db66 + cp $2 + jr z, .asm_db66 + cp $3 + ld hl, wBreedMon1 + jr z, .asm_dba1 + ld hl, sBoxCount + ld a, [hl] + cp MONS_PER_BOX + jr nz, .asm_db6f + jp Functiondcb7 + +.asm_db66 + ld hl, wPartyCount + ld a, [hl] + cp $6 + jp z, Functiondcb7 +.asm_db6f + inc a + ld [hl], a + ld c, a + ld b, $0 + add hl, bc + ld a, [wd008] + cp $2 + ld a, [wBreedMon1] + jr z, .asm_db82 + ld a, [wd004] +.asm_db82 + ld [hli], a + ld [hl], $ff + ld a, [wd008] + dec a + ld hl, wPartyMons + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [wPokemonData] + jr nz, .asm_db9d + ld hl, sBoxMon1Species + ld bc, BOXMON_STRUCT_LENGTH + ld a, [sBoxCount] +.asm_db9d + dec a + call AddNTimes +.asm_dba1 + push hl + ld e, l + ld d, h + ld a, [wd008] + and a + ld hl, sBoxMon1Species + ld bc, BOXMON_STRUCT_LENGTH + jr z, .asm_dbbd + cp $2 + ld hl, wBreedMon1 + jr z, .asm_dbc3 + ld hl, wPartyMon1Species + ld bc, PARTYMON_STRUCT_LENGTH +.asm_dbbd + ld a, [wd005] + call AddNTimes +.asm_dbc3 + ld bc, BOXMON_STRUCT_LENGTH + call CopyBytes + ld a, [wd008] + cp $3 + ld de, wdc4c + jr z, .asm_dbe8 + dec a + ld hl, wPartyMonOT + ld a, [wPokemonData] + jr nz, .asm_dbe2 + ld hl, sBoxMonOT + ld a, [sBoxCount] +.asm_dbe2 + dec a + call SkipNames + ld d, h + ld e, l +.asm_dbe8 + ld hl, sBoxMonOT + ld a, [wd008] + and a + jr z, .asm_dbfb + ld hl, wdc4c + cp $2 + jr z, .asm_dc01 + ld hl, wPartyMon6StatsEnd +.asm_dbfb + ld a, [wd005] + call SkipNames +.asm_dc01 + ld bc, NAME_LENGTH + call CopyBytes + ld a, [wd008] + cp $3 + ld de, wdc41 + jr z, .asm_dc26 + dec a + ld hl, wPartyMon1Nickname + ld a, [wPokemonData] + jr nz, .asm_dc20 + ld hl, sBoxMonNicknames + ld a, [sBoxCount] +.asm_dc20 + dec a + call SkipNames + ld d, h + ld e, l +.asm_dc26 + ld hl, sBoxMonNicknames + ld a, [wd008] + and a + jr z, .asm_dc39 + ld hl, wdc41 + cp $2 + jr z, .asm_dc3f + ld hl, wPartyMon1Nickname +.asm_dc39 + ld a, [wd005] + call SkipNames +.asm_dc3f + ld bc, NAME_LENGTH + call CopyBytes + pop hl + ld a, [wd008] + cp $1 + jr z, .asm_dcaa + cp $3 + jp z, Functiondcb2 + push hl + srl a + add $2 + ld [wMonType], a + predef CopyPkmnToTempMon + callab CalcLevel + ld a, d + ld [wCurPartyLevel], a + pop hl + ld b, h + ld c, l + ld hl, $1f + add hl, bc + ld [hl], a + ld hl, $24 + add hl, bc + ld d, h + ld e, l + ld hl, $a + add hl, bc + push bc + ld b, $1 + call CalcPkmnStats + pop bc + ld a, [wd008] + and a + jr nz, Functiondcb2 + ld hl, $20 + add hl, bc + xor a + ld [hl], a + ld hl, $22 + add hl, bc + ld d, h + ld e, l + ld a, [wd004] + cp $fd + jr z, .asm_dca4 + inc hl + inc hl + ld a, [hli] + ld [de], a + ld a, [hl] + inc de + ld [de], a + jr Functiondcb2 + +.asm_dca4 + xor a + ld [de], a + inc de + ld [de], a + jr Functiondcb2 + +.asm_dcaa + ld a, [sBoxCount] + dec a + ld b, a + call Functiondcbc +Functiondcb2: ; dcb2 (3:5cb2) + call CloseSRAM + and a + ret + +Functiondcb7: ; dcb7 (3:5cb7) + call CloseSRAM + scf + ret + +Functiondcbc: ; dcbc (3:5cbc) + ld a, b + ld hl, sBoxMon1Species + ld bc, BOXMON_STRUCT_LENGTH + call AddNTimes + ld b, h + ld c, l + ld hl, $17 + add hl, bc + push hl + push bc + ld de, wTempMonPP + ld bc, $4 + call CopyBytes + pop bc + ld hl, $2 + add hl, bc + push hl + ld de, wTempMonMoves + ld bc, $4 + call CopyBytes + pop hl + pop de + ld a, [wMenuCursorY] + push af + ld a, [wMonType] + push af + ld b, $0 +.asm_dcf2 + ld a, [hli] + and a + jr z, .asm_dd1e + ld [wTempMonMoves], a + ld a, $2 + ld [wMonType], a + ld a, b + ld [wMenuCursorY], a + push bc + push hl + push de + callba GetMaxPPOfMove ; same bank + pop de + pop hl + ld a, [wd151] + ld b, a + ld a, [de] + and $c0 + add b + ld [de], a + pop bc + inc de + inc b + ld a, b + cp $4 + jr c, .asm_dcf2 +.asm_dd1e + pop af + ld [wMonType], a + pop af + ld [wMenuCursorY], a + ret + +RetrievePokemonFromDaycareMan: + ld a, [wBreedMon1Species] + ld [wCurPartySpecies], a + ld de, SFX_TRANSACTION + call PlaySFX + call WaitSFX + call Functione673 + ld a, b + ld [wMovementBufferCount], a + ld a, e + ld [wCurPartyLevel], a + xor a + ld [wd008], a + jp Functiondd6a + +RetrievePokemonFromDaycareLady: + ld a, [wBreedMon2] + ld [wCurPartySpecies], a + ld de, SFX_TRANSACTION + call PlaySFX + call WaitSFX + call Functione68e + ld a, b + ld [wMovementBufferCount], a + ld a, e + ld [wCurPartyLevel], a + ld a, $1 + ld [wd008], a + jp Functiondd6a ; super long jump + +Functiondd6a: ; dd6a (3:5d6a) + ld hl, wPokemonData + ld a, [hl] + cp $6 + jr nz, .asm_dd74 + scf ; We shouldn't be here if we've come this far. + ret + +.asm_dd74 + inc a + ld [hl], a + ld c, a + ld b, $0 + add hl, bc + ld a, [wd008] + and a + ld a, [wBreedMon1] + ld de, wdc41 + jr z, .asm_dd8c + ld a, [wBreedMon2] + ld de, wdc7a +.asm_dd8c + ld [hli], a + ld [wce60], a + ld a, $ff + ld [hl], a + ld hl, wPartyMon1Nickname + ld a, [wPartyCount] + dec a + call SkipNames + push hl + ld h, d + ld l, e + pop de + call CopyBytes + push hl + ld hl, wPartyMonOT + ld a, [wPartyCount] + dec a + call SkipNames + ld d, h + ld e, l + pop hl + call CopyBytes + push hl + call Functionde20 + pop hl + ld bc, BOXMON_STRUCT_LENGTH + call CopyBytes + call GetBaseData + call Functionde20 + ld b, d + ld c, e + ld hl, $1f + add hl, bc + ld a, [wCurPartyLevel] + ld [hl], a + ld hl, $24 + add hl, bc + ld d, h + ld e, l + ld hl, $a + add hl, bc + push bc + ld b, $1 + call CalcPkmnStats + ld hl, wPartyMon1Moves + ld a, [wPokemonData] + dec a + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld d, h + ld e, l + ld a, $1 + ld [wCurHPAnim], a + predef FillMoves + ld a, [wPartyCount] + dec a + ld [wd005], a + callba Functionc6bc ; same bank + ld a, [wCurPartyLevel] + ld d, a + callab CalcExpAtLevel + pop bc + ld hl, $8 + add hl, bc + ld a, [hQuotient] + ld [hli], a + ld a, [hPrintNum3] + ld [hli], a + ld a, [hPrintNum4] + ld [hl], a + and a + ret + +Functionde20: ; de20 (3:5e20) + ld a, [wPartyCount] + dec a + ld hl, wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld d, h + ld e, l + ret + + ld de, wdc41 + call Functionde4a + xor a + ld [wd008], a + jp RemoveMonFromPartyOrBox + + ld de, wdc7a + call Functionde4a + xor a + ld [wd008], a + jp RemoveMonFromPartyOrBox + +Functionde4a: ; de4a (3:5e4a) + ld a, [wd005] + ld hl, wPartyMonNicknames + call SkipNames + call CopyBytes + ld a, [wd005] + ld hl, wPartyMon1OT + call SkipNames + call CopyBytes + ld a, [wd005] + ld hl, wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld bc, BOXMON_STRUCT_LENGTH + jp CopyBytes + +SentPkmnIntoBox: ; de74 (3:5e74) + ld a, $1 + call OpenSRAM + ld de, sBoxCount + ld a, [de] + cp $14 + jp nc, Functiondf48 + inc a + ld [de], a + ld a, [wd004] + ld [wce60], a + ld c, a +.asm_de8b + inc de + ld a, [de] + ld b, a + ld a, c + ld c, b + ld [de], a + inc a + jr nz, .asm_de8b + call GetBaseData + call Functiondf4d + ld hl, wPlayersName + ld de, sBoxMonOT + ld bc, NAME_LENGTH + call CopyBytes + ld a, [wd004] + ld [wd151], a + call GetPokemonName + ld de, sBoxMonNicknames + ld hl, wStringBuffer1 + ld bc, NAME_LENGTH + call CopyBytes + ld hl, wEnemyMon + ld de, sBoxMon1Species + ld bc, $6 + call CopyBytes + ld hl, wGameData + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + inc de + push de + ld a, [wCurPartyLevel] + ld d, a + callab CalcExpAtLevel + pop de + ld a, [hQuotient] + ld [de], a + inc de + ld a, [hPrintNum3] + ld [de], a + inc de + ld a, [hPrintNum4] + ld [de], a + inc de + xor a + ld b, $a +.asm_deeb + ld [de], a + inc de + dec b + jr nz, .asm_deeb + ld hl, wEnemyMonMovesEnd + ld b, $6 +.asm_def5 + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .asm_def5 + ld a, $46 + ld [de], a + inc de + xor a + ld [de], a + inc de + ld [de], a + inc de + ld [de], a + inc de + ld a, [wCurPartyLevel] + ld [de], a + ld a, [wd004] + dec a + call SetSeenAndCaughtMon + ld a, [wCurPartySpecies] + cp $c9 + jr nz, .asm_df26 + ld hl, sBoxMon1DVs + predef GetUnownLetter + callab UpdateUnownDex +.asm_df26 + ld hl, sBoxMon1Moves + ld de, wTempMonMoves + ld bc, $4 + call CopyBytes + ld hl, sBoxMon1PP + ld de, wTempMonPP + ld bc, $4 + call CopyBytes + ld b, $0 + call Functiondcbc + call CloseSRAM + scf + ret + +Functiondf48: ; df48 (3:5f48) + call CloseSRAM + and a + ret + +Functiondf4d: ; df4d (3:5f4d) + ld hl, sBoxMonOT + ld bc, NAME_LENGTH + call Functiondf65 + ld hl, sBoxMonNicknames + ld bc, NAME_LENGTH + call Functiondf65 + ld hl, sBoxMon1Species + ld bc, BOXMON_STRUCT_LENGTH +Functiondf65: ; df65 (3:5f65) + ld a, [sBoxCount] + cp $2 + ret c + push hl + call AddNTimes + dec hl + ld e, l + ld d, h + pop hl + ld a, [sBoxCount] + dec a + call AddNTimes + dec hl + push hl + ld a, [sBoxCount] + dec a + ld hl, $0 + call AddNTimes + ld c, l + ld b, h + pop hl +.asm_df89 + ld a, [hld] + ld [de], a + dec de + dec bc + ld a, c + or b + jr nz, .asm_df89 + ret + +GiveEgg: ; df92 (3:5f92) + ld a, [wd004] + push af + callab GetPreEvolution + callab GetPreEvolution + ld a, [wCurPartySpecies] + dec a + push af + call CheckCaughtMon + pop af + push bc + call CheckSeenMon + push bc + call TryAddMonToParty + pop bc + ld a, c + and a + jr nz, .asm_dfc9 + ld a, [wCurPartySpecies] + dec a + ld c, a + ld d, $0 + ld hl, wPokedexCaught + ld b, RESET_FLAG + predef FlagPredef +.asm_dfc9 + pop bc + ld a, c + and a + jr nz, .asm_dfdf + ld a, [wd004] + dec a + ld c, a + ld d, $0 + ld hl, wPokedexSeen + ld b, RESET_FLAG + predef FlagPredef +.asm_dfdf + pop af + ld [wd004], a + ld a, [wPokemonData] + dec a + ld bc, PARTYMON_STRUCT_LENGTH + ld hl, wPartyMon1Species + call AddNTimes + ld a, [wd004] + ld [hl], a + ld hl, wPokemonData + ld a, [hl] + ld b, $0 + ld c, a + add hl, bc + ld a, $fd + ld [hl], a + ld a, [wPokemonData] + dec a + ld hl, wPartyMon1Nickname + call SkipNames + ld de, String_Egg + call CopyName2 + ld a, [wPartyCount] + dec a + ld hl, wPartyMon1Happiness + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld a, [wMonStatusFlags] + bit 1, a + ld a, $1 + jr nz, .asm_e028 + ld a, [wd12f] +.asm_e028 + ld [hl], a + ld a, [wPartyCount] + dec a + ld hl, wPartyMon1HP + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + xor a + ld [hli], a + ld [hl], a + and a + ret + +String_Egg: + db "EGG@" + +RemoveMonFromPartyOrBox: ; e03f (3:603f) + ld hl, wPartyCount + ld a, [wd008] + and a + jr z, .asm_e050 + ld a, $1 + call OpenSRAM + ld hl, sBoxCount +.asm_e050 + ld a, [hl] + dec a + ld [hli], a + ld a, [wd005] + ld c, a + ld b, $0 + add hl, bc + ld e, l + ld d, h + inc de +.asm_e05d + ld a, [de] + inc de + ld [hli], a + inc a + jr nz, .asm_e05d + ld hl, wPartyMon6StatsEnd + ld d, $5 + ld a, [wd008] + and a + jr z, .asm_e073 + ld hl, sBoxMonOT + ld d, $13 +.asm_e073 + ld a, [wd005] + call SkipNames + ld a, [wd005] + cp d + jr nz, .asm_e084 + ld [hl], $ff + jp .asm_e0f6 + +.asm_e084 + ld d, h + ld e, l + ld bc, NAME_LENGTH + add hl, bc + ld bc, wPartyMonNicknames + ld a, [wd008] + and a + jr z, .asm_e096 + ld bc, sBoxMonNicknames +.asm_e096 + call Function3231 + ld hl, wPartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [wd008] + and a + jr z, .asm_e0ab + ld hl, sBoxMon1Species + ld bc, BOXMON_STRUCT_LENGTH +.asm_e0ab + ld a, [wd005] + call AddNTimes + ld d, h + ld e, l + ld a, [wd008] + and a + jr z, .asm_e0c2 + ld bc, BOXMON_STRUCT_LENGTH + add hl, bc + ld bc, sBoxMonOT + jr .asm_e0c9 + +.asm_e0c2 + ld bc, PARTYMON_STRUCT_LENGTH + add hl, bc + ld bc, wPartyMonOT +.asm_e0c9 + call Function3231 + ld hl, wPartyMonNicknames + ld a, [wd008] + and a + jr z, .asm_e0d8 + ld hl, sBoxMonNicknames +.asm_e0d8 + ld bc, NAME_LENGTH + ld a, [wd005] + call AddNTimes + ld d, h + ld e, l + ld bc, NAME_LENGTH + add hl, bc + ld bc, wdbce + ld a, [wd008] + and a + jr z, .asm_e0f3 + ld bc, sBoxEnd +.asm_e0f3 + call Function3231 +.asm_e0f6 + ld a, [wd008] + and a + jp nz, CloseSRAM + ld a, [wLinkMode] + and a + ret nz + ld a, $0 + call OpenSRAM + ld hl, wPokemonData + ld a, [wd005] + cp [hl] + jr z, .asm_e137 + ld hl, s0_a600 + ld bc, MAIL_STRUCT_LENGTH + call AddNTimes + push hl + add hl, bc + pop de + ld a, [wd005] + ld b, a +.asm_e120 + push bc + push hl + ld bc, MAIL_STRUCT_LENGTH + call CopyBytes + pop hl + push hl + ld bc, MAIL_STRUCT_LENGTH + add hl, bc + pop de + pop bc + inc b + ld a, [wPartyCount] + cp b + jr nz, .asm_e120 +.asm_e137 + jp CloseSRAM + +ComputeNPCTrademonStats: + ld a, MON_LEVEL + call GetPartyParamLocation + ld a, [hl] + ld [MON_LEVEL], a ; wow + ld a, MON_SPECIES + call GetPartyParamLocation + ld a, [hl] + ld [wce60], a + call GetBaseData + ld a, MON_MAXHP + call GetPartyParamLocation + ld d, h + ld e, l + push de + ld a, MON_STAT_EXP - 1 + call GetPartyParamLocation + ld b, $1 + call CalcPkmnStats + pop de + ld a, MON_HP + call GetPartyParamLocation + ld a, [de] + inc de + ld [hli], a + ld a, [de] + ld [hl], a + ret + +CalcPkmnStats: ; e16d +; Calculates all 6 Stats of a Pkmn +; b: Take into account stat EXP if TRUE +; 'c' counts from 1-6 and points with 'BaseStats' to the base value +; hl is the path to the Stat EXP +; results in $ffb7 and $ffb8 are saved in [de] + + ld c, $0 +.loop + inc c + call CalcPkmnStatC + ld a, [hMultiplicand + 1] + ld [de], a + inc de + ld a, [hMultiplicand + 2] + ld [de], a + inc de + ld a, c + cp STAT_SDEF + jr nz, .loop + ret +; e17b + +CalcPkmnStatC: ; e181 +; 'c' is 1-6 and points to the BaseStat +; 1: HP +; 2: Attack +; 3: Defense +; 4: Speed +; 5: SpAtk +; 6: SpDef + push hl + push de + push bc + ld a, b + ld d, a + push hl + ld hl, wd121 + dec hl ; has to be decreased, because 'c' begins with 1 + ld b, $0 + add hl, bc + ld a, [hl] + ld e, a + pop hl + push hl + ld a, c + cp STAT_SDEF + jr nz, .not_spdef + dec hl + dec hl + +.not_spdef + sla c + ld a, d + and a + jr z, .no_stat_exp + add hl, bc +.sqrt_loop + xor a + ld [hMultiplicand], a + ld [hMultiplicand + 1], a + inc b + ld a, b + cp $ff + jr z, .no_stat_exp + ld [hMultiplicand + 2], a + ld [hMultiplier], a + call Multiply + ld a, [hld] + ld d, a + ld a, [hProduct + 3] + sub d + ld a, [hli] + ld d, a + ld a, [hProduct + 2] + sbc d + jr c, .sqrt_loop +.no_stat_exp + srl c + pop hl + push bc + ld bc, MON_DVS - MON_HP_EXP + 1 + add hl, bc + pop bc + ld a, c + cp STAT_ATK + jr z, .Attack + cp STAT_DEF + jr z, .Defense + cp STAT_SPD + jr z, .Speed + cp STAT_SATK + jr z, .Special + cp STAT_SDEF + jr z, .Special +; DV_HP = (DV_ATK & 1) << 3 + (DV_DEF & 1) << 2 + (DV_SPD & 1) << 1 + (DV_SPC & 1) + push bc + ld a, [hl] + swap a + and $1 + add a + add a + add a + ld b, a + ld a, [hli] + and $1 + add a + add a + add b + ld b, a + ld a, [hl] + swap a + and $1 + add a + add b + ld b, a + ld a, [hl] + and $1 + add b + pop bc + jr .GotDV + +.Attack: + ld a, [hl] + swap a + and $f + jr .GotDV + +.Defense: + ld a, [hl] + and $f + jr .GotDV + +.Speed: + inc hl + ld a, [hl] + swap a + and $f + jr .GotDV + +.Special: + inc hl + ld a, [hl] + and $f + +.GotDV: + ld d, 0 + add e + ld e, a + jr nc, .no_overflow_1 + inc d + +.no_overflow_1 + sla e + rl d + srl b + srl b + ld a, b + add e + jr nc, .no_overflow_2 + inc d + +.no_overflow_2 + ld [hMultiplicand + 2], a + ld a, d + ld [hMultiplicand + 1], a + xor a + ld [hMultiplicand + 0], a + ld a, [wCurPartyLevel] + ld [hMultiplier], a + call Multiply + ld a, [hProduct + 1] + ld [hDividend + 0], a + ld a, [hProduct + 2] + ld [hDividend + 1], a + ld a, [hProduct + 3] + ld [hDividend + 2], a + ld a, 100 + ld [hDivisor], a + ld a, 3 + ld b, a + call Divide + ld a, c + cp STAT_HP + ld a, 5 + jr nz, .not_hp + ld a, [wCurPartyLevel] + ld b, a + ld a, [hQuotient + 2] + add b + ld [hMultiplicand + 2], a + jr nc, .no_overflow_3 + ld a, [hQuotient + 1] + inc a + ld [hMultiplicand + 1], a + +.no_overflow_3 + ld a, 10 + +.not_hp + ld b, a + ld a, [hQuotient + 2] + add b + ld [hMultiplicand + 2], a + jr nc, .no_overflow_4 + ld a, [hQuotient + 1] + inc a + ld [hMultiplicand + 1], a + +.no_overflow_4 + ld a, [hQuotient + 1] + cp (1000 / $100) + 1 + jr nc, .max_stat + cp 1000 / $100 + jr c, .stat_value_okay + ld a, [hQuotient + 2] + cp 1000 % $100 + jr c, .stat_value_okay + +.max_stat + ld a, 999 / $100 + ld [hMultiplicand + 1], a + ld a, 999 % $100 + ld [hMultiplicand + 2], a + +.stat_value_okay + pop bc + pop de + pop hl + ret + +GivePoke: ; Give a Pokemon from script + push de + push bc + xor a + ld [wMonType], a + call TryAddMonToParty + jr nc, .asm_e2c9 + ld hl, wPartyMon1Nickname + ld a, [wPokemonData] + dec a + ld [wd005], a + call SkipNames + ld d, h + ld e, l + pop bc + ld a, b + ld b, $0 + push bc + push de + push af + ld a, [wd002] + and a + jr z, .asm_e2fa + ld a, [wd005] + ld hl, wPartyMon1Item + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld a, [wd002] + ld [hl], a + jr .asm_e2fa + +.asm_e2c9 + ld a, [wCurPartySpecies] + ld [wd0ed], a + callab LoadEnemyMon + call SentPkmnIntoBox + jp nc, Functione3af + ld a, BOXMON + ld [wMonType], a + xor a + ld [wd005], a + ld de, wMonOrItemNameBuffer + pop bc + ld a, b + ld b, $1 + push bc + push de + push af + ld a, [wd002] + and a + jr z, .asm_e2fa + ld a, [wd002] + ld [sBoxMon1Item], a +.asm_e2fa + ld a, [wd004] + ld [wd151], a + ld [wd0ed], a + call GetPokemonName + ld hl, wStringBuffer1 + ld de, wMonOrItemNameBuffer + ld bc, PKMN_NAME_LENGTH + call CopyBytes + pop af + and a + jr z, .asm_e381 + pop de + pop bc + pop hl + push bc + push hl + ld a, [wScriptBank] + call GetFarHalfword + ld bc, PKMN_NAME_LENGTH + ld a, [wScriptBank] + call FarCopyBytes + pop hl + inc hl + inc hl + ld a, [wScriptBank] + call GetFarHalfword + pop bc + ld a, b + and a + push de + push bc + jr nz, .asm_e360 + push hl + ld a, [wd005] + ld hl, wPartyMon1OT + call SkipNames + ld d, h + ld e, l + pop hl + ld a, [wScriptBank] + call FarCopyBytes + ld a, [wd005] + ld hl, wPartyMon1ID + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld a, 01001 / $100 + ld [hli], a + ld [hl], 01001 % $100 + jr .asm_e38d + +.asm_e360 + ld a, BANK(sBoxMonOT) + call OpenSRAM + ld de, sBoxMonOT + ld bc, PKMN_NAME_LENGTH + ld a, [wScriptBank] + call FarCopyBytes + ld hl, sBoxMon1ID + call Random + ld [hli], a + call Random + ld [hl], a + call CloseSRAM + jr .asm_e38d + +.asm_e381 + callab Functionc7cd0 + pop de + jr c, .asm_e38d + call InitNickname +.asm_e38d + pop bc + pop de + ld a, b + and a + ret z + ld hl, Text_WasSentToBillsPC + call PrintText + ld a, BANK(sBoxMonNicknames) + call OpenSRAM + ld hl, wMonOrItemNameBuffer + ld de, sBoxMonNicknames + ld bc, PKMN_NAME_LENGTH + call CopyBytes + call CloseSRAM + ld b, $1 + ret + +Functione3af: ; e3af (3:63af) + pop bc + pop de + ld b, $2 + ret + +Text_WasSentToBillsPC: + text_jump Text_WasSentToBillsPC_ + db "@" + +InitNickname: ; e3b9 (3:63b9) + push de + call LoadStandardMenuDataHeader + call DisableSpriteUpdates + pop de + push de + ld b, $0 + callba NamingScreen + pop hl + ld de, wStringBuffer1 + call InitName + ld a, $4 ; XXX could this be in bank 4 in pokered? + ld hl, ExitAllMenus + rst FarCall + ret diff --git a/event/overworld.asm b/event/overworld.asm index aea4619d..6e6608df 100755 --- a/event/overworld.asm +++ b/event/overworld.asm @@ -22,7 +22,7 @@ DoFieldMoveAction: ; c73a (3:473a) FieldMoveGetPartyNick: ; c74b (3:474b) ld hl, wPartyMon1Nickname ld a, $2 - ld [wce5f], a + ld [wMonType], a ld a, [wd005] call GetNick call Function317b @@ -1421,7 +1421,7 @@ Fish_CheckMap: jr z, .asm_cff1 ld [wd117], a ld a, e - ld [wd040], a + ld [wCurPartyLevel], a ld a, $4 ld [wBattleType], a ld a, $2 diff --git a/event/special.asm b/event/special.asm index 0a0e8072..ddc530d1 100755 --- a/event/special.asm +++ b/event/special.asm @@ -1,10 +1,10 @@ Function73e1: xor a - ld [wce5f], a + ld [wMonType], a ld a, SHUCKLE ld [wd004], a ld a, $f - ld [wd040], a + ld [wCurPartyLevel], a predef TryAddMonToParty jr nc, .asm_743f ld bc, $30 diff --git a/home/map.asm b/home/map.asm index ac9fe360..cba63d00 100644 --- a/home/map.asm +++ b/home/map.asm @@ -1239,7 +1239,7 @@ LoadMapStatus:: ret CallScript:: - ld [wd160], a + ld [wScriptBank], a ld a, l ld [wd161], a ld a, h @@ -1366,7 +1366,7 @@ GetScriptByte:: push bc ld a, [hROMBank] push af - ld a, [wd160] + ld a, [wScriptBank] rst Bankswitch ld hl, wd161 ld c, [hl] @@ -408,35 +408,18 @@ INCLUDE "event/overworld.asm" INCLUDE "engine/items.asm" INCLUDE "engine/player_step.asm" INCLUDE "engine/anim_hp_bar.asm" +INCLUDE "engine/move_mon.asm" -TryAddMonToParty:: +BillsPC_: ; e3d8 IF DEF(GOLD) - dr $d892, $da73 - -FillPP:: - dr $da73, $da9c - -AddTempmonToParty:: - dr $da9c, $db45 - -SentGetPkmnIntoFromBox:: - dr $db45, $de74 - -SentPkmnIntoBox:: - dr $de74, $df92 - -GiveEgg:: - dr $df92, $e03f -RemoveMonFromPartyOrBox: - dr $e03f, $e16d - -CalcPkmnStats:: - dr $e16d, $e181 - -CalcPkmnStatC:: - dr $e181, $e513 + dr $e3d8, $e513 CheckCurPartyMonFainted: - dr $e513, $e6a9 + dr $e513, $e673 + +Functione673: + dr $e673, $e68e +Functione68e: + dr $e68e, $e6a9 Functione6a9: dr $e6a9, $e6b0 Functione6b0: @@ -448,36 +431,20 @@ Functione6bd: DoItemEffect_:: dr $e7a6, $f900 Functionf900: - dr $f900, $fa3e + dr $f900, $f933 +GetMaxPPOfMove: + dr $f933, $fa3e ENDC IF DEF(SILVER) - dr $d890, $da71 - -FillPP:: - dr $da71, $da9a - -AddTempmonToParty:: - dr $da9a, $db43 - -SentGetPkmnIntoFromBox:: - dr $db43, $de72 - -SentPkmnIntoBox:: - dr $de72, $df90 - -GiveEgg:: - dr $df90, $e03d -RemoveMonFromPartyOrBox: - dr $e03d, $e16b - -CalcPkmnStats:: - dr $e16b, $e17f - -CalcPkmnStatC:: - dr $e17f, $e511 + dr $e3d6, $e511 CheckCurPartyMonFainted: - dr $e511, $e6a7 + dr $e511, $e671 + +Functione673: + dr $e671, $e68c +Functione68e: + dr $e68c, $e6a7 Functione6a9: dr $e6a7, $e6ae Functione6b0: @@ -488,8 +455,10 @@ Functione6bd: dr $e6bb, $e7a4 DoItemEffect_:: dr $e7a4, $f8fe -Functionf900 - dr $f8fe, $fa3c +Functionf900: + dr $f8fe, $f931 +GetMaxPPOfMove: + dr $f931, $fa3c ENDC SECTION "bank4", ROMX, BANK[$4] @@ -640,7 +609,9 @@ InitDecorations: ; 2692d Function271be: dr $271be, $27216 Function27216: - dr $27216, $28000 + dr $27216, $27271 +GetTrainerDVs: + dr $27271, $28000 SECTION "banka", ROMX, BANK[$a] dr $28000, $28d88 @@ -741,7 +712,10 @@ UpdatePlayerHUD:: dr $3dda9, $3de97 UpdateEnemyHUD:: - dr $3de97, $3ec11 + dr $3de97, $3e74b + +LoadEnemyMon: + dr $3e74b, $3ec11 BattleRandom_:: ; 3ec11 dr $3ec11, $3f196 @@ -771,7 +745,10 @@ LearnLevelMoves:: dr $42483, $424dd FillMoves:: - dr $424dd, $44000 + dr $424dd, $4278d + +GetPreEvolution: + dr $4278d, $44000 SECTION "bank11", ROMX, BANK[$11] dr $44000, $44648 @@ -834,7 +811,13 @@ PlaceNonFaintStatus:: dr $51437, $51478 ListMoves:: - dr $51478, $51749 + dr $51478, $51524 + +CalcLevel: + dr $51524, $51550 + +CalcExpAtLevel: + dr $51550, $51749 GetUnownLetter:: dr $51749, $51780 @@ -1093,7 +1076,9 @@ Functionc7a5a: Functionc7bad: dr $c7bad, $c7bbf Functionc7bbf: - dr $c7bbf, $c8000 + dr $c7bbf, $c7cd0 +Functionc7cd0: + dr $c7cd0, $c8000 SECTION "bank32", ROMX, BANK[$32] BattleAnimations:: ; Not actually where it is, I just needed the label for BANK to work @@ -1216,7 +1201,9 @@ ConvertMon_1to2: dr $fb981, $fba12 CheckTypeMatchup:: - dr $fba12, $fbc3c + dr $fba12, $fbb22 +UpdateUnownDex: + dr $fbb22, $fbc3c Functionfbc3c: dr $fbc3c, $fbdd6 Functionfbdd6: @@ -1459,7 +1446,10 @@ Text_AskCut_:: dr $1943a1, $1943c9 Text_MonCanCutThis_:: - dr $1943c9, $195610 + dr $1943c9, $194953 + +Text_WasSentToBillsPC_:: + dr $194953, $195610 ClockTimeUnknownText_:: ; 195610 dr $195610, $195624 @@ -2037,7 +2037,7 @@ wce59:: ds 1 ; ce59 wce5a:: ds 1 ; ce5a wLinkTimeoutFrames:: ds 2 wce5d:: ds 2 ; ce5d -wce5f:: ds 1 ; ce5f +wMonType:: ds 1 ; ce5f wce60:: ds 1 ; ce60 wce61:: ds 1 ; ce61 wce62:: ds 1 ; ce62 @@ -2290,7 +2290,7 @@ wOBP0:: ds 1 wOPB1:: ds 1 wcf46:: ds 1 ; cf46 wcf47:: ds 1 ; cf47 -wcf48:: ds 1 ; cf48 +wMonOrItemNameBuffer:: ds 1 ; cf48 wcf49:: ds 1 ; cf49 wcf4a:: ds 1 ; cf4a wcf4b:: ds 1 ; cf4b @@ -2412,7 +2412,7 @@ wd03c:: ds 1 ; d03c wd03d:: ds 1 ; d03d wd03e:: ds 1 ; d03e wd03f:: ds 1 ; d03f -wd040:: ds 1 ; d040 +wCurPartyLevel:: ds 1 ; d040 wd041:: ds 1 ; d041 wLinkMode:: ds 1 ; d042 @@ -2660,7 +2660,7 @@ wd15c:: ds 1 ; d15c wd15d:: ds 1 ; d15d wd15e:: ds 1 ; d15e wd15f:: ds 1 ; d15f -wd160:: ds 1 ; d160 +wScriptBank:: ds 1 ; d160 wd161:: ds 1 ; d161 wd162:: ds 1 ; d162 wd163:: ds 1 ; d163 |