From c243548fc486cb72c4f1a1ae4f26568ac09ef7bb Mon Sep 17 00:00:00 2001 From: May Evans <36418502+PlagueVonKarma@users.noreply.github.com> Date: Mon, 26 Sep 2022 22:08:35 +0100 Subject: [PATCH] Add Trader to Celadon University Includes fixes to allow trade evos to exist --- constants/script_constants.asm | 2 + data/events/trades.asm | 1 + data/maps/objects/CeladonUniversityInside.asm | 3 +- data/text/text_7.asm | 18 ++++++ engine/debug/debug_party.asm | 4 +- engine/events/evolve_trade.asm | 18 +----- engine/events/in_game_trades.asm | 62 ++++++++++++++++++- scripts/CeladonUniversityInside.asm | 8 +++ 8 files changed, 94 insertions(+), 22 deletions(-) diff --git a/constants/script_constants.asm b/constants/script_constants.asm index d4543f05..d97a484a 100644 --- a/constants/script_constants.asm +++ b/constants/script_constants.asm @@ -30,6 +30,7 @@ DEF SLOTS_SOMEONESKEYS EQU $ff const TRADE_FOR_DORIS const TRADE_FOR_CRINKLES const TRADE_FOR_SPOT + const TRADE_WITH_SELF DEF NUM_NPC_TRADES EQU const_value ; in game trade dialog sets @@ -38,6 +39,7 @@ DEF NUM_NPC_TRADES EQU const_value const TRADE_DIALOGSET_CASUAL const TRADE_DIALOGSET_POLITE const TRADE_DIALOGSET_HAPPY + const TRADE_DIALOGSET_SELF ; badges ; wObtainedBadges and wBeatGymFlags bits diff --git a/data/events/trades.asm b/data/events/trades.asm index d82a87b8..cadf0600 100644 --- a/data/events/trades.asm +++ b/data/events/trades.asm @@ -12,4 +12,5 @@ TradeMons: db KADABRA, GRAVELER, TRADE_DIALOGSET_POLITE, "SABURO@@@@@" ; From JP Blue db VENONAT, TANGELA, TRADE_DIALOGSET_HAPPY, "CRINKLES@@@" db NIDORAN_M, NIDORAN_F, TRADE_DIALOGSET_HAPPY, "SPOT@@@@@@@" + db NO_MON, NO_MON, TRADE_DIALOGSET_SELF, "Unseen@@@@@" assert_table_length NUM_NPC_TRADES diff --git a/data/maps/objects/CeladonUniversityInside.asm b/data/maps/objects/CeladonUniversityInside.asm index 30edeb59..ec91872c 100644 --- a/data/maps/objects/CeladonUniversityInside.asm +++ b/data/maps/objects/CeladonUniversityInside.asm @@ -8,6 +8,7 @@ CeladonUniversityInside_Object: def_bg_events def_object_events - object_event 8, 17, SPRITE_MIDDLE_AGED_MAN, STAY, ANY_DIR, 1 ; person + object_event 2, 3, SPRITE_MIDDLE_AGED_MAN, STAY, ANY_DIR, 1 ; person + object_event 4, 17, SPRITE_GAMEBOY_KID, STAY, DOWN, 2 ; person def_warps_to CELADON_UNIVERSITY_INSIDE \ No newline at end of file diff --git a/data/text/text_7.asm b/data/text/text_7.asm index fcb27d20..3c0015fc 100644 --- a/data/text/text_7.asm +++ b/data/text/text_7.asm @@ -198,3 +198,21 @@ _UsedCutText:: text " hacked" line "away with CUT!" prompt + +_WannaTrade4Text:: + text "I'm the TRADER!" + line "I love to help" + para "TRAINERs evolve" + line "their #MON!" + para "Wanna trade?" + done + +_NoTrade4Text:: + text "Ok, maybe next" + line "time then." + done + +_Thanks4Text:: + text "There we go!" + para "Hope I helped!" + done diff --git a/engine/debug/debug_party.asm b/engine/debug/debug_party.asm index dff9a8db..ed70eb0e 100644 --- a/engine/debug/debug_party.asm +++ b/engine/debug/debug_party.asm @@ -31,7 +31,7 @@ ENDC db DUGTRIO, 56 db ARTICUNO, 57 IF DEF(_DEBUG) - db PIKACHU, 5 + db KADABRA, 16 ; to test trade evos @ celadon uni - PvK ENDC db -1 ; end @@ -86,7 +86,7 @@ IF DEF(_DEBUG) ld a, 15 ld [hl], a - ; Pikachu gets Flash. + ; Kadabra gets Flash. ld hl, wPartyMon6Moves + 2 ld a, FLASH ld [hl], a diff --git a/engine/events/evolve_trade.asm b/engine/events/evolve_trade.asm index 56069fac..9ae5f138 100644 --- a/engine/events/evolve_trade.asm +++ b/engine/events/evolve_trade.asm @@ -16,24 +16,8 @@ EvolveTradeMon: ; were used instead, where none can evolve. ; This was fixed in Yellow. +; KEP removes this quirk. - ld a, [wInGameTradeReceiveMonName] - - ; GRAVELER - cp "G" - jr z, .ok - - ; "SPECTRE" (HAUNTER) - cp "S" - ret nz - ld a, [wInGameTradeReceiveMonName + 1] - cp "P" - ret nz - -.ok - ld a, [wPartyCount] - dec a - ld [wWhichPokemon], a ld a, $1 ld [wForceEvolution], a ld a, LINK_STATE_TRADING diff --git a/engine/events/in_game_trades.asm b/engine/events/in_game_trades.asm index c6951615..ea6d1755 100644 --- a/engine/events/in_game_trades.asm +++ b/engine/events/in_game_trades.asm @@ -57,6 +57,9 @@ DoInGameTradeDialogue: jr nz, .printText call InGameTrade_DoTrade jr c, .printText + ld a, [wInGameTradeGiveMonSpecies] + cp NO_MON + jr z, .printText ld hl, TradedForText call PrintText .printText @@ -98,22 +101,29 @@ InGameTrade_DoTrade: ld a, $1 jp c, .tradeFailed ; jump if the player didn't select a pokemon ld a, [wInGameTradeGiveMonSpecies] + cp NO_MON + jr z, .skip_mon_check ld b, a ld a, [wcf91] cp b ld a, $2 - jr nz, .tradeFailed ; jump if the selected mon's species is not the required one + jp nz, .tradeFailed ; jump if the selected mon's species is not the required one +.skip_mon_check ld a, [wWhichPokemon] ld hl, wPartyMon1Level ld bc, wPartyMon2 - wPartyMon1 call AddNTimes ld a, [hl] ld [wCurEnemyLVL], a + ld a, [wInGameTradeGiveMonSpecies] + cp NO_MON + jr z, .skip_flag_set ld hl, wCompletedInGameTradeFlags ld a, [wWhichTrade] ld c, a ld b, FLAG_SET predef FlagActionPredef +.skip_flag_set ld hl, ConnectCableText call PrintText ld a, [wWhichPokemon] @@ -121,7 +131,14 @@ InGameTrade_DoTrade: ld a, [wCurEnemyLVL] push af call LoadHpBarAndStatusTilePatterns + ld a, [wInGameTradeGiveMonSpecies] + cp NO_MON + jr nz, .normal_in_game_trade_data + call TradeSelf_PrepareTradeData + jr .self_trade_data +.normal_in_game_trade_data call InGameTrade_PrepareTradeData +.self_trade_data predef InternalClockTradeAnim pop af ld [wCurEnemyLVL], a @@ -130,13 +147,21 @@ InGameTrade_DoTrade: ld a, [wInGameTradeReceiveMonSpecies] ld [wcf91], a xor a - ld [wMonDataLocation], a ; not used + push af + ld a, [wInGameTradeGiveMonSpecies] + cp NO_MON + jr z, .skip_swap_mons + pop af ld [wRemoveMonFromBox], a call RemovePokemon ld a, $80 ; prevent the player from naming the mon ld [wMonDataLocation], a call AddPartyMon call InGameTrade_CopyDataToReceivedMon + ld a, [wPartyCount] + dec a + ld [wWhichPokemon], a +.skip_swap_mons callfar EvolveTradeMon call ClearScreen call InGameTrade_RestoreScreen @@ -161,9 +186,22 @@ InGameTrade_RestoreScreen: call DelayFrames farjp LoadWildData +TradeSelf_PrepareTradeData: + ld a, [wWhichPokemon] + ld hl, wPartySpecies + ld b, 0 + ld c, a + add hl, bc + ld a, [hl] + ld [wTradedPlayerMonSpecies], a + ld [wInGameTradeReceiveMonSpecies], a + ld hl, wTradedPlayerMonSpecies + jr InGameTrade_PrepareTradeData.loaded_self_trade_instead + InGameTrade_PrepareTradeData: ld hl, wTradedPlayerMonSpecies ld a, [wInGameTradeGiveMonSpecies] +.loaded_self_trade_instead ld [hli], a ; wTradedPlayerMonSpecies ld a, [wInGameTradeReceiveMonSpecies] ld [hl], a ; wTradedEnemyMonSpecies @@ -237,6 +275,7 @@ InGameTradeTextPointers: dw TradeTextPointers1 dw TradeTextPointers2 dw TradeTextPointers3 + dw TradeTextPointers4 TradeTextPointers1: dw WannaTrade1Text @@ -258,6 +297,13 @@ TradeTextPointers3: dw WrongMon3Text dw Thanks3Text dw AfterTrade3Text + +TradeTextPointers4: + dw WannaTrade4Text + dw NoTrade4Text + dw WrongMon1Text + dw Thanks4Text + dw AfterTrade1Text ConnectCableText: text_far _ConnectCableText @@ -328,3 +374,15 @@ Thanks3Text: AfterTrade3Text: text_far _AfterTrade3Text text_end + +WannaTrade4Text: + text_far _WannaTrade4Text + text_end + +NoTrade4Text: + text_far _NoTrade4Text + text_end + +Thanks4Text: + text_far _Thanks4Text + text_end \ No newline at end of file diff --git a/scripts/CeladonUniversityInside.asm b/scripts/CeladonUniversityInside.asm index 431cc394..7be2fafc 100644 --- a/scripts/CeladonUniversityInside.asm +++ b/scripts/CeladonUniversityInside.asm @@ -3,9 +3,17 @@ CeladonUniversityInside_Script: CeladonUniversityInside_TextPointers: dw CeladonUniversityInsideText1 + dw CeladonUniversityTrader CeladonUniversityInsideText1: text_far _CeladonUniversityInsideText1 text_end +CeladonUniversityTrader: + text_asm + ld a, TRADE_WITH_SELF + ld [wWhichTrade], a + predef DoInGameTradeDialogue + jp TextScriptEnd + text_end ; unused