diff options
Diffstat (limited to 'main.asm')
-rw-r--r-- | main.asm | 3731 |
1 files changed, 31 insertions, 3700 deletions
@@ -51,200 +51,16 @@ PushOAM: ; 403f PushOAMEnd INCLUDE "engine/map_objects.asm" - INCLUDE "engine/intro_menu.asm" - -ReanchorBGMap_NoOAMUpdate:: ; 6454 - call DelayFrame - ld a, [hOAMUpdate] - push af - - ld a, $1 - ld [hOAMUpdate], a - ld a, [hBGMapMode] - push af - xor a - ld [hBGMapMode], a - - call .ReanchorBGMap - - pop af - ld [hBGMapMode], a - pop af - ld [hOAMUpdate], a - ld hl, VramState - set 6, [hl] - ret - -.ReanchorBGMap: - xor a - ld [hLCDCPointer], a - ld [hBGMapMode], a - ld a, $90 - ld [hWY], a - call OverworldTextModeSwitch - ld a, VBGMap1 / $100 - call .LoadBGMapAddrIntoHRAM - call _OpenAndCloseMenu_HDMATransferTileMapAndAttrMap - callba LoadOW_BGPal7 - callba ApplyPals - ld a, $1 - ld [hCGBPalUpdate], a - xor a - ld [hBGMapMode], a - ld [hWY], a - callba HDMATransfer_FillBGMap0WithBlack ; no need to farcall - ld a, VBGMap0 / $100 - call .LoadBGMapAddrIntoHRAM - xor a - ld [wBGMapAnchor], a - ld a, VBGMap0 / $100 - ld [wBGMapAnchor + 1], a - xor a - ld [hSCX], a - ld [hSCY], a - call ApplyBGMapAnchorToObjects - ret - -.LoadBGMapAddrIntoHRAM: ; 64b9 - ld [hBGMapAddress + 1], a - xor a - ld [hBGMapAddress], a - ret - -LoadFonts_NoOAMUpdate:: ; 64bf - ld a, [hOAMUpdate] - push af - ld a, $1 - ld [hOAMUpdate], a - - call .LoadGFX - - pop af - ld [hOAMUpdate], a - ret - -.LoadGFX: - call LoadFontsExtra - ld a, $90 - ld [hWY], a - call SafeUpdateSprites - call LoadStandardFont - ret - -HDMATransfer_FillBGMap0WithBlack: ; 64db - ld a, [rSVBK] - push af - ld a, $6 - ld [rSVBK], a - - ld a, "<BLACK>" ; $60 - ld hl, wDecompressScratch - ld bc, wScratchAttrMap - wDecompressScratch - call ByteFill - ld a, wDecompressScratch / $100 - ld [rHDMA1], a - ld a, wDecompressScratch % $100 - ld [rHDMA2], a - ld a, (VBGMap0 % $8000) / $100 - ld [rHDMA3], a - ld a, (VBGMap0 % $8000) % $100 - ld [rHDMA4], a - ld a, $3f - ld [hDMATransfer], a - call DelayFrame - - pop af - ld [rSVBK], a - ret - +INCLUDE "engine/init_map.asm" INCLUDE "engine/learn.asm" - -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, PKMN_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 "<START>", TX_BOX + 1 - db "<PLAY_G>", $18 + 1 - db $1d, "%" + 1 - db $35, "<GREEN>" + 1 - db "<ENEMY>", "<ENEMY>" + 1 - db "<MOM>", "<TM>" + 1 - db "<ROCKET>", "┘" + 1 - db -1 ; end - +INCLUDE "engine/check_nick_errors.asm" INCLUDE "engine/math.asm" INCLUDE "data/items/item_attributes.asm" INCLUDE "engine/npc_movement.asm" INCLUDE "event/happiness_egg.asm" INCLUDE "event/special.asm" -Predef1: ; 747a -; not used - ret - SECTION "bank2", ROMX @@ -256,26 +72,7 @@ INCLUDE "engine/color.asm" SECTION "bank3", ROMX -CheckTime:: ; c000 - ld a, [TimeOfDay] - ld hl, TimeOfDayTable - ld de, 2 - call IsInArray - inc hl - ld c, [hl] - ret c - - xor a - ld c, a - ret - -TimeOfDayTable: ; c012 - db MORN_F, MORN - db DAY_F, DAY - db NITE_F, NITE - db NITE_F, NITE - db -1 - +INCLUDE "engine/check_time.asm" INCLUDE "engine/specials.asm" INCLUDE "engine/printnum.asm" INCLUDE "engine/health.asm" @@ -405,424 +202,14 @@ INCLUDE "event/itemfinder.asm" INCLUDE "engine/startmenu.asm" INCLUDE "engine/selectmenu.asm" INCLUDE "event/elevator.asm" - -Special_GiveParkBalls: ; 135db - xor a - ld [wContestMon], a - ld a, 20 - ld [wParkBallsRemaining], a - callba StartBugContestTimer - ret - -BugCatchingContestBattleScript:: ; 0x135eb - writecode VAR_BATTLETYPE, BATTLETYPE_CONTEST - randomwildmon - startbattle - reloadmapafterbattle - copybytetovar wParkBallsRemaining - iffalse BugCatchingContestOutOfBallsScript - end - -BugCatchingContestOverScript:: ; 0x135f8 - playsound SFX_ELEVATOR_END - opentext - writetext BugCatchingContestText_BeeepTimesUp - waitbutton - jump BugCatchingContestReturnToGateScript - -BugCatchingContestOutOfBallsScript: ; 0x13603 - playsound SFX_ELEVATOR_END - opentext - writetext BugCatchingContestText_ContestIsOver - waitbutton - -BugCatchingContestReturnToGateScript: ; 0x1360b - closetext - jumpstd bugcontestresultswarp - -BugCatchingContestText_BeeepTimesUp: ; 0x1360f - ; ANNOUNCER: BEEEP! Time's up! - text_jump UnknownText_0x1bd2ca - db "@" - -BugCatchingContestText_ContestIsOver: ; 0x13614 - ; ANNOUNCER: The Contest is over! - text_jump UnknownText_0x1bd2e7 - db "@" - -RepelWoreOffScript:: ; 0x13619 - opentext - writetext .text - waitbutton - closetext - end - -.text ; 0x13620 - ; REPEL's effect wore off. - text_jump UnknownText_0x1bd308 - db "@" - -HiddenItemScript:: ; 0x13625 - opentext - copybytetovar EngineBuffer3 - itemtotext 0, 0 - writetext .found_text - giveitem ITEM_FROM_MEM - iffalse .bag_full - callasm SetMemEvent - specialsound - itemnotify - jump .finish - -.bag_full ; 0x1363e - buttonsound - writetext .no_room_text - waitbutton - -.finish ; 13643 - closetext - end - -.found_text ; 0x13645 - ; found @ ! - text_jump UnknownText_0x1bd321 - db "@" - -.no_room_text ; 0x1364a - ; But has no space left… - text_jump UnknownText_0x1bd331 - db "@" - -SetMemEvent: ; 1364f - ld hl, EngineBuffer1 - ld a, [hli] - ld d, [hl] - ld e, a - ld b, SET_FLAG - call EventFlagAction - ret - -CheckFacingTileForStd:: ; 1365b -; Checks to see if the tile you're facing has a std script associated with it. If so, executes the script and returns carry. - ld a, c - ld de, 3 - ld hl, TileCollisionStdScripts - call IsInArray - jr nc, .notintable - - ld a, jumpstd_command - ld [wJumpStdScriptBuffer], a - inc hl - ld a, [hli] - ld [wJumpStdScriptBuffer + 1], a - ld a, [hli] - ld [wJumpStdScriptBuffer + 2], a - ld a, BANK(Script_JumpStdFromRAM) - ld hl, Script_JumpStdFromRAM - call CallScript - scf - ret - -.notintable - xor a - ret - -INCLUDE "data/collision_stdscripts.asm" - -Script_JumpStdFromRAM: ; 0x1369a - jump wJumpStdScriptBuffer - +INCLUDE "event/bug_contest.asm" +INCLUDE "event/hidden_items.asm" +INCLUDE "engine/collision_stdscripts.asm" INCLUDE "event/bug_contest_judging.asm" - -ApplyPokerusTick: ; 13988 -; decreases all pokemon's pokerus counter by b. if the lower nybble reaches zero, the pokerus is cured. - ld hl, PartyMon1PokerusStatus ; PartyMon1 + MON_PKRS - ld a, [PartyCount] - and a - ret z ; make sure it's not wasting time on an empty party - ld c, a -.loop - ld a, [hl] - and $f ; lower nybble is the number of days remaining - jr z, .next ; if already 0, skip - sub b ; subtract the number of days - jr nc, .ok ; max(result, 0) - xor a -.ok - ld d, a ; back up this value because we need to preserve the strain (upper nybble) - ld a, [hl] - and $f0 - add d - ld [hl], a ; this prevents a cured pokemon from recontracting pokerus -.next - ld de, PARTYMON_STRUCT_LENGTH - add hl, de - dec c - jr nz, .loop - ret - +INCLUDE "engine/pokerus_tick.asm" INCLUDE "event/bug_contest_2.asm" - -CorrectErrorsInPlayerParty: ; unreferenced - ld hl, PartyCount - 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, PartyMon1Species - 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, PartyMon1 - ld a, [PartyCount] - 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, PartySpecies - add hl, de - pop de - ld a, SMEARGLE - ld [hl], a - -.check_level - ld [CurSpecies], 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 [CurPartyLevel], 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, $1 - predef CalcPkmnStats - pop hl - ld bc, PARTYMON_STRUCT_LENGTH - add hl, bc - pop de - inc e - dec d - jr nz, .loop2 - - ld de, PartyMonNicknames - ld a, [PartyCount] - ld b, a - ld c, 0 -.loop3 - push bc - call .GetLengthOfStringWith6CharCap - push de - callba CheckStringForErrors - pop hl - pop bc - jr nc, .valid_nickname - - push bc - push hl - ld hl, PartySpecies - 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, StringBuffer1 -.got_nickname - pop de - ld bc, PKMN_NAME_LENGTH - call CopyBytes - pop bc - -.valid_nickname - inc c - dec b - jr nz, .loop3 - - ld de, PartyMonOT - ld a, [PartyCount] - ld b, a - ld c, 0 -.loop4 - push bc - call .GetLengthOfStringWith6CharCap - push de - callba CheckStringForErrors - pop hl - jr nc, .valid_ot_name - ld d, h - ld e, l - ld hl, PlayerName - ld bc, NAME_LENGTH - call CopyBytes -.valid_ot_name - pop bc - inc c - dec b - jr nz, .loop4 - - ld hl, PartyMon1Moves - ld a, [PartyCount] - 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 - -GetSquareRoot: ; 13b87 -; Return the square root of de in b. - -; Rather than calculating the result, we take the index of the -; first value in a table of squares that isn't lower than de. - - ld hl, Squares - ld b, 0 -.loop -; Make sure we don't go past the end of the table. - inc b - ld a, b - cp $ff - ret z - -; Iterate over the table until b**2 >= de. - ld a, [hli] - sub e - ld a, [hli] - sbc d - - jr c, .loop - ret - -Squares: ; 13b98 -root set 1 - rept $ff - dw root*root -root set root+1 - endr +INCLUDE "engine/unused_correct_party.asm" +INCLUDE "engine/square_root.asm" SECTION "bank5", ROMX @@ -841,8 +228,6 @@ INCLUDE "event/mom.asm" INCLUDE "event/daycare.asm" INCLUDE "event/photo.asm" INCLUDE "engine/breeding.asm" - - INCLUDE "tilesets/data.asm" @@ -879,345 +264,10 @@ UpdateItemDescription: ; 0x244c3 ret INCLUDE "engine/pokepic.asm" - -LoadObjectMasks: ; 2454f - ld hl, wObjectMasks - xor a - ld bc, NUM_OBJECTS - call ByteFill - nop - ld bc, MapObjects - ld de, wObjectMasks - xor a -.loop - push af - push bc - push de - call GetObjectTimeMask - jr c, .next - call CheckObjectFlag -.next - pop de - ld [de], a - inc de - pop bc - ld hl, OBJECT_LENGTH - add hl, bc - ld b, h - ld c, l - pop af - inc a - cp NUM_OBJECTS - jr nz, .loop - ret - -CheckObjectFlag: ; 2457d (9:457d) - ld hl, MAPOBJECT_SPRITE - add hl, bc - ld a, [hl] - and a - jr z, .masked - ld hl, MAPOBJECT_EVENT_FLAG - add hl, bc - ld a, [hli] - ld e, a - ld a, [hl] - ld d, a - cp -1 - jr nz, .check - ld a, e - cp -1 - jr z, .unmasked - jr .masked -.check - ld b, CHECK_FLAG - call EventFlagAction - ld a, c - and a - jr nz, .masked -.unmasked - xor a - ret - -.masked - ld a, -1 - scf - ret - -GetObjectTimeMask: ; 245a7 (9:45a7) - call CheckObjectTime - ld a, -1 - ret c - xor a - ret - +INCLUDE "engine/map_objects_2.asm" INCLUDE "engine/scrolling_menu.asm" INCLUDE "engine/switch_items.asm" - -PlaceMenuItemName: ; 0x24ab4 - push de - ld a, [MenuSelection] - ld [wNamedObjectIndexBuffer], a - call GetItemName - pop hl - call PlaceString - ret - -PlaceMenuItemQuantity: ; 0x24ac3 - push de - ld a, [MenuSelection] - ld [CurItem], a - callba _CheckTossableItem - ld a, [wItemAttributeParamBuffer] - pop hl - and a - jr nz, .done - ld de, $15 - add hl, de - ld [hl], "×" - inc hl - ld de, MenuSelectionQuantity - lb bc, 1, 2 - call PrintNum - -.done - ret - -PlaceMoneyTopRight: ; 24ae8 - ld hl, MenuDataHeader_0x24b15 - call CopyMenuDataHeader - jr PlaceMoneyDataHeader - -PlaceMoneyBottomLeft: ; 24af0 - ld hl, MenuDataHeader_0x24b1d - call CopyMenuDataHeader - jr PlaceMoneyDataHeader - -PlaceMoneyAtTopLeftOfTextbox: ; 24af8 - ld hl, MenuDataHeader_0x24b15 - lb de, 0, 11 - call OffsetMenuDataHeader - -PlaceMoneyDataHeader: ; 24b01 - call MenuBox - call MenuBoxCoord2Tile - ld de, SCREEN_WIDTH + 1 - add hl, de - ld de, Money - lb bc, PRINTNUM_MONEY | 3, 6 - call PrintNum - ret - -MenuDataHeader_0x24b15: ; 0x24b15 - db $40 ; flags - db 00, 11 ; start coords - db 02, 19 ; end coords - dw NULL - db 1 ; default option - -MenuDataHeader_0x24b1d: ; 0x24b1d - db $40 ; flags - db 11, 00 ; start coords - db 13, 08 ; end coords - dw NULL - db 1 ; default option - -Special_DisplayCoinCaseBalance: ; 24b25 - ; Place a text box of size 1x7 at 11, 0. - hlcoord 11, 0 - ld b, 1 - ld c, 7 - call TextBox - hlcoord 12, 0 - ld de, CoinString - call PlaceString - hlcoord 17, 1 - ld de, ShowMoney_TerminatorString - call PlaceString - ld de, Coins - lb bc, 2, 4 - hlcoord 13, 1 - call PrintNum - ret - -Special_DisplayMoneyAndCoinBalance: ; 24b4e - hlcoord 5, 0 - ld b, 3 - ld c, 13 - call TextBox - hlcoord 6, 1 - ld de, MoneyString - call PlaceString - hlcoord 12, 1 - ld de, Money - lb bc, PRINTNUM_MONEY | 3, 6 - call PrintNum - hlcoord 6, 3 - ld de, CoinString - call PlaceString - hlcoord 15, 3 - ld de, Coins - lb bc, 2, 4 - call PrintNum - ret - -MoneyString: ; 24b83 - db "MONEY@" -CoinString: ; 24b89 - db "COIN@" -ShowMoney_TerminatorString: ; 24b8e - db "@" - -Function24b8f: ; 24b8f -; unreferenced, related to safari? - ld hl, Options - ld a, [hl] - push af - set NO_TEXT_SCROLL, [hl] - hlcoord 0, 0 - ld b, 3 - ld c, 7 - call TextBox - hlcoord 1, 1 - ld de, wSafariTimeRemaining - lb bc, 2, 3 - call PrintNum - hlcoord 4, 1 - ld de, .slash_500 - call PlaceString - hlcoord 1, 3 - ld de, .booru_ko - call PlaceString - hlcoord 5, 3 - ld de, wSafariBallsRemaining - lb bc, 1, 2 - call PrintNum - pop af - ld [Options], a - ret - -.slash_500 ; 24bcf - db "/500@" -.booru_ko ; 24bd4 - db "ボール こ@" - -StartMenu_DrawBugContestStatusBox: ; 24bdc - hlcoord 0, 0 - ld b, 5 - ld c, 17 - call TextBox - ret - -StartMenu_PrintBugContestStatus: ; 24be7 - ld hl, Options - ld a, [hl] - push af - set NO_TEXT_SCROLL, [hl] - call StartMenu_DrawBugContestStatusBox - hlcoord 1, 5 - ld de, .Balls_EN - call PlaceString - hlcoord 8, 5 - ld de, wParkBallsRemaining - lb bc, PRINTNUM_RIGHTALIGN | 1, 2 - call PrintNum - hlcoord 1, 1 - ld de, .CAUGHT - call PlaceString - ld a, [wContestMon] - and a - ld de, .None - jr z, .no_contest_mon - ld [wd265], a - call GetPokemonName - -.no_contest_mon - hlcoord 8, 1 - call PlaceString - ld a, [wContestMon] - and a - jr z, .skip_level - hlcoord 1, 3 - ld de, .LEVEL - call PlaceString - ld a, [wContestMonLevel] - ld h, b - ld l, c - inc hl - ld c, 3 - call Print8BitNumRightAlign - -.skip_level - pop af - ld [Options], a - ret - -.Balls_JP: ; 24c43 - db "ボール こ@" -.CAUGHT: ; 24c4b - db "CAUGHT@" -.Balls_EN: ; 24c52 - db "BALLS:@" -.None: ; 24c59 - db "None@" -.LEVEL: ; 24c5e - db "LEVEL@" - -FindApricornsInBag: ; 24c64 -; Checks the bag for Apricorns. - ld hl, Buffer1 - xor a - ld [hli], a - dec a - ld bc, 10 - call ByteFill - - ld hl, .ApricornBalls -.loop - ld a, [hl] - cp -1 - jr z, .done - push hl - ld [CurItem], a - ld hl, NumItems - call CheckItem - pop hl - jr nc, .nope - ld a, [hl] - call .addtobuffer -.nope - inc hl - inc hl - jr .loop - -.done - ld a, [Buffer1] - and a - ret nz - scf - ret - -.addtobuffer ; 24c94 - push hl - ld hl, Buffer1 - inc [hl] - ld e, [hl] - ld d, 0 - add hl, de - ld [hl], a - pop hl - ret - -.ApricornBalls: ; 24ca0 - db RED_APRICORN, LEVEL_BALL - db BLU_APRICORN, LURE_BALL - db YLW_APRICORN, MOON_BALL - db GRN_APRICORN, FRIEND_BALL - db WHT_APRICORN, FAST_BALL - db BLK_APRICORN, HEAVY_BALL - db PNK_APRICORN, LOVE_BALL - db -1 - +INCLUDE "engine/menu_2.asm" INCLUDE "engine/mon_menu.asm" INCLUDE "battle/menu.asm" INCLUDE "engine/buy_sell_toss.asm" @@ -1278,91 +328,8 @@ _ReturnToBattle_UseBall: ; 2715c call WaitBGMap jp SetPalettes -ConsumeHeldItem: ; 27192 - push hl - push de - push bc - ld a, [hBattleTurn] - and a - ld hl, OTPartyMon1Item - ld de, EnemyMonItem - ld a, [CurOTMon] - jr z, .theirturn - ld hl, PartyMon1Item - ld de, BattleMonItem - ld a, [CurBattleMon] - -.theirturn - push hl - push af - ld a, [de] - ld b, a - callba GetItemHeldEffect - ld hl, .ConsumableEffects -.loop - ld a, [hli] - cp b - jr z, .ok - inc a - jr nz, .loop - pop af - pop hl - pop bc - pop de - pop hl - ret - -.ok - xor a - ld [de], a - pop af - pop hl - call GetPartyLocation - ld a, [hBattleTurn] - and a - jr nz, .ourturn - ld a, [wBattleMode] - dec a - jr z, .done - -.ourturn - ld [hl], $0 - -.done - pop bc - pop de - pop hl - ret - -.ConsumableEffects: ; 271de -; Consumable items? - db HELD_BERRY - db HELD_2 - db HELD_5 - db HELD_HEAL_POISON - db HELD_HEAL_FREEZE - db HELD_HEAL_BURN - db HELD_HEAL_SLEEP - db HELD_HEAL_PARALYZE - db HELD_HEAL_STATUS - db HELD_30 - db HELD_ATTACK_UP - db HELD_DEFENSE_UP - db HELD_SPEED_UP - db HELD_SP_ATTACK_UP - db HELD_SP_DEFENSE_UP - db HELD_ACCURACY_UP - db HELD_EVASION_UP - db HELD_38 - db HELD_71 - db HELD_ESCAPE - db HELD_CRITICAL_UP - db -1 - -MoveEffectsPointers: ; 271f4 +INCLUDE "engine/consume_held_item.asm" INCLUDE "battle/moves/move_effects_pointers.asm" - -MoveEffects: ; 2732e INCLUDE "battle/moves/move_effects.asm" Kurt_SelectQuantity_InterpretJoypad: ; 27a28 @@ -1399,379 +366,14 @@ INCBIN "gfx/battle/dude.2bpp.lz" SECTION "bankB", ROMX INCLUDE "battle/trainer_huds.asm" - INCLUDE "data/trainers/trainer_class_names.asm" - INCLUDE "battle/ai/redundant.asm" - INCLUDE "event/move_deleter.asm" - INCLUDE "engine/mysterygift2.asm" - INCLUDE "engine/tmhm2.asm" - -MoveDescriptions:: ; 2cb52 INCLUDE "battle/moves/move_descriptions.asm" - -GivePokerusAndConvertBerries: ; 2ed44 - call ConvertBerriesToBerryJuice - ld hl, PartyMon1PokerusStatus - ld a, [PartyCount] - ld b, a - ld de, PARTYMON_STRUCT_LENGTH -; Check to see if any of your Pokemon already has Pokerus. -; If so, sample its spread through your party. -; This means that you cannot get Pokerus de novo while -; a party member has an active infection. -.loopMons - ld a, [hl] - and $f - jr nz, .TrySpreadPokerus - add hl, de - dec b - jr nz, .loopMons - -; If we haven't been to Goldenrod City at least once, -; prevent the contraction of Pokerus. - ld hl, StatusFlags2 - bit 6, [hl] - ret z - call Random - ld a, [hRandomAdd] - and a - ret nz - ld a, [hRandomSub] - cp $3 - ret nc ; 3/65536 chance (00 00, 00 01 or 00 02) - ld a, [PartyCount] - ld b, a -.randomMonSelectLoop - call Random - and $7 - cp b - jr nc, .randomMonSelectLoop - ld hl, PartyMon1PokerusStatus - call GetPartyLocation ; get pokerus byte of random mon - ld a, [hl] - and $f0 - ret nz ; if it already has pokerus, do nothing -.randomPokerusLoop ; Simultaneously sample the strain and duration - call Random - and a - jr z, .randomPokerusLoop - ld b, a - and $f0 - jr z, .load_pkrs - ld a, b - and $7 - inc a -.load_pkrs - ld b, a ; this should come before the label - swap b - and $3 - inc a - add b - ld [hl], a - ret - -.TrySpreadPokerus: - call Random - cp 1 + 33 percent - ret nc ; 1/3 chance - - ld a, [PartyCount] - cp 1 - ret z ; only one mon, nothing to do - - ld c, [hl] - ld a, b - cp 2 - jr c, .checkPreviousMonsLoop ; no more mons after this one, go backwards - - call Random - cp 1 + 50 percent - jr c, .checkPreviousMonsLoop ; 1/2 chance, go backwards -.checkFollowingMonsLoop - add hl, de - ld a, [hl] - and a - jr z, .infectMon - ld c, a - and $3 - ret z ; if mon has cured pokerus, stop searching - dec b ; go on to next mon - ld a, b - cp 1 - jr nz, .checkFollowingMonsLoop ; no more mons left - ret - -.checkPreviousMonsLoop - ld a, [PartyCount] - cp b - ret z ; no more mons - ld a, l - sub e - ld l, a - ld a, h - sbc d - ld h, a - ld a, [hl] - and a - jr z, .infectMon - ld c, a - and $3 - ret z ; if mon has cured pokerus, stop searching - inc b ; go on to next mon - jr .checkPreviousMonsLoop - -.infectMon - ld a, c - and $f0 - ld b, a - ld a, c - swap a - and $3 - inc a - add b - ld [hl], a - ret - -; any berry held by a Shuckle may be converted to berry juice -ConvertBerriesToBerryJuice: ; 2ede6 - ld hl, StatusFlags2 - bit 6, [hl] - ret z - call Random - cp $10 - ret nc ; 1/16 chance - ld hl, PartyMons - ld a, [PartyCount] -.partyMonLoop - push af - push hl - ld a, [hl] - cp SHUCKLE - jr nz, .loopMon - ld bc, MON_ITEM - add hl, bc - ld a, [hl] - cp BERRY - jr z, .convertToJuice - -.loopMon - pop hl - ld bc, PARTYMON_STRUCT_LENGTH - add hl, bc - pop af - dec a - jr nz, .partyMonLoop - ret - -.convertToJuice - ld a, BERRY_JUICE - ld [hl], a - pop hl - pop af - ret - -ShowLinkBattleParticipants: ; 2ee18 -; If we're not in a communications room, -; we don't need to be here. - ld a, [wLinkMode] - and a - ret z - - callba _ShowLinkBattleParticipants - ld c, 150 - call DelayFrames - call ClearTileMap - call ClearSprites - ret - -FindFirstAliveMonAndStartBattle: ; 2ee2f - xor a - ld [hMapAnims], a - call DelayFrame - ld b, 6 - ld hl, PartyMon1HP - ld de, PARTYMON_STRUCT_LENGTH - 1 - -.loop - ld a, [hli] - or [hl] - jr nz, .okay - add hl, de - dec b - jr nz, .loop - -.okay - ld de, MON_LEVEL - MON_HP - add hl, de - ld a, [hl] - ld [BattleMonLevel], a - predef Predef_StartBattle - callba _LoadBattleFontsHPBar - ld a, 1 - ld [hBGMapMode], a - call ClearSprites - call ClearTileMap - xor a - ld [hBGMapMode], a - ld [hWY], a - ld [rWY], a - ld [hMapAnims], a - ret - -PlayBattleMusic: ; 2ee6c - - push hl - push de - push bc - - xor a - ld [MusicFade], a - ld de, MUSIC_NONE - call PlayMusic - call DelayFrame - call MaxVolume - - ld a, [BattleType] - cp BATTLETYPE_SUICUNE - ld de, MUSIC_SUICUNE_BATTLE - jp z, .done - cp BATTLETYPE_ROAMING - jp z, .done - - ; Are we fighting a trainer? - ld a, [OtherTrainerClass] - and a - jr nz, .trainermusic - - callba RegionCheck - ld a, e - and a - jr nz, .kantowild - - ld de, MUSIC_JOHTO_WILD_BATTLE - ld a, [TimeOfDay] - cp NITE_F - jr nz, .done - ld de, MUSIC_JOHTO_WILD_BATTLE_NIGHT - jr .done - -.kantowild - ld de, MUSIC_KANTO_WILD_BATTLE - jr .done - -.trainermusic - ld de, MUSIC_CHAMPION_BATTLE - cp CHAMPION - jr z, .done - cp RED - jr z, .done - - ; really, they should have included admins and scientists here too... - ld de, MUSIC_ROCKET_BATTLE - cp GRUNTM - jr z, .done - cp GRUNTF - jr z, .done - - ld de, MUSIC_KANTO_GYM_LEADER_BATTLE - callba IsKantoGymLeader - jr c, .done - - ld de, MUSIC_JOHTO_GYM_LEADER_BATTLE - callba IsJohtoGymLeader - jr c, .done - - ld de, MUSIC_RIVAL_BATTLE - ld a, [OtherTrainerClass] - cp RIVAL1 - jr z, .done - cp RIVAL2 - jr nz, .othertrainer - - ld a, [OtherTrainerID] - cp RIVAL2_2_CHIKORITA ; Rival in Indigo Plateau - jr c, .done - ld de, MUSIC_CHAMPION_BATTLE - jr .done - -.othertrainer - ld a, [wLinkMode] - and a - jr nz, .johtotrainer - - callba RegionCheck - ld a, e - and a - jr nz, .kantotrainer - -.johtotrainer - ld de, MUSIC_JOHTO_TRAINER_BATTLE - jr .done - -.kantotrainer - ld de, MUSIC_KANTO_TRAINER_BATTLE - -.done - call PlayMusic - - pop bc - pop de - pop hl - ret - -ClearBattleRAM: ; 2ef18 - xor a - ld [wPlayerAction], a - ld [wBattleResult], a - - ld hl, wPartyMenuCursor - ld [hli], a - ld [hli], a - ld [hli], a - ld [hl], a - - ld [wMenuScrollPosition], a - ld [CriticalHit], a - ld [BattleMonSpecies], a - ld [wBattleParticipantsNotFainted], a - ld [CurBattleMon], a - ld [wForcedSwitch], a - ld [TimeOfDayPal], a - ld [PlayerTurnsTaken], a - ld [EnemyTurnsTaken], a - ld [EvolvableFlags], a - - ld hl, PlayerHPPal - ld [hli], a - ld [hl], a - - ld hl, BattleMonDVs - ld [hli], a - ld [hl], a - - ld hl, EnemyMonDVs - ld [hli], a - ld [hl], a - -; Clear the entire BattleMons area - ld hl, wBattle - ld bc, wBattleEnd - wBattle - xor a - call ByteFill - - callab ResetEnemyStatLevels - - call ClearWindowData - - ld hl, hBGMapAddress - xor a - ld [hli], a - ld [hl], VBGMap0 / $100 - ret +INCLUDE "engine/pokerus.asm" +INCLUDE "engine/start_battle.asm" PlaceGraphic: ; 2ef6e ; Fill wBoxAlignment-aligned box width b height c @@ -1894,128 +496,14 @@ PackFGFXPointers: ; 48e93 PackFGFX: ; 48e9b INCBIN "gfx/pack/pack_f.2bpp" -Special_MoveTutor: ; 4925b - call FadeToMenu - call ClearBGPalettes - call ClearScreen - call DelayFrame - ld b, SCGB_PACKPALS - call GetSGBLayout - xor a - ld [wItemAttributeParamBuffer], a - call .GetMoveTutorMove - ld [wd265], a - ld [wPutativeTMHMMove], a - call GetMoveName - call CopyName1 - callba ChooseMonToLearnTMHM - jr c, .cancel - jr .enter_loop - -.loop - callba ChooseMonToLearnTMHM_NoRefresh - jr c, .cancel -.enter_loop - call CheckCanLearnMoveTutorMove - jr nc, .loop - xor a - ld [ScriptVar], a - jr .quit - -.cancel - ld a, -1 - ld [ScriptVar], a -.quit - call CloseSubmenu - ret - -.GetMoveTutorMove: ; 492a5 - ld a, [ScriptVar] - cp 1 - jr z, .flamethrower - cp 2 - jr z, .thunderbolt - ld a, ICE_BEAM - ret - -.flamethrower - ld a, FLAMETHROWER - ret - -.thunderbolt - ld a, THUNDERBOLT - ret - -CheckCanLearnMoveTutorMove: ; 492b9 - ld hl, .MenuDataHeader - call LoadMenuDataHeader - - predef CanLearnTMHMMove - - push bc - ld a, [CurPartyMon] - ld hl, PartyMonNicknames - call GetNick - pop bc - - ld a, c - and a - jr nz, .can_learn - push de - ld de, SFX_WRONG - call PlaySFX - pop de - ld a, BANK(Text_TMHMNotCompatible) - ld hl, Text_TMHMNotCompatible - call FarPrintText - jr .didnt_learn - -.can_learn - callab KnowsMove - jr c, .didnt_learn - - predef LearnMove - ld a, b - and a - jr z, .didnt_learn - - ld c, HAPPINESS_LEARNMOVE - callab ChangeHappiness - jr .learned - -.didnt_learn - call ExitMenu - and a - ret - -.learned - call ExitMenu - scf - ret - -.MenuDataHeader: ; 0x4930a - db $40 ; flags - db 12, 00 ; start coords - db 17, 19 ; end coords - +INCLUDE "event/move_tutor.asm" INCLUDE "engine/crystal_colors.asm" - -Unknown_4985a: ; unreferenced - db $ab, $03, $57, $24, $ac, $0e, $13, $32 - db $be, $30, $5b, $4c, $47, $60, $ed, $f2 - db $ab, $03, $55, $26, $aa, $0a, $13, $3a - db $be, $28, $33, $24, $6e, $71, $df, $b0 - db $a8, $00, $e5, $e0, $9a, $fc, $f4, $2c - db $fe, $4c, $a3, $5e, $c6, $3a, $ab, $4d - db $a8, $00, $b5, $b0, $de, $e8, $fc, $1c - db $ba, $66, $f7, $0e, $ba, $5e, $43, $bd - INCLUDE "event/celebi.asm" INCLUDE "engine/main_menu.asm" INCLUDE "mobile/mobile_menu.asm" INCLUDE "engine/search.asm" + ; mobile battle selection INCLUDE "mobile/mobile_12_2.asm" -; mobile battle selection AskRememberPassword: ; 4ae12 call .DoMenu @@ -2079,93 +567,7 @@ Buena_ExitMenu: ; 4ae5e SECTION "bank13", ROMX -SwapTextboxPalettes:: ; 4c000 - hlcoord 0, 0 - decoord 0, 0, AttrMap - ld b, SCREEN_HEIGHT -.loop - push bc - ld c, SCREEN_WIDTH -.innerloop - ld a, [hl] - push hl - srl a - jr c, .UpperNybble - ld hl, TilesetPalettes - add [hl] - ld l, a - ld a, [TilesetPalettes + 1] - adc $0 - ld h, a - ld a, [hl] - and $f - jr .next - -.UpperNybble: - ld hl, TilesetPalettes - add [hl] - ld l, a - ld a, [TilesetPalettes + 1] - adc $0 - ld h, a - ld a, [hl] - swap a - and $f - -.next - pop hl - ld [de], a - res 7, [hl] - inc hl - inc de - dec c - jr nz, .innerloop - pop bc - dec b - jr nz, .loop - ret - -ScrollBGMapPalettes:: ; 4c03f - ld hl, BGMapBuffer - ld de, BGMapPalBuffer -.loop - ld a, [hl] - push hl - srl a - jr c, .UpperNybble - -; .LowerNybble - ld hl, TilesetPalettes - add [hl] - ld l, a - ld a, [TilesetPalettes + 1] - adc $0 - ld h, a - ld a, [hl] - and $f - jr .next - -.UpperNybble: - ld hl, TilesetPalettes - add [hl] - ld l, a - ld a, [TilesetPalettes + 1] - adc $0 - ld h, a - ld a, [hl] - swap a - and $f - -.next - pop hl - ld [de], a - res 7, [hl] - inc hl - inc de - dec c - jr nz, .loop - ret - +INCLUDE "engine/map_palettes.asm" INCLUDE "tilesets/palette_maps.asm" Unknown_4ce05: ; unreferenced @@ -2514,7 +916,6 @@ LinkTextbox2: ; 4d35b ret INCLUDE "engine/delete_save_change_clock.asm" - INCLUDE "tilesets/tileset_headers.asm" FlagPredef: ; 4d7c1 @@ -2653,567 +1054,11 @@ CheckPokerus: ; 4d860 scf ret -Special_CheckForLuckyNumberWinners: ; 4d87a - xor a - ld [ScriptVar], a - ld [wFoundMatchingIDInParty], a - ld a, [PartyCount] - and a - ret z - ld d, a - ld hl, PartyMon1ID - ld bc, PartySpecies -.PartyLoop: - ld a, [bc] - inc bc - cp EGG - call nz, .CompareLuckyNumberToMonID - push bc - ld bc, PARTYMON_STRUCT_LENGTH - add hl, bc - pop bc - dec d - jr nz, .PartyLoop - ld a, BANK(sBox) - call GetSRAMBank - ld a, [sBoxCount] - and a - jr z, .SkipOpenBox - ld d, a - ld hl, sBoxMon1ID - ld bc, sBoxSpecies -.OpenBoxLoop: - ld a, [bc] - inc bc - cp EGG - jr z, .SkipOpenBoxMon - call .CompareLuckyNumberToMonID - jr nc, .SkipOpenBoxMon - ld a, 1 - ld [wFoundMatchingIDInParty], a - -.SkipOpenBoxMon: - push bc - ld bc, BOXMON_STRUCT_LENGTH - add hl, bc - pop bc - dec d - jr nz, .OpenBoxLoop - -.SkipOpenBox: - call CloseSRAM - ld c, $0 -.BoxesLoop: - ld a, [wCurBox] - and $f - cp c - jr z, .SkipBox - ld hl, .BoxBankAddresses - ld b, 0 - add hl, bc - add hl, bc - add hl, bc - ld a, [hli] - call GetSRAMBank - ld a, [hli] - ld h, [hl] - ld l, a ; hl now contains the address of the loaded box in SRAM - ld a, [hl] - and a - jr z, .SkipBox ; no mons in this box - push bc - ld b, h - ld c, l - inc bc - ld de, sBoxMon1ID - sBox - add hl, de - ld d, a -.BoxNLoop: - ld a, [bc] - inc bc - cp EGG - jr z, .SkipBoxMon - - call .CompareLuckyNumberToMonID ; sets ScriptVar and CurPartySpecies appropriately - jr nc, .SkipBoxMon - ld a, 1 - ld [wFoundMatchingIDInParty], a - -.SkipBoxMon: - push bc - ld bc, BOXMON_STRUCT_LENGTH - add hl, bc - pop bc - dec d - jr nz, .BoxNLoop - pop bc - -.SkipBox: - inc c - ld a, c - cp NUM_BOXES - jr c, .BoxesLoop - - call CloseSRAM - ld a, [ScriptVar] - and a - ret z ; found nothing - callba TrainerRankings_LuckyNumberShow - ld a, [wFoundMatchingIDInParty] - and a - push af - ld a, [CurPartySpecies] - ld [wNamedObjectIndexBuffer], a - call GetPokemonName - ld hl, .FoundPartymonText - pop af - jr z, .print - ld hl, .FoundBoxmonText - -.print - jp PrintText - -.CompareLuckyNumberToMonID: ; 4d939 - push bc - push de - push hl - ld d, h - ld e, l - ld hl, Buffer1 - lb bc, PRINTNUM_LEADINGZEROS | 2, 5 - call PrintNum - ld hl, LuckyNumberDigit1Buffer - ld de, wLuckyIDNumber - lb bc, PRINTNUM_LEADINGZEROS | 2, 5 - call PrintNum - ld b, 5 - ld c, 0 - ld hl, LuckyNumberDigit5Buffer - ld de, Buffer5 -.loop - ld a, [de] - cp [hl] - jr nz, .done - dec de - dec hl - inc c - dec b - jr nz, .loop - -.done - pop hl - push hl - ld de, -6 - add hl, de - ld a, [hl] - pop hl - pop de - push af - ld a, c - ld b, 1 - cp 5 - jr z, .okay - ld b, 2 - cp 3 - jr nc, .okay - ld b, 3 - cp 2 - jr nz, .nomatch - -.okay - inc b - ld a, [ScriptVar] - and a - jr z, .bettermatch - cp b - jr c, .nomatch - -.bettermatch - dec b - ld a, b - ld [ScriptVar], a - pop bc - ld a, b - ld [CurPartySpecies], a - pop bc - scf - ret - -.nomatch - pop bc - pop bc - and a - ret - -.BoxBankAddresses: ; 4d99f - 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 - -.FoundPartymonText: ; 0x4d9c9 - ; Congratulations! We have a match with the ID number of @ in your party. - text_jump UnknownText_0x1c1261 - db "@" - -.FoundBoxmonText: ; 0x4d9ce - ; Congratulations! We have a match with the ID number of @ in your PC BOX. - text_jump UnknownText_0x1c12ae - db "@" - -Special_PrintTodaysLuckyNumber: ; 4d9d3 - ld hl, StringBuffer3 - ld de, wLuckyIDNumber - lb bc, PRINTNUM_LEADINGZEROS | 2, 5 - call PrintNum - ld a, "@" - ld [StringBuffer3 + 5], a - ret - -CheckPartyFullAfterContest: ; 4d9e5 - ld a, [wContestMon] - and a - jp z, .DidntCatchAnything - ld [CurPartySpecies], a - ld [CurSpecies], a - call GetBaseData - ld hl, PartyCount - ld a, [hl] - cp 6 - jp nc, .TryAddToBox - inc a - ld [hl], a - ld c, a - ld b, $0 - add hl, bc - ld a, [wContestMon] - ld [hli], a - ld [CurSpecies], a - ld a, $ff - ld [hl], a - ld hl, PartyMon1Species - ld a, [PartyCount] - dec a - ld bc, PARTYMON_STRUCT_LENGTH - call AddNTimes - ld d, h - ld e, l - ld hl, wContestMon - ld bc, PARTYMON_STRUCT_LENGTH - call CopyBytes - ld a, [PartyCount] - dec a - ld hl, PartyMonOT - call SkipNames - ld d, h - ld e, l - ld hl, PlayerName - call CopyBytes - ld a, [CurPartySpecies] - ld [wd265], a - call GetPokemonName - ld hl, StringBuffer1 - ld de, wMonOrItemNameBuffer - ld bc, PKMN_NAME_LENGTH - call CopyBytes - call GiveANickname_YesNo - jr c, .Party_SkipNickname - ld a, [PartyCount] - dec a - ld [CurPartyMon], a - xor a - ld [MonType], a - ld de, wMonOrItemNameBuffer - callab InitNickname - -.Party_SkipNickname: - ld a, [PartyCount] - dec a - ld hl, PartyMonNicknames - call SkipNames - ld d, h - ld e, l - ld hl, wMonOrItemNameBuffer - call CopyBytes - ld a, [PartyCount] - dec a - ld hl, PartyMon1Level - call GetPartyLocation - ld a, [hl] - ld [CurPartyLevel], a - call SetCaughtData - ld a, [PartyCount] - dec a - ld hl, PartyMon1CaughtLocation - call GetPartyLocation - ld a, [hl] - and $80 - ld b, $13 - or b - ld [hl], a - xor a - ld [wContestMon], a - and a - ld [ScriptVar], a - ret - -.TryAddToBox: ; 4daa3 - ld a, BANK(sBoxCount) - call GetSRAMBank - ld hl, sBoxCount - ld a, [hl] - cp MONS_PER_BOX - call CloseSRAM - jr nc, .BoxFull - xor a - ld [CurPartyMon], a - ld hl, wContestMon - ld de, wBufferMon - ld bc, BOXMON_STRUCT_LENGTH - call CopyBytes - ld hl, PlayerName - ld de, wBufferMonOT - ld bc, NAME_LENGTH - call CopyBytes - callab InsertPokemonIntoBox - ld a, [CurPartySpecies] - ld [wd265], a - call GetPokemonName - call GiveANickname_YesNo - ld hl, StringBuffer1 - jr c, .Box_SkipNickname - ld a, BOXMON - ld [MonType], a - ld de, wMonOrItemNameBuffer - callab InitNickname - ld hl, wMonOrItemNameBuffer - -.Box_SkipNickname: - ld a, BANK(sBoxMonNicknames) - call GetSRAMBank - ld de, sBoxMonNicknames - ld bc, PKMN_NAME_LENGTH - call CopyBytes - call CloseSRAM - -.BoxFull: - ld a, BANK(sBoxMon1Level) - call GetSRAMBank - ld a, [sBoxMon1Level] - ld [CurPartyLevel], a - call CloseSRAM - call SetBoxMonCaughtData - ld a, BANK(sBoxMon1CaughtLocation) - call GetSRAMBank - ld hl, sBoxMon1CaughtLocation - ld a, [hl] - and $80 - ld b, $13 - or b - ld [hl], a - call CloseSRAM - xor a - ld [wContestMon], a - ld a, $1 - ld [ScriptVar], a - ret - -.DidntCatchAnything: ; 4db35 - ld a, $2 - ld [ScriptVar], a - ret - -GiveANickname_YesNo: ; 4db3b - ld hl, TextJump_GiveANickname - call PrintText - jp YesNoBox - -TextJump_GiveANickname: ; 0x4db44 - ; Give a nickname to the @ you received? - text_jump UnknownText_0x1c12fc - db "@" - -SetCaughtData: ; 4db49 - ld a, [PartyCount] - dec a - ld hl, PartyMon1CaughtLevel - call GetPartyLocation -SetBoxmonOrEggmonCaughtData: ; 4db53 - ld a, [TimeOfDay] - inc a - rrca - rrca - ld b, a - ld a, [CurPartyLevel] - or b - ld [hli], a - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a - cp MAP_POKECENTER_2F - jr nz, .NotPokecenter2F - ld a, b - cp GROUP_POKECENTER_2F - jr nz, .NotPokecenter2F - - ld a, [BackupMapGroup] - ld b, a - ld a, [BackupMapNumber] - ld c, a - -.NotPokecenter2F: - call GetWorldMapLocation - ld b, a - ld a, [PlayerGender] - rrca - or b - ld [hl], a - ret - -SetBoxMonCaughtData: ; 4db83 - ld a, BANK(sBoxMon1CaughtLevel) - call GetSRAMBank - ld hl, sBoxMon1CaughtLevel - call SetBoxmonOrEggmonCaughtData - call CloseSRAM - ret - -SetGiftBoxMonCaughtData: ; 4db92 - push bc - ld a, BANK(sBoxMon1CaughtLevel) - call GetSRAMBank - ld hl, sBoxMon1CaughtLevel - pop bc - call SetGiftMonCaughtData - call CloseSRAM - ret - -SetGiftPartyMonCaughtData: ; 4dba3 - ld a, [PartyCount] - dec a - ld hl, PartyMon1CaughtLevel - push bc - call GetPartyLocation - pop bc -SetGiftMonCaughtData: ; 4dbaf - xor a - ld [hli], a - ld a, $7e - rrc b - or b - ld [hl], a - ret - -SetEggMonCaughtData: ; 4dbb8 (13:5bb8) - ld a, [CurPartyMon] - ld hl, PartyMon1CaughtLevel - call GetPartyLocation - ld a, [CurPartyLevel] - push af - ld a, $1 - ld [CurPartyLevel], a - call SetBoxmonOrEggmonCaughtData - pop af - ld [CurPartyLevel], a - ret - +INCLUDE "event/lucky_number.asm" +INCLUDE "engine/caught_data.asm" INCLUDE "engine/search2.asm" - INCLUDE "engine/stats_screen.asm" - -CatchTutorial:: ; 4e554 - ld a, [BattleType] - dec a - ld c, a - ld hl, .dw - ld b, 0 - add hl, bc - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -.dw ; 4e564 (13:6564) - dw .DudeTutorial - dw .DudeTutorial - dw .DudeTutorial - -.DudeTutorial: ; 4e56a (13:656a) -; Back up your name to your Mom's name. - ld hl, PlayerName - ld de, MomsName - ld bc, NAME_LENGTH - call CopyBytes -; Copy Dude's name to your name - ld hl, .Dude - ld de, PlayerName - ld bc, NAME_LENGTH - call CopyBytes - - call .LoadDudeData - - xor a - ld [hJoyDown], a - ld [hJoyPressed], a - ld a, [Options] - push af - and $f8 - add $3 - ld [Options], a - ld hl, .AutoInput - ld a, BANK(.AutoInput) - call StartAutoInput - callab StartBattle - call StopAutoInput - pop af - - ld [Options], a - ld hl, MomsName - ld de, PlayerName - ld bc, NAME_LENGTH - call CopyBytes - ret - -.LoadDudeData: ; 4e5b7 (13:65b7) - ld hl, wDudeNumItems - ld [hl], 1 - inc hl - ld [hl], POTION - inc hl - ld [hl], 1 - inc hl - ld [hl], -1 - ld hl, wDudeNumKeyItems - ld [hl], 0 - inc hl - ld [hl], -1 - ld hl, wDudeNumBalls - ld a, 1 - ld [hli], a - ld a, POKE_BALL ; 5 - ld [hli], a - ld [hli], a - ld [hl], -1 - ret - -.Dude: ; 4e5da - db "DUDE@" - -.AutoInput: ; 4e5df - db NO_INPUT, $ff ; end - +INCLUDE "event/catch_tutorial.asm" INCLUDE "engine/evolution_animation.asm" InitDisplayForHallOfFame: ; 4e881 @@ -3342,7 +1187,6 @@ GetMobileOTTrainerClass: ; mobile function ret INCLUDE "data/trainers/gendered_trainers.asm" - INCLUDE "battle/sliding_intro.asm" Mobile_PrintOpponentBattleMessage: ; 4ea0a @@ -3425,7 +1269,6 @@ CheckBattleScene: ; 4ea44 ret INCLUDE "engine/gbc_only.asm" - INCLUDE "event/poke_seer.asm" @@ -3568,586 +1411,8 @@ GetPkmnSpecies: ; 508d5 ret INCLUDE "text/types.asm" - -Function50a28: ; 50a28 -; XXX - ld hl, .Strings - ld a, [TrainerClass] - dec a - ld c, a - ld b, 0 - add hl, bc - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - ld de, StringBuffer1 -.copy - ld a, [hli] - ld [de], a - inc de - cp "@" - jr nz, .copy - ret - -.Strings: ; 50a42 -; Untranslated trainer class names from Red. - dw .Youngster - dw .BugCatcher - dw .Lass - dw OTClassName - dw .JrTrainerM - dw .JrTrainerF - dw .Pokemaniac - dw .SuperNerd - dw OTClassName - dw OTClassName - dw .Burglar - dw .Engineer - dw .Jack - dw OTClassName - dw .Swimmer - dw OTClassName - dw OTClassName - dw .Beauty - dw OTClassName - dw .Rocker - dw .Juggler - dw OTClassName - dw OTClassName - dw .Blackbelt - dw OTClassName - dw .ProfOak - dw .Chief - dw .Scientist - dw OTClassName - dw .Rocket - dw .CooltrainerM - dw .CooltrainerF - dw OTClassName - dw OTClassName - dw OTClassName - dw OTClassName - dw OTClassName - dw OTClassName - dw OTClassName - dw OTClassName - dw OTClassName - dw OTClassName - dw OTClassName - dw OTClassName - dw OTClassName - dw OTClassName - dw OTClassName - -.Youngster: db "たんパン@" -.BugCatcher: db "むしとり@" -.Lass: db "ミニスカ@" -.JrTrainerM: db "ボーイ@" -.JrTrainerF: db "ガール@" -.Pokemaniac: db "マニア@" -.SuperNerd: db "りかけい@" -.Burglar: db "どろぼう@" -.Engineer: db "ォヤジ@" -.Jack: db "ジャック@" -.Swimmer: db "かいパン@" -.Beauty: db "おねえさん@" -.Rocker: db "グループ@" -.Juggler: db "ジャグラー@" -.Blackbelt: db "からて@" -.ProfOak: db "ォーキド@" -.Chief: db "チーフ@" -.Scientist: db "けんきゅういん@" -.Rocket: db "だんいん@" -.CooltrainerM: db "エりート♂@" -.CooltrainerF: db "エりート♀@" - -DrawPlayerHP: ; 50b0a - ld a, $1 - jr DrawHP - -DrawEnemyHP: ; 50b0e - ld a, $2 - -DrawHP: ; 50b10 - ld [wWhichHPBar], a - push hl - push bc - ; box mons have full HP - ld a, [MonType] - cp BOXMON - jr z, .at_least_1_hp - - ld a, [TempMonHP] - ld b, a - ld a, [TempMonHP + 1] - ld c, a - -; Any HP? - or b - jr nz, .at_least_1_hp - - xor a - ld c, a - ld e, a - ld a, 6 - ld d, a - jp .fainted - -.at_least_1_hp - ld a, [TempMonMaxHP] - ld d, a - ld a, [TempMonMaxHP + 1] - ld e, a - ld a, [MonType] - cp BOXMON - jr nz, .not_boxmon - - ld b, d - ld c, e - -.not_boxmon - predef ComputeHPBarPixels - ld a, 6 - ld d, a - ld c, a - -.fainted - ld a, c - pop bc - ld c, a - pop hl - push de - push hl - push hl - call DrawBattleHPBar - pop hl - -; Print HP - bccoord 1, 1, 0 - add hl, bc - ld de, TempMonHP - ld a, [MonType] - cp BOXMON - jr nz, .not_boxmon_2 - ld de, TempMonMaxHP -.not_boxmon_2 - lb bc, 2, 3 - call PrintNum - - ld a, "/" - ld [hli], a - -; Print max HP - ld de, TempMonMaxHP - lb bc, 2, 3 - call PrintNum - pop hl - pop de - ret - -PrintTempMonStats: ; 50b7b -; Print TempMon's stats at hl, with spacing bc. - push bc - push hl - ld de, .StatNames - call PlaceString - pop hl - pop bc - add hl, bc - ld bc, SCREEN_WIDTH - add hl, bc - ld de, TempMonAttack - lb bc, 2, 3 - call .PrintStat - ld de, TempMonDefense - call .PrintStat - ld de, TempMonSpclAtk - call .PrintStat - ld de, TempMonSpclDef - call .PrintStat - ld de, TempMonSpeed - jp PrintNum - -.PrintStat: ; 50bab - push hl - call PrintNum - pop hl - ld de, SCREEN_WIDTH * 2 - add hl, de - ret - -.StatNames: ; 50bb5 - db "ATTACK" - next "DEFENSE" - next "SPCL.ATK" - next "SPCL.DEF" - next "SPEED" - next "@" - -GetGender: ; 50bdd -; Return the gender of a given monster (CurPartyMon/CurOTMon/CurWildMon). -; When calling this function, a should be set to an appropriate MonType value. - -; return values: -; a = 1: f = nc|nz; male -; a = 0: f = nc|z; female -; f = c: genderless - -; This is determined by comparing the Attack and Speed DVs -; with the species' gender ratio. - -; Figure out what type of monster struct we're looking at. - -; 0: PartyMon - ld hl, PartyMon1DVs - ld bc, PARTYMON_STRUCT_LENGTH - ld a, [MonType] - and a - jr z, .PartyMon - -; 1: OTPartyMon - ld hl, OTPartyMon1DVs - dec a - jr z, .PartyMon - -; 2: sBoxMon - ld hl, sBoxMon1DVs - ld bc, BOXMON_STRUCT_LENGTH - dec a - jr z, .sBoxMon - -; 3: Unknown - ld hl, TempMonDVs - dec a - jr z, .DVs - -; else: WildMon - ld hl, EnemyMonDVs - jr .DVs - -; Get our place in the party/box. - -.PartyMon: -.sBoxMon - ld a, [CurPartyMon] - call AddNTimes - -.DVs: - -; sBoxMon data is read directly from SRAM. - ld a, [MonType] - cp BOXMON - ld a, 1 - call z, GetSRAMBank - -; Attack DV - ld a, [hli] - and $f0 - ld b, a -; Speed DV - ld a, [hl] - and $f0 - swap a - -; Put our DVs together. - or b - ld b, a - -; Close SRAM if we were dealing with a sBoxMon. - ld a, [MonType] - cp BOXMON - call z, CloseSRAM - -; We need the gender ratio to do anything with this. - push bc - ld a, [CurPartySpecies] - dec a - ld hl, BaseData + BASE_GENDER - ld bc, BASE_DATA_SIZE - call AddNTimes - pop bc - - ld a, BANK(BaseData) - call GetFarByte - -; The higher the ratio, the more likely the monster is to be female. - - cp GENDERLESS - jr z, .Genderless - - and a ; GENDER_F0? - jr z, .Male - - cp GENDER_F100 - jr z, .Female - -; Values below the ratio are male, and vice versa. - cp b - jr c, .Male - -.Female: - xor a - ret - -.Male: - ld a, 1 - and a - ret - -.Genderless: - scf - ret - -ListMovePP: ; 50c50 - ld a, [wNumMoves] - inc a - ld c, a - ld a, NUM_MOVES - sub c - ld b, a - push hl - ld a, [Buffer1] - ld e, a - ld d, $0 - ld a, $3e ; P - call .load_loop - ld a, b - and a - jr z, .skip - ld c, a - ld a, "-" - call .load_loop - -.skip - pop hl - inc hl - inc hl - inc hl - ld d, h - ld e, l - ld hl, TempMonMoves - ld b, 0 -.loop - ld a, [hli] - and a - jr z, .done - push bc - push hl - push de - ld hl, wMenuCursorY - ld a, [hl] - push af - ld [hl], b - push hl - callab GetMaxPPOfMove - pop hl - pop af - ld [hl], a - pop de - pop hl - push hl - ld bc, TempMonPP - (TempMonMoves + 1) - add hl, bc - ld a, [hl] - and $3f - ld [StringBuffer1 + 4], a - ld h, d - ld l, e - push hl - ld de, StringBuffer1 + 4 - lb bc, 1, 2 - call PrintNum - ld a, "/" - ld [hli], a - ld de, wd265 - lb bc, 1, 2 - call PrintNum - pop hl - ld a, [Buffer1] - ld e, a - ld d, 0 - add hl, de - ld d, h - ld e, l - pop hl - pop bc - inc b - ld a, b - cp NUM_MOVES - jr nz, .loop - -.done - ret - -.load_loop ; 50cc9 - ld [hli], a - ld [hld], a - add hl, de - dec c - jr nz, .load_loop - ret - -Function50cd0: ; 50cd0 -; XXX -.loop - ld [hl], $32 - inc hl - ld [hl], $3e - dec hl - add hl, de - dec c - jr nz, .loop - ret - -Predef22: ; unreferenced predef - push hl - push hl - ld hl, PartyMonNicknames - ld a, [CurPartyMon] - call GetNick - pop hl - call PlaceString - call CopyPkmnToTempMon - pop hl - ld a, [CurPartySpecies] - cp EGG - jr z, .egg - push hl - ld bc, -12 - add hl, bc - ld b, $0 - call DrawEnemyHP - pop hl - ld bc, 5 - add hl, bc - push de - call PrintLevel - pop de - -.egg - ret - -PlaceStatusString: ; 50d0a - push de - inc de - inc de - ld a, [de] - ld b, a - inc de - ld a, [de] - or b - pop de - jr nz, PlaceNonFaintStatus - push de - ld de, FntString - call CopyStatusString - pop de - ld a, $1 - and a - ret - -FntString: ; 50d22 - db "FNT@" - -CopyStatusString: ; 50d25 - ld a, [de] - inc de - ld [hli], a - ld a, [de] - inc de - ld [hli], a - ld a, [de] - ld [hl], a - ret - -PlaceNonFaintStatus: ; 50d2e - push de - ld a, [de] - ld de, PsnString - bit PSN, a - jr nz, .place - ld de, BrnString - bit BRN, a - jr nz, .place - ld de, FrzString - bit FRZ, a - jr nz, .place - ld de, ParString - bit PAR, a - jr nz, .place - ld de, SlpString - and SLP - jr z, .no_status - -.place - call CopyStatusString - ld a, $1 - and a - -.no_status - pop de - ret - -SlpString: db "SLP@" -PsnString: db "PSN@" -BrnString: db "BRN@" -FrzString: db "FRZ@" -ParString: db "PAR@" - -ListMoves: ; 50d6f -; List moves at hl, spaced every [Buffer1] tiles. - ld de, wListMoves_MoveIndicesBuffer - ld b, $0 -.moves_loop - ld a, [de] - inc de - and a - jr z, .no_more_moves - push de - push hl - push hl - ld [CurSpecies], a - ld a, MOVE_NAME - ld [wNamedObjectTypeBuffer], a - call GetName - ld de, StringBuffer1 - pop hl - push bc - call PlaceString - pop bc - ld a, b - ld [wNumMoves], a - inc b - pop hl - push bc - ld a, [Buffer1] - ld c, a - ld b, 0 - add hl, bc - pop bc - pop de - ld a, b - cp NUM_MOVES - jr z, .done - jr .moves_loop - -.no_more_moves - ld a, b -.nonmove_loop - push af - ld [hl], "-" - ld a, [Buffer1] - ld c, a - ld b, 0 - add hl, bc - pop af - inc a - cp NUM_MOVES - jr nz, .nonmove_loop - -.done - ret +INCLUDE "text/unused_gen_1_trainers.asm" +INCLUDE "engine/mon_stats.asm" InitList: ; 50db9 ld a, [wInitListType] @@ -4204,168 +1469,7 @@ InitList: ; 50db9 ld [wItemAttributesPtr + 1], a ret -CalcLevel: ; 50e1b - ld a, [TempMonSpecies] - ld [CurSpecies], a - call GetBaseData - ld d, 1 -.next_level - inc d - ld a, d - cp (MAX_LEVEL + 1) % $100 - jr z, .got_level - call CalcExpAtLevel - push hl - ld hl, TempMonExp + 2 - ld a, [hProduct + 3] - ld c, a - ld a, [hld] - sub c - ld a, [hProduct + 2] - ld c, a - ld a, [hld] - sbc c - ld a, [hProduct + 1] - ld c, a - ld a, [hl] - sbc c - pop hl - jr nc, .next_level - -.got_level - dec d - ret - -CalcExpAtLevel: ; 50e47 -; (a/b)*n**3 + c*n**2 + d*n - e - ld a, [BaseGrowthRate] - add a - add a - ld c, a - ld b, 0 - ld hl, GrowthRates - add hl, bc -; Cube the level - call .LevelSquared - ld a, d - ld [hMultiplier], a - call Multiply - -; Multiply by a - ld a, [hl] - and $f0 - swap a - ld [hMultiplier], a - call Multiply -; Divide by b - ld a, [hli] - and $f - ld [hDivisor], a - ld b, 4 - call Divide -; Push the cubic term to the stack - ld a, [hQuotient + 0] - push af - ld a, [hQuotient + 1] - push af - ld a, [hQuotient + 2] - push af -; Square the level and multiply by the lower 7 bits of c - call .LevelSquared - ld a, [hl] - and $7f - ld [hMultiplier], a - call Multiply -; Push the absolute value of the quadratic term to the stack - ld a, [hProduct + 1] - push af - ld a, [hProduct + 2] - push af - ld a, [hProduct + 3] - push af - ld a, [hli] - push af -; Multiply the level by d - xor a - ld [hMultiplicand + 0], a - ld [hMultiplicand + 1], a - ld a, d - ld [hMultiplicand + 2], a - ld a, [hli] - ld [hMultiplier], a - call Multiply -; Subtract e - ld b, [hl] - ld a, [hProduct + 3] - sub b - ld [hMultiplicand + 2], a - ld b, $0 - ld a, [hProduct + 2] - sbc b - ld [hMultiplicand + 1], a - ld a, [hProduct + 1] - sbc b - ld [hMultiplicand], a -; If bit 7 of c is set, c is negative; otherwise, it's positive - pop af - and $80 - jr nz, .subtract -; Add c*n**2 to (d*n - e) - pop bc - ld a, [hProduct + 3] - add b - ld [hMultiplicand + 2], a - pop bc - ld a, [hProduct + 2] - adc b - ld [hMultiplicand + 1], a - pop bc - ld a, [hProduct + 1] - adc b - ld [hMultiplicand], a - jr .done_quadratic - -.subtract -; Subtract c*n**2 from (d*n - e) - pop bc - ld a, [hProduct + 3] - sub b - ld [hMultiplicand + 2], a - pop bc - ld a, [hProduct + 2] - sbc b - ld [hMultiplicand + 1], a - pop bc - ld a, [hProduct + 1] - sbc b - ld [hMultiplicand], a - -.done_quadratic -; Add (a/b)*n**3 to (d*n - e +/- c*n**2) - pop bc - ld a, [hProduct + 3] - add b - ld [hMultiplicand + 2], a - pop bc - ld a, [hProduct + 2] - adc b - ld [hMultiplicand + 1], a - pop bc - ld a, [hProduct + 1] - adc b - ld [hMultiplicand], a - ret - -.LevelSquared: ; 50eed - xor a - ld [hMultiplicand + 0], a - ld [hMultiplicand + 1], a - ld a, d - ld [hMultiplicand + 2], a - ld [hMultiplier], a - jp Multiply - -INCLUDE "data/growth_rates.asm" +INCLUDE "engine/experience.asm" _SwitchPartyMons: ld a, [wd0e3] @@ -4514,11 +1618,8 @@ _SwitchPartyMons: ret INCLUDE "gfx/load_pics.asm" - INCLUDE "engine/move_mon_wo_mail.asm" - INCLUDE "data/pokemon/base_stats.asm" - INCLUDE "data/pokemon/pokemon_names.asm" Unknown_53d84: ; unreferenced @@ -4564,274 +1665,7 @@ INCLUDE "event/halloffame.asm" SECTION "bank22", ROMX INCLUDE "event/kurt.asm" - -Function88248: ; 88248 -; XXX - ld c, CAL - ld a, [PlayerGender] - bit 0, a - jr z, .okay - ld c, KAREN - -.okay - ld a, c - ld [TrainerClass], a - ret - -MovePlayerPicRight: ; 88258 - hlcoord 6, 4 - ld de, 1 - jr MovePlayerPic - -MovePlayerPicLeft: ; 88260 - hlcoord 13, 4 - ld de, -1 - ; fallthrough - -MovePlayerPic: ; 88266 -; Move player pic at hl by de * 7 tiles. - ld c, $8 -.loop - push bc - push hl - push de - xor a - ld [hBGMapMode], a - lb bc, 7, 7 - predef PlaceGraphic - xor a - ld [hBGMapThird], a - call WaitBGMap - call DelayFrame - pop de - pop hl - add hl, de - pop bc - dec c - ret z - push hl - push bc - ld a, l - sub e - ld l, a - ld a, h - sbc d - ld h, a - lb bc, 7, 7 - call ClearBox - pop bc - pop hl - jr .loop - -ShowPlayerNamingChoices: ; 88297 - ld hl, ChrisNameMenuHeader - ld a, [PlayerGender] - bit 0, a - jr z, .GotGender - ld hl, KrisNameMenuHeader -.GotGender: - call LoadMenuDataHeader - call VerticalMenu - ld a, [wMenuCursorY] - dec a - call CopyNameFromMenu - call CloseWindow - ret - -ChrisNameMenuHeader: ; 882b5 - db $40 ; flags - db 00, 00 ; start coords - db 11, 10 ; end coords - dw .MaleNames - db 1 ; ???? - db 0 ; default option - -.MaleNames: ; 882be - db $91 ; flags - db 5 ; items - db "NEW NAME@" -MalePlayerNameArray: ; 882c9 - db "CHRIS@" - db "MAT@" - db "ALLAN@" - db "JON@" - db 2 ; displacement - db " NAME @" ; title - -KrisNameMenuHeader: ; 882e5 - db $40 ; flags - db 00, 00 ; start coords - db 11, 10 ; end coords - dw .FemaleNames - db 1 ; ???? - db 0 ; default option - -.FemaleNames: ; 882ee - db $91 ; flags - db 5 ; items - db "NEW NAME@" -FemalePlayerNameArray: ; 882f9 - db "KRIS@" - db "AMANDA@" - db "JUANA@" - db "JODI@" - db 2 ; displacement - db " NAME @" ; title - -GetPlayerNameArray: ; 88318 This Function is never called - ld hl, PlayerName - ld de, MalePlayerNameArray - ld a, [PlayerGender] - bit 0, a - jr z, .done - ld de, FemalePlayerNameArray - -.done - call InitName - ret - -GetPlayerIcon: ; 8832c -; Get the player icon corresponding to gender - -; Male - ld de, ChrisSpriteGFX - ld b, BANK(ChrisSpriteGFX) - - ld a, [PlayerGender] - bit 0, a - jr z, .done - -; Female - ld de, KrisSpriteGFX - ld b, BANK(KrisSpriteGFX) - -.done - ret - -GetCardPic: ; 8833e - ld hl, ChrisCardPic - ld a, [PlayerGender] - bit 0, a - jr z, .GotClass - ld hl, KrisCardPic -.GotClass: - ld de, VTiles2 tile $00 - ld bc, $23 tiles - ld a, BANK(ChrisCardPic) ; BANK(KrisCardPic) - call FarCopyBytes - ld hl, CardGFX - ld de, VTiles2 tile $23 - ld bc, 6 tiles - ld a, BANK(CardGFX) - call FarCopyBytes - ret - -ChrisCardPic: ; 88365 -INCBIN "gfx/trainer_card/chris_card.2bpp" - -KrisCardPic: ; 88595 -INCBIN "gfx/trainer_card/kris_card.2bpp" - -CardGFX: ; 887c5 -INCBIN "gfx/trainer_card/trainer_card.2bpp" - -GetPlayerBackpic: ; 88825 - ld a, [PlayerGender] - bit 0, a - jr z, GetChrisBackpic - call GetKrisBackpic - ret - -GetChrisBackpic: ; 88830 - ld hl, ChrisBackpic - ld b, BANK(ChrisBackpic) - ld de, VTiles2 tile $31 - ld c, 7 * 7 - predef DecompressPredef - ret - -HOF_LoadTrainerFrontpic: ; 88840 - call WaitBGMap - xor a - ld [hBGMapMode], a - ld e, 0 - ld a, [PlayerGender] - bit 0, a - jr z, .GotClass - ld e, 1 - -.GotClass: - ld a, e - ld [TrainerClass], a - ld de, ChrisPic - ld a, [PlayerGender] - bit 0, a - jr z, .GotPic - ld de, KrisPic - -.GotPic: - ld hl, VTiles2 - ld b, BANK(ChrisPic) ; BANK(KrisPic) - ld c, 7 * 7 - call Get2bpp - call WaitBGMap - ld a, $1 - ld [hBGMapMode], a - ret - -DrawIntroPlayerPic: ; 88874 -; Draw the player pic at (6,4). - -; Get class - ld e, CHRIS - ld a, [PlayerGender] - bit 0, a - jr z, .GotClass - ld e, KRIS -.GotClass: - ld a, e - ld [TrainerClass], a - -; Load pic - ld de, ChrisPic - ld a, [PlayerGender] - bit 0, a - jr z, .GotPic - ld de, KrisPic -.GotPic: - ld hl, VTiles2 - ld b, BANK(ChrisPic) ; BANK(KrisPic) - ld c, 7 * 7 ; dimensions - call Get2bpp - -; Draw - xor a - ld [hGraphicStartTile], a - hlcoord 6, 4 - lb bc, 7, 7 - predef PlaceGraphic - ret - -ChrisPic: ; 888a9 -INCBIN "gfx/player/chris.2bpp" - -KrisPic: ; 88bb9 -INCBIN "gfx/player/kris.2bpp" - -GetKrisBackpic: ; 88ec9 -; Kris's backpic is uncompressed. - ld de, KrisBackpic - ld hl, VTiles2 tile $31 - lb bc, BANK(KrisBackpic), 7 * 7 ; dimensions - call Get2bpp - ret - -KrisBackpic: ; 88ed6 -INCBIN "gfx/player/kris_back.2bpp" - -String_89116: - db "-----@" - +INCLUDE "engine/player_gfx.asm" INCLUDE "mobile/mobile_22.asm" INCLUDE "event/unown.asm" INCLUDE "event/buena.asm" @@ -4842,22 +1676,8 @@ INCLUDE "mobile/mobile_22_2.asm" SECTION "bank23", ROMX -Predef35: ; 8c000 -Predef36: - ret - INCLUDE "engine/timeofdaypals.asm" -INCLUDE "engine/battle_start.asm" - -Function8c7c9: -; XXX - ld a, $1 - ld [hBGMapMode], a - call WaitBGMap - xor a - ld [hBGMapMode], a - ret - +INCLUDE "engine/battle_transition.asm" INCLUDE "event/field_moves.asm" INCLUDE "event/magnet_train.asm" @@ -4916,39 +1736,7 @@ SECTION "bank2F", ROMX INCLUDE "engine/std_scripts.asm" INCLUDE "engine/phone_scripts.asm" - -TalkToTrainerScript:: ; 0xbe66a - faceplayer - trainerflagaction CHECK_FLAG - iftrue AlreadyBeatenTrainerScript - loadmemtrainer - encountermusic - jump StartBattleWithMapTrainerScript - -SeenByTrainerScript:: ; 0xbe675 - loadmemtrainer - encountermusic - showemote EMOTE_SHOCK, LAST_TALKED, 30 - callasm TrainerWalkToPlayer - applymovement2 MovementBuffer - writepersonxy LAST_TALKED - faceperson PLAYER, LAST_TALKED - jump StartBattleWithMapTrainerScript - -StartBattleWithMapTrainerScript: ; 0xbe68a - opentext - trainertext $0 - waitbutton - closetext - loadmemtrainer - startbattle - reloadmapafterbattle - trainerflagaction SET_FLAG - loadvar wRunningTrainerBattleScript, -1 - -AlreadyBeatenTrainerScript: - scripttalkafter - +INCLUDE "engine/trainer_scripts.asm" INCLUDE "gfx/sprites.asm" @@ -5012,114 +1800,7 @@ INCBIN "gfx/credits/theend.2bpp" SECTION "bank33", ROMX -DisplayCaughtContestMonStats: ; cc000 - call ClearBGPalettes - call ClearTileMap - call ClearSprites - call LoadFontsBattleExtra - - ld hl, Options - ld a, [hl] - push af - set 4, [hl] - - hlcoord 0, 0 - ld b, 4 - ld c, 13 - call TextBox - - hlcoord 0, 6 - ld b, 4 - ld c, 13 - call TextBox - - hlcoord 2, 0 - ld de, .Stock - call PlaceString - - hlcoord 2, 6 - ld de, .This - call PlaceString - - hlcoord 5, 4 - ld de, .Health - call PlaceString - - hlcoord 5, 10 - ld de, .Health - call PlaceString - - ld a, [wContestMon] - ld [wd265], a - call GetPokemonName - ld de, StringBuffer1 - hlcoord 1, 2 - call PlaceString - - ld h, b - ld l, c - ld a, [wContestMonLevel] - ld [TempMonLevel], a - call PrintLevel - - ld de, EnemyMonNick - hlcoord 1, 8 - call PlaceString - - ld h, b - ld l, c - ld a, [EnemyMonLevel] - ld [TempMonLevel], a - call PrintLevel - - hlcoord 11, 4 - ld de, wContestMonMaxHP - lb bc, 2, 3 - call PrintNum - - hlcoord 11, 10 - ld de, EnemyMonMaxHP - call PrintNum - - ld hl, SwitchMonText - call PrintText - - pop af - ld [Options], a - - call WaitBGMap - ld b, SCGB_DIPLOMA - call GetSGBLayout - call SetPalettes - ret - -.Health: - db "HEALTH@" -.Stock: - db " STOCK ", $4a, " @" -.This: - db " THIS ", $4a, " @" - -SwitchMonText: ; cc0c2 - ; Switch #MON? - text_jump UnknownText_0x1c10cf - db "@" - -DisplayAlreadyCaughtText: ; cc0c7 - call GetPokemonName - ld hl, .AlreadyCaughtText - jp PrintText - -.AlreadyCaughtText: ; 0xcc0d0 - ; You already caught a @ . - text_jump UnknownText_0x1c10dd - db "@" - -Predef2F: -Predef38: -Predef39: ; cc0d5 - ret - +INCLUDE "event/bug_contest_mon_stats.asm" INCLUDE "battle/anim_commands.asm" INCLUDE "battle/anim_objects.asm" @@ -5331,23 +2012,7 @@ INCLUDE "engine/warp_connection.asm" INCLUDE "engine/mysterygift.asm" INCLUDE "battle/used_move_text.asm" INCLUDE "mobile/mobile_41.asm" - -LoadOverworldFont:: ; 106594 - ld de, .font - ld hl, VTiles1 - lb bc, BANK(.font), $80 - call Get2bpp - ld de, .space - ld hl, VTiles2 tile $7f - lb bc, BANK(.space), 1 - call Get2bpp - ret -; 1065ad - -.font -INCBIN "gfx/font/overworld.2bpp" -.space -INCBIN "gfx/font/space.2bpp" +INCLUDE "gfx/overworld_font.asm" SECTION "mobile_42", ROMX @@ -5403,7 +2068,6 @@ _UpdateBattleHUDs: ret INCLUDE "mobile/mobile_5e.asm" - INCLUDE "mobile/mobile_5f.asm" @@ -5515,213 +2179,8 @@ String_AM: db "AM@" ; 1dd6fc String_PM: db "PM@" ; 1dd6ff INCLUDE "engine/diploma.asm" - -LoadSGBPokedexGFX: ; 1ddf1c - ld hl, SGBPokedexGFX_LZ - ld de, VTiles2 tile $31 - call Decompress - ret - -LoadSGBPokedexGFX2: ; 1ddf26 (77:5f26) - ld hl, SGBPokedexGFX_LZ - ld de, VTiles2 tile $31 - lb bc, BANK(SGBPokedexGFX_LZ), $3a - call DecompressRequest2bpp - ret - -SGBPokedexGFX_LZ: ; 1ddf33 -INCBIN "gfx/pokedex/sgb.2bpp.lz" - -LoadQuestionMarkPic: ; 1de0d7 - ld hl, .QuestionMarkLZ - ld de, sScratch - call Decompress - ret - -.QuestionMarkLZ: ; 1de0e1 -INCBIN "gfx/pics/questionmark/front.2bpp.lz" - -DrawPokedexListWindow: ; 1de171 (77:6171) - ld a, $32 - hlcoord 0, 17 - ld bc, 12 - call ByteFill - hlcoord 0, 1 - lb bc, 15, 11 - call ClearBox - ld a, $34 - hlcoord 0, 0 - ld bc, 11 - call ByteFill - ld a, $39 - hlcoord 0, 16 - ld bc, 11 - call ByteFill - hlcoord 5, 0 - ld [hl], $3f - hlcoord 5, 16 - ld [hl], $40 - ld a, [wCurrentDexMode] - cp DEXMODE_OLD - jr z, .OldMode -; scroll bar - hlcoord 11, 0 - ld [hl], $50 - ld a, $51 - hlcoord 11, 1 - ld b, SCREEN_HEIGHT - 3 - call Bank77_FillColumn - ld [hl], $52 - jr .Done - -.OldMode: -; no scroll bar - hlcoord 11, 0 - ld [hl], $66 - ld a, $67 - hlcoord 11, 1 - ld b, SCREEN_HEIGHT - 3 - call Bank77_FillColumn - ld [hl], $68 -.Done: - ret - -DrawPokedexSearchResultsWindow: ; 1de1d1 (77:61d1) - ld a, $34 - hlcoord 0, 0 - ld bc, 11 - call ByteFill - ld a, $39 - hlcoord 0, 10 - ld bc, 11 - call ByteFill - hlcoord 5, 0 - ld [hl], $3f - hlcoord 5, 10 - ld [hl], $40 - hlcoord 11, 0 - ld [hl], $66 - ld a, $67 - hlcoord 11, 1 - ld b, SCREEN_HEIGHT / 2 - call Bank77_FillColumn - ld [hl], $68 - ld a, $34 - hlcoord 0, 11 - ld bc, 11 - call ByteFill - ld a, $39 - hlcoord 0, 17 - ld bc, 11 - call ByteFill - hlcoord 11, 11 - ld [hl], $66 - ld a, $67 - hlcoord 11, 12 - ld b, 5 - call Bank77_FillColumn - ld [hl], $68 - hlcoord 0, 12 - lb bc, 5, 11 - call ClearBox - ld de, .esults_D - hlcoord 0, 12 - call PlaceString - ret - -.esults_D ; 1de23c -; (SEARCH R) - db "ESULTS" - next "" -; (### FOUN) - next "D!@" - -DrawDexEntryScreenRightEdge: ; 1de247 - ld a, [hBGMapAddress] - ld l, a - ld a, [hBGMapAddress + 1] - ld h, a - push hl - inc hl - ld a, l - ld [hBGMapAddress], a - ld a, h - ld [hBGMapAddress + 1], a - hlcoord 19, 0 - ld [hl], $66 - hlcoord 19, 1 - ld a, $67 - ld b, 15 - call Bank77_FillColumn - ld [hl], $68 - hlcoord 19, 17 - ld [hl], $3c - xor a - ld b, SCREEN_HEIGHT - hlcoord 19, 0, AttrMap - call Bank77_FillColumn - call WaitBGMap2 - pop hl - ld a, l - ld [hBGMapAddress], a - ld a, h - ld [hBGMapAddress + 1], a - ret - -Bank77_FillColumn: ; 1de27f - push de - ld de, SCREEN_WIDTH -.loop - ld [hl], a - add hl, de - dec b - jr nz, .loop - pop de - ret - -_DudeAutoInput_A:: ; 1de28a - ld hl, DudeAutoInput_A - jr _DudeAutoInput - -_DudeAutoInput_RightA: ; 1de28f - ld hl, DudeAutoInput_RightA - jr _DudeAutoInput - -_DudeAutoInput_DownA: ; 1de294 - ld hl, DudeAutoInput_DownA - jr _DudeAutoInput - -_DudeAutoInput: ; 1de299 - ld a, BANK(DudeAutoInputs) - call StartAutoInput - ret - -DudeAutoInputs: - -DudeAutoInput_A: ; 1de29f - db NO_INPUT, $50 - db A_BUTTON, $00 - db NO_INPUT, $ff ; end - -DudeAutoInput_RightA: ; 1de2a5 - db NO_INPUT, $08 - db D_RIGHT, $00 - db NO_INPUT, $08 - db A_BUTTON, $00 - db NO_INPUT, $ff ; end - -DudeAutoInput_DownA: ; 1de2af - db NO_INPUT, $fe - db NO_INPUT, $fe - db NO_INPUT, $fe - db NO_INPUT, $fe - db D_DOWN, $00 - db NO_INPUT, $fe - db NO_INPUT, $fe - db NO_INPUT, $fe - db NO_INPUT, $fe - db A_BUTTON, $00 - db NO_INPUT, $ff ; end +INCLUDE "engine/pokedex_3.asm" +INCLUDE "event/catch_tutorial_input.asm" TownMap_ConvertLineBreakCharacters: ; 1de2c5 ld hl, StringBuffer1 @@ -5748,135 +2207,7 @@ TownMap_ConvertLineBreakCharacters: ; 1de2c5 PokegearGFX: ; 1de2e4 INCBIN "gfx/pokegear/pokegear.2bpp.lz" -IsMailEuropean: ; 1de5c8 -; return 1 if French -; return 2 if German -; return 3 if Italian -; return 4 if Spanish -; return 0 if none of the above - ld c, $0 - ld hl, sPartyMon1MailAuthorNationality - sPartyMon1Mail - add hl, de - ld a, [hli] - cp "E" - ret nz - ld a, [hli] - inc c - cp "F" - ret z - inc c - cp "G" - ret z - inc c - cp "I" - ret z - inc c - cp "S" - ret z - ld c, $0 - ret - -; The regular font. -StandardEnglishFont: ; 1de5e6 -INCBIN "gfx/font/english.1bpp" - -; An extended font. -FrenchGermanFont: ; 1de9e6 -INCBIN "gfx/font/french_german.1bpp" - -; An even more extended font. -SpanishItalianFont: ; 1dede6 -INCBIN "gfx/font/spanish_italian.1bpp" - -HandleFrenchGermanMail: ; 1df1e6 -; called if mail is french or german -; fix 's 't 'v - ld b, sPartyMon1MailAuthor - sPartyMon1Mail - ld h, d - ld l, e -.loop - ld a, [hl] - cp $dc ; 's in french/german font - jr nz, .check_intermediate_chars - ld a, "'s" - jr .replace - -.check_intermediate_chars - sub "'s" - jr c, .dont_replace - cp "'v" - "'s" + 1 - jr nc, .dont_replace - add $cd - -.replace - ld [hl], a - -.dont_replace - inc hl - dec b - jr nz, .loop - ret - -LireLeCourrierAnglais: -DeutenEnglischenPost: ; 1df203 -; Cette fonction convertit certains des caractères anglais pour -; leur équivalent dans le jeu de caractères français. -; Diese Funktion wandelt bestimmte englische Zeichen, um ihre -; Entsprechung in der Deutschen-Zeichensatz. - ld b, sPartyMon1MailAuthor - sPartyMon1Mail - ld h, d - ld l, e -.loop - ld a, [hl] - cp "'s" - jr nz, .check_intermediate_chars - ld a, $dc - jr .replace - -.check_intermediate_chars - sub $cd - jr c, .dont_replace - cp "'v" - "'s" + 1 - jr nc, .dont_replace - add "'s" - -.replace - ld [hl], a - -.dont_replace - inc hl - dec b - jr nz, .loop - ret - -HandleSpanishItalianMail: ; 1df220 -LeerCorreosIngleses: -LeggiPostaInglese: -; This function converts certain characters between -; the English and Spanish/Italian character sets. -; Esta función convierte ciertos caracteres entre -; el juego de caracteres Inglés y Español. -; Questa funzione converte alcuni caratteri tra -; l'inglese e il set di caratteri italiani. - ld b, sPartyMon1MailAuthor - sPartyMon1Mail - ld h, d - ld l, e -.loop - ld a, [hl] - and $f0 - cp $d0 - jr nz, .dont_replace - ld a, [hl] - add $8 - and $f - or $d0 - ld [hl], a - -.dont_replace - inc hl - dec b - jr nz, .loop - ret +INCLUDE "engine/european_mail.asm" SECTION "Battle Tower Text", ROMX |