diff options
Diffstat (limited to 'engine')
-rw-r--r-- | engine/empty_sram.asm | 19 | ||||
-rwxr-xr-x | engine/healmachineanim.asm | 265 | ||||
-rw-r--r-- | engine/init_hof_credits.asm | 79 | ||||
-rw-r--r-- | engine/init_list.asm | 54 | ||||
-rwxr-xr-x | engine/link.asm | 11 | ||||
-rwxr-xr-x | engine/mystery_gift.asm (renamed from engine/mysterygift.asm) | 0 | ||||
-rwxr-xr-x | engine/mystery_gift_2.asm (renamed from engine/mysterygift2.asm) | 0 | ||||
-rw-r--r-- | engine/pack_f.asm | 20 | ||||
-rw-r--r-- | engine/place_graphics.asm | 56 | ||||
-rw-r--r-- | engine/pokegear_2.asm | 25 | ||||
-rw-r--r-- | engine/printhoursmins.asm | 64 | ||||
-rw-r--r-- | engine/save.asm | 40 | ||||
-rwxr-xr-x | engine/select_menu.asm (renamed from engine/selectmenu.asm) | 0 | ||||
-rwxr-xr-x | engine/start_menu.asm (renamed from engine/startmenu.asm) | 0 | ||||
-rw-r--r-- | engine/switch_party_mons.asm | 145 | ||||
-rw-r--r-- | engine/tempmon.asm | 127 |
16 files changed, 620 insertions, 285 deletions
diff --git a/engine/empty_sram.asm b/engine/empty_sram.asm new file mode 100644 index 000000000..aa4b28e0d --- /dev/null +++ b/engine/empty_sram.asm @@ -0,0 +1,19 @@ +EmptyAllSRAMBanks: ; 4cf1f + ld a, $0 + call .EmptyBank + ld a, $1 + call .EmptyBank + ld a, $2 + call .EmptyBank + ld a, $3 + call .EmptyBank + ret + +.EmptyBank: ; 4cf34 + call GetSRAMBank + ld hl, SRAM_Begin + ld bc, SRAM_End - SRAM_Begin + xor a + call ByteFill + call CloseSRAM + ret diff --git a/engine/healmachineanim.asm b/engine/healmachineanim.asm deleted file mode 100755 index 4f543c0b3..000000000 --- a/engine/healmachineanim.asm +++ /dev/null @@ -1,265 +0,0 @@ -HealMachineAnim: ; 12324 - ; If you have no Pokemon, don't change the buffer. This can lead to some glitchy effects if you have no Pokemon. - ld a, [PartyCount] - and a - ret z - ; The location of the healing machine relative to the player is stored in ScriptVar. - ; 0: Up and left (Pokemon Center) - ; 1: Left (Elm's Lab) - ; 2: Up (Hall of Fame) - ld a, [ScriptVar] - ld [Buffer1], a - ld a, [rOBP1] - ld [Buffer2], a - call .DoJumptableFunctions - ld a, [Buffer2] - call DmgToCgbObjPal1 - ret -; 1233e - -.DoJumptableFunctions: ; 1233e - xor a - ld [Buffer3], a -.jumpable_loop - ld a, [Buffer1] - ld e, a - ld d, 0 - ld hl, .Pointers - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [Buffer3] - ld e, a - inc a - ld [Buffer3], a - add hl, de - ld a, [hl] - cp 5 - jr z, .finish - ld hl, .Jumptable - rst JumpTable - jr .jumpable_loop - -.finish - ret -; 12365 - -.Pointers: ; 12365 - dw .Pokecenter - dw .ElmLab - dw .HallOfFame -; 1236b - -.Pokecenter: ; 1236b - db 0, 1, 3, 5 -.ElmLab: ; 1236f - db 0, 1, 3, 5 -.HallOfFame: ; 12373 - db 0, 2, 4, 5 -; 12377 - -.Jumptable: ; 12377 - dw .LoadGFX - dw .PC_LoadBallsOntoMachine - dw .HOF_LoadBallsOntoMachine - dw .PlayHealMusic - dw .HOF_PlaySFX - dw .dummy_5 ; never encountered -; 12383 - -.LoadGFX: ; 12383 - call .LoadPalettes - ld de, .HealMachineGFX - ld hl, VTiles0 tile $7c - lb bc, BANK(.HealMachineGFX), $2 - call Request2bpp - ret -; 12393 - -.PC_LoadBallsOntoMachine: ; 12393 - ld hl, Sprites + $80 - ld de, .PC_ElmsLab_OAM - call .PlaceHealingMachineTile - call .PlaceHealingMachineTile - jr .LoadBallsOntoMachine - -.HOF_LoadBallsOntoMachine: ; 123a1 - ld hl, Sprites + $80 - ld de, .HOF_OAM - -.LoadBallsOntoMachine: ; 123a7 - ld a, [PartyCount] - ld b, a -.party_loop - call .PlaceHealingMachineTile - push de - ld de, SFX_SECOND_PART_OF_ITEMFINDER - call PlaySFX - pop de - ld c, 30 - call DelayFrames - dec b - jr nz, .party_loop - ret -; 123bf - -.PlayHealMusic: ; 123bf - ld de, MUSIC_HEAL - call PlayMusic - jp .FlashPalettes8Times -; 123c8 - -.HOF_PlaySFX: ; 123c8 - ld de, SFX_GAME_FREAK_LOGO_GS - call PlaySFX - call .FlashPalettes8Times - call WaitSFX - ld de, SFX_BOOT_PC - call PlaySFX - ret -; 123db - -.dummy_5 ; 123db - ret -; 123dc - -.PC_ElmsLab_OAM: ; 123dc - dsprite 4, 0, 4, 2, $7c, $16 - dsprite 4, 0, 4, 6, $7c, $16 - dsprite 4, 6, 4, 0, $7d, $16 - dsprite 4, 6, 5, 0, $7d, $36 ; xflip - dsprite 5, 3, 4, 0, $7d, $16 - dsprite 5, 3, 5, 0, $7d, $36 ; xflip - dsprite 6, 0, 4, 0, $7d, $16 - dsprite 6, 0, 5, 0, $7d, $36 ; xflip -; 123fc - -.HealMachineGFX: ; 123fc -INCBIN "gfx/overworld/heal_machine.2bpp" -; 1241c - -.HOF_OAM: ; 1241c - dsprite 7, 4, 10, 1, $7d, $16 - dsprite 7, 4, 10, 6, $7d, $16 - dsprite 7, 3, 9, 5, $7d, $16 - dsprite 7, 3, 11, 2, $7d, $16 - dsprite 7, 1, 9, 1, $7d, $16 - dsprite 7, 1, 11, 5, $7d, $16 -; 12434 - -.LoadPalettes: ; 12434 - call IsCGB - jr nz, .cgb - ld a, %11100000 - ld [rOBP1], a - ret - -.cgb - ld hl, .palettes - ld de, OBPals + 8 * 6 - ld bc, 8 - ld a, $5 - call FarCopyWRAM - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 12451 - -.palettes ; 12451 - RGB 31, 31, 31 - RGB 31, 19, 10 - RGB 31, 07, 01 - RGB 00, 00, 00 -; 12459 - -.FlashPalettes8Times: ; 12459 - ld c, $8 -.palette_loop - push bc - call .FlashPalettes - ld c, 10 - call DelayFrames - pop bc - dec c - jr nz, .palette_loop - ret -; 12469 - -.FlashPalettes: ; 12469 - call IsCGB - jr nz, .go - ld a, [rOBP1] - xor %00101000 - ld [rOBP1], a - ret - -.go - ld a, [rSVBK] - push af - ld a, $5 - ld [rSVBK], a - - ld hl, OBPals + 8 * 6 - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - push de - ld c, $3 -.palette_loop_2 - ld a, [hli] - ld e, a - ld a, [hld] - ld d, a - dec hl - ld a, d - ld [hld], a - ld a, e - ld [hli], a - inc hl - inc hl - inc hl - dec c - jr nz, .palette_loop_2 - pop de - dec hl - ld a, d - ld [hld], a - ld a, e - ld [hl], a - - pop af - ld [rSVBK], a - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 124a3 - -.PlaceHealingMachineTile: ; 124a3 - push bc - ld a, [Buffer1] - bcpixel 2, 4 - cp $1 ; ElmsLab - jr z, .okay - bcpixel 0, 0 - -.okay - ld a, [de] - add c - inc de - ld [hli], a - ld a, [de] - add b - inc de - ld [hli], a - ld a, [de] - inc de - ld [hli], a - ld a, [de] - inc de - ld [hli], a - pop bc - ret -; 124c1 diff --git a/engine/init_hof_credits.asm b/engine/init_hof_credits.asm new file mode 100644 index 000000000..0f55a10ab --- /dev/null +++ b/engine/init_hof_credits.asm @@ -0,0 +1,79 @@ +InitDisplayForHallOfFame: ; 4e881 + call ClearBGPalettes + call ClearTileMap + call ClearSprites + call DisableLCD + call LoadStandardFont + call LoadFontsBattleExtra + hlbgcoord 0, 0 + ld bc, VBGMap1 - VBGMap0 + ld a, " " + call ByteFill + hlcoord 0, 0, AttrMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + xor a + call ByteFill + xor a + ld [hSCY], a + ld [hSCX], a + call EnableLCD + ld hl, .SavingRecordDontTurnOff + call PrintText + call WaitBGMap2 + call SetPalettes + ret + +.SavingRecordDontTurnOff: ; 0x4e8bd + ; SAVING RECORD… DON'T TURN OFF! + text_jump UnknownText_0x1bd39e + db "@" + +InitDisplayForRedCredits: ; 4e8c2 + call ClearBGPalettes + call ClearTileMap + call ClearSprites + call DisableLCD + call LoadStandardFont + call LoadFontsBattleExtra + hlbgcoord 0, 0 + ld bc, VBGMap1 - VBGMap0 + ld a, " " + call ByteFill + hlcoord 0, 0, AttrMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + xor a + call ByteFill + ld hl, UnknBGPals + ld c, 4 tiles +.load_white_palettes + ld a, (palred 31 + palgreen 31 + palblue 31) % $100 + ld [hli], a + ld a, (palred 31 + palgreen 31 + palblue 31) / $100 + ld [hli], a + dec c + jr nz, .load_white_palettes + xor a + ld [hSCY], a + ld [hSCX], a + call EnableLCD + call WaitBGMap2 + call SetPalettes + ret + +ResetDisplayBetweenHallOfFameMons: ; 4e906 + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + ld hl, wDecompressScratch + ld bc, wScratchAttrMap - wDecompressScratch + ld a, " " + call ByteFill + hlbgcoord 0, 0 + ld de, wDecompressScratch + ld b, 0 + ld c, 4 tiles + call Request2bpp + pop af + ld [rSVBK], a + ret diff --git a/engine/init_list.asm b/engine/init_list.asm new file mode 100644 index 000000000..e2b7235ab --- /dev/null +++ b/engine/init_list.asm @@ -0,0 +1,54 @@ +InitList: ; 50db9 + ld a, [wInitListType] + + cp INIT_ENEMYOT_LIST + jr nz, .check_party_ot_name + ld hl, OTPartyCount + ld de, OTPartyMonOT + ld a, ENEMY_OT_NAME + jr .done + +.check_party_ot_name + cp INIT_PLAYEROT_LIST + jr nz, .check_mon_name + ld hl, PartyCount + ld de, PartyMonOT + ld a, PARTY_OT_NAME + jr .done + +.check_mon_name + cp INIT_MON_LIST + jr nz, .check_item_name + ld hl, CurMart + ld de, PokemonNames + ld a, PKMN_NAME + jr .done + +.check_item_name + cp INIT_BAG_ITEM_LIST + jr nz, .check_ob_item_name + ld hl, NumItems + ld de, ItemNames + ld a, ITEM_NAME + jr .done + +.check_ob_item_name + ld hl, CurMart + ld de, ItemNames + ld a, ITEM_NAME +.done + ld [wNamedObjectTypeBuffer], a + ld a, l + ld [wListPointer], a + ld a, h + ld [wListPointer + 1], a + ld a, e + ld [wUnusedD102], a + ld a, d + ld [wUnusedD102 + 1], a + ld bc, ItemAttributes + ld a, c + ld [wItemAttributesPtr], a + ld a, b + ld [wItemAttributesPtr + 1], a + ret diff --git a/engine/link.asm b/engine/link.asm index 7f71f4880..619d5bae3 100755 --- a/engine/link.asm +++ b/engine/link.asm @@ -2581,3 +2581,14 @@ UnusedGen1LinkCommsBorderGFX: ; 29f54 ; unreferenced INCBIN "gfx/trade/unused_gen_1_border_tiles.2bpp" ; 29fe4 + +Function29fe4: ; unreferenced + ld a, BANK(sPartyMail) + call GetSRAMBank + ld d, $0 + ld b, CHECK_FLAG + predef FlagPredef + call CloseSRAM + ld a, c + and a + ret diff --git a/engine/mysterygift.asm b/engine/mystery_gift.asm index 8204ab332..8204ab332 100755 --- a/engine/mysterygift.asm +++ b/engine/mystery_gift.asm diff --git a/engine/mysterygift2.asm b/engine/mystery_gift_2.asm index dc0baf39c..dc0baf39c 100755 --- a/engine/mysterygift2.asm +++ b/engine/mystery_gift_2.asm diff --git a/engine/pack_f.asm b/engine/pack_f.asm new file mode 100644 index 000000000..f71e43db8 --- /dev/null +++ b/engine/pack_f.asm @@ -0,0 +1,20 @@ +DrawKrisPackGFX: ; 48e81 + ld hl, PackFGFXPointers + add hl, de + add hl, de + ld a, [hli] + ld e, a + ld d, [hl] + ld hl, VTiles2 tile $50 + lb bc, BANK(PackFGFX), 15 + call Request2bpp + ret + +PackFGFXPointers: ; 48e93 + dw PackFGFX + (15 tiles) * 1 + dw PackFGFX + (15 tiles) * 3 + dw PackFGFX + (15 tiles) * 0 + dw PackFGFX + (15 tiles) * 2 + +PackFGFX: ; 48e9b +INCBIN "gfx/pack/pack_f.2bpp" diff --git a/engine/place_graphics.asm b/engine/place_graphics.asm new file mode 100644 index 000000000..d72364776 --- /dev/null +++ b/engine/place_graphics.asm @@ -0,0 +1,56 @@ +PlaceGraphic: ; 2ef6e +; Fill wBoxAlignment-aligned box width b height c +; with iterating tile starting from hGraphicStartTile at hl. +; Predef $13 + + ld de, SCREEN_WIDTH + + ld a, [wBoxAlignment] + and a + jr nz, .right + + ld a, [hGraphicStartTile] +.x1 + push bc + push hl + +.y1 + ld [hl], a + add hl, de + inc a + dec c + jr nz, .y1 + + pop hl + inc hl + pop bc + dec b + jr nz, .x1 + ret + +.right +; Right-aligned. + push bc + ld b, 0 + dec c + add hl, bc + pop bc + + ld a, [hGraphicStartTile] +.x2 + push bc + push hl + +.y2 + ld [hl], a + add hl, de + inc a + dec c + jr nz, .y2 + + pop hl + dec hl + pop bc + dec b + jr nz, .x2 + ret diff --git a/engine/pokegear_2.asm b/engine/pokegear_2.asm new file mode 100644 index 000000000..a5cceecfd --- /dev/null +++ b/engine/pokegear_2.asm @@ -0,0 +1,25 @@ +TownMap_ConvertLineBreakCharacters: ; 1de2c5 + ld hl, StringBuffer1 +.loop + ld a, [hl] + cp "@" + jr z, .end + cp "%" + jr z, .line_break + cp "¯" + jr z, .line_break + inc hl + jr .loop + +.line_break + ld [hl], "<LNBRK>" + +.end + ld de, StringBuffer1 + hlcoord 9, 0 + call PlaceString + ret + + +PokegearGFX: ; 1de2e4 +INCBIN "gfx/pokegear/pokegear.2bpp.lz" diff --git a/engine/printhoursmins.asm b/engine/printhoursmins.asm new file mode 100644 index 000000000..711ff89b6 --- /dev/null +++ b/engine/printhoursmins.asm @@ -0,0 +1,64 @@ +Function1dd6a9: ; 1dd6a9 +; XXX + ld a, b + ld b, c + ld c, a + push bc + push de + ld hl, sp+$2 + ld d, h + ld e, l + pop hl + lb bc, PRINTNUM_LEADINGZEROS | 2, 5 + call PrintNum + pop bc + ret + +PrintHoursMins ; 1dd6bb (77:56bb) +; Hours in b, minutes in c + ld a, b + cp 12 + push af + jr c, .AM + jr z, .PM + sub 12 + jr .PM +.AM: + or a + jr nz, .PM + ld a, 12 +.PM: + ld b, a +; Crazy stuff happening with the stack + push bc + ld hl, sp+$1 + push de + push hl + pop de + pop hl + ld [hl], " " + lb bc, 1, 2 + call PrintNum + ld [hl], ":" + inc hl + ld d, h + ld e, l + ld hl, sp+$0 + push de + push hl + pop de + pop hl + lb bc, PRINTNUM_LEADINGZEROS | 1, 2 + call PrintNum + pop bc + ld de, String_AM + pop af + jr c, .place_am_pm + ld de, String_PM +.place_am_pm + inc hl + call PlaceString + ret + +String_AM: db "AM@" ; 1dd6fc +String_PM: db "PM@" ; 1dd6ff diff --git a/engine/save.asm b/engine/save.asm index 74b0626c8..65339e0bb 100644 --- a/engine/save.asm +++ b/engine/save.asm @@ -500,12 +500,12 @@ HallOfFame_InitSaveIfNeeded: ; 14da0 ; 14da9 ValidateSave: ; 14da9 - ld a, BANK(s1_a008) + ld a, BANK(sCheckValue1) ; BANK(sCheckValue2) call GetSRAMBank - ld a, 99 - ld [s1_a008], a - ld a, " " - ld [s1_ad0f], a + ld a, SAVE_CHECK_VALUE_1 + ld [sCheckValue1], a + ld a, SAVE_CHECK_VALUE_2 + ld [sCheckValue2], a jp CloseSRAM ; 14dbb @@ -568,12 +568,12 @@ SaveChecksum: ; 14e13 ; 14e2d ValidateBackupSave: ; 14e2d - ld a, BANK(s0_b208) + ld a, BANK(sBackupCheckValue1) ; BANK(sBackupCheckValue2) call GetSRAMBank - ld a, 99 - ld [s0_b208], a - ld a, " " - ld [s0_bf0f], a + ld a, SAVE_CHECK_VALUE_1 + ld [sBackupCheckValue1], a + ld a, SAVE_CHECK_VALUE_2 + ld [sBackupCheckValue2], a call CloseSRAM ret ; 14e40 @@ -731,13 +731,13 @@ INCLUDE "data/default_options.asm" CheckPrimarySaveFile: ; 14f84 - ld a, BANK(s1_a008) + ld a, BANK(sCheckValue1) ; BANK(sCheckValue2) call GetSRAMBank - ld a, [s1_a008] - cp 99 + ld a, [sCheckValue1] + cp SAVE_CHECK_VALUE_1 jr nz, .nope - ld a, [s1_ad0f] - cp " " + ld a, [sCheckValue2] + cp SAVE_CHECK_VALUE_2 jr nz, .nope ld hl, sOptions ld de, Options @@ -753,13 +753,13 @@ CheckPrimarySaveFile: ; 14f84 ; 14faf CheckBackupSaveFile: ; 14faf - ld a, BANK(s0_b208) + ld a, BANK(sBackupCheckValue1) ; BANK(sBackupCheckValue2) call GetSRAMBank - ld a, [s0_b208] - cp 99 + ld a, [sBackupCheckValue1] + cp SAVE_CHECK_VALUE_1 jr nz, .nope - ld a, [s0_bf0f] - cp " " + ld a, [sBackupCheckValue2] + cp SAVE_CHECK_VALUE_2 jr nz, .nope ld hl, sBackupOptions ld de, Options diff --git a/engine/selectmenu.asm b/engine/select_menu.asm index 5d3b5ff0a..5d3b5ff0a 100755 --- a/engine/selectmenu.asm +++ b/engine/select_menu.asm diff --git a/engine/startmenu.asm b/engine/start_menu.asm index 871da86be..871da86be 100755 --- a/engine/startmenu.asm +++ b/engine/start_menu.asm diff --git a/engine/switch_party_mons.asm b/engine/switch_party_mons.asm new file mode 100644 index 000000000..cde9c82b2 --- /dev/null +++ b/engine/switch_party_mons.asm @@ -0,0 +1,145 @@ +_SwitchPartyMons: + ld a, [wd0e3] + dec a + ld [Buffer3], a + ld b, a + ld a, [wMenuCursorY] + dec a + ld [Buffer2], a + cp b + jr z, .skip + call .SwapMonAndMail + ld a, [Buffer3] + call .ClearSprite + ld a, [Buffer2] + call .ClearSprite +.skip + ret + +.ClearSprite: ; 50f34 (14:4f34) + push af + hlcoord 0, 1 + ld bc, 2 * SCREEN_WIDTH + call AddNTimes + ld bc, 2 * SCREEN_WIDTH + ld a, " " + call ByteFill + pop af + ld hl, Sprites + ld bc, $10 + call AddNTimes + ld de, $4 + ld c, $4 +.gfx_loop + ld [hl], $a0 + add hl, de + dec c + jr nz, .gfx_loop + ld de, SFX_SWITCH_POKEMON + call WaitPlaySFX + ret + +.SwapMonAndMail: ; 50f62 (14:4f62) + push hl + push de + push bc + ld bc, PartySpecies + ld a, [Buffer2] + ld l, a + ld h, $0 + add hl, bc + ld d, h + ld e, l + ld a, [Buffer3] + ld l, a + ld h, $0 + add hl, bc + ld a, [hl] + push af + ld a, [de] + ld [hl], a + pop af + ld [de], a + ld a, [Buffer2] + ld hl, PartyMon1Species + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + push hl + ld de, wd002 + ld bc, PARTYMON_STRUCT_LENGTH + call CopyBytes + ld a, [Buffer3] + ld hl, PartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + pop de + push hl + ld bc, PARTYMON_STRUCT_LENGTH + call CopyBytes + pop de + ld hl, wd002 + ld bc, PARTYMON_STRUCT_LENGTH + call CopyBytes + ld a, [Buffer2] + ld hl, PartyMonOT + call SkipNames + push hl + call .CopyNameTowd002 + ld a, [Buffer3] + ld hl, PartyMonOT + call SkipNames + pop de + push hl + call .CopyName + pop de + ld hl, wd002 + call .CopyName + ld hl, PartyMonNicknames + ld a, [Buffer2] + call SkipNames + push hl + call .CopyNameTowd002 + ld hl, PartyMonNicknames + ld a, [Buffer3] + call SkipNames + pop de + push hl + call .CopyName + pop de + ld hl, wd002 + call .CopyName + ld hl, sPartyMail + ld a, [Buffer2] + ld bc, MAIL_STRUCT_LENGTH + call AddNTimes + push hl + ld de, wd002 + ld bc, MAIL_STRUCT_LENGTH + ld a, BANK(sPartyMail) + call GetSRAMBank + call CopyBytes + ld hl, sPartyMail + ld a, [Buffer3] + ld bc, MAIL_STRUCT_LENGTH + call AddNTimes + pop de + push hl + ld bc, MAIL_STRUCT_LENGTH + call CopyBytes + pop de + ld hl, wd002 + ld bc, MAIL_STRUCT_LENGTH + call CopyBytes + call CloseSRAM + pop bc + pop de + pop hl + ret + +.CopyNameTowd002: ; 51036 (14:5036) + ld de, wd002 + +.CopyName: ; 51039 (14:5039) + ld bc, NAME_LENGTH + call CopyBytes + ret diff --git a/engine/tempmon.asm b/engine/tempmon.asm new file mode 100644 index 000000000..332cb0c6c --- /dev/null +++ b/engine/tempmon.asm @@ -0,0 +1,127 @@ +CopyPkmnToTempMon: ; 5084a +; gets the BaseData of a Pkmn +; and copys the PkmnStructure to TempMon + + ld a, [CurPartyMon] + ld e, a + call GetPkmnSpecies + ld a, [CurPartySpecies] + ld [CurSpecies], a + call GetBaseData + + ld a, [MonType] + ld hl, PartyMon1Species + ld bc, PARTYMON_STRUCT_LENGTH + and a + jr z, .copywholestruct + ld hl, OTPartyMon1Species + ld bc, PARTYMON_STRUCT_LENGTH + cp OTPARTYMON + jr z, .copywholestruct + ld bc, BOXMON_STRUCT_LENGTH + callab CopyBoxmonToTempMon + jr .done + +.copywholestruct + ld a, [CurPartyMon] + call AddNTimes + ld de, TempMon + ld bc, PARTYMON_STRUCT_LENGTH + call CopyBytes + +.done + ret + +CalcwBufferMonStats: ; 5088b + ld bc, wBufferMon + jr _TempMonStatsCalculation + +CalcTempmonStats: ; 50890 + ld bc, TempMon +_TempMonStatsCalculation: ; 50893 + ld hl, MON_LEVEL + add hl, bc + ld a, [hl] + 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 + push bc + ld b, $1 + predef CalcPkmnStats + pop bc + ld hl, MON_HP + add hl, bc + ld d, h + ld e, l + ld a, [CurPartySpecies] + cp EGG + jr nz, .not_egg + xor a + ld [de], a + inc de + ld [de], a + jr .zero_status + +.not_egg + push bc + ld hl, MON_MAXHP + add hl, bc + ld bc, 2 + call CopyBytes + pop bc + +.zero_status + ld hl, MON_STATUS + add hl, bc + xor a + ld [hli], a + ld [hl], a + ret + +GetPkmnSpecies: ; 508d5 +; [MonType] has the type of the Pkmn +; e = Nr. of Pkmn (i.e. [CurPartyMon]) + + ld a, [MonType] + and a ; PARTYMON + jr z, .partymon + cp OTPARTYMON + jr z, .otpartymon + cp BOXMON + jr z, .boxmon + cp TEMPMON + jr z, .breedmon + ; WILDMON + +.partymon + ld hl, PartySpecies + jr .done + +.otpartymon + ld hl, OTPartySpecies + jr .done + +.boxmon + ld a, BANK(sBoxSpecies) + call GetSRAMBank + ld hl, sBoxSpecies + call .done + call CloseSRAM + ret + +.breedmon + ld a, [wBreedMon1Species] + jr .done2 + +.done + ld d, 0 + add hl, de + ld a, [hl] + +.done2 + ld [CurPartySpecies], a + ret |