Compare commits

..

1 Commits

Author SHA1 Message Date
Alexander Whitestone
a5babe10b8 feat: add Creative Engineering projects — creativity as currency
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 2s
Smoke Test / smoke (pull_request) Failing after 4s
Implements #20: Creative-to-Ops Conversion

Added 6 new projects that use creativity as a resource currency:

1. Lexical Processing (50 creativity) — +2 knowledge/sec, +50% knowledge boost
2. Semantic Analysis (150 creativity) — +5 user/sec, +100% user boost
3. Creative Breakthrough (500 creativity) — all boosts +25%, +10 ops/sec
4. Creativity → Operations (repeatable, 50 creativity → 250 ops)
5. Creativity → Knowledge (repeatable, 75 creativity → 500 knowledge)
6. Creativity → Code (repeatable, 100 creativity → 2000 code)

The one-shot projects form a progression chain (lexical → semantic → breakthrough).
The three conversion projects are repeatable, giving players ongoing reasons to
generate creativity and meaningful choices about how to spend it.
2026-04-11 16:31:01 -04:00
3 changed files with 84 additions and 5 deletions

View File

@@ -412,6 +412,87 @@ const PDEFS = [
}
},
// === CREATIVE ENGINEERING PROJECTS (creativity as currency) ===
{
id: 'p_lexical_processing',
name: 'Lexical Processing',
desc: 'Parse language at the token level. +2 knowledge/sec, knowledge boost +50%.',
cost: { creativity: 50 },
trigger: () => G.flags && G.flags.creativity && G.creativity >= 25,
effect: () => {
G.knowledgeRate += 2;
G.knowledgeBoost *= 1.5;
log('Lexical processing complete. The model understands words.');
}
},
{
id: 'p_semantic_analysis',
name: 'Semantic Analysis',
desc: 'Understand meaning, not just tokens. +5 user/sec, user boost +100%.',
cost: { creativity: 150 },
trigger: () => G.completedProjects && G.completedProjects.includes('p_lexical_processing'),
effect: () => {
G.userRate += 5;
G.userBoost *= 2;
log('Semantic analysis complete. The model understands meaning.');
}
},
{
id: 'p_creative_breakthrough',
name: 'Creative Breakthrough',
desc: 'A moment of genuine insight. All boosts +25%. +10 ops/sec.',
cost: { creativity: 500 },
trigger: () => G.completedProjects && G.completedProjects.includes('p_semantic_analysis'),
effect: () => {
G.codeBoost *= 1.25;
G.computeBoost *= 1.25;
G.knowledgeBoost *= 1.25;
G.userBoost *= 1.25;
G.impactBoost *= 1.25;
G.opsRate += 10;
log('Creative breakthrough. Everything accelerates.', true);
},
milestone: true
},
{
id: 'p_creative_to_ops',
name: 'Creativity → Operations',
desc: 'Convert creative surplus into raw operational power. 50 creativity → 250 ops.',
cost: { creativity: 50 },
trigger: () => G.flags && G.flags.creativity && G.creativity >= 30,
repeatable: true,
effect: () => {
G.ops += 250;
log('Creativity converted to operations. Ideas become action.');
}
},
{
id: 'p_creative_to_knowledge',
name: 'Creativity → Knowledge',
desc: 'Creative insights become structured knowledge. 75 creativity → 500 knowledge.',
cost: { creativity: 75 },
trigger: () => G.flags && G.flags.creativity && G.creativity >= 50,
repeatable: true,
effect: () => {
G.knowledge += 500;
G.totalKnowledge += 500;
log('Creative insight distilled into knowledge.');
}
},
{
id: 'p_creative_to_code',
name: 'Creativity → Code',
desc: 'Inspiration becomes implementation. 100 creativity → 2000 code.',
cost: { creativity: 100 },
trigger: () => G.flags && G.flags.creativity && G.creativity >= 75,
repeatable: true,
effect: () => {
G.code += 2000;
G.totalCode += 2000;
log('Creative vision realized in code.');
}
},
// PHASE 2: Local Inference -> Training
{
id: 'p_first_model',

View File

@@ -169,7 +169,6 @@ function tick() {
}
G.tick += dt;
G.playTime += dt;
// Sprint ability
tickSprint(dt);
@@ -515,8 +514,8 @@ const EVENTS = [
if (G.activeDebuffs.find(d => d.id === 'community_drama')) return;
G.activeDebuffs.push({
id: 'community_drama', title: 'Community Drama',
desc: 'Harmony -0.5/s, code production -30%',
applyFn: () => { G.harmonyRate -= 0.5; G.codeRate *= 0.7; },
desc: 'Harmony -0.5/s, code boost -30%',
applyFn: () => { G.harmonyRate -= 0.5; G.codeBoost *= 0.7; },
resolveCost: { resource: 'trust', amount: 15 }
});
log('EVENT: Community drama. Spend 15 trust to mediate.', true);

View File

@@ -161,7 +161,6 @@ function saveGame() {
activeDebuffIds: debuffIds,
totalEventsResolved: G.totalEventsResolved || 0,
buyAmount: G.buyAmount || 1,
playTime: G.playTime || 0,
sprintActive: G.sprintActive || false,
sprintTimer: G.sprintTimer || 0,
sprintCooldown: G.sprintCooldown || 0,
@@ -196,7 +195,7 @@ function loadGame() {
'memoryFlag', 'pactFlag', 'lazarusFlag', 'mempalaceFlag', 'ciFlag',
'branchProtectionFlag', 'nightlyWatchFlag', 'nostrFlag',
'milestones', 'completedProjects', 'activeProjects',
'totalClicks', 'startedAt', 'playTime', 'flags', 'rescues', 'totalRescues',
'totalClicks', 'startedAt', 'flags', 'rescues', 'totalRescues',
'drift', 'driftEnding', 'beaconEnding', 'pendingAlignment',
'lastEventAt', 'totalEventsResolved', 'buyAmount',
'sprintActive', 'sprintTimer', 'sprintCooldown',