diff options
Diffstat (limited to 'engine/pokemon')
-rw-r--r-- | engine/pokemon/checknickerrors.asm | 74 | ||||
-rw-r--r-- | engine/pokemon/correcterrorsinplayerparty.asm | 229 | ||||
-rwxr-xr-x | engine/pokemon/tmhm.asm | 589 |
3 files changed, 303 insertions, 589 deletions
diff --git a/engine/pokemon/checknickerrors.asm b/engine/pokemon/checknickerrors.asm new file mode 100644 index 000000000..87ebd6bb3 --- /dev/null +++ b/engine/pokemon/checknickerrors.asm @@ -0,0 +1,74 @@ +CheckNickErrors:: ; 669f +; error-check monster nick before use +; must be a peace offering to gamesharkers + +; input: de = nick location + + push bc + push de + ld b, MON_NAME_LENGTH + +.checkchar +; end of nick? + ld a, [de] + cp "@" ; terminator + jr z, .end + +; check if this char is a text command + ld hl, .textcommands + dec hl +.loop +; next entry + inc hl +; reached end of commands table? + ld a, [hl] + cp -1 + jr z, .done + +; is the current char between this value (inclusive)... + ld a, [de] + cp [hl] + inc hl + jr c, .loop +; ...and this one? + cp [hl] + jr nc, .loop + +; replace it with a "?" + ld a, "?" + ld [de], a + jr .loop + +.done +; next char + inc de +; reached end of nick without finding a terminator? + dec b + jr nz, .checkchar + +; change nick to "?@" + pop de + push de + ld a, "?" + ld [de], a + inc de + ld a, "@" + ld [de], a +.end +; if the nick has any errors at this point it's out of our hands + pop de + pop bc + ret + +.textcommands ; 66cf +; table defining which characters are actually text commands +; format: + ; ≥ < + db TX_START, TX_BOX + 1 + db "<PLAY_G>", "<JP_18>" + 1 + db "<NI>", "<NO>" + 1 + db "<ROUTE>", "<GREEN>" + 1 + db "<ENEMY>", "<ENEMY>" + 1 + db "<MOM>", "<TM>" + 1 + db "<ROCKET>", "┘" + 1 + db -1 ; end diff --git a/engine/pokemon/correcterrorsinplayerparty.asm b/engine/pokemon/correcterrorsinplayerparty.asm new file mode 100644 index 000000000..e815aa4c8 --- /dev/null +++ b/engine/pokemon/correcterrorsinplayerparty.asm @@ -0,0 +1,229 @@ +Unreferenced_CorrectErrorsInPlayerParty: + ld hl, wPartyCount + ld a, [hl] + and a + ret z + + cp PARTY_LENGTH + 1 + jr c, .party_length_okay + ld a, PARTY_LENGTH + ld [hl], a +.party_length_okay + inc hl + + ld b, a + ld c, 0 +.loop1 + ld a, [hl] + and a + jr z, .invalid_species + cp NUM_POKEMON + 1 + jr z, .invalid_species + cp EGG + 1 + jr c, .next_species + +.invalid_species + ld [hl], SMEARGLE + push hl + push bc + ld a, c + ld hl, wPartyMon1Species + call GetPartyLocation + ld [hl], SMEARGLE + pop bc + pop hl + +.next_species + inc hl + inc c + dec b + jr nz, .loop1 + ld [hl], $ff + + ld hl, wPartyMon1 + ld a, [wPartyCount] + ld d, a + ld e, 0 +.loop2 + push de + push hl + ld b, h + ld c, l + ld a, [hl] + and a + jr z, .invalid_species_2 + cp NUM_POKEMON + 1 + jr c, .check_level + +.invalid_species_2 + ld [hl], SMEARGLE + push de + ld d, 0 + ld hl, wPartySpecies + add hl, de + pop de + ld a, SMEARGLE + ld [hl], a + +.check_level + ld [wCurSpecies], a + call GetBaseData + ld hl, MON_LEVEL + add hl, bc + ld a, [hl] + cp MIN_LEVEL + ld a, MIN_LEVEL + jr c, .invalid_level + ld a, [hl] + cp MAX_LEVEL + jr c, .load_level + ld a, MAX_LEVEL +.invalid_level + ld [hl], a +.load_level + ld [wCurPartyLevel], a + + ld hl, MON_MAXHP + add hl, bc + ld d, h + ld e, l + ld hl, MON_STAT_EXP - 1 + add hl, bc + ld b, TRUE + predef CalcMonStats + pop hl + ld bc, PARTYMON_STRUCT_LENGTH + add hl, bc + pop de + inc e + dec d + jr nz, .loop2 + + ld de, wPartyMonNicknames + ld a, [wPartyCount] + ld b, a + ld c, 0 +.loop3 + push bc + call .GetLengthOfStringWith6CharCap + push de + farcall CheckStringForErrors + pop hl + pop bc + jr nc, .valid_nickname + + push bc + push hl + ld hl, wPartySpecies + push bc + ld b, 0 + add hl, bc + pop bc + ld a, [hl] + cp EGG + ld hl, .TAMAGO + jr z, .got_nickname + ld [wd265], a + call GetPokemonName + ld hl, wStringBuffer1 +.got_nickname + pop de + ld bc, MON_NAME_LENGTH + call CopyBytes + pop bc + +.valid_nickname + inc c + dec b + jr nz, .loop3 + + ld de, wPartyMonOT + ld a, [wPartyCount] + ld b, a + ld c, 0 +.loop4 + push bc + call .GetLengthOfStringWith6CharCap + push de + farcall CheckStringForErrors + pop hl + jr nc, .valid_ot_name + ld d, h + ld e, l + ld hl, wPlayerName + ld bc, NAME_LENGTH + call CopyBytes +.valid_ot_name + pop bc + inc c + dec b + jr nz, .loop4 + + ld hl, wPartyMon1Moves + ld a, [wPartyCount] + ld b, a +.loop5 + push hl + ld c, NUM_MOVES + ld a, [hl] + and a + jr z, .invalid_move + cp NUM_ATTACKS + 1 + jr c, .moves_loop +.invalid_move + ld [hl], POUND + +.moves_loop + ld a, [hl] + and a + jr z, .fill_invalid_moves + cp NUM_ATTACKS + 1 + jr c, .next_move + +.fill_invalid_moves + xor a + ld [hli], a + dec c + jr nz, .fill_invalid_moves + jr .next_pokemon + +.next_move + inc hl + dec c + jr nz, .moves_loop + +.next_pokemon + pop hl + push bc + ld bc, PARTYMON_STRUCT_LENGTH + add hl, bc + pop bc + dec b + jr nz, .loop5 + ret +; 13b6b + +.TAMAGO: ; 13b6b + db "タマゴ@@@" +; 13b71 + +.GetLengthOfStringWith6CharCap: ; 13b71 + push de + ld c, 1 + ld b, NAME_LENGTH_JAPANESE +.search_loop + ld a, [de] + cp "@" + jr z, .done + inc de + inc c + dec b + jr nz, .search_loop + dec c + dec de + ld a, "@" + ld [de], a +.done + pop de + ret +; 13b87 diff --git a/engine/pokemon/tmhm.asm b/engine/pokemon/tmhm.asm deleted file mode 100755 index 442f73cfa..000000000 --- a/engine/pokemon/tmhm.asm +++ /dev/null @@ -1,589 +0,0 @@ -TMHMPocket: ; 2c76f (b:476f) - ld a, $1 - ld [hInMenu], a - call TMHM_PocketLoop - ld a, $0 - ld [hInMenu], a - ret nc - call PlaceHollowCursor - call WaitBGMap - ld a, [wCurItem] - dec a - ld [wCurItemQuantity], a - ld hl, wTMsHMs - ld c, a - ld b, 0 - add hl, bc - ld a, [hl] - ld [wItemQuantityBuffer], a - call .ConvertItemToTMHMNumber - scf - ret - -.ConvertItemToTMHMNumber: ; 2c798 (b:4798) - ld a, [wCurItem] - ld c, a - callfar GetNumberedTMHM - ld a, c - ld [wCurItem], a - ret - -ConvertCurItemIntoCurTMHM: ; 2c7a7 (b:47a7) - ld a, [wCurItem] - ld c, a - callfar GetTMHMNumber - ld a, c - ld [wCurTMHM], a - ret - -GetTMHMItemMove: ; 2c7b6 (b:47b6) - call ConvertCurItemIntoCurTMHM - predef GetTMHMMove - ret - -AskTeachTMHM: ; 2c7bf (b:47bf) - ld hl, wOptions - ld a, [hl] - push af - res NO_TEXT_SCROLL, [hl] - ld a, [wCurItem] - cp TM01 - jr c, .NotTMHM - call GetTMHMItemMove - ld a, [wCurTMHM] - ld [wPutativeTMHMMove], a - call GetMoveName - call CopyName1 - ld hl, Text_BootedTM ; Booted up a TM - ld a, [wCurItem] - cp HM01 - jr c, .TM - ld hl, Text_BootedHM ; Booted up an HM -.TM: - call PrintText - ld hl, Text_ItContained - call PrintText - call YesNoBox -.NotTMHM: - pop bc - ld a, b - ld [wOptions], a - ret - -ChooseMonToLearnTMHM: ; 2c7fb - ld hl, wStringBuffer2 - ld de, wTMHMMoveNameBackup - ld bc, 12 - call CopyBytes - call ClearBGPalettes -ChooseMonToLearnTMHM_NoRefresh: ; 2c80a - farcall LoadPartyMenuGFX - farcall InitPartyMenuWithCancel - farcall InitPartyMenuGFX - ld a, PARTYMENUACTION_TEACH_TMHM - ld [wPartyMenuActionText], a -.loopback - farcall WritePartyMenuTilemap - farcall PrintPartyMenuText - call WaitBGMap - call SetPalettes - call DelayFrame - farcall PartyMenuSelect - push af - ld a, [wCurPartySpecies] - cp EGG - pop bc ; now contains the former contents of af - jr z, .egg - push bc - ld hl, wTMHMMoveNameBackup - ld de, wStringBuffer2 - ld bc, 12 - call CopyBytes - pop af ; now contains the original contents of af - ret - -.egg - push hl - push de - push bc - push af - ld de, SFX_WRONG - call PlaySFX - call WaitSFX - pop af - pop bc - pop de - pop hl - jr .loopback -; 2c867 - -TeachTMHM: ; 2c867 - predef CanLearnTMHMMove - - push bc - ld a, [wCurPartyMon] - ld hl, wPartyMonNicknames - call GetNick - pop bc - - ld a, c - and a - jr nz, .compatible - push de - ld de, SFX_WRONG - call PlaySFX - pop de - ld hl, Text_TMHMNotCompatible - call PrintText - jr .nope - -.compatible - callfar KnowsMove - jr c, .nope - - predef LearnMove - ld a, b - and a - jr z, .nope - - farcall StubbedTrainerRankings_TMsHMsTaught - ld a, [wCurItem] - call IsHM - ret c - - ld c, HAPPINESS_LEARNMOVE - callfar ChangeHappiness - call ConsumeTM - jr .learned_move - -.nope - and a - ret - -.unused - ld a, 2 - ld [wItemEffectSucceeded], a -.learned_move - scf - ret -; 2c8bf (b:48bf) - -Text_BootedTM: ; 0x2c8bf - ; Booted up a TM. - text_jump UnknownText_0x1c0373 - db "@" -; 0x2c8c4 - -Text_BootedHM: ; 0x2c8c4 - ; Booted up an HM. - text_jump UnknownText_0x1c0384 - db "@" -; 0x2c8c9 - -Text_ItContained: ; 0x2c8c9 - ; It contained @ . Teach @ to a #MON? - text_jump UnknownText_0x1c0396 - db "@" -; 0x2c8ce - -Text_TMHMNotCompatible: ; 0x2c8ce - ; is not compatible with @ . It can't learn @ . - text_jump UnknownText_0x1c03c2 - db "@" -; 0x2c8d3 - -TMHM_PocketLoop: ; 2c8d3 (b:48d3) - xor a - ld [hBGMapMode], a - call TMHM_DisplayPocketItems - ld a, 2 - ld [w2DMenuCursorInitY], a - ld a, 7 - ld [w2DMenuCursorInitX], a - ld a, 1 - ld [w2DMenuNumCols], a - ld a, 5 - sub d - inc a - cp 6 - jr nz, .okay - dec a -.okay - ld [w2DMenuNumRows], a - ld a, $c - ld [w2DMenuFlags1], a - xor a - ld [w2DMenuFlags2], a - ld a, $20 - ld [w2DMenuCursorOffsets], a - ld a, A_BUTTON | B_BUTTON | D_UP | D_DOWN | D_LEFT | D_RIGHT - ld [wMenuJoypadFilter], a - ld a, [wTMHMPocketCursor] - inc a - ld [wMenuCursorY], a - ld a, $1 - ld [wMenuCursorX], a - jr TMHM_ShowTMMoveDescription - -TMHM_JoypadLoop: ; 2c915 (b:4915) - call TMHM_DisplayPocketItems - call StaticMenuJoypad - ld b, a - ld a, [wMenuCursorY] - dec a - ld [wTMHMPocketCursor], a - xor a - ld [hBGMapMode], a - ld a, [w2DMenuFlags2] - bit 7, a - jp nz, TMHM_ScrollPocket - ld a, b - ld [wMenuJoypad], a - bit A_BUTTON_F, a - jp nz, TMHM_ChooseTMorHM - bit B_BUTTON_F, a - jp nz, TMHM_ExitPack - bit D_RIGHT_F, a - jp nz, TMHM_ExitPocket - bit D_LEFT_F, a - jp nz, TMHM_ExitPocket -TMHM_ShowTMMoveDescription: ; 2c946 (b:4946) - call TMHM_CheckHoveringOverCancel - jp nc, TMHM_ExitPocket - hlcoord 0, 12 - ld b, 4 - ld c, SCREEN_WIDTH - 2 - call TextBox - ld a, [wCurItem] - cp NUM_TMS + NUM_HMS + 1 - jr nc, TMHM_JoypadLoop - ld [wd265], a - predef GetTMHMMove - ld a, [wd265] - ld [wCurSpecies], a - hlcoord 1, 14 - call PrintMoveDesc - jp TMHM_JoypadLoop - -TMHM_ChooseTMorHM: ; 2c974 (b:4974) - call TMHM_PlaySFX_ReadText2 - call CountTMsHMs ; This stores the count to wd265. - ld a, [wMenuCursorY] - dec a - ld b, a - ld a, [wTMHMPocketScrollPosition] - add b - ld b, a - ld a, [wd265] - cp b - jr z, _TMHM_ExitPack ; our cursor was hovering over CANCEL -TMHM_CheckHoveringOverCancel: ; 2c98a (b:498a) - call TMHM_GetCurrentPocketPosition - ld a, [wMenuCursorY] - ld b, a -.loop - inc c - ld a, c - cp NUM_TMS + NUM_HMS + 1 - jr nc, .okay - ld a, [hli] - and a - jr z, .loop - dec b - jr nz, .loop - ld a, c -.okay - ld [wCurItem], a - cp -1 - ret - -TMHM_ExitPack: ; 2c9a5 (b:49a5) - call TMHM_PlaySFX_ReadText2 -_TMHM_ExitPack: ; 2c9a8 (b:49a8) - ld a, $2 - ld [wMenuJoypad], a - and a - ret - -TMHM_ExitPocket: ; 2c9af (b:49af) - and a - ret - -TMHM_ScrollPocket: ; 2c9b1 (b:49b1) - ld a, b - bit 7, a - jr nz, .skip - ld hl, wTMHMPocketScrollPosition - ld a, [hl] - and a - jp z, TMHM_JoypadLoop - dec [hl] - call TMHM_DisplayPocketItems - jp TMHM_ShowTMMoveDescription - -.skip - call TMHM_GetCurrentPocketPosition - ld b, 5 -.loop - inc c - ld a, c - cp NUM_TMS + NUM_HMS + 1 - jp nc, TMHM_JoypadLoop - ld a, [hli] - and a - jr z, .loop - dec b - jr nz, .loop - ld hl, wTMHMPocketScrollPosition - inc [hl] - call TMHM_DisplayPocketItems - jp TMHM_ShowTMMoveDescription - -TMHM_DisplayPocketItems: ; 2c9e2 (b:49e2) - ld a, [wBattleType] - cp BATTLETYPE_TUTORIAL - jp z, Tutorial_TMHMPocket - - hlcoord 5, 2 - lb bc, 10, 15 - ld a, " " - call ClearBox - call TMHM_GetCurrentPocketPosition - ld d, $5 -.loop2 - inc c - ld a, c - cp NUM_TMS + NUM_HMS + 1 - jr nc, .NotTMHM - ld a, [hli] - and a - jr z, .loop2 - ld b, a - ld a, c - ld [wd265], a - push hl - push de - push bc - call TMHMPocket_GetCurrentLineCoord - push hl - ld a, [wd265] - cp NUM_TMS + 1 - jr nc, .HM - ld de, wd265 - lb bc, PRINTNUM_LEADINGZEROS | 1, 2 - call PrintNum - jr .okay - -.HM: - push af - sub NUM_TMS - ld [wd265], a - ld [hl], "H" - inc hl - ld de, wd265 - lb bc, PRINTNUM_RIGHTALIGN | 1, 2 - call PrintNum - pop af - ld [wd265], a -.okay - predef GetTMHMMove - ld a, [wd265] - ld [wPutativeTMHMMove], a - call GetMoveName - pop hl - ld bc, 3 - add hl, bc - push hl - call PlaceString - pop hl - pop bc - ld a, c - push bc - cp NUM_TMS + 1 - jr nc, .hm2 - ld bc, SCREEN_WIDTH + 9 - add hl, bc - ld [hl], "×" - inc hl - ld a, "0" ; why are we doing this? - pop bc - push bc - ld a, b - ld [wd265], a - ld de, wd265 - lb bc, 1, 2 - call PrintNum -.hm2 - pop bc - pop de - pop hl - dec d - jr nz, .loop2 - jr .done - -.NotTMHM: - call TMHMPocket_GetCurrentLineCoord - inc hl - inc hl - inc hl - push de - ld de, TMHM_String_Cancel - call PlaceString - pop de -.done - ret - -TMHMPocket_GetCurrentLineCoord: ; 2ca86 (b:4a86) - hlcoord 5, 0 - ld bc, 2 * SCREEN_WIDTH - ld a, 6 - sub d - ld e, a - ; AddNTimes -.loop - add hl, bc - dec e - jr nz, .loop - ret -; 2ca95 (b:4a95) - -Unreferenced_Function2ca95: ; 2ca95 - pop hl - ld bc, 3 - add hl, bc - predef GetTMHMMove - ld a, [wd265] - ld [wPutativeTMHMMove], a - call GetMoveName - push hl - call PlaceString - pop hl - ret -; 2caae - -TMHM_String_Cancel: ; 2caae - db "CANCEL@" -; 2cab5 - -TMHM_GetCurrentPocketPosition: ; 2cab5 (b:4ab5) - ld hl, wTMsHMs - ld a, [wTMHMPocketScrollPosition] - ld b, a - inc b - ld c, 0 -.loop - inc c - ld a, [hli] - and a - jr z, .loop - dec b - jr nz, .loop - dec hl - dec c - ret - -Tutorial_TMHMPocket: ; 2caca (b:4aca) - hlcoord 9, 3 - push de - ld de, TMHM_String_Cancel - call PlaceString - pop de - ret - -TMHM_PlaySFX_ReadText2: ; 2cad6 (b:4ad6) - push de - ld de, SFX_READ_TEXT_2 - call PlaySFX - pop de - ret -; 2cadf (b:4adf) - -Unreferenced_Function2cadf: ; 2cadf - call ConvertCurItemIntoCurTMHM - call .CheckHaveRoomForTMHM - ld hl, .NoRoomText - jr nc, .print - ld hl, .ReceivedText -.print - jp PrintText -; 2caf0 - -.NoRoomText: ; 0x2caf0 - ; You have no room for any more @ S. - text_jump UnknownText_0x1c03fa - db "@" -; 0x2caf5 - -.ReceivedText: ; 0x2caf5 - ; You received @ ! - text_jump UnknownText_0x1c0421 - db "@" -; 0x2cafa - -.CheckHaveRoomForTMHM: ; 2cafa - ld a, [wd265] - dec a - ld hl, wTMsHMs - ld b, 0 - ld c, a - add hl, bc - ld a, [hl] - inc a - cp NUM_TMS * 2 - ret nc - ld [hl], a - ret -; 2cb0c - -ConsumeTM: ; 2cb0c (b:4b0c) - call ConvertCurItemIntoCurTMHM - ld a, [wd265] - dec a - ld hl, wTMsHMs - ld b, 0 - ld c, a - add hl, bc - ld a, [hl] - and a - ret z - dec a - ld [hl], a - ret nz - ld a, [wTMHMPocketScrollPosition] - and a - ret z - dec a - ld [wTMHMPocketScrollPosition], a - ret - -CountTMsHMs: ; 2cb2a (b:4b2a) - ld b, 0 - ld c, NUM_TMS + NUM_HMS - ld hl, wTMsHMs -.loop - ld a, [hli] - and a - jr z, .skip - inc b -.skip - dec c - jr nz, .loop - ld a, b - ld [wd265], a - ret - -PrintMoveDesc: ; 2cb3e - push hl - ld hl, MoveDescriptions - ld a, [wCurSpecies] - dec a - ld c, a - ld b, 0 - add hl, bc - add hl, bc - ld a, [hli] - ld e, a - ld d, [hl] - pop hl - jp PlaceString -; 2cb52 |