<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Subversion Community Sheet Generator</title> <style> body { font-family: Arial, sans-serif; line-height: 1.6; margin: 0; padding: 20px; background-color: #f4f4f4; } .container { max-width: 800px; margin: 0 auto; background-color: #fff; padding: 20px; border-radius: 5px; box-shadow: 0 0 10px rgba(0,0,0,0.1); } h1, h2, h3 { margin-bottom: 20px; } .form-group { margin-bottom: 15px; } label { display: block; margin-bottom: 5px; } input, select { width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px; } button { background-color: #4CAF50; color: white; padding: 10px 15px; border: none; border-radius: 4px; cursor: pointer; } button:hover { background-color: #45a049; } button:disabled { background-color: #cccccc; cursor: not-allowed; } .grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; } .relations-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; margin-bottom: 10px; } </style> </head> <body> <div class="container"> <h1>Subversion Community Sheet Generator</h1> <div> <h2>Community Details</h2> <div class="grid"> <div class="form-group"> <label for="communityName">Community Name</label> <input id="communityName" type="text" value="The Resistance"> </div> <div class="form-group"> <label for="communityType">Community Type</label> <input id="communityType" type="text" value="Underground Network"> </div> <div class="form-group"> <label for="communityPower">Power</label> <select id="communityPower"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6" selected>6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> </select> </div> <div class="form-group"> <label for="communityCaste">Caste</label> <select id="communityCaste"> <option value="Undercity">Undercity</option> <option value="Lower">Lower</option> <option value="Lower-Middle" selected>Lower-Middle</option> <option value="Upper-Middle">Upper-Middle</option> <option value="Upper">Upper</option> <option value="Elite">Elite</option> </select> </div> <div class="form-group"> <label for="primarySkill">Primary Skill</label> <input id="primarySkill" type="text" value="Espionage"> </div> <div class="form-group"> <label for="archetype">Archetype</label> <input id="archetype" type="text" value="Rebels"> </div> </div> </div> <div> <h2>Values, Impulses, and Goals</h2> <div class="grid"> <div class="form-group"> <label for="value1">Value 1</label> <input id="value1" type="text" value="Freedom"> </div> <div class="form-group"> <label for="value2">Value 2</label> <input id="value2" type="text" value="Justice"> </div> <div class="form-group"> <label for="value3">Value 3</label> <input id="value3" type="text" value="Solidarity"> </div> <div class="form-group"> <label for="impulse1">Impulse 1</label> <input id="impulse1" type="text" value="Defy Authority"> </div> <div class="form-group"> <label for="impulse2">Impulse 2</label> <input id="impulse2" type="text" value="Protect the Weak"> </div> <div class="form-group"> <label for="goal1">Goal 1</label> <input id="goal1" type="text" value="Overthrow the Regime"> </div> <div class="form-group"> <label for="goal2">Goal 2</label> <input id="goal2" type="text" value="Establish Democracy"> </div> <div class="form-group"> <label for="goal3">Goal 3</label> <input id="goal3" type="text" value="Create Equality"> </div> </div> </div> <div> <h2>Resources and Relations</h2> <div> <h3>Resources (Fortune: <span id="fortuneDisplay">80</span>)</h3> <div id="resourcesContainer"> <div class="form-group"> <label for="resource1">Resource 1</label> <input id="resource1" type="text" value="Secret Hideout"> </div> <div class="form-group"> <label for="resource2">Resource 2</label> <input id="resource2" type="text" value="Communication Network"> </div> </div> <button id="addResourceBtn">Add Resource (10 Fortune)</button> </div> <div> <h3>Relations</h3> <div id="relationsContainer"> <div class="relations-grid"> <div class="form-group"> <label for="relation1Name">Name</label> <input id="relation1Name" type="text" value="The Underworld"> </div> <div class="form-group"> <label for="relation1Archetype">Archetype</label> <input id="relation1Archetype" type="text" value="Criminal Syndicate"> </div> <div class="form-group"> <label for="relation1Skill">Skill</label> <input id="relation1Skill" type="text" value="Black Market"> </div> <div class="form-group"> <label for="relation1Power">Power</label> <input id="relation1Power" type="number" value="7"> </div> <div class="form-group"> <label for="relation1Regard">Regard</label> <input id="relation1Regard" type="number" value="6"> </div> </div> <div class="relations-grid"> <div class="form-group"> <label for="relation2Name">Name</label> <input id="relation2Name" type="text" value="Tech Hackers"> </div> <div class="form-group"> <label for="relation2Archetype">Archetype</label> <input id="relation2Archetype" type="text" value="Information Brokers"> </div> <div class="form-group"> <label for="relation2Skill">Skill</label> <input id="relation2Skill" type="text" value="Cyber Warfare"> </div> <div class="form-group"> <label for="relation2Power">Power</label> <input id="relation2Power" type="number" value="5"> </div> <div class="form-group"> <label for="relation2Regard">Regard</label> <input id="relation2Regard" type="number" value="8"> </div> </div> </div> <button id="addRelationBtn">Add Relation (2 Fortune)</button> </div> </div> <button id="generateSheetBtn" style="margin-top: 20px;">Generate Sheet</button> </div> <script> let fortune = 80; let resourceCount = 2; let relationCount = 2; document.getElementById('addResourceBtn').addEventListener('click', function() { if (fortune >= 10) { fortune -= 10; resourceCount++; const resourcesContainer = document.getElementById('resourcesContainer'); const newResource = document.createElement('div'); newResource.className = 'form-group'; newResource.innerHTML = ` <label for="resource${resourceCount}">Resource ${resourceCount}</label> <input id="resource${resourceCount}" type="text" value="New Resource"> `; resourcesContainer.appendChild(newResource); updateFortuneDisplay(); } }); document.getElementById('addRelationBtn').addEventListener('click', function() { if (fortune >= 2) { fortune -= 2; relationCount++; const relationsContainer = document.getElementById('relationsContainer'); const newRelation = document.createElement('div'); newRelation.className = 'relations-grid'; newRelation.innerHTML = ` <div class="form-group"> <label for="relation${relationCount}Name">Name</label> <input id="relation${relationCount}Name" type="text" value="New Relation"> </div> <div class="form-group"> <label for="relation${relationCount}Archetype">Archetype</label> <input id="relation${relationCount}Archetype" type="text" value="Unknown"> </div> <div class="form-group"> <label for="relation${relationCount}Skill">Skill</label> <input id="relation${relationCount}Skill" type="text" value="TBD"> </div> <div class="form-group"> <label for="relation${relationCount}Power">Power</label> <input id="relation${relationCount}Power" type="number" value="4"> </div> <div class="form-group"> <label for="relation${relationCount}Regard">Regard</label> <input id="relation${relationCount}Regard" type="number" value="5"> </div> `; relationsContainer.appendChild(newRelation); updateFortuneDisplay(); } }); document.getElementById('generateSheetBtn').addEventListener('click', function() { const community = { name: document.getElementById('communityName').value, type: document.getElementById('communityType').value, power: parseInt(document.getElementById('communityPower').value), caste: document.getElementById('communityCaste').value, primarySkill: document.getElementById('primarySkill').value, archetype: document.getElementById('archetype').value, values: [ document.getElementById('value1').value, document.getElementById('value2').value, document.getElementById('value3').value ], impulses: [ document.getElementById('impulse1').value, document.getElementById('impulse2').value ], goals: [ document.getElementById('goal1').value, document.getElementById('goal2').value, document.getElementById('goal3').value ], fortune: fortune, resources: Array.from(document.getElementById('resourcesContainer').children).map(el => el.querySelector('input').value), relations: Array.from(document.getElementById('relationsContainer').children).map(el => ({ name: el.querySelector('input[id$="Name"]').value, archetype: el.querySelector('input[id$="Archetype"]').value, skill: el.querySelector('input[id$="Skill"]').value, power: parseInt(el.querySelector('input[id$="Power"]').value), regard: parseInt(el.querySelector('input[id$="Regard"]').value) })) }; console.log(JSON.stringify(community, null, 2)); alert('Community sheet generated! Check the console for the JSON output.'); }); function updateFortuneDisplay() { document.getElementById('fortuneDisplay').textContent = fortune; document.getElementById('addResourceBtn').disabled = fortune < 10; document.getElementById('addRelationBtn').disabled = fortune < 2; } updateFortuneDisplay(); </script> </body> </html>