docs(mockups): add the UI/systems bible (11 screens + README)
High-fidelity HTML/CSS/JS design references for the tactical-CRPG direction — title, character creation, character sheet, inventory, world map, quest log, shop, pause/settings, dialogue, combat HUD, main exploration window. README is the handoff spec (visual system, per-screen state models, Godot translation notes). Not production code — the source of truth for the game's look + systems. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
99
mockups/Title Screen.dc.html
Normal file
99
mockups/Title Screen.dc.html
Normal file
@@ -0,0 +1,99 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<script src="./support.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<x-dc>
|
||||
<helmet data-dc-atomics>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Architects+Daughter&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body{margin:0;background:#0a0806;font-family:system-ui,sans-serif}
|
||||
a{color:#8f3a34}a:hover{color:#6f2b26}
|
||||
@keyframes ember{0%{transform:translateY(0) scale(1);opacity:0}12%{opacity:.85}100%{transform:translateY(-460px) scale(.3);opacity:0}}
|
||||
@keyframes glow{0%,100%{opacity:.5}50%{opacity:.8}}
|
||||
</style>
|
||||
</helmet>
|
||||
<div style="width:1920px;height:1080px;position:relative;overflow:hidden;background:radial-gradient(120% 90% at 70% 20%,#2a2018 0%,#160f0a 45%,#0a0806 100%)">
|
||||
|
||||
<!-- key-art placeholder -->
|
||||
<div style="position:absolute;inset:0;background:repeating-linear-gradient(135deg,#181310 0 22px,#141009 22px 44px);opacity:.5"></div>
|
||||
<div style="position:absolute;right:8%;top:44%;transform:translateY(-50%);text-align:center;color:#4a3f30;font:13px ui-monospace,monospace;letter-spacing:.18em;opacity:.6">KEY ART DROPS IN HERE<br><span style="font:13px 'Architects Daughter',cursive;letter-spacing:.02em">a lone figure · the gallows · rain</span></div>
|
||||
|
||||
<!-- warm glow from below (off-screen fire) -->
|
||||
<div style="position:absolute;left:0;right:0;bottom:0;height:420px;background:radial-gradient(80% 100% at 30% 100%,rgba(143,58,52,.28),rgba(169,132,63,.12) 40%,transparent 70%);animation:glow 6s ease-in-out infinite;pointer-events:none"></div>
|
||||
<!-- vignette -->
|
||||
<div style="position:absolute;inset:0;background:radial-gradient(110% 90% at 50% 40%,transparent 45%,rgba(0,0,0,.72) 100%);pointer-events:none"></div>
|
||||
|
||||
<!-- embers -->
|
||||
<div style="position:absolute;left:0;right:0;bottom:0;height:600px;pointer-events:none">
|
||||
<div style="position:absolute;bottom:0;left:12%;width:4px;height:4px;border-radius:50%;background:#c8963f;animation:ember 7s linear infinite;animation-delay:0s"></div>
|
||||
<div style="position:absolute;bottom:0;left:20%;width:3px;height:3px;border-radius:50%;background:#a5442e;animation:ember 9s linear infinite;animation-delay:1.4s"></div>
|
||||
<div style="position:absolute;bottom:0;left:28%;width:5px;height:5px;border-radius:50%;background:#c8963f;animation:ember 8s linear infinite;animation-delay:2.8s"></div>
|
||||
<div style="position:absolute;bottom:0;left:35%;width:3px;height:3px;border-radius:50%;background:#8f6a2a;animation:ember 10s linear infinite;animation-delay:0.7s"></div>
|
||||
<div style="position:absolute;bottom:0;left:44%;width:4px;height:4px;border-radius:50%;background:#c8963f;animation:ember 7.5s linear infinite;animation-delay:3.6s"></div>
|
||||
<div style="position:absolute;bottom:0;left:52%;width:3px;height:3px;border-radius:50%;background:#a5442e;animation:ember 9.5s linear infinite;animation-delay:2.1s"></div>
|
||||
<div style="position:absolute;bottom:0;left:61%;width:5px;height:5px;border-radius:50%;background:#c8963f;animation:ember 8.5s linear infinite;animation-delay:4.4s"></div>
|
||||
<div style="position:absolute;bottom:0;left:70%;width:3px;height:3px;border-radius:50%;background:#8f6a2a;animation:ember 11s linear infinite;animation-delay:1.1s"></div>
|
||||
<div style="position:absolute;bottom:0;left:78%;width:4px;height:4px;border-radius:50%;background:#c8963f;animation:ember 7.8s linear infinite;animation-delay:3.1s"></div>
|
||||
<div style="position:absolute;bottom:0;left:86%;width:3px;height:3px;border-radius:50%;background:#a5442e;animation:ember 9.2s linear infinite;animation-delay:5s"></div>
|
||||
</div>
|
||||
|
||||
<!-- content -->
|
||||
<div style="position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;padding:0 120px">
|
||||
<!-- title -->
|
||||
<div style="position:relative">
|
||||
<div style="font:13px ui-monospace,monospace;letter-spacing:.42em;color:#a9843f;margin-bottom:16px">A DARK FANTASY RPG</div>
|
||||
<div style="font:800 116px Georgia,serif;letter-spacing:.02em;color:#e8ddc8;line-height:.9;text-shadow:0 4px 30px rgba(0,0,0,.8)">CODE OF<br>CONQUEST</div>
|
||||
<div style="width:220px;height:2px;background:linear-gradient(90deg,#a9843f,transparent);margin:26px 0 18px"></div>
|
||||
<div style="font:20px 'Architects Daughter',cursive;color:#b0a488;max-width:520px">The world has real problems, and it does not care about you.</div>
|
||||
</div>
|
||||
|
||||
<!-- menu -->
|
||||
<div style="margin-top:52px;display:flex;flex-direction:column;gap:5px">
|
||||
<sc-for list="{{ items }}" as="m" hint-placeholder-count="6">
|
||||
<div onClick="{{ m.onSelect }}" style="display:flex;align-items:center;gap:16px;cursor:pointer;padding:7px 0">
|
||||
<span style="color:#a9843f;font-size:15px;opacity:{{ m.markOpacity }};transition:opacity .12s">◆</span>
|
||||
<div>
|
||||
<span style="font:600 30px Georgia,serif;letter-spacing:.04em;color:{{ m.color }};transition:color .12s" style-hover="color:#f0e6d0">{{ m.label }}</span>
|
||||
<sc-if value="{{ m.hasSub }}" hint-placeholder-val="{{ false }}"><div style="font:12px ui-monospace,monospace;letter-spacing:.06em;color:#7a6f58;margin-top:1px">{{ m.sub }}</div></sc-if>
|
||||
</div>
|
||||
</div>
|
||||
</sc-for>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- footer -->
|
||||
<div style="position:absolute;left:120px;bottom:40px;font:12px ui-monospace,monospace;letter-spacing:.06em;color:#5a5040">v0.4.1 · BUILT IN GODOT 4.7 · © 2026</div>
|
||||
<div style="position:absolute;right:120px;bottom:40px;font:12px ui-monospace,monospace;letter-spacing:.08em;color:#5a5040">[ ↑ ↓ ] CHOOSE [ ↵ ] ENTER</div>
|
||||
|
||||
</div>
|
||||
</x-dc>
|
||||
<script type="text/x-dc" data-dc-script data-props="{"$preview":{"width":1920,"height":1080}}">
|
||||
class Component extends DCLogic {
|
||||
state = { sel: 0 };
|
||||
|
||||
renderVals() {
|
||||
const defs = [
|
||||
{ label: 'New Game' },
|
||||
{ label: 'Continue', sub: 'CHAPTER II · VEXCCA · 14:22:07' },
|
||||
{ label: 'Load Game' },
|
||||
{ label: 'Settings' },
|
||||
{ label: 'Credits' },
|
||||
{ label: 'Quit' },
|
||||
];
|
||||
const items = defs.map((d, i) => ({
|
||||
label: d.label,
|
||||
hasSub: !!d.sub, sub: d.sub || '',
|
||||
markOpacity: i === this.state.sel ? '1' : '0',
|
||||
color: i === this.state.sel ? '#f0e6d0' : '#9a8f78',
|
||||
onSelect: () => this.setState({ sel: i }),
|
||||
}));
|
||||
return { items };
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user