feat: add Nadia and Smasher opponents with full media assets

- Add sprite images, speech audio, and animation videos for Nadia and
  The Smasher opponents
- Update opponents.json with new character definitions and speech cues
- Fix 2048 UI: reposition buttons and add Leave button
This commit is contained in:
Brian Fertig 2026-06-14 14:32:41 -06:00
parent a8e21a3bc6
commit f395f208ae
38 changed files with 61 additions and 2 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 MiB

After

Width:  |  Height:  |  Size: 4.3 MiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -558,6 +558,64 @@
"blackwind-pick"
]
}
},
{
"id": "nadia",
"spriteIndex": 20,
"name": "Nadia",
"bio": "She's here from the future to learn our games and study our culture.",
"speech": {
"intro": [
"nadia-intro-01",
"nadia-intro-02"
],
"happy": [
"nadia-happy-01",
"nadia-happy-02",
"nadia-happy-03",
"nadia-happy-04",
"nadia-happy-05"
],
"upset": [
"nadia-upset-01",
"nadia-upset-02",
"nadia-upset-03",
"nadia-upset-04",
"nadia-upset-05"
],
"pick": [
"nadia-pick"
]
}
},
{
"id": "smasher",
"spriteIndex": 19,
"name": "The Smasher",
"bio": "Oooooooh yeah brother!!! You wanna play with The Smasher?!",
"speech": {
"intro": [
"smasher-intro-01",
"smasher-intro-02"
],
"happy": [
"smasher-happy-01",
"smasher-happy-02",
"smasher-happy-03",
"smasher-happy-04",
"smasher-happy-05"
],
"upset": [
"smasher-upset-01",
"smasher-upset-02",
"smasher-upset-03",
"smasher-upset-04",
"smasher-upset-05"
],
"pick": [
"smasher-pick"
]
}
}
]
}

View File

@ -117,8 +117,9 @@ export default class Game2048 extends Phaser.Scene {
fontFamily: FONT_TITLE, fontSize: '44px', color: COLORS.textHex,
}).setOrigin(0.5, 0).setDepth(D.ui);
new Button(this, GAME_WIDTH - 270, 65, 'New Game', () => this._newGame(), { variant: 'ghost', width: 200, height: 54, fontSize: 22 }).setDepth(D.ui);
new Button(this, GAME_WIDTH - 60, 65, 'Theme', () => this._showSchemePicker(), { variant: 'ghost', width: 110, height: 54, fontSize: 22 }).setDepth(D.ui);
new Button(this, GAME_WIDTH - 270, 165, 'New Game', () => this._newGame(), { variant: 'ghost', width: 200, height: 54, fontSize: 22 }).setDepth(D.ui);
new Button(this, GAME_WIDTH - 60, 165, 'Theme', () => this._showSchemePicker(), { variant: 'ghost', width: 110, height: 54, fontSize: 22 }).setDepth(D.ui);
new Button(this, GAME_WIDTH - 60, GAME_HEIGHT - 60, 'Leave', () => this.scene.start('GameMenu'), { variant: 'ghost', width: 110, height: 54, fontSize: 22 }).setDepth(D.ui);
}
_drawScoreBox(x, y, label) {