- Modified tileset configuration to include multiple tile images with updated dimensions. - Enhanced game log to provide detailed startup information and entity loading for room1. - Updated binary file for the game executable. added climebol laders
3.6 KiB
3.6 KiB
språk: go typ: spel
Bibliotek och Verktyg
- Ebitengine (
github.com/hajimehoshi/ebiten/v2): Kärnmotor. Hanterar 2D-rendering av sprites (top-down + side-view), fönster, tangentbord/mus/handkontroll samt plattformsoberoende ljuduppspelning. - net (Standardbiblioteket) / kcp-go (
github.com/xtaci/kcp-go): Nätverk för multiplayer.neterbjuder standard TCP/UDP, medankcp-goger "Reliable UDP" för snabb realtidsuppdatering utan dataförlust. - mathgl (
github.com/go-gl/mathgl/mgl64): Vektormatematik (3D-vektorer). Används för koordinatsystemet och spelets 3D-positioner, vilket är basen för egen handkodad fysik (gravitation) och projicering ner till 2D-skärmen.
Kärnarkitektur
Spelets arkitektur bygger på att helt separera 3D-spellogiken från 2D-rendering.
- 3D Verklighet: Varje spelfigur och block har en 3D-vektor (
X,Y,Z) samt en storlek (Width,Height,Depth). Fysikmotorn (som bygger på euler-integrering och AABB-kollisioner) körs helt och hållet i denna 3D-värld. Tyngdkraft drar objekt neråt längs Y eller Z axeln. - 2D Rendering (Double Viewport): Spelet renderas genom två synkroniserade vyportar bredvid varandra, båda med en svart inramning:
- Vänster vy (Sido-vy): Visar X- och Y-axeln (bredd och höjd). När spelaren går "inåt" längs Z-axeln ritas lagren upp till 3 block inåt i djupet. För varje block inåt blir objektet gradvis mer utgråat (skuggat) och transparent, vilket skapar en tydlig känsla av djup (parallax-liknande 3D-effekt).
- Höger vy (Ovanifrån): Visar X- och Z-axeln (bredd och djup). Visar bara spelarens närområde i Y-led med en specifik ljushets- och transparensstege:
- -1 block (Nivån spelaren står på) samt 0 block (Samma höjd): Båda är lite ljusare (tint 1.2).
- +1 block upp: Ljusare och lite transparent (alpha 0.5, tint 1.4).
- +2 block upp: Ännu ljusare och nästan helt transparent (alpha 0.2, tint 1.6).
- Kartstruktur: Världen sparas i grunden som en tre-dimensionell array (
[][][]Entity), exempelvis motsvarande en 10x10x10 map. Varje block motsvarar 32x32 pixlar i world-space som sedan representeras av specifika sprites urassets/images/1 Tiles. Kartans botten består av solida jordblock som förhindrar spelaren från att falla igenom. - Gemensamt Spelobjekt (Entity): All logik byggs på ett generiskt
Entity-interface som besvarar frågor somIsBlocking(),IsMovable(),Move(),Damage(),Pickup()ochGetHealth(). Detta gör att karaktärer, pussel och fiender smidigt kan kalla varandras triggers och dela samma kollisionsmekanismer i 3D-kuben. - Animation och Input: Kontroller och inputs (Gå, Hoppa m.m) knyts till konfigurerbara actions. Karaktärerna använder sprite-sheets där varje "frame" är 96x96 pixlar som bläddras igenom i en specifik timer för att spela upp livliga animationer. Att byta håll innebär att man byter animation state och hastighetsvektor. För att springa håller spelaren nere
Ctrl-knappen. För att klättra i klättringsbara objekt måste spelaren stå inuti objektet och hålla nereShift-knappen; då användsA,S,D,Wför att klättra vänster, ner, höger och upp, och pil upp / pil ner för att klättra inåt eller utåt (Z-axeln).
Map Pipeline
- Tiled JSON (
assets/maps/*.tmj): Kartdata. - Entity Definitions (
assets/entity_defs.json): JSON som mappar ID till top/sido sprites samt om den är solid eller har specifik logik. Exempel:- id 1: side tile_02, top tile_31 (Gräs)
- id 2: side tile_12, top tile_12 (Jord)
- id 3: portal (Grässtruktur som byter karta)