mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-09-16 18:30:50 +12:00

- Most, if not all, Silph Co. warps have been fixed. Inappropriate ones have been removed. - The Metal Coat can now be found where one corrupted Silph Co. warp was to fill dead space, and another is in the Power Plant, replacing Carbos. - Bill now trades you Hisuian Arcanine after being saved. - Bill's Grandfather now trades you Hisuian Electrode. Had to remove Crinkles, but Tangela is literally right next to Cinnabar, c'mon lol - Toedscool can now be found behind Pallet Town, replacing Gloom and Weepinbell, making it more focused. - Now you can't run from Omega! May expand this to more Pokemon depending on feedback and whether it's ok on processing. Main concern is making the run button too laggy - it raised some eyebrows.
589 lines
11 KiB
NASM
589 lines
11 KiB
NASM
DoInGameTradeDialogue:
|
|
; trigger the trade offer/action specified by wWhichTrade
|
|
call SaveScreenTilesToBuffer2
|
|
ld hl, TradeMons
|
|
ld a, [wWhichTrade]
|
|
ld b, 0
|
|
ld c, 3 + NAME_LENGTH ; new code from Chatot4444, this bypasses the 16-limit on in-game trades.
|
|
call AddNTimes ; Also from chatot4444
|
|
ld a, [hli]
|
|
ld [wInGameTradeGiveMonSpecies], a
|
|
ld a, [hli]
|
|
ld [wInGameTradeReceiveMonSpecies], a
|
|
ld a, [hli]
|
|
push af
|
|
ld de, wInGameTradeMonNick
|
|
ld bc, NAME_LENGTH
|
|
call CopyData
|
|
pop af
|
|
ld l, a
|
|
ld h, 0
|
|
ld de, InGameTradeTextPointers
|
|
add hl, hl
|
|
add hl, de
|
|
ld a, [hli]
|
|
ld [wInGameTradeTextPointerTablePointer], a
|
|
ld a, [hl]
|
|
ld [wInGameTradeTextPointerTablePointer + 1], a
|
|
ld a, [wInGameTradeGiveMonSpecies]
|
|
ld de, wInGameTradeGiveMonName
|
|
call InGameTrade_GetMonName
|
|
ld a, [wInGameTradeReceiveMonSpecies]
|
|
ld de, wInGameTradeReceiveMonName
|
|
call InGameTrade_GetMonName
|
|
ld hl, wCompletedInGameTradeFlags
|
|
ld a, [wWhichTrade]
|
|
ld c, a
|
|
ld b, FLAG_TEST
|
|
predef FlagActionPredef
|
|
ld a, c
|
|
and a
|
|
ld a, $4
|
|
ld [wInGameTradeTextPointerTableIndex], a
|
|
jr nz, .printText
|
|
; if the trade hasn't been done yet
|
|
xor a
|
|
ld [wInGameTradeTextPointerTableIndex], a
|
|
call .printText
|
|
ld a, $1
|
|
ld [wInGameTradeTextPointerTableIndex], a
|
|
call YesNoChoice
|
|
ld a, [wCurrentMenuItem]
|
|
and a
|
|
jr nz, .printText
|
|
call InGameTrade_DoTrade
|
|
jr c, .printText
|
|
ld a, [wInGameTradeGiveMonSpecies]; for trader
|
|
cp NO_MON ; for trader
|
|
jr z, .printText ; for trader
|
|
ld hl, TradedForText
|
|
call PrintText
|
|
.printText
|
|
ld hl, wInGameTradeTextPointerTableIndex
|
|
ld a, [hld] ; wInGameTradeTextPointerTableIndex
|
|
ld e, a
|
|
ld d, 0
|
|
ld a, [hld] ; wInGameTradeTextPointerTablePointer + 1
|
|
ld l, [hl] ; wInGameTradeTextPointerTablePointer
|
|
ld h, a
|
|
add hl, de
|
|
add hl, de
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
jp PrintText
|
|
|
|
; copies name of species a to hl
|
|
InGameTrade_GetMonName:
|
|
push de
|
|
ld [wd11e], a
|
|
call GetMonName
|
|
ld hl, wcd6d
|
|
pop de
|
|
ld bc, NAME_LENGTH
|
|
jp CopyData
|
|
|
|
INCLUDE "data/events/trades.asm"
|
|
|
|
InGameTrade_DoTrade:
|
|
xor a ; NORMAL_PARTY_MENU
|
|
ld [wPartyMenuTypeOrMessageID], a
|
|
dec a
|
|
ld [wUpdateSpritesEnabled], a
|
|
call DisplayPartyMenu
|
|
push af
|
|
call InGameTrade_RestoreScreen
|
|
pop af
|
|
ld a, $1
|
|
jp c, .tradeFailed ; jump if the player didn't select a pokemon
|
|
ld a, [wInGameTradeGiveMonSpecies]
|
|
cp NO_MON ; for trader
|
|
jr z, .skip_mon_check ; for trader
|
|
ld b, a
|
|
ld a, [wcf91]
|
|
cp b
|
|
ld a, $2
|
|
jp nz, .tradeFailed ; jump if the selected mon's species is not the required one - changed for trader
|
|
.skip_mon_check ; for trader
|
|
ld a, [wWhichPokemon]
|
|
ld hl, wPartyMon1Level
|
|
ld bc, wPartyMon2 - wPartyMon1
|
|
call AddNTimes
|
|
ld a, [hl]
|
|
ld [wCurEnemyLVL], a
|
|
ld a, [wInGameTradeGiveMonSpecies] ; for trader
|
|
cp NO_MON ; for trader
|
|
jr z, .skip_flag_set ; for trader
|
|
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]
|
|
push af
|
|
ld a, [wCurEnemyLVL]
|
|
push af
|
|
call LoadHpBarAndStatusTilePatterns
|
|
ld a, [wInGameTradeGiveMonSpecies] ; for trader
|
|
cp NO_MON ; for trader
|
|
jr nz, .normal_in_game_trade_data ; for trader
|
|
call TradeSelf_PrepareTradeData ; for trader
|
|
jr .self_trade_data ; for trader
|
|
.normal_in_game_trade_data ; for trader
|
|
call InGameTrade_PrepareTradeData
|
|
.self_trade_data ; for trader
|
|
predef InternalClockTradeAnim
|
|
pop af
|
|
ld [wCurEnemyLVL], a
|
|
pop af
|
|
ld [wWhichPokemon], a
|
|
ld a, [wInGameTradeReceiveMonSpecies]
|
|
ld [wcf91], a
|
|
xor a
|
|
push af
|
|
ld a, [wInGameTradeGiveMonSpecies] ; for trader
|
|
cp NO_MON ; for trader
|
|
jr z, .skip_swap_mons ; for trader
|
|
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
|
|
farcall RedrawMapView
|
|
and a
|
|
ld a, $3
|
|
jr .tradeSucceeded
|
|
.tradeFailed
|
|
scf
|
|
.tradeSucceeded
|
|
ld [wInGameTradeTextPointerTableIndex], a
|
|
ret
|
|
|
|
InGameTrade_RestoreScreen:
|
|
call GBPalWhiteOutWithDelay3
|
|
call RestoreScreenTilesAndReloadTilePatterns
|
|
call ReloadTilesetTilePatterns
|
|
call LoadScreenTilesFromBuffer2
|
|
call Delay3
|
|
call LoadGBPal
|
|
ld c, 10
|
|
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
|
|
ld hl, wPartyMonOT
|
|
ld bc, NAME_LENGTH
|
|
ld a, [wWhichPokemon]
|
|
call AddNTimes
|
|
ld de, wTradedPlayerMonOT
|
|
ld bc, NAME_LENGTH
|
|
call InGameTrade_CopyData
|
|
ld hl, InGameTrade_TrainerString
|
|
ld de, wTradedEnemyMonOT
|
|
call InGameTrade_CopyData
|
|
ld de, wLinkEnemyTrainerName
|
|
call InGameTrade_CopyData
|
|
ld hl, wPartyMon1OTID
|
|
ld bc, wPartyMon2 - wPartyMon1
|
|
ld a, [wWhichPokemon]
|
|
call AddNTimes
|
|
ld de, wTradedPlayerMonOTID
|
|
ld bc, $2
|
|
call InGameTrade_CopyData
|
|
call Random
|
|
ld hl, hRandomAdd
|
|
ld de, wTradedEnemyMonOTID
|
|
jp CopyData
|
|
|
|
InGameTrade_CopyData:
|
|
push hl
|
|
push bc
|
|
call CopyData
|
|
pop bc
|
|
pop hl
|
|
ret
|
|
|
|
InGameTrade_CopyDataToReceivedMon:
|
|
ld hl, wPartyMonNicks
|
|
ld bc, NAME_LENGTH
|
|
call InGameTrade_GetReceivedMonPointer
|
|
ld hl, wInGameTradeMonNick
|
|
ld bc, NAME_LENGTH
|
|
call CopyData
|
|
ld hl, wPartyMonOT
|
|
ld bc, NAME_LENGTH
|
|
call InGameTrade_GetReceivedMonPointer
|
|
ld hl, InGameTrade_TrainerString
|
|
ld bc, NAME_LENGTH
|
|
call CopyData
|
|
ld hl, wPartyMon1OTID
|
|
ld bc, wPartyMon2 - wPartyMon1
|
|
call InGameTrade_GetReceivedMonPointer
|
|
ld hl, wTradedEnemyMonOTID
|
|
ld bc, $2
|
|
jp CopyData
|
|
|
|
; the received mon's index is (partyCount - 1),
|
|
; so this adds bc to hl (partyCount - 1) times and moves the result to de
|
|
InGameTrade_GetReceivedMonPointer:
|
|
ld a, [wPartyCount]
|
|
dec a
|
|
call AddNTimes
|
|
ld e, l
|
|
ld d, h
|
|
ret
|
|
|
|
InGameTrade_TrainerString:
|
|
db "<TRAINER>@@@@@@@@@@"
|
|
|
|
InGameTradeTextPointers:
|
|
; entries correspond to TRADE_DIALOGSET_* constants
|
|
dw TradeTextPointers1
|
|
dw TradeTextPointers2
|
|
dw TradeTextPointers3
|
|
dw TradeTextPointers4
|
|
dw TradeTextPointers5
|
|
dw TradeTextPointers6 ; Combat Tauros
|
|
dw TradeTextPointers7 ; Aqua Tauros
|
|
dw TradeTextPointers8 ; Blaze Tauros
|
|
dw TradeTextPointersBill
|
|
dw TradeTextPointersGramps
|
|
|
|
TradeTextPointers1:
|
|
dw WannaTrade1Text
|
|
dw NoTrade1Text
|
|
dw WrongMon1Text
|
|
dw Thanks1Text
|
|
dw AfterTrade1Text
|
|
|
|
TradeTextPointers2:
|
|
dw WannaTrade2Text
|
|
dw NoTrade2Text
|
|
dw WrongMon2Text
|
|
dw Thanks2Text
|
|
dw AfterTrade2Text
|
|
|
|
TradeTextPointers3:
|
|
dw WannaTrade3Text
|
|
dw NoTrade3Text
|
|
dw WrongMon3Text
|
|
dw Thanks3Text
|
|
dw AfterTrade3Text
|
|
|
|
TradeTextPointers4:
|
|
dw WannaTrade4Text
|
|
dw NoTrade4Text
|
|
dw WrongMon1Text
|
|
dw Thanks4Text
|
|
dw AfterTrade1Text
|
|
|
|
TradeTextPointers5:
|
|
dw WannaTrade5Text
|
|
dw NoTrade5Text
|
|
dw WrongMon3Text
|
|
dw Thanks1Text
|
|
dw AfterTrade1Text
|
|
|
|
TradeTextPointers6: ; Combat Tauros
|
|
dw WannaTrade6Text
|
|
dw NoTrade1Text
|
|
dw WrongMon6Text
|
|
dw Thanks6Text
|
|
dw AfterTrade6Text
|
|
|
|
TradeTextPointers7: ; Aqua Tauros
|
|
dw WannaTrade7Text
|
|
dw NoTrade1Text
|
|
dw WrongMon7Text
|
|
dw Thanks6Text
|
|
dw AfterTrade7Text
|
|
|
|
TradeTextPointers8: ; Aqua Tauros
|
|
dw WannaTrade8Text
|
|
dw NoTrade1Text
|
|
dw WrongMon8Text
|
|
dw Thanks6Text
|
|
dw AfterTrade8Text
|
|
|
|
TradeTextPointersBill: ; Bill
|
|
dw BillWannaTradeText
|
|
dw BillNoTradeText
|
|
dw BillWrongMonText
|
|
dw BillThanksText
|
|
dw BillAfterTradeText
|
|
|
|
TradeTextPointersGramps: ; Bill's grandfather
|
|
dw GrampsWannaTradeText
|
|
dw GrampsNoTradeText
|
|
dw GrampsWrongMonText
|
|
dw GrampsThanksText
|
|
dw GrampsAfterTradeText
|
|
|
|
ConnectCableText:
|
|
text_far _ConnectCableText
|
|
text_end
|
|
|
|
TradedForText:
|
|
text_far _TradedForText
|
|
sound_get_key_item
|
|
text_pause
|
|
text_end
|
|
|
|
WannaTrade1Text:
|
|
text_far _WannaTrade1Text
|
|
text_end
|
|
|
|
NoTrade1Text:
|
|
text_far _NoTrade1Text
|
|
text_end
|
|
|
|
WrongMon1Text:
|
|
text_far _WrongMon1Text
|
|
text_end
|
|
|
|
Thanks1Text:
|
|
text_far _Thanks1Text
|
|
text_end
|
|
|
|
AfterTrade1Text:
|
|
text_far _AfterTrade1Text
|
|
text_end
|
|
|
|
WannaTrade2Text:
|
|
text_far _WannaTrade2Text
|
|
text_end
|
|
|
|
NoTrade2Text:
|
|
text_far _NoTrade2Text
|
|
text_end
|
|
|
|
WrongMon2Text:
|
|
text_far _WrongMon2Text
|
|
text_end
|
|
|
|
Thanks2Text:
|
|
text_far _Thanks2Text
|
|
text_end
|
|
|
|
AfterTrade2Text:
|
|
text_far _AfterTrade2Text
|
|
text_end
|
|
|
|
WannaTrade3Text:
|
|
text_far _WannaTrade3Text
|
|
text_end
|
|
|
|
NoTrade3Text:
|
|
text_far _NoTrade3Text
|
|
text_end
|
|
|
|
WrongMon3Text:
|
|
text_far _WrongMon3Text
|
|
text_end
|
|
|
|
Thanks3Text:
|
|
text_far _Thanks3Text
|
|
text_end
|
|
|
|
AfterTrade3Text:
|
|
text_far _AfterTrade3Text
|
|
text_end
|
|
|
|
WannaTrade4Text:
|
|
text_far _WannaTrade4Text
|
|
text_end
|
|
|
|
NoTrade4Text:
|
|
text_far _NoTrade4Text
|
|
text_end
|
|
|
|
Thanks4Text:
|
|
text_far _Thanks4Text
|
|
text_end
|
|
|
|
WannaTrade5Text:
|
|
text_far _WannaTrade5Text
|
|
text_end
|
|
|
|
NoTrade5Text:
|
|
text_far _NoTrade5Text
|
|
text_end
|
|
|
|
WannaTrade6Text:
|
|
text_far _WannaTrade6Text
|
|
text_end
|
|
|
|
WrongMon6Text:
|
|
text_far _WrongMon6Text
|
|
text_end
|
|
|
|
Thanks6Text:
|
|
text_far _Thanks6Text
|
|
text_end
|
|
|
|
AfterTrade6Text:
|
|
text_far _AfterTrade6Text
|
|
text_end
|
|
|
|
WannaTrade7Text:
|
|
text_far _WannaTrade7Text
|
|
text_end
|
|
|
|
WrongMon7Text:
|
|
text_far _WrongMon7Text
|
|
text_end
|
|
|
|
AfterTrade7Text:
|
|
text_far _AfterTrade7Text
|
|
text_end
|
|
|
|
WannaTrade8Text:
|
|
text_far _WannaTrade8Text
|
|
text_end
|
|
|
|
WrongMon8Text:
|
|
text_far _WrongMon8Text
|
|
text_end
|
|
|
|
AfterTrade8Text:
|
|
text_far _AfterTrade8Text
|
|
text_end
|
|
|
|
BillWannaTradeText:
|
|
text "BILL: Say, bud,"
|
|
line "do you happen"
|
|
cont "to have an"
|
|
cont "ARCANINE?"
|
|
|
|
para "I caught this"
|
|
line "special one in"
|
|
cont "my experiments,"
|
|
cont "but it's not"
|
|
cont "tame at all."
|
|
|
|
para "If you trade"
|
|
line "me yours, you"
|
|
cont "can have it!"
|
|
done
|
|
text_end
|
|
|
|
BillNoTradeText:
|
|
text "No? Well, it"
|
|
line "isn't going"
|
|
cont "anywhere..."
|
|
done
|
|
text_end
|
|
|
|
BillWrongMonText:
|
|
text "That's no"
|
|
line "ARCANINE, bud!"
|
|
cont "You trying to"
|
|
cont "con me?"
|
|
done
|
|
text_end
|
|
|
|
BillThanksText:
|
|
text "Thanks a bunch!"
|
|
done
|
|
text_end
|
|
|
|
BillAfterTradeText:
|
|
text "I've been working"
|
|
line "on a machine to"
|
|
cont "connect with the"
|
|
cont "past."
|
|
|
|
para "That's how I got"
|
|
line "that ARCANINE!"
|
|
|
|
para "Take care of it,"
|
|
line "would ya?"
|
|
done
|
|
text_end
|
|
|
|
GrampsWannaTradeText:
|
|
text "Hmm? You've met"
|
|
line "BILL?"
|
|
|
|
para "He's my grandson!"
|
|
|
|
para "He gave me this"
|
|
line "ELECTRODE that"
|
|
cont "reminds me of my"
|
|
cont "younger years,"
|
|
cont "but..."
|
|
|
|
para "It's just too"
|
|
line "aggressive! Do"
|
|
cont "you mind trading"
|
|
cont "me a more modern"
|
|
cont "one?"
|
|
done
|
|
text_end
|
|
|
|
GrampsNoTradeText:
|
|
text "No? Oh..."
|
|
done
|
|
text_end
|
|
|
|
GrampsWrongMonText:
|
|
text "My eyes aren't"
|
|
line "what they used"
|
|
cont "to be..."
|
|
|
|
para "But that's no"
|
|
line "ELECTRODE!"
|
|
done
|
|
text_end
|
|
|
|
GrampsThanksText:
|
|
text "Thank you so"
|
|
line "much!"
|
|
done
|
|
text_end
|
|
|
|
GrampsAfterTradeText:
|
|
text "I don't know"
|
|
line "where BILL got"
|
|
cont "that ELECTRODE."
|
|
|
|
para "He said something"
|
|
line "about a time"
|
|
cont "machine..."
|
|
|
|
para "That has to be"
|
|
line "impossible..."
|
|
done
|
|
text_end
|
|
|