Add expressions for male rival

pull/16/head
Flashfyre 2024-02-25 19:09:24 -05:00
parent e771da89b5
commit 4f2b266e71
5 changed files with 286 additions and 48 deletions

View File

@ -0,0 +1,230 @@
{
"textures": [
{
"image": "rival_m.png",
"format": "RGBA8888",
"size": {
"w": 186,
"h": 660
},
"scale": 1,
"frames": [
{
"filename": "serious_mhalf_fists",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 108,
"h": 135
},
"spriteSourceSize": {
"x": 8,
"y": 3,
"w": 98,
"h": 132
},
"frame": {
"x": 0,
"y": 0,
"w": 98,
"h": 132
}
},
{
"filename": "serious_mopen_fists",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 108,
"h": 135
},
"spriteSourceSize": {
"x": 8,
"y": 3,
"w": 98,
"h": 132
},
"frame": {
"x": 0,
"y": 132,
"w": 98,
"h": 132
}
},
{
"filename": "serious_smile_fists",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 108,
"h": 135
},
"spriteSourceSize": {
"x": 8,
"y": 3,
"w": 98,
"h": 132
},
"frame": {
"x": 0,
"y": 264,
"w": 98,
"h": 132
}
},
{
"filename": "angry_mhalf",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 108,
"h": 135
},
"spriteSourceSize": {
"x": 11,
"y": 3,
"w": 88,
"h": 132
},
"frame": {
"x": 0,
"y": 396,
"w": 88,
"h": 132
}
},
{
"filename": "neutral",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 108,
"h": 135
},
"spriteSourceSize": {
"x": 11,
"y": 3,
"w": 88,
"h": 132
},
"frame": {
"x": 0,
"y": 528,
"w": 88,
"h": 132
}
},
{
"filename": "neutral_eclosed",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 108,
"h": 135
},
"spriteSourceSize": {
"x": 11,
"y": 3,
"w": 88,
"h": 132
},
"frame": {
"x": 88,
"y": 396,
"w": 88,
"h": 132
}
},
{
"filename": "serious",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 108,
"h": 135
},
"spriteSourceSize": {
"x": 11,
"y": 3,
"w": 88,
"h": 132
},
"frame": {
"x": 88,
"y": 528,
"w": 88,
"h": 132
}
},
{
"filename": "shock",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 108,
"h": 135
},
"spriteSourceSize": {
"x": 11,
"y": 3,
"w": 88,
"h": 132
},
"frame": {
"x": 98,
"y": 0,
"w": 88,
"h": 132
}
},
{
"filename": "smile",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 108,
"h": 135
},
"spriteSourceSize": {
"x": 11,
"y": 3,
"w": 88,
"h": 132
},
"frame": {
"x": 98,
"y": 132,
"w": 88,
"h": 132
}
},
{
"filename": "smile_eclosed",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 108,
"h": 135
},
"spriteSourceSize": {
"x": 11,
"y": 3,
"w": 88,
"h": 132
},
"frame": {
"x": 98,
"y": 264,
"w": 88,
"h": 132
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:ee746c18c4cf7a75472588cd4a222e42:4942031dfa560ac7425b02862e225ffc:7ef6104245066e3b4078d0f6ef5e5edf$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -346,6 +346,7 @@ export default class BattleScene extends Phaser.Scene {
}); });
// Load character sprites // Load character sprites
this.loadAtlas('c_rival_m', 'character', 'rival_m');
this.loadAtlas('c_rival_f', 'character', 'rival_f'); this.loadAtlas('c_rival_f', 'character', 'rival_f');
// Load pokemon-related images // Load pokemon-related images

View File

@ -331,16 +331,16 @@ export const trainerTypeDialogue = {
[TrainerType.RIVAL]: [ [TrainerType.RIVAL]: [
{ {
encounter: [ encounter: [
`Hey, I was looking for you! I knew you were eager to get going but I expected at least a goodbye… `@c{smile}Hey, I was looking for you! I knew you were eager to get going but I expected at least a goodbye…
$So you're really pursuing your dream after all?\n I almost can't believe it. $@c{smile_eclosed}So you're really pursuing your dream after all?\n I almost can't believe it.
$Since we're here, how about a battle?\nAfter all, I want to make sure you're ready. $@c{serious_smile_fists}Since we're here, how about a battle?\nAfter all, I want to make sure you're ready.
$@c{angry_mopen}Don't hold back, I want you to give me everything you've got!` $@c{serious_mopen_fists}Don't hold back, I want you to give me everything you've got!`
], ],
victory: [ victory: [
`Wow… You actually cleaned me out.\nAre you actually a beginner? `@c{shock}Wow… You actually cleaned me out.\nAre you actually a beginner?
$Maybe it was a bit of luck but\nWho knows you might just be able to go all the way. $@c{smile}Maybe it was a bit of luck but\nWho knows you might just be able to go all the way.
$By the way, the professor asked me to give you these items. They look pretty cool. $By the way, the professor asked me to give you these items. They look pretty cool.
$Good luck out there!` $@c{serious_smile_fists}Good luck out there!`
] ]
}, },
{ {
@ -361,14 +361,14 @@ export const trainerTypeDialogue = {
[TrainerType.RIVAL_2]: [ [TrainerType.RIVAL_2]: [
{ {
encounter: [ encounter: [
`Hey, you're here too?\nStill a perfect record, huh…? `@c{smile}Hey, you're here too?\n@c{smile_eclosed}Still a perfect record, huh…?
$I know it kind of looks like I followed you here, but that's mostly not true. $@c{serious_mopen_fists}I know it kind of looks like I followed you here, but that's mostly not true.
$Honestly though, I've been itching for a rematch since you beat me back at home. $@c{serious_smile_fists}Honestly though, I've been itching for a rematch since you beat me back at home.
$I've been doing a lot of my own training so I'll definitely put up a fight this time. $I've been doing a lot of my own training so I'll definitely put up a fight this time.
$Don't hold back, just like before!\nLet's go!` $@c{serious_mopen_fists}Don't hold back, just like before!\nLet's go!`
], ],
victory: [ victory: [
`Oh. I guess I was overconfident.` `@c{neutral_eclosed}Oh. I guess I was overconfident.`
] ]
}, },
{ {
@ -387,15 +387,15 @@ export const trainerTypeDialogue = {
[TrainerType.RIVAL_3]: [ [TrainerType.RIVAL_3]: [
{ {
encounter: [ encounter: [
`Hey, look who it is! It's been a while.\nYou're… still undefeated? Huh. `@c{smile}Hey, look who it is! It's been a while.\n@c{neutral}You're… still undefeated? Huh.
$Things have been kind of strange.\nIt's not the same back home without you. $@c{neutral_eclosed}Things have been kind of strange.\nIt's not the same back home without you.
$I know it's selfish, but I need to get this off my chest.\nI think you're in over your head here. $@c{serious}I know it's selfish, but I need to get this off my chest.\n@c{neutral_eclosed}I think you're in over your head here.
$Never losing once is just unrealistic.\nWe need to lose sometimes in order to grow. $@c{serious}Never losing once is just unrealistic.\nWe need to lose sometimes in order to grow.
$You've had a great run but there's still so much ahead, and it only gets harder. Are you prepared for that? $@c{neutral_eclosed}You've had a great run but there's still so much ahead, and it only gets harder. @c{neutral}Are you prepared for that?
$If so, prove it to me.` $@c{serious_mopen_fists}If so, prove it to me.`
], ],
victory: [ victory: [
`This is ridiculous… I've hardly stopped training…\nHow are we still so far apart?` `@c{angry_mhalf}This is ridiculous… I've hardly stopped training…\nHow are we still so far apart?`
] ]
}, },
{ {
@ -413,17 +413,17 @@ export const trainerTypeDialogue = {
[TrainerType.RIVAL_4]: [ [TrainerType.RIVAL_4]: [
{ {
encounter: [ encounter: [
`Hey. `@c{neutral}Hey.
$I won't mince words or pleasantries with you.\nI'm here to win, plain and simple. $I won't mince words or pleasantries with you.\n@c{neutral_eclosed}I'm here to win, plain and simple.
$I've learned to maximize my potential by putting all my time into training. $@c{serious_mhalf_fists}I've learned to maximize my potential by putting all my time into training.
$You get a lot of extra time when you cut out the unnecessary sleep and social interaction. $@c{smile}You get a lot of extra time when you cut out the unnecessary sleep and social interaction.
$None of that matters anymore, not until I win. $@c{serious_mopen_fists}None of that matters anymore, not until I win.
$I've even reached the point where I don't lose anymore.\nI suppose your philosophy wasn't so wrong after all. $@c{neutral_eclosed}I've even reached the point where I don't lose anymore.\n@c{smile_eclosed}I suppose your philosophy wasn't so wrong after all.
$Losing is for the weak, and I'm not weak anymore. $@c{angry_mhalf}Losing is for the weak, and I'm not weak anymore.
$Prepare yourself.` $@c{serious_mopen_fists}Prepare yourself.`
], ],
victory: [ victory: [
`What…@d{64} What are you?` `@c{neutral}What…@d{64} What are you?`
] ]
}, },
{ {
@ -445,10 +445,10 @@ export const trainerTypeDialogue = {
[TrainerType.RIVAL_5]: [ [TrainerType.RIVAL_5]: [
{ {
encounter: [ encounter: [
`` `@c{neutral}`
], ],
victory: [ victory: [
`` `@c{neutral}`
] ]
}, },
{ {
@ -463,23 +463,23 @@ export const trainerTypeDialogue = {
[TrainerType.RIVAL_6]: [ [TrainerType.RIVAL_6]: [
{ {
encounter: [ encounter: [
`We meet again. `@c{smile_eclosed}We meet again.
$I've had some time to reflect on all this.\nThere's a reason this all seems so strange. $@c{neutral}I've had some time to reflect on all this.\nThere's a reason this all seems so strange.
$Your dream, my drive to beat you\nIt's all a part of something greater. $@c{neutral_eclosed}Your dream, my drive to beat you\nIt's all a part of something greater.
$This isn't about me, or about you… This is about the world, and it's my purpose to push you to your limits. $@c{serious}This isn't about me, or about you… This is about the world, @c{serious_mhalf_fists}and it's my purpose to push you to your limits.
$Whether I've fulfilled that purpose I can't say, but I've done everything in my power. $@c{neutral_eclosed}Whether I've fulfilled that purpose I can't say, but I've done everything in my power.
$This place we ended up in is terrifying Yet somehow I feel unphased, like I've been here before. $@c{neutral}This place we ended up in is terrifying Yet somehow I feel unphased, like I've been here before.
$You feel the same, don't you? $@c{serious_mhalf_fists}You feel the same, don't you?
$and it's like something here is speaking to me.\nThis is all the world's known for a long time now. $@c{serious}and it's like something here is speaking to me.\nThis is all the world's known for a long time now.
$Those times we cherished together that seem so recent are nothing but a distant memory. $Those times we cherished together that seem so recent are nothing but a distant memory.
$Who can say whether they were ever even real in the first place. $@c{neutral_eclosed}Who can say whether they were ever even real in the first place.
$You need to keep pushing, because if you don't, it will never end. You're the only one who can do this. $@c{serious_mopen_fists}You need to keep pushing, because if you don't, it will never end. You're the only one who can do this.
$I hardly know what any of this means, I just know that it's true. $@c{serious_smile_fists}I hardly know what any of this means, I just know that it's true.
$If you can't defeat me here and now, you won't stand a chance.` $@c{serious_mopen_fists}If you can't defeat me here and now, you won't stand a chance.`
], ],
victory: [ victory: [
`It looks like my work is done here. `@c{smile_eclosed}It looks like my work is done here.
$I want you to promise me one thing.\nAfter you heal the world, please come home.` $I want you to promise me one thing.\n@c{smile}After you heal the world, please come home.`
] ]
}, },
{ {
@ -524,7 +524,14 @@ export const battleSpecDialogue = {
} }
}; };
export function initTrainerTypeDialogue() { export function getCharVariantFromDialogue(message: string): string {
const variantMatch = /@c\{(.*?)\}/.exec(message);
if (variantMatch)
return variantMatch[1];
return 'neutral';
}
export function initTrainerTypeDialogue(): void {
const trainerTypes = Object.keys(trainerTypeDialogue).map(t => parseInt(t) as TrainerType); const trainerTypes = Object.keys(trainerTypeDialogue).map(t => parseInt(t) as TrainerType);
for (let trainerType of trainerTypes) { for (let trainerType of trainerTypes) {
const messages = trainerTypeDialogue[trainerType]; const messages = trainerTypeDialogue[trainerType];

View File

@ -47,7 +47,7 @@ import { loggedInUser, updateUserInfo } from "./account";
import { GameDataType, PlayerGender } from "./system/game-data"; import { GameDataType, PlayerGender } from "./system/game-data";
import { addPokeballCaptureStars, addPokeballOpenParticles } from "./anims"; import { addPokeballCaptureStars, addPokeballOpenParticles } from "./anims";
import { SpeciesFormChangeActiveTrigger, SpeciesFormChangeManualTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangeMoveUsedTrigger } from "./data/pokemon-forms"; import { SpeciesFormChangeActiveTrigger, SpeciesFormChangeManualTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangeMoveUsedTrigger } from "./data/pokemon-forms";
import { battleSpecDialogue } from "./data/dialogue"; import { battleSpecDialogue, getCharVariantFromDialogue } from "./data/dialogue";
import ModifierSelectUiHandler, { SHOP_OPTIONS_ROW_LIMIT } from "./ui/modifier-select-ui-handler"; import ModifierSelectUiHandler, { SHOP_OPTIONS_ROW_LIMIT } from "./ui/modifier-select-ui-handler";
import { Setting } from "./system/settings"; import { Setting } from "./system/settings";
import { Tutorial, handleTutorial } from "./tutorial"; import { Tutorial, handleTutorial } from "./tutorial";
@ -628,7 +628,7 @@ export class EncounterPhase extends BattlePhase {
}); });
}; };
if (this.scene.currentBattle.trainer.config.hasCharSprite) if (this.scene.currentBattle.trainer.config.hasCharSprite)
this.scene.showFieldOverlay(500).then(() => this.scene.charSprite.showCharacter(trainer.getKey(), 'smile').then(() => showDialogueAndSummon())); this.scene.showFieldOverlay(500).then(() => this.scene.charSprite.showCharacter(trainer.getKey(), getCharVariantFromDialogue(encounterMessages[0])).then(() => showDialogueAndSummon()));
else else
showDialogueAndSummon(); showDialogueAndSummon();
} }
@ -2834,7 +2834,7 @@ export class TrainerVictoryPhase extends BattlePhase {
if (this.scene.currentBattle.trainer.config.hasCharSprite) { if (this.scene.currentBattle.trainer.config.hasCharSprite) {
const originalFunc = showMessageOrEnd; const originalFunc = showMessageOrEnd;
showMessageOrEnd = () => this.scene.charSprite.hide().then(() => this.scene.hideFieldOverlay(250).then(() => originalFunc())); showMessageOrEnd = () => this.scene.charSprite.hide().then(() => this.scene.hideFieldOverlay(250).then(() => originalFunc()));
this.scene.showFieldOverlay(500).then(() => this.scene.charSprite.showCharacter(this.scene.currentBattle.trainer.getKey(), 'shock').then(() => showMessage())); this.scene.showFieldOverlay(500).then(() => this.scene.charSprite.showCharacter(this.scene.currentBattle.trainer.getKey(), getCharVariantFromDialogue(victoryMessages[0])).then(() => showMessage()));
} else } else
showMessage(); showMessage();
} else } else