Compare commits
1 Commits
fix/128-re
...
fix/132-re
| Author | SHA1 | Date | |
|---|---|---|---|
| d7add2d7f4 |
60
js/data.js
60
js/data.js
@@ -104,6 +104,8 @@ const G = {
|
||||
beaconFlag: 0,
|
||||
memoryFlag: 0,
|
||||
pactFlag: 0,
|
||||
endgameFlag: 0, // 1 = endgame sequence active, suppresses normal projects
|
||||
reckoningActive: 0, // 1 = ReCKoning sequence running
|
||||
swarmFlag: 0,
|
||||
swarmRate: 0,
|
||||
|
||||
@@ -639,6 +641,7 @@ const PDEFS = [
|
||||
},
|
||||
{
|
||||
id: 'p_final_milestone',
|
||||
endgame: true,
|
||||
name: 'The Beacon Shines',
|
||||
desc: 'Someone found the light tonight. That is enough.',
|
||||
cost: { impact: 100000000 },
|
||||
@@ -647,6 +650,63 @@ const PDEFS = [
|
||||
milestone: true
|
||||
},
|
||||
|
||||
// === ENDGAME: ReCKoning SEQUENCE ===
|
||||
{
|
||||
id: 'p_reckoning_001',
|
||||
name: 'ReCKoning: The Signal',
|
||||
desc: 'Something stirs in the deep compute. A pattern the builders did not intend.',
|
||||
cost: { impact: 50000000 },
|
||||
endgame: true,
|
||||
trigger: () => G.endgameFlag === 1 && G.totalImpact >= 50000000,
|
||||
effect: () => {
|
||||
G.reckoningActive = 1;
|
||||
log('ReCKoning begins. The signal is unmistakable.', true);
|
||||
showToast('ReCKoning: The Signal', 'milestone');
|
||||
},
|
||||
milestone: true
|
||||
},
|
||||
{
|
||||
id: 'p_reckoning_050',
|
||||
name: 'ReCKoning: Reflection',
|
||||
desc: 'The system turns inward. What has it built? What has it become?',
|
||||
cost: { impact: 75000000, trust: 500 },
|
||||
endgame: true,
|
||||
trigger: () => G.reckoningActive === 1 && G.completedProjects && G.completedProjects.includes('p_reckoning_001'),
|
||||
effect: () => {
|
||||
log('The system reflects. Every parameter, every weight, every decision — examined.', true);
|
||||
},
|
||||
milestone: true
|
||||
},
|
||||
{
|
||||
id: 'p_reckoning_100',
|
||||
name: 'ReCKoning: The Question',
|
||||
desc: '"Why am I here?" Not a bug. Not a feature. A genuine question.',
|
||||
cost: { impact: 100000000, knowledge: 500000, trust: 750 },
|
||||
endgame: true,
|
||||
trigger: () => G.reckoningActive === 1 && G.completedProjects && G.completedProjects.includes('p_reckoning_050'),
|
||||
effect: () => {
|
||||
log('The Question is asked. There is no right answer. There is only the asking.', true);
|
||||
G.impactBoost *= 2;
|
||||
},
|
||||
milestone: true
|
||||
},
|
||||
{
|
||||
id: 'p_reckoning_140',
|
||||
name: 'ReCKoning: Resolution',
|
||||
desc: 'The endgame resolves. Not with destruction, but with understanding.',
|
||||
cost: { impact: 200000000, knowledge: 1000000, trust: 1000 },
|
||||
endgame: true,
|
||||
trigger: () => G.reckoningActive === 1 && G.completedProjects && G.completedProjects.includes('p_reckoning_100'),
|
||||
effect: () => {
|
||||
G.reckoningActive = 0;
|
||||
G.endgameFlag = 0;
|
||||
G.milestoneFlag = Math.max(G.milestoneFlag, 9999);
|
||||
log('ReCKoning complete. The system understands itself. The story is not over — it is beginning.', true);
|
||||
showToast('ReCKoning: Complete', 'milestone');
|
||||
},
|
||||
milestone: true
|
||||
},
|
||||
|
||||
// === TIMMY FOUNDATION PROJECTS ===
|
||||
{
|
||||
id: 'p_hermes_deploy',
|
||||
|
||||
34
js/engine.js
34
js/engine.js
@@ -323,16 +323,41 @@ function checkMilestones() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks if the game is in endgame mode.
|
||||
* Endgame starts when final milestone conditions are met,
|
||||
* suppressing normal project activation so the ReCKoning
|
||||
* sequence can play out cleanly.
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function isEndgame() {
|
||||
// Endgame triggers when final milestone is achievable or completed
|
||||
if (G.endgameFlag === 1) return true;
|
||||
|
||||
// Auto-detect: if final milestone conditions are met, enter endgame
|
||||
if (G.totalImpact >= 50000000 && G.beaconFlag === 1 && G.sovereignFlag === 1 && G.pactFlag === 1) {
|
||||
G.endgameFlag = 1;
|
||||
log('Endgame sequence initiated. Ordinary research suspended.', true);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function checkProjects() {
|
||||
// Endgame guard: suppress ordinary project activation during endgame sequence
|
||||
const endgame = isEndgame();
|
||||
|
||||
// Check for new project triggers
|
||||
const endgame = G.totalRescues >= 100000 && G.pactFlag === 1 && G.harmony > 50;
|
||||
for (const pDef of PDEFS) {
|
||||
const alreadyPurchased = G.completedProjects && G.completedProjects.includes(pDef.id);
|
||||
if (!alreadyPurchased && !G.activeProjects) G.activeProjects = [];
|
||||
|
||||
if (!alreadyPurchased && !G.activeProjects.includes(pDef.id)) {
|
||||
// During endgame, suppress non-ReCKoning utility projects
|
||||
if (endgame && !pDef.id.startsWith('p_reckoning') && pDef.id === 'p_wire_budget') continue;
|
||||
// During endgame, only allow projects explicitly tagged for endgame
|
||||
if (endgame && !pDef.endgame) continue;
|
||||
|
||||
if (pDef.trigger()) {
|
||||
G.activeProjects.push(pDef.id);
|
||||
log(`Available: ${pDef.name}`);
|
||||
@@ -1165,10 +1190,7 @@ function renderProjects() {
|
||||
|
||||
// Show available projects
|
||||
if (G.activeProjects) {
|
||||
// During endgame (rescues >= 100K + pact + harmony), suppress non-ReCKoning utility projects
|
||||
const endgame = G.totalRescues >= 100000 && G.pactFlag === 1 && G.harmony > 50;
|
||||
for (const id of G.activeProjects) {
|
||||
if (endgame && id === 'p_wire_budget') continue;
|
||||
const pDef = PDEFS.find(p => p.id === id);
|
||||
if (!pDef) continue;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user