Files
arch_agent 5cf42a5e5d v0.1.0 — M1: Project Setup + Tilemap + Combat + Backend
Frontend:
- HTML5 Canvas isometric tilemap renderer
- Eichenhafen starting city (procedural)
- Click-to-move A* pathfinding
- Player stats, HP/SP/EXP bars, skill bar, minimap
- 3 NPCs (merchant, class master, innkeeper)
- 6 monster spawns with aggro AI
- Combat: auto-attack, damage numbers, EXP/gold
- Player death + respawn

Backend:
- FastAPI server with SQLite
- Ollama LLM bridge for events + dialogue
- Event validation (no soft-lock)
- NPC dialogue generation

Design:
- Full DESIGN.md with architecture, formulas, milestones
- 6 base classes + 6 advanced classes
- 3 fixed cities, dynamic events
2026-07-17 20:14:16 +02:00

173 lines
3.3 KiB
CSS

/* Aether Chronicles — Stylesheet */
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: #0a0a0a;
color: #e0e0e0;
font-family: 'Segoe UI', Tahoma, sans-serif;
overflow: hidden;
user-select: none;
}
#game-container {
position: relative;
width: 960px;
height: 640px;
margin: 0 auto;
border: 2px solid #333;
}
#game-canvas {
display: block;
cursor: crosshair;
background: #1a1a2e;
}
#ui-overlay {
position: absolute;
top: 0; left: 0;
width: 100%; height: 100%;
pointer-events: none;
}
/* Status Bars */
#status-bars {
position: absolute;
top: 10px; left: 10px;
width: 200px;
pointer-events: auto;
}
.bar-row {
display: flex;
align-items: center;
margin-bottom: 4px;
}
.bar-label {
width: 30px;
font-size: 11px;
font-weight: bold;
color: #aaa;
text-align: right;
margin-right: 5px;
}
.bar-container {
flex: 1;
height: 14px;
background: #1a1a1a;
border: 1px solid #444;
border-radius: 2px;
position: relative;
overflow: hidden;
}
.bar-fill {
height: 100%;
transition: width 0.3s ease;
}
.hp-fill { background: linear-gradient(to right, #c44, #e55); }
.sp-fill { background: linear-gradient(to right, #44c, #66e); }
.exp-fill { background: linear-gradient(to right, #cc4, #ee5); }
.bar-text {
position: absolute;
top: 0; left: 0; right: 0;
text-align: center;
font-size: 10px;
line-height: 14px;
color: #fff;
text-shadow: 1px 1px 1px #000;
}
/* Skill Bar */
#skill-bar {
position: absolute;
bottom: 10px; left: 50%;
transform: translateX(-50%);
display: flex;
gap: 4px;
pointer-events: auto;
}
.skill-slot {
width: 40px; height: 40px;
background: rgba(20,20,30,0.85);
border: 1px solid #555;
border-radius: 3px;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
color: #888;
cursor: pointer;
transition: all 0.2s;
}
.skill-slot:hover {
border-color: #88aaff;
background: rgba(40,40,60,0.9);
}
.skill-slot.active {
border-color: #ffcc44;
background: rgba(60,50,20,0.9);
}
.skill-slot.on-cooldown {
opacity: 0.4;
cursor: not-allowed;
}
/* Minimap */
#minimap-container {
position: absolute;
top: 10px; right: 10px;
width: 120px; height: 120px;
border: 1px solid #555;
background: rgba(0,0,0,0.7);
border-radius: 3px;
}
#minimap { display: block; }
/* Event Log */
#event-log {
position: absolute;
bottom: 60px; left: 10px;
width: 300px; height: 100px;
background: rgba(0,0,0,0.6);
border: 1px solid #333;
border-radius: 3px;
overflow: hidden;
pointer-events: auto;
}
#event-messages {
padding: 5px;
font-size: 12px;
max-height: 100%;
overflow-y: auto;
}
.event-msg {
margin-bottom: 2px;
color: #ccc;
}
.event-msg.system { color: #ffcc44; }
.event-msg.combat { color: #ff6666; }
.event-msg.quest { color: #66ff66; }
.event-msg.llm { color: #aa88ff; }
/* Character Info */
#char-info {
position: absolute;
top: 10px; left: 220px;
pointer-events: none;
}
#char-name { font-size: 14px; font-weight: bold; color: #ffcc44; }
#char-level { font-size: 12px; color: #aaa; }
#char-class { font-size: 11px; color: #88aaff; }