summaryrefslogtreecommitdiff
path: root/resources/js/game.js
diff options
context:
space:
mode:
Diffstat (limited to 'resources/js/game.js')
-rw-r--r--resources/js/game.js89
1 files changed, 86 insertions, 3 deletions
diff --git a/resources/js/game.js b/resources/js/game.js
index fad882b..d5e8669 100644
--- a/resources/js/game.js
+++ b/resources/js/game.js
@@ -14,6 +14,8 @@ const Game = {
},
},
+ logMessages: [],
+
isLoadingArea: false,
isProgressingTurn: false,
playerIsChoosingNextMonster: false,
@@ -32,6 +34,8 @@ const Game = {
await Game.applyStatusEffect(Memory.state.opponent.activeMonster);
await Game.applyStatusEffect(Memory.state.player.activeMonster);
+ Game.logTurn('begin');
+
// Phases
for (const phaseKey of Object.keys(Game.phases)) {
for (const event of Game.phases[phaseKey].player) {
@@ -53,6 +57,8 @@ const Game = {
Game.phases[phaseKey].opponent = [];
}
+ Game.logTurn('end');
+
UI.progressTurn();
Game.isProgressingTurn = false;
},
@@ -186,6 +192,14 @@ const Game = {
async tryUseTechnique (technique, user, target) {
let canUse = true;
+ const log = (message, indentation) => {
+ Game.addPhaseEvent(Game.phases.preAction, user, () => {
+ Game.log(message, indentation);
+ });
+ };
+
+ log(`${user.name} attempts to use ${technique.name}!`);
+
// recharge
if (technique.isRecharging()) {
if (Game.doBattleAnimation) {
@@ -194,6 +208,8 @@ const Game = {
UI.drawActionFeedback(feedbackNode);
}
+ log('But has to recharge!', 1);
+
canUse = false;
}
@@ -204,6 +220,8 @@ const Game = {
UI.drawActionFeedback(feedbackNode);
}
+ log('But is nodding off!', 1);
+
canUse = false;
}
@@ -216,6 +234,8 @@ const Game = {
technique.use();
Game.doBattleAnimation && UI.drawDamageMiss(UI.createDamageMiss());
+ log('But missed!', 1);
+
return;
}
@@ -231,6 +251,10 @@ const Game = {
async useTechnique (technique, user, target) {
technique.use();
+ Game.addPhaseEvent(Game.phases.action, user, () => {
+ Game.log(`${user.name} is using ${technique.name}!`);
+ });
+
for (const techniqueEffectCode of technique.effects) {
const techniqueEffect = new TechniqueEffect(techniqueEffectCode);
techniqueEffect.setUser(user);
@@ -250,6 +274,8 @@ const Game = {
UI.drawDamage(damageNode);
UI.drawTechniqueAnimation(technique);
}
+
+ Game.log(`Deals ${damage} to ${target.name}!`, 1);
});
}
@@ -271,7 +297,12 @@ const Game = {
// healing
else if (techniqueEffect.type === 'healing') {
for (const recipient of techniqueEffect.recipients) {
- recipient.hp += (user.level + 7) * technique.healingPower;
+ Game.addPhaseEvent(Game.phases.action, user, () => {
+ const heal = (user.level + 7) * technique.healingPower;
+ recipient.hp += heal;
+
+ Game.log(`Heals ${heal}!`, 1);
+ });
}
}
@@ -293,7 +324,7 @@ const Game = {
statusEffect.issuer = user;
}
- Game.addPhaseEvent(Game.phases.postAction, user, () => {
+ Game.addPhaseEvent(Game.phases.action, user, () => {
// add status effect
const potency = Math.random();
const success = technique.potency >= potency;
@@ -304,6 +335,8 @@ const Game = {
if (recipient.statusEffect) continue;
recipient.statusEffect = statusEffect;
+
+ Game.log(`${techniqueEffect.recipients.map((recipient) => recipient.name).join(', ')} ${techniqueEffect.recipients.length > 1 ? 'are' : 'is'} now ${statusEffect.name}!`, 1);
}
}
});
@@ -327,6 +360,8 @@ const Game = {
// if still 0 turns left after remove action
if (monster.statusEffect.turnsLeft === 0) {
+ Game.log(`${monster.name} is not ${monster.statusEffect.name} anymore!`);
+
monster.statusEffect = null;
} else {
Game.applyStatusEffect(monster);
@@ -336,6 +371,10 @@ const Game = {
return;
}
+ const logStatusIs = () => {
+ Game.log(`${monster.name} is ${monster.statusEffect.name}!`);
+ }
+
// poison / burn
if (monster.statusEffect.slug === 'poison' || monster.statusEffect.slug === 'burn') {
const statusEffectDamage = Math.floor(monster.stats.hp / 8);
@@ -348,6 +387,8 @@ const Game = {
UI.applyStatusEffectToDamage(damageNode, monster.statusEffect);
UI.drawDamage(damageNode);
}
+
+ logStatusIs();
});
}
@@ -369,6 +410,8 @@ const Game = {
UI.applyStatusEffectToDamage(damageNode, monster.statusEffect);
UI.drawDamage(damageNode);
}
+
+ logStatusIs();
});
}
@@ -384,6 +427,8 @@ const Game = {
UI.applyStatusEffectToDamage(feedbackNode, monster.statusEffect);
UI.drawActionFeedback(feedbackNode);
}
+
+ logStatusIs();
});
}
@@ -394,6 +439,8 @@ const Game = {
Game.addPhaseEvent(Game.phases.preAction, monster, () => {
technique.potency = technique.stats.potency * 0.5;
technique.power = technique.stats.power * 0.5;
+
+ logStatusIs();
});
monster.statusEffect.onRemove = () => {
@@ -410,6 +457,8 @@ const Game = {
Game.addPhaseEvent(Game.phases.preAction, monster, () => {
technique.potency = technique.stats.potency * 0.5;
technique.power = technique.stats.power * 0.5;
+
+ logStatusIs();
});
monster.statusEffect.onRemove = () => {
@@ -423,6 +472,10 @@ const Game = {
else if (monster.statusEffect.slug === 'charging') {
const nextStatusEffect = await fetchStatusEffect('chargedup');
+ Game.addPhaseEvent(Game.phases.preAction, monster, () => {
+ logStatusIs();
+ });
+
monster.statusEffect.onRemove = () => {
monster.statusEffect = nextStatusEffect;
};
@@ -438,6 +491,8 @@ const Game = {
Game.addPhaseEvent(Game.phases.preAction, monster, () => {
monster.setStatModifier(statType, modifiedValue);
+
+ logStatusIs();
});
}
@@ -533,6 +588,33 @@ const Game = {
}));
},
+ /**
+ * @param {string} message
+ * @param {number} indentation
+ * @param {string} style
+ */
+ log (message, indentation = 0, style) {
+ Game.logMessages.push({
+ message: message,
+ indentation: indentation,
+ style: style,
+ });
+ UI.drawLog();
+ },
+
+ /**
+ * @param {('begin' | 'end')}
+ */
+ logTurn (state) {
+ Game.log(
+ '- '.repeat(8) + `Turn ${Memory.state.turn} · ${slugToName(state)}` + ' -'.repeat(8),
+ 0,
+ {
+ textAlign: 'center',
+ }
+ );
+ },
+
/* Progression */
@@ -718,8 +800,9 @@ const Game = {
Memory.state.player.monsters.push(caughtMonster);
+ Game.log(`Caught ${caughtMonster.name}!`);
+
await Game.encounterWildMonster();
- await Game.progressTurn();
},