diff --git a/img/logo.png b/img/logo.png new file mode 100644 index 0000000..6104cd4 Binary files /dev/null and b/img/logo.png differ diff --git a/index.html b/index.html index 5c3189e..7106242 100644 --- a/index.html +++ b/index.html @@ -18,7 +18,8 @@

Obli.Studios

diff --git a/indie_game_roadmap.html b/indie_game_roadmap.html new file mode 100644 index 0000000..c64eda8 --- /dev/null +++ b/indie_game_roadmap.html @@ -0,0 +1,183 @@ + + + + + + Indie Game Roadmap + + + + + + + +

Shardwalker: The Mirror's Edge

+
+ + +

+
+ +

Indie Dev Production Roadmap

+
+

Pre-Production Done

Start: [Today] — End: +30 Days
Design docs, game concept, visual target, core loop
+

Blockout Maps & Prototypes In Progress

+31 Days — +75 Days
Build test maps, whitebox environments, establish movement/combat feel
+

Core Mechanics Development Not Started

+76 Days — +135 Days
Implement combat, shard-switching, attunement system
+

First Playable (Vertical Slice) Not Started

+136 Days — +165 Days
Basic UI, combat, single map, testable state
+

Story & World Design Not Started

+166 Days — +210 Days
Write lore, quests, dialogue, map flow
+

Environment Art & Level Design Not Started

+211 Days — +285 Days
Model, texture, and populate maps
+

Multiplayer Networking Setup Not Started

+286 Days — +330 Days
Mirror or FishNet implementation, lobby & match start logic
+

UI/UX Polish Not Started

+331 Days — +360 Days
Final HUD, menus, pause screens
+

Sound, Music & VFX Not Started

+361 Days — +390 Days
Placeholders replaced with final effects, transitions
+

Beta Playtesting Not Started

+391 Days — +420 Days
Gather feedback on PvP and solo campaign
+

Final Polish & Optimization Not Started

+421 Days — +450 Days
Bug fixing, performance, controller support
+

Marketing & Steam Page Prep Not Started

+451 Days — +471 Days
Trailer, screenshots, copywriting
+

Launch Not Started

+472 Days — +479 Days
Push to Steam, promote, manage release
+
+ + diff --git a/roadmap.json b/roadmap.json new file mode 100644 index 0000000..ce09e12 --- /dev/null +++ b/roadmap.json @@ -0,0 +1,15 @@ +[ + { "id": 1, "title": "Pre-Production", "status": "done" }, + { "id": 2, "title": "Blockout Maps & Prototypes", "status": "in progress" }, + { "id": 3, "title": "Core Mechanics Development", "status": "not started" }, + { "id": 4, "title": "First Playable (Vertical Slice)", "status": "not started" }, + { "id": 5, "title": "Story & World Design", "status": "not started" }, + { "id": 6, "title": "Environment Art & Level Design", "status": "not started" }, + { "id": 7, "title": "Multiplayer Networking Setup", "status": "not started" }, + { "id": 8, "title": "UI/UX Polish", "status": "not started" }, + { "id": 9, "title": "Sound, Music & VFX", "status": "not started" }, + { "id": 10, "title": "Beta Playtesting", "status": "not started" }, + { "id": 11, "title": "Final Polish & Optimization", "status": "not started" }, + { "id": 12, "title": "Marketing & Steam Page Prep", "status": "not started" }, + { "id": 13, "title": "Launch", "status": "not started" } +] diff --git a/server.js b/server.js new file mode 100644 index 0000000..0a647db --- /dev/null +++ b/server.js @@ -0,0 +1,68 @@ +// server.js (Node.js + Express backend) +const express = require('express'); +const fs = require('fs'); +const path = require('path'); +const bodyParser = require('body-parser'); +const cookieParser = require('cookie-parser'); +const jwt = require('jsonwebtoken'); +const app = express(); + +const SECRET_KEY = 'your_super_secret_key'; +const PASSWORD = 'shardwalker2025'; // set your password here +const PORT = 3000; + +app.use(express.static('public')); +app.use(bodyParser.json()); +app.use(cookieParser()); + +// Serve login check +app.get('/check-auth', (req, res) => { + const token = req.cookies.token; + if (!token) return res.status(401).json({ authenticated: false }); + + try { + jwt.verify(token, SECRET_KEY); + res.json({ authenticated: true }); + } catch (err) { + res.status(403).json({ authenticated: false }); + } +}); + +// Login route +app.post('/login', (req, res) => { + const { password } = req.body; + if (password === PASSWORD) { + const token = jwt.sign({ user: 'admin' }, SECRET_KEY, { expiresIn: '1d' }); + res.cookie('token', token, { httpOnly: true }); + res.json({ success: true }); + } else { + res.status(403).json({ success: false }); + } +}); + +// Get current roadmap +app.get('/api/roadmap', (req, res) => { + const data = fs.readFileSync(path.join(__dirname, 'roadmap.json')); + res.json(JSON.parse(data)); +}); + +// Update roadmap status +app.post('/api/roadmap', (req, res) => { + const token = req.cookies.token; + if (!token || !jwt.verify(token, SECRET_KEY)) { + return res.status(403).json({ success: false }); + } + const { id, status } = req.body; + const filePath = path.join(__dirname, 'roadmap.json'); + const roadmap = JSON.parse(fs.readFileSync(filePath)); + const phase = roadmap.find(p => p.id === id); + if (phase) { + phase.status = status; + fs.writeFileSync(filePath, JSON.stringify(roadmap, null, 2)); + res.json({ success: true }); + } else { + res.status(404).json({ success: false }); + } +}); + +app.listen(PORT, () => console.log(`Server running at http://localhost:${PORT}`)); diff --git a/servermanager.html b/servermanager.html index 587cbad..730f17b 100644 --- a/servermanager.html +++ b/servermanager.html @@ -11,7 +11,8 @@
diff --git a/shardwalker.html b/shardwalker.html index 856fdd9..b496129 100644 --- a/shardwalker.html +++ b/shardwalker.html @@ -1,17 +1,21 @@ - - - Shardwalker: The Mirror's Edge - + + + + + + Shardwalker: The Mirror's Edge + - +