bump mission rewards and add first-clear card logic
- Increased gold rewards for several Imperial missions to improve progression pacing. - Reformatted `missions.json` for consistency (multi-line arrays). - Set default starting gold to 300 in `SaveManager`. - Implemented first-clear-only card rewards in `BattleScene`; subsequent wins grant gold but no duplicate cards. - Added consolation gold (50% of mission reward) on defeat. - Fixed `CollectionScene` input priority and improved terminal typing speed and line wrapping.
This commit is contained in:
parent
8b6ccba887
commit
739cf18603
Binary file not shown.
|
After Width: | Height: | Size: 181 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 157 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 178 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 165 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 181 KiB |
|
|
@ -668,7 +668,7 @@
|
||||||
{
|
{
|
||||||
"name": "legion",
|
"name": "legion",
|
||||||
"value": 1,
|
"value": 1,
|
||||||
"trigger": "passive"
|
"trigger": "preBattle"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -681,7 +681,7 @@
|
||||||
{
|
{
|
||||||
"name": "legion",
|
"name": "legion",
|
||||||
"value": 2,
|
"value": 2,
|
||||||
"trigger": "passive"
|
"trigger": "preBattle"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -694,7 +694,7 @@
|
||||||
{
|
{
|
||||||
"name": "legion",
|
"name": "legion",
|
||||||
"value": 3,
|
"value": 3,
|
||||||
"trigger": "passive"
|
"trigger": "preBattle"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -707,7 +707,7 @@
|
||||||
{
|
{
|
||||||
"name": "legion",
|
"name": "legion",
|
||||||
"value": 4,
|
"value": 4,
|
||||||
"trigger": "passive"
|
"trigger": "preBattle"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -720,7 +720,7 @@
|
||||||
{
|
{
|
||||||
"name": "legion",
|
"name": "legion",
|
||||||
"value": 5,
|
"value": 5,
|
||||||
"trigger": "passive"
|
"trigger": "preBattle"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -972,7 +972,7 @@
|
||||||
{
|
{
|
||||||
"name": "jam",
|
"name": "jam",
|
||||||
"value": 2,
|
"value": 2,
|
||||||
"trigger": "on_attack"
|
"trigger": "preBattle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "protect",
|
"name": "protect",
|
||||||
|
|
@ -990,7 +990,7 @@
|
||||||
{
|
{
|
||||||
"name": "jam",
|
"name": "jam",
|
||||||
"value": 4,
|
"value": 4,
|
||||||
"trigger": "on_attack"
|
"trigger": "preBattle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "protect",
|
"name": "protect",
|
||||||
|
|
@ -1008,7 +1008,7 @@
|
||||||
{
|
{
|
||||||
"name": "jam",
|
"name": "jam",
|
||||||
"value": 6,
|
"value": 6,
|
||||||
"trigger": "on_attack"
|
"trigger": "preBattle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "protect",
|
"name": "protect",
|
||||||
|
|
@ -1026,7 +1026,7 @@
|
||||||
{
|
{
|
||||||
"name": "jam",
|
"name": "jam",
|
||||||
"value": 9,
|
"value": 9,
|
||||||
"trigger": "on_attack"
|
"trigger": "preBattle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "protect",
|
"name": "protect",
|
||||||
|
|
@ -1044,7 +1044,7 @@
|
||||||
{
|
{
|
||||||
"name": "jam",
|
"name": "jam",
|
||||||
"value": 12,
|
"value": 12,
|
||||||
"trigger": "on_attack"
|
"trigger": "preBattle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "protect",
|
"name": "protect",
|
||||||
|
|
@ -1457,7 +1457,7 @@
|
||||||
{
|
{
|
||||||
"name": "legion",
|
"name": "legion",
|
||||||
"value": 2,
|
"value": 2,
|
||||||
"trigger": "passive"
|
"trigger": "preBattle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "heal",
|
"name": "heal",
|
||||||
|
|
@ -1475,7 +1475,7 @@
|
||||||
{
|
{
|
||||||
"name": "legion",
|
"name": "legion",
|
||||||
"value": 3,
|
"value": 3,
|
||||||
"trigger": "passive"
|
"trigger": "preBattle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "heal",
|
"name": "heal",
|
||||||
|
|
@ -1493,7 +1493,7 @@
|
||||||
{
|
{
|
||||||
"name": "legion",
|
"name": "legion",
|
||||||
"value": 5,
|
"value": 5,
|
||||||
"trigger": "passive"
|
"trigger": "preBattle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "heal",
|
"name": "heal",
|
||||||
|
|
@ -1511,7 +1511,7 @@
|
||||||
{
|
{
|
||||||
"name": "legion",
|
"name": "legion",
|
||||||
"value": 7,
|
"value": 7,
|
||||||
"trigger": "passive"
|
"trigger": "preBattle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "heal",
|
"name": "heal",
|
||||||
|
|
@ -1529,7 +1529,7 @@
|
||||||
{
|
{
|
||||||
"name": "legion",
|
"name": "legion",
|
||||||
"value": 9,
|
"value": 9,
|
||||||
"trigger": "passive"
|
"trigger": "preBattle"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "heal",
|
"name": "heal",
|
||||||
|
|
@ -3753,7 +3753,7 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"flavorText": "He demands a tithe of blood from all — even himself.",
|
"flavorText": "He demands a tithe of blood from all \u2014 even himself.",
|
||||||
"artKey": "bt_bloodlord_1"
|
"artKey": "bt_bloodlord_1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3802,6 +3802,8 @@ export class BattleScene extends Phaser.Scene {
|
||||||
}
|
}
|
||||||
|
|
||||||
_showResult() {
|
_showResult() {
|
||||||
|
if (this._resultShown) return;
|
||||||
|
this._resultShown = true;
|
||||||
if (this.autoTimer) this.autoTimer.remove();
|
if (this.autoTimer) this.autoTimer.remove();
|
||||||
const { width, height } = this.scale;
|
const { width, height } = this.scale;
|
||||||
const won = this.engine.winner === 'player';
|
const won = this.engine.winner === 'player';
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,11 @@ export class BootScene extends Phaser.Scene {
|
||||||
// Load all JSON data files
|
// Load all JSON data files
|
||||||
this.load.image('vs', 'assets/images/ui/vs.png');
|
this.load.image('vs', 'assets/images/ui/vs.png');
|
||||||
this.load.image('attacksFirst', 'assets/images/ui/attacksFirst.png');
|
this.load.image('attacksFirst', 'assets/images/ui/attacksFirst.png');
|
||||||
|
this.load.image('card_back_imperial', 'assets/images/cards/card_back_imperial.png');
|
||||||
|
this.load.image('card_back_raider', 'assets/images/cards/card_back_raider.png');
|
||||||
|
this.load.image('card_back_bloodthirsty', 'assets/images/cards/card_back_bloodthirsty.png');
|
||||||
|
this.load.image('card_back_xeno', 'assets/images/cards/card_back_xeno.png');
|
||||||
|
this.load.image('card_back_right', 'assets/images/cards/card_back_right.png');
|
||||||
this.load.spritesheet('attacks', 'assets/images/spritesheets/attacks.png', { frameWidth: 460, frameHeight: 460 });
|
this.load.spritesheet('attacks', 'assets/images/spritesheets/attacks.png', { frameWidth: 460, frameHeight: 460 });
|
||||||
this.load.json('cards', 'data/cards.json');
|
this.load.json('cards', 'data/cards.json');
|
||||||
this.load.json('packs', 'data/packs.json');
|
this.load.json('packs', 'data/packs.json');
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,14 @@ const RARITY_COLORS = {
|
||||||
legendary: 0xffaa00
|
legendary: 0xffaa00
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const CARD_BACK_KEYS = {
|
||||||
|
imperial: 'card_back_imperial',
|
||||||
|
raider: 'card_back_raider',
|
||||||
|
bloodthirsty: 'card_back_bloodthirsty',
|
||||||
|
xeno: 'card_back_xeno',
|
||||||
|
righteous: 'card_back_right'
|
||||||
|
};
|
||||||
|
|
||||||
const FACTION_LABELS = {
|
const FACTION_LABELS = {
|
||||||
imperial: 'IMPERIAL',
|
imperial: 'IMPERIAL',
|
||||||
raider: 'RAIDER',
|
raider: 'RAIDER',
|
||||||
|
|
@ -272,37 +280,10 @@ export class StoreScene extends Phaser.Scene {
|
||||||
// Card back container
|
// Card back container
|
||||||
const backContainer = this.add.container(cx, cardY).setDepth(101);
|
const backContainer = this.add.container(cx, cardY).setDepth(101);
|
||||||
|
|
||||||
// Back rectangle
|
// Card back image
|
||||||
const backRect = this.add.rectangle(0, 0, CARD_W, CARD_H, 0x1a1a2e)
|
const backKey = CARD_BACK_KEYS[pack.faction] || 'card_back_imperial';
|
||||||
.setStrokeStyle(3, factionColor);
|
const backImg = this.add.image(0, 0, backKey).setDisplaySize(CARD_W, CARD_H);
|
||||||
backContainer.add(backRect);
|
backContainer.add(backImg);
|
||||||
|
|
||||||
// Cross-hatch pattern
|
|
||||||
const hatch = this.add.graphics();
|
|
||||||
const hatchAlpha = 0.15;
|
|
||||||
hatch.lineStyle(1, factionColor, hatchAlpha);
|
|
||||||
for (let d = -CARD_H; d < CARD_W + CARD_H; d += 18) {
|
|
||||||
hatch.lineBetween(
|
|
||||||
Math.max(-CARD_W / 2, d - CARD_H / 2), Math.max(-CARD_H / 2, -d + CARD_W / 2 - CARD_H),
|
|
||||||
Math.min(CARD_W / 2, d + CARD_H / 2), Math.min(CARD_H / 2, -d + CARD_W / 2 + CARD_H)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
backContainer.add(hatch);
|
|
||||||
|
|
||||||
// Center emblem
|
|
||||||
const emblemCircle = this.add.circle(0, -15, 50, factionColor, 0.4)
|
|
||||||
.setStrokeStyle(3, factionColor, 0.8);
|
|
||||||
backContainer.add(emblemCircle);
|
|
||||||
const questionMark = this.add.text(0, -18, '?', {
|
|
||||||
fontSize: '52px', color: '#ffffff', fontFamily: 'RaiderCrusader'
|
|
||||||
}).setOrigin(0.5).setAlpha(0.7);
|
|
||||||
backContainer.add(questionMark);
|
|
||||||
|
|
||||||
// Faction label on back
|
|
||||||
const backLabel = this.add.text(0, 90, FACTION_LABELS[pack.faction] || '', {
|
|
||||||
fontSize: '16px', color: '#ffffff', fontFamily: 'Audiowide'
|
|
||||||
}).setOrigin(0.5).setAlpha(0.4);
|
|
||||||
backContainer.add(backLabel);
|
|
||||||
|
|
||||||
// Special golden border
|
// Special golden border
|
||||||
if (card._slotSpecial) {
|
if (card._slotSpecial) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue