summaryrefslogtreecommitdiff
path: root/src/engine/starter_deck.asm
blob: 0500b4a2d14656461e0b5152168ac2821193fbfe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
; adds the chosen starter deck to the player's first deck configuration
; and also adds to the collection its corresponding extra cards
; input:
; - a = starter deck chosen
;   $0 = Charmander
;   $1 = Squirtle
;   $2 = Bulbasaur
_AddStarterDeck:
	add a
	ld e, a
	ld d, 0
	ld hl, .StarterCardIDs
	add hl, de
	ld a, PLAYER_TURN
	ldh [hWhoseTurn], a
	ld a, [hli] ; main deck
	add 2
	push hl
	ld hl, sDeck1
	call CopyDeckNameAndCards
	pop hl
	call SwapTurn
	ld a, [hli] ; extra deck
	add 2
	call LoadDeck
	call SwapTurn

; wPlayerDeck = main starter deck
; wOpponentDeck = extra cards
	call EnableSRAM
	ld h, HIGH(sCardCollection)
	ld de, wPlayerDeck
	ld c, DECK_SIZE
.loop_main_cards
	ld a, [de]
	inc de
	ld l, a
	res CARD_NOT_OWNED_F, [hl]
	dec c
	jr nz, .loop_main_cards

	ld h, HIGH(sCardCollection)
	ld de, wOpponentDeck
	ld c, 30 ; number of extra cards
.loop_extra_cards
	ld a, [de]
	inc de
	ld l, a
	res CARD_NOT_OWNED_F, [hl]
	inc [hl]
	dec c
	jr nz, .loop_extra_cards
	call DisableSRAM
	ret

.StarterCardIDs
	; main deck, extra cards
	db CHARMANDER_AND_FRIENDS_DECK_ID, CHARMANDER_EXTRA_DECK_ID
	db SQUIRTLE_AND_FRIENDS_DECK_ID,   SQUIRTLE_EXTRA_DECK_ID
	db BULBASAUR_AND_FRIENDS_DECK_ID,  BULBASAUR_EXTRA_DECK_ID

; clears saved data (card Collection/saved decks/Card Pop! data/etc)
; then adds the starter decks as saved decks
; marks all cards in Collection as not owned
InitSaveData:
; clear card and deck save data
	call EnableSRAM
	ld a, PLAYER_TURN
	ldh [hWhoseTurn], a
	ld hl, sCardAndDeckSaveData
	ld bc, sCardAndDeckSaveDataEnd - sCardAndDeckSaveData
.loop_clear
	xor a
	ld [hli], a
	dec bc
	ld a, c
	or b
	jr nz, .loop_clear

; add the starter decks
	ld a, CHARMANDER_AND_FRIENDS_DECK
	ld hl, sSavedDeck1
	call CopyDeckNameAndCards
	ld a, SQUIRTLE_AND_FRIENDS_DECK
	ld hl, sSavedDeck2
	call CopyDeckNameAndCards
	ld a, BULBASAUR_AND_FRIENDS_DECK
	ld hl, sSavedDeck3
	call CopyDeckNameAndCards

; marks all cards in Collection to not owned
	call EnableSRAM
	ld hl, sCardCollection
	ld a, CARD_NOT_OWNED
.loop_collection
	ld [hl], a
	inc l
	jr nz, .loop_collection

	ld hl, sCurrentDuel
	xor a
	ld [hli], a
	ld [hli], a ; sCurrentDuelChecksum
	ld [hl], a

; clears Card Pop! names
	ld hl, sCardPopNameList
	ld c, CARDPOP_NAME_LIST_MAX_ELEMS
.loop_card_pop_names
	ld [hl], $0
	ld de, NAME_BUFFER_LENGTH
	add hl, de
	dec c
	jr nz, .loop_card_pop_names

; saved configuration options
	ld a, 2
	ld [sPrinterContrastLevel], a
	ld a, $2
	ld [sTextSpeed], a
	ld [wTextSpeed], a

; miscellaneous data
	xor a
	ld [sAnimationsDisabled], a
	ld [sSkipDelayAllowed], a
	ld [s0a004], a
	ld [sTotalCardPopsDone], a
	ld [sReceivedLegendaryCards], a
	farcall InitPromotionalCardAndDeckCounterSaveData
	call DisableSRAM
	ret

; input:
;    a = Deck ID
;    hl = destination to copy
CopyDeckNameAndCards:
	push de
	push bc
	push hl
	call LoadDeck
	jr c, .done
	call .CopyDeckName
	pop hl
	call EnableSRAM
	push hl
	ld de, wDefaultText
.loop_write_name
	ld a, [de]
	inc de
	ld [hli], a
	or a
	jr nz, .loop_write_name
	pop hl

	push hl
	ld de, DECK_NAME_SIZE
	add hl, de
	ld de, wPlayerDeck
	ld c, DECK_SIZE
.loop_write_cards
	ld a, [de]
	inc de
	ld [hli], a
	dec c
	jr nz, .loop_write_cards
	call DisableSRAM
	or a
.done
	pop hl
	pop bc
	pop de
	ret

.CopyDeckName
	ld hl, wDeckName
	ld a, [hli]
	ld h, [hl]
	ld l, a
	ld de, wDefaultText
	call CopyText
	ret