summaryrefslogtreecommitdiff
path: root/engine/npctrade.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/npctrade.asm')
-rwxr-xr-xengine/npctrade.asm620
1 files changed, 620 insertions, 0 deletions
diff --git a/engine/npctrade.asm b/engine/npctrade.asm
new file mode 100755
index 000000000..97109cdd4
--- /dev/null
+++ b/engine/npctrade.asm
@@ -0,0 +1,620 @@
+
+; Trade struct
+TRADE_DIALOG EQU 0
+TRADE_GIVEMON EQU 1
+TRADE_GETMON EQU 2
+TRADE_NICK EQU 3
+TRADE_DVS EQU 14
+TRADE_ITEM EQU 16
+TRADE_OT_ID EQU 17
+TRADE_OT_NAME EQU 19
+TRADE_GENDER EQU 30
+TRADE_PADDING EQU 31
+
+; Trade dialogs
+TRADE_INTRO EQU 0
+TRADE_CANCEL EQU 1
+TRADE_WRONG EQU 2
+TRADE_COMPLETE EQU 3
+TRADE_AFTER EQU 4
+
+NPCTrade:: ; fcba8
+ ld a, e
+ ld [wJumptableIndex], a
+ call Functionfcc59
+ ld b, CHECK_FLAG
+ call TradeFlagAction
+ ld a, TRADE_AFTER
+ jr nz, .done
+
+ ld a, TRADE_INTRO
+ call PrintTradeText
+
+ call YesNoBox
+ ld a, TRADE_CANCEL
+ jr c, .done
+
+; Select givemon from party
+ ld b, 6
+ callba Function5001d
+ ld a, TRADE_CANCEL
+ jr c, .done
+
+ ld e, TRADE_GIVEMON
+ call GetTradeAttribute
+ ld a, [CurPartySpecies]
+ cp [hl]
+ ld a, TRADE_WRONG
+ jr nz, .done
+
+ call CheckTradeGender
+ ld a, TRADE_WRONG
+ jr c, .done
+
+ ld b, SET_FLAG
+ call TradeFlagAction
+
+ ld hl, ConnectLinkCableText
+ call PrintText
+
+ call Functionfcc63
+ call Functionfcc07
+ call GetTradeMonNames
+
+ ld hl, TradedForText
+ call PrintText
+
+ call RestartMapMusic
+
+ ld a, TRADE_COMPLETE
+
+.done
+ call PrintTradeText
+ ret
+; fcc07
+
+Functionfcc07: ; fcc07
+ call DisableSpriteUpdates
+ ld a, [wJumptableIndex]
+ push af
+ ld a, [wcf64]
+ push af
+ predef Function28f24
+ pop af
+ ld [wcf64], a
+ pop af
+ ld [wJumptableIndex], a
+ call Function2b74
+ ret
+; fcc23
+
+CheckTradeGender: ; fcc23
+ xor a
+ ld [MonType], a
+
+ ld e, TRADE_GENDER
+ call GetTradeAttribute
+ ld a, [hl]
+ and a
+ jr z, .asm_fcc46
+ cp 1
+ jr z, .asm_fcc3e
+
+ callba GetGender
+ jr nz, .asm_fcc48
+ jr .asm_fcc46
+
+.asm_fcc3e
+ callba GetGender
+ jr z, .asm_fcc48
+
+.asm_fcc46
+ and a
+ ret
+
+.asm_fcc48
+ scf
+ ret
+; fcc4a
+
+TradeFlagAction: ; fcc4a
+ ld hl, wd960
+ ld a, [wJumptableIndex]
+ ld c, a
+ predef FlagPredef
+ ld a, c
+ and a
+ ret
+; fcc59
+
+Functionfcc59: ; fcc59
+ ld e, TRADE_DIALOG
+ call GetTradeAttribute
+ ld a, [hl]
+ ld [wcf64], a
+ ret
+; fcc63
+
+Functionfcc63: ; fcc63
+ ld e, TRADE_GIVEMON
+ call GetTradeAttribute
+ ld a, [hl]
+ ld [wc6d0], a
+
+ ld e, TRADE_GETMON
+ call GetTradeAttribute
+ ld a, [hl]
+ ld [wc702], a
+
+ ld a, [wc6d0]
+ ld de, wc6d1
+ call Functionfcde8
+ call Functionfcdf4
+
+ ld a, [wc702]
+ ld de, wc703
+ call Functionfcde8
+ call Functionfcdf4
+
+ ld hl, PartyMonOT
+ ld bc, NAME_LENGTH
+ call Functionfcdd7
+ ld de, wc6f2
+ call Functionfcdf4
+
+ ld hl, PlayerName
+ ld de, wc6e7
+ call Functionfcdf4
+
+ ld hl, PartyMon1ID
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call Functionfcdd7
+ ld de, wc6ff
+ call Functionfce0f
+
+ ld hl, PartyMon1DVs
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call Functionfcdd7
+ ld de, wc6fd
+ call Functionfce0f
+
+ ld hl, PartyMon1Species
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call Functionfcdd7
+ ld b, h
+ ld c, l
+ callba GetCaughtGender
+ ld a, c
+ ld [wc701], a
+
+ ld e, TRADE_DIALOG
+ call GetTradeAttribute
+ ld a, [hl]
+ cp TRADE_COMPLETE
+ ld a, 1
+ jr c, .asm_fcce6
+ ld a, 2
+.asm_fcce6
+ ld [wEnemyCharging], a
+
+ ld hl, PartyMon1Level
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call Functionfcdd7
+ ld a, [hl]
+ ld [CurPartyLevel], a
+ ld a, [wc702]
+ ld [CurPartySpecies], a
+ xor a
+ ld [MonType], a
+ ld [wPokemonWithdrawDepositParameter], a
+ callab Functione039
+ predef TryAddMonToParty
+
+ ld e, TRADE_DIALOG
+ call GetTradeAttribute
+ ld a, [hl]
+ cp TRADE_COMPLETE
+ ld b, 0
+ jr c, .asm_fcd1c
+ ld b, 1
+.asm_fcd1c
+ callba SetGiftPartyMonCaughtData
+
+ ld e, TRADE_NICK
+ call GetTradeAttribute
+ ld de, wc70e
+ call Functionfcdf4
+
+ ld hl, PartyMonNicknames
+ ld bc, PKMN_NAME_LENGTH
+ call Functionfcdde
+ ld hl, wc70e
+ call Functionfcdf4
+
+ ld e, TRADE_OT_NAME
+ call GetTradeAttribute
+ push hl
+ ld de, wc724
+ call Functionfcdf4
+ pop hl
+ ld de, wc719
+ call Functionfcdf4
+
+ ld hl, PartyMonOT
+ ld bc, NAME_LENGTH
+ call Functionfcdde
+ ld hl, wc724
+ call Functionfcdf4
+
+ ld e, TRADE_DVS
+ call GetTradeAttribute
+ ld de, wEnemyTrappingMove
+ call Functionfce0f
+
+ ld hl, PartyMon1DVs
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call Functionfcdde
+ ld hl, wEnemyTrappingMove
+ call Functionfce0f
+
+ ld e, TRADE_OT_ID
+ call GetTradeAttribute
+ ld de, wPlayerCharging
+ call Functionfce15
+
+ ld hl, PartyMon1ID
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call Functionfcdde
+ ld hl, wEnemyWrapCount
+ call Functionfce0f
+
+ ld e, TRADE_ITEM
+ call GetTradeAttribute
+ push hl
+ ld hl, PartyMon1Item
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call Functionfcdde
+ pop hl
+ ld a, [hl]
+ ld [de], a
+
+ push af
+ push bc
+ push de
+ push hl
+ ld a, [CurPartyMon]
+ push af
+ ld a, [PartyCount]
+ dec a
+ ld [CurPartyMon], a
+ callba Functione134
+ pop af
+ ld [CurPartyMon], a
+ pop hl
+ pop de
+ pop bc
+ pop af
+ ret
+; fcdc2
+
+
+GetTradeAttribute: ; 0xfcdc2
+ ld d, 0
+ push de
+ ld a, [wJumptableIndex]
+ and $f
+ swap a
+ ld e, a
+ ld d, 0
+ ld hl, NPCTrades
+rept 2
+ add hl, de
+endr
+ pop de
+ add hl, de
+ ret
+; 0xfcdd7
+
+Functionfcdd7: ; fcdd7
+ ld a, [CurPartyMon]
+ call AddNTimes
+ ret
+; fcdde
+
+Functionfcdde: ; fcdde
+ ld a, [PartyCount]
+ dec a
+ call AddNTimes
+ ld e, l
+ ld d, h
+ ret
+; fcde8
+
+Functionfcde8: ; fcde8
+ push de
+ ld [wd265], a
+ call GetBasePokemonName
+ ld hl, StringBuffer1
+ pop de
+ ret
+; fcdf4
+
+Functionfcdf4: ; fcdf4
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ ret
+; fcdfb
+
+Functionfcdfb: ; fcdfb
+ ld bc, 4
+ call CopyBytes
+ ld a, $50
+ ld [de], a
+ ret
+; fce05
+
+Functionfce05: ; fce05
+ ld bc, 3
+ call CopyBytes
+ ld a, $50
+ ld [de], a
+ ret
+; fce0f
+
+Functionfce0f: ; fce0f
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ ret
+; fce15
+
+Functionfce15: ; fce15
+ ld a, [hli]
+ ld [de], a
+ dec de
+ ld a, [hl]
+ ld [de], a
+ ret
+; fce1b
+
+GetTradeMonNames: ; fce1b
+ ld e, TRADE_GETMON
+ call GetTradeAttribute
+ ld a, [hl]
+ call Functionfcde8
+
+ ld de, StringBuffer2
+ call Functionfcdf4
+
+ ld e, TRADE_GIVEMON
+ call GetTradeAttribute
+ ld a, [hl]
+ call Functionfcde8
+
+ ld de, wd050
+ call Functionfcdf4
+
+ ld hl, StringBuffer1
+.loop
+ ld a, [hli]
+ cp "@"
+ jr nz, .loop
+
+ dec hl
+ push hl
+ ld e, TRADE_GENDER
+ call GetTradeAttribute
+ ld a, [hl]
+ pop hl
+ and a
+ ret z
+
+ cp 1
+ ld a, "♂"
+ jr z, .done
+ ld a, "♀"
+.done
+ ld [hli], a
+ ld [hl], "@"
+ ret
+; fce58
+
+
+NPCTrades: ; fce58
+ db 0, ABRA, MACHOP, "MUSCLE@@@@@", $37, $66, GOLD_BERRY, $54, $92, "MIKE@@@@@@@", 0, 0
+ db 0, BELLSPROUT, ONIX, "ROCKY@@@@@@", $96, $66, BITTER_BERRY, $1e, $bf, "KYLE@@@@@@@", 0, 0
+ db 1, KRABBY, VOLTORB, "VOLTY@@@@@@", $98, $88, PRZCUREBERRY, $05, $72, "TIM@@@@@@@@", 0, 0
+ db 3, DRAGONAIR, DODRIO, "DORIS@@@@@@", $77, $66, SMOKE_BALL, $1b, $01, "EMY@@@@@@@@", 2, 0
+ db 2, HAUNTER, XATU, "PAUL@@@@@@@", $96, $86, MYSTERYBERRY, $00, $3d, "CHRIS@@@@@@", 0, 0
+ db 3, CHANSEY, AERODACTYL, "AEROY@@@@@@", $96, $66, GOLD_BERRY, $7b, $67, "KIM@@@@@@@@", 0, 0
+ db 0, DUGTRIO, MAGNETON, "MAGGIE@@@@@", $96, $66, METAL_COAT, $a2, $c3, "FOREST@@@@@", 0, 0
+; fcf38
+
+
+PrintTradeText: ; fcf38
+ push af
+ call GetTradeMonNames
+ pop af
+ ld bc, 2 * 4
+ ld hl, TradeTexts
+ call AddNTimes
+ ld a, [wcf64]
+ ld c, a
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call PrintText
+ ret
+; fcf53
+
+TradeTexts: ; fcf53
+; intro
+ dw TradeIntroText1
+ dw TradeIntroText2
+ dw TradeIntroText3
+ dw TradeIntroText4
+
+; cancel
+ dw TradeCancelText1
+ dw TradeCancelText2
+ dw TradeCancelText3
+ dw TradeCancelText4
+
+; wrong mon
+ dw TradeWrongText1
+ dw TradeWrongText2
+ dw TradeWrongText3
+ dw TradeWrongText4
+
+; completed
+ dw TradeCompleteText1
+ dw TradeCompleteText2
+ dw TradeCompleteText3
+ dw TradeCompleteText4
+
+; after
+ dw TradeAfterText1
+ dw TradeAfterText2
+ dw TradeAfterText3
+ dw TradeAfterText4
+; fcf7b
+
+
+ConnectLinkCableText: ; 0xfcf7b
+ ; OK, connect the Game Link Cable.
+ text_jump UnknownText_0x1bd407
+ db "@"
+; 0xfcf80
+
+
+TradedForText: ; 0xfcf80
+ ; traded givemon for getmon
+ text_jump UnknownText_0x1bd429
+ start_asm
+
+ ld de, MUSIC_NONE
+ call PlayMusic
+ call DelayFrame
+ ld hl, .done
+ ret
+
+.done
+ ; sound0x0A
+ ; interpret_data
+ text_jump UnknownText_0x1bd445
+ db "@"
+; 0xfcf97
+
+
+TradeIntroText1: ; 0xfcf97
+ ; I collect #MON. Do you have @ ? Want to trade it for my @ ?
+ text_jump UnknownText_0x1bd449
+ db "@"
+; 0xfcf9c
+
+TradeCancelText1: ; 0xfcf9c
+ ; You don't want to trade? Aww…
+ text_jump UnknownText_0x1bd48c
+ db "@"
+; 0xfcfa1
+
+TradeWrongText1: ; 0xfcfa1
+ ; Huh? That's not @ . What a letdown…
+ text_jump UnknownText_0x1bd4aa
+ db "@"
+; 0xfcfa6
+
+TradeCompleteText1: ; 0xfcfa6
+ ; Yay! I got myself @ ! Thanks!
+ text_jump UnknownText_0x1bd4d2
+ db "@"
+; 0xfcfab
+
+TradeAfterText1: ; 0xfcfab
+ ; Hi, how's my old @ doing?
+ text_jump UnknownText_0x1bd4f4
+ db "@"
+; 0xfcfb0
+
+
+TradeIntroText2:
+TradeIntroText3: ; 0xfcfb0
+ ; Hi, I'm looking for this #MON. If you have @ , would you trade it for my @ ?
+ text_jump UnknownText_0x1bd512
+ db "@"
+; 0xfcfb5
+
+TradeCancelText2:
+TradeCancelText3: ; 0xfcfb5
+ ; You don't have one either? Gee, that's really disappointing…
+ text_jump UnknownText_0x1bd565
+ db "@"
+; 0xfcfba
+
+TradeWrongText2:
+TradeWrongText3: ; 0xfcfba
+ ; You don't have @ ? That's too bad, then.
+ text_jump UnknownText_0x1bd5a1
+ db "@"
+; 0xfcfbf
+
+TradeCompleteText2: ; 0xfcfbf
+ ; Great! Thank you! I finally got @ .
+ text_jump UnknownText_0x1bd5cc
+ db "@"
+; 0xfcfc4
+
+TradeAfterText2: ; 0xfcfc4
+ ; Hi! The @ you traded me is doing great!
+ text_jump UnknownText_0x1bd5f4
+ db "@"
+; 0xfcfc9
+
+
+TradeIntroText4: ; 0xfcfc9
+ ; 's cute, but I don't have it. Do you have @ ? Want to trade it for my @ ?
+ text_jump UnknownText_0x1bd621
+ db "@"
+; 0xfcfce
+
+TradeCancelText4: ; 0xfcfce
+ ; You don't want to trade? Oh, darn…
+ text_jump UnknownText_0x1bd673
+ db "@"
+; 0xfcfd3
+
+TradeWrongText4: ; 0xfcfd3
+ ; That's not @ . Please trade with me if you get one.
+ text_jump UnknownText_0x1bd696
+ db "@"
+; 0xfcfd8
+
+TradeCompleteText4: ; 0xfcfd8
+ ; Wow! Thank you! I always wanted @ !
+ text_jump UnknownText_0x1bd6cd
+ db "@"
+; 0xfcfdd
+
+TradeAfterText4: ; 0xfcfdd
+ ; How is that @ I traded you doing? Your @ 's so cute!
+ text_jump UnknownText_0x1bd6f5
+ db "@"
+; 0xfcfe2
+
+
+TradeCompleteText3: ; 0xfcfe2
+ ; Uh? What happened?
+ text_jump UnknownText_0x1bd731
+ db "@"
+; 0xfcfe7
+
+TradeAfterText3: ; 0xfcfe7
+ ; Trading is so odd… I still have a lot to learn about it.
+ text_jump UnknownText_0x1bd745
+ db "@"
+; 0xfcfec