diff --git a/GDD.org b/GDD.org
index a4699c8..dda786a 100644
--- a/GDD.org
+++ b/GDD.org
@@ -4,4 +4,149 @@
** Historia i czas
Wschód. Od początku 2027 do sierpnia. Lubelską jeżdżą namiętnie
pojazdy wojskowe transportujące czołgi, haubice, i gigantyczne
-anteny.
+anteny. Na deptaku w Chełmie chodzą amerykańscy żołnierze w
+kamuflażu. Polaka rzadko idzie spotkać; powiat chełmski w dużej mierze
+wysiedlony, ludzie uciekli od wojny. Huk dział i murmur samolotów i
+bezzałogowych dronów autonomicznych słychać w zabitych dechami
+wiochach pow. chełmskiego.
+
+Amerykańcy bardzo cenią sobie lokalną twórczość bimbrowników i
+kłusowników. Nielegalne wymiany broni i zasobów za magiczne wywary 96
+volt. Szpital w Chełmie przerobiony na szpital wojskowy; oddział
+psychiatryczny spowrotem na koszary. Ci, co zostali, albo są polskimi
+wojskowymi, albo pomagają w trudach wojennych pracując w szpitalach,
+magazynach, nowo powstałych fabrykach wojennych. Telefony mają teraz
+taki pipsztyk, że można do nich powiedzieć "Powiedz mi żart", i
+telefon opowiada żart.
+
+Powiat rządzi się innymi zasadami. Policja prawie że nie istnieje,
+ledwo co utrzymuje prawo, ale ludzie wcale go nie łamią. Pomoc
+wzajemna powszednieje. Podziemie nielegalnego handlu rozwija
+się. Spustoszałe domy nowobogackich rezydentów stoją z gnijącymi
+fundamentami. Leśnictwo i nadleśnictwo przestało efektywnie
+funkcjonować; wojsko poniekąd pomaga, ale dzikość wraca do powiatu.
+
+Buch. Epicentrum: amerykańskie koszary wojskowe w Chełmie. Rosyjskie
+MPB zrzuciły kilka głowic i kilkanaście dipoli; tarcze antyrakietowe
+nie pomogły. MAD na skalę światową.
+
+W Siedliszczu, patrząc na wschód, widać obrzydliwie duży i jasny grzyb
+termojądrowy. Stary statystyk podaje, że 15 % ludności gminy,
+zwłaszcza w starszych przedziałach wiekowych, jest ślepe. Poparzenia
+drugiego i trzeciego stopnia na starych chłopach co akurat jechali
+trzydziestką po polu.
+
+Drony --- skonfundowane, bez siatki komunikacyjnej i centrali --- lecą
+w stronę gminy, kręcą się trochę nad polami, i spadają na
+pola. Napromieniowani rolnicy zbierają je, podczepiając ich baterie do
+sprzętów RTV i AGD.
+
+Stary statystyk szacuje, że w gminie przeżyło jedynie sto czy dwieście
+mieszkańców.
+
+Nowa moda: tryb łowiecko-zbieracki. Kłusownictwo, zbieranie grzybów,
+próby polowań. Dzika natura wraca do gminy, ilość dziczyzny na
+poziomie Paleolitycznym.
+
+Zbiornik im. Edwarda Wojtasa centrum nowej społeczności
+gminnej. Rybołówstwo, próby agrokultury. Slumsy majdańskie,
+skonstruowane ze starych PGR-owskich plandek i leszczyny, wyglądają
+naprawdę imponująco.
+
+Samo Siedliszcze jest puste jak zawsze. W centrum została jedynie
+stara babka, znająca się na układzie kostnym człowieka, ziołach, i
+ogólnym znachorstwie. Jest w tajemniczym kontakcie z bandami leśnymi
+operującymi w lasach obok Bezku i na Janowicy. Szałasy z gałęzi
+świerkowych i niebieskich plandek, łachmany, oraz niezmierna wiedza o
+lokalnej florze i faunie charakteryzuje leitmotif bandy.
+
+** Mechanika gry
+*** Ekonomia pogłoski
+Rozmowy i handle z postaciami uzależnione są od tego, jaką famę ma
+gracz, z kim się zna, komu podpadł, a komu się przylizał. Różne grupy
+i postacie mają różne sposoby rozumienia tego, i sieć jest bardzo
+skomplikowana, więc gracz musi uważać, czy jak pomoże temu, to nie
+podpadnie tamtemu; jak nie zrobi tego, to podpanie temu, a pomoże
+tamtemu, itp.
+*** Rozmowy z NPC
+Każdy NPC ma swój sposób rozumienia świata, analizowania sytuacji,
+itp. Tym samym gracz musi być bardzo uważny i naprawdę zrzozumieć
+przekonania jakiejś postaci, jeśli chce jej pomóc --- lub się jej
+sprzeciwić. Np., stary statystyk jest stricte empriyczny, rozumie
+świat jako liczby i relacje między liczbami. Stara babka jest
+enigmatycznym bytem, który rozumie świat jako mieszankę ludowej
+wiedzy, anarchoprymitywistycznej ideologii, itp.
+*** Ciało, obrażenia, stany
+Nie istnieje HP; zamiast tego, stan ciała jest opisywany
+symptomatycznie: "brzydko wyglądające rany otwarte", "mdłości (3
+dni)", "słuch utracony po wybuchu".
+
+Stany ciała i symptomy zazwyczaj wpływają na wewnętrzny licznik
+szczęścia. Jak jesteśmy głusi i mamy mdłości, jesteśmy nieszczęśliwi;
+a więc, nie możemy robić różnych rzeczy bo nie mamy ochoty.
+
+Kontrą do tego jest statystyka woli mocy, którą zdobywamy poprzez
+interakcje z NPC i decyzjami które promują samostanowienie. Taka
+determinacja pozwala na działanie /mimo/ tego, że jesteśmy
+nieszczęśliwi, mamy połamaną nogę,
+*** Cechy i "statystki" postaci
+Gracz kilka "zacznij grę", i nie może nic ze swoją postacią
+zrobić. Nie ma ona płci, głosu, niczego. Jedynie losową garstkę cech
+(niekoniecznie podzielonych na pozytywne i negatywne, ale mających i
+pozytywy, i negatywy).
+
+| Cecha | Pozytywy | Negatywy |
+|--------------------------+--------------------------------------+-------------------------------|
+| technik informatyk | zna się na komputerach i telefonach | ludzie uważają go za dziwnego |
+|--------------------------+--------------------------------------+-------------------------------|
+| intuicja botaniczna | może mniej więcej stwierdzić | nie wiem |
+| | czy coś jest jadalne, czy nie | |
+|--------------------------+--------------------------------------+-------------------------------|
+| złota rączka | potrafi dobrze naprawiać różnorakie | nieufność otoczenia |
+| | przedmioty | |
+|--------------------------+--------------------------------------+-------------------------------|
+| nawyk palacza | dużo NPC go lubi, "swój chłop", | częściej ma zadyszkę |
+| | czuje mniej lęku | |
+|--------------------------+--------------------------------------+-------------------------------|
+| przeszywające spojrzenie | jest bardziej spotrzegawczy | ludzie się go boją |
+| | w rozmowach i stanach afektywnych | |
+| | innych postaci | |
+|--------------------------+--------------------------------------+-------------------------------|
+| głos, co łamie ciszę | pogłoski szybciej się roznoszą | nieśmiali NPC się go boją |
+|--------------------------+--------------------------------------+-------------------------------|
+| pijany chirurg | niezwykle zwinne palce i precyzja | jak nie jest, to traci dużo |
+| | ale tylko jak jest najebany | swojej zwinności |
+|--------------------------+--------------------------------------+-------------------------------|
+| schizoduch PGR-u | czasami graczowi objawia się | inni myślą, że jest obłąkany |
+| | duch PGR-u, podpowiadający o różnych | |
+| | rzeczach związanych z osiągnięciem | |
+| | większego szczęścia | |
+|--------------------------+--------------------------------------+-------------------------------|
+| schizocień za plecami | czasami graczowi objawia się cień, | inni myślą, że jest obłąkany |
+| | który podpowiada o różnych rzeczach | |
+| | związanych z osiągnięciem większej | |
+| | woli | |
+|--------------------------+--------------------------------------+-------------------------------|
+| oczy prababki | świetna widoczność w nocy | słabsza widoczność w dzień |
+|--------------------------+--------------------------------------+-------------------------------|
+| | | |
+
+*** Czas w grze
+Nie ma godzin, minut, ani sekund. Takie dane nie są udostępniane
+graczowi. Wszystko zależy od tego, co widzi i słyszy. Gra kusi gracza
+zegarkami porozrzucanymi w niektórych miejscach, ale każdy z nich jest
+popsuty.
+*** Fizyczny świat
+Nie ma żadnej mapy w grze. Gracz musi poradzić sobie znakami
+drogowymi, specyficznymi drzewami, domami, wieżami, itp. W orientacji
+pomaga zoptymalizowany silnik, więc dystans renderowania jest wielki.
+*** Mapa afektywna
+Żeby gracz nie pogubił się we wszystkich relacjach w grze, relacje
+między postaciami są pokazywane na "mapie afektywnej" jako pewna sieć
+z postaciami i ich połączeniami.
+*** Przedmioty
+**** Flora
+Żadna roślina, jarzyna, warzywo, czy jagoda nie ma żadnej przypisanej
+nazwy. Są tylko domyślne nazwy typu "nieznane warzywo". Gracz może
+zmieniać nazwy przedmiotów na podstawie tego, jakie mają na niego
+efekty, czy na podstawie tego, co dowie się od innych osób.
diff --git a/TODO.org b/TODO.org
index d922514..2f4be9b 100644
--- a/TODO.org
+++ b/TODO.org
@@ -1,11 +1,19 @@
-#+TITLE: Wschód TODO
+hhhh#+TITLE: Wschód TODO
* UI system
+** DONE Switch from floats to ints in all UI stuff, from vec2's to ivec2's
+** TODO Centering widget in parent
+** TODO Inheriting width/height from parent
** TODO Flowbox proper weighing
+** TODO UI system major refactoring and redesign
+** TODO Context menus
+** TODO Z-sorting UI children (or windows)
+** DONE Loading UI from a file or script
+** TODO Better GL scissoring, calculating the summed AABB crop box from ALL parents
+** DONE Move layout_width and layout_spacing into the widget out of the style
** DONE Entry cursor
** DONE Reset UI state (hovered, clicked, focused) on lose UI focus
** DONE Entry UTF-8 support
-** TODO UI system major refactoring and redesign
** DONE Think about the UI on_xxx_down/up handling (solved)
** DONE Revamp UI event system
** DONE Implement vtables (something else was done)
@@ -15,7 +23,7 @@
** DONE Scissoring of out-of-bounds UI elements
** DONE On mouse enter, on mouse leave, and on mouse move callbacks
** DONE Button widget
-** TODO Tooltip rendering
+** DONE Tooltip rendering
** DONE Borders
** DONE Padding/margin
** DONE Aspect ratios
@@ -28,22 +36,26 @@
** DONE FlowLayout widget
** DONE Multiline text widget
** DONE Text entry widget
-** TODO Movable and resizable windows
-** TODO Loading UI from a file or script
+** DONE Movable windows
+** DONE Resizable windows
+** DONE Move uicursor to uidummy
** DONE Fix scrollable scrolling being a bit weird
* Entity system
** TODO Entity hit testing
-** TODO Entity on hover UI label, outline
-** TODO Meshing together N entities for less drawcalls
** TODO Sky/sun/clouds drawing seperate from other entities
+** TODO Entity on hover UI label, outline
** TODO Optimize entity rendering and ticking; it's a huge bottleneck
** TODO Ticking system revamp; ticking calculation when out of tick radius and coming back
+** TODO Meshing together N entities for less drawcalls
* Chunk system
** TODO Chunk queue/heap sorted by distance to player
* Misc.
+** TODO Move cursor changing to graphics.c
** TODO Better sky/cloud system, perhaps a hemisphere
** TODO Sun system
* Overall game structure
-** TODO Resource packs with shaders, textures, entity templates
+** DONE Resource packs with shaders, textures, entity templates
** TODO Map pack with heightmap data, materialmap data, entities and their placements
-** TODO Guile/Lua integration
+** DONE Guile/Lua integration
+** TODO Proper memory freeing: UI Widgets, pakman, UIContext, stateman
+
diff --git a/assets/1061277314.tif b/assets/1061277314.tif
new file mode 100644
index 0000000..277a834
Binary files /dev/null and b/assets/1061277314.tif differ
diff --git a/assets/1992230419.tif b/assets/1992230419.tif
new file mode 100644
index 0000000..e7a9e14
Binary files /dev/null and b/assets/1992230419.tif differ
diff --git a/assets/448758643.tif b/assets/448758643.tif
new file mode 100644
index 0000000..95ee6d5
Binary files /dev/null and b/assets/448758643.tif differ
diff --git a/assets/482517433.tif b/assets/482517433.tif
new file mode 100644
index 0000000..b88c3a2
Binary files /dev/null and b/assets/482517433.tif differ
diff --git a/assets/logo.png b/assets/logo.png
new file mode 100644
index 0000000..9d07bea
Binary files /dev/null and b/assets/logo.png differ
diff --git a/assets/logo.svg b/assets/logo.svg
new file mode 100644
index 0000000..3d059cb
--- /dev/null
+++ b/assets/logo.svg
@@ -0,0 +1,210 @@
+
+
+
+
diff --git a/assets/mapa_wys.svg b/assets/mapa_wys.svg
new file mode 100644
index 0000000..bc73d8b
--- /dev/null
+++ b/assets/mapa_wys.svg
@@ -0,0 +1,46 @@
+
+
+
+
diff --git a/game/src/entity/entity.c b/game/src/entity/entity.c
index 508e9a1..4d80e03 100644
--- a/game/src/entity/entity.c
+++ b/game/src/entity/entity.c
@@ -13,15 +13,13 @@ Entity_new ()
}
gboolean
-Entity_render (Entity *entity, vec3 camera_position, mat4 view, vec4 frustum_planes[6])
+Entity_render (Entity *entity, vec3 camera_position, mat4 view, vec4 frustum_planes[6],
+ int render_distance, gboolean wireframe_enabled)
{
if (!entity->visible)
{
return FALSE;
}
-
- int render_distance = gvar_get ("render_distance");
- gboolean wireframe_enabled = gvar_get ("wireframe_enabled");
/* Why an int, why int division? It's simply much faster than
floating point operations. No need to have super accurate cull
diff --git a/game/src/entity/entity.h b/game/src/entity/entity.h
index 5be36be..835a5de 100644
--- a/game/src/entity/entity.h
+++ b/game/src/entity/entity.h
@@ -29,9 +29,8 @@ typedef struct Entity
vec3 position;
vec3 rotation;
vec3 scale;
- /* Use RESPRG to get the int. */
+
unsigned int program;
- /* Use RESTEX to get the int. */
unsigned int texture;
} Entity;
@@ -60,4 +59,5 @@ entity_compute_aabb (Entity *e, vec3 out_min, vec3 out_max)
}
Entity *Entity_new ();
-gboolean Entity_render (Entity *entity, vec3 camera_position, mat4 view, vec4 frustum_planes[6]);
+gboolean Entity_render (Entity *entity, vec3 camera_position, mat4 view, vec4 frustum_planes[6],
+ int render_distance, gboolean wireframe_enabled);
diff --git a/game/src/world.c b/game/src/world.c
index 7690916..8b24615 100644
--- a/game/src/world.c
+++ b/game/src/world.c
@@ -100,6 +100,7 @@ World_render (World *w, vec3 position, mat4 view, vec4 planes[6])
texture_use (PMTEX ("terrain4"), 4);
int render_distance = gvar_get ("render_distance");
+ gboolean wireframe_enabled = gvar_get ("wireframe_enabled");
int frame_chunks = 0, frame_entities = 0;
for (int z = cz - render_distance; z <= cz + render_distance; ++z)
@@ -127,7 +128,7 @@ World_render (World *w, vec3 position, mat4 view, vec4 planes[6])
ChunkMesh_bind (mesh);
program_set_vec3_ind (PMPRG ("chunk"), "chunk_position", x * CHUNK_DIM, 0.0, z * CHUNK_DIM);
- ChunkMesh_render (mesh, FLAG_GET ("wireframe_enabled"));
+ ChunkMesh_render (mesh, wireframe_enabled);
frame_chunks++;
}
}
@@ -136,7 +137,7 @@ World_render (World *w, vec3 position, mat4 view, vec4 planes[6])
for (guint i = 0; i < w->entities->len; ++i)
{
Entity *ent = g_array_index (w->entities, Entity*, i);
- frame_entities += Entity_render (ent, position, view, planes) ? 1 : 0;
+ frame_entities += Entity_render (ent, position, view, planes, render_distance, wireframe_enabled) ? 1 : 0;
}
gvar_set ("frame_chunks", frame_chunks);
diff --git a/game_map.png b/game_map.png
deleted file mode 100644
index 2e343d2..0000000
Binary files a/game_map.png and /dev/null differ
diff --git a/mapedit/Makefile b/mapedit/Makefile
deleted file mode 100644
index f87635e..0000000
--- a/mapedit/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-SRC=src/mapedit.c
-
-OBJ=$(SRC:.c=.o)
-CFLAGS=-g -Werror -Wextra -Wall `pkg-config --cflags gtk4`
-LDFLAGS=`pkg-config --libs gtk4`
-TARGET=mapedit
-CC=gcc
-LD=gcc
-
-.PHONY: clean
-
-all: $(TARGET)
-
-$(TARGET): $(OBJ)
- $(LD) $^ -o $@ $(LDFLAGS)
-
-.c.o:
- $(CC) -c $^ -o $@ $(CFLAGS)
-
-clean:
- $(RM) $(TARGET) $(OBJ)
diff --git a/mapedit/game.c b/mapedit/game.c
deleted file mode 100644
index 9498866..0000000
--- a/mapedit/game.c
+++ /dev/null
@@ -1,67 +0,0 @@
-#define SDL_MAIN_USE_CALLBACKS 1
-#include
-#include
-
-#include
-
-#include "shader.h"
-
-static SDL_Window *window = NULL;
-static SDL_GLContext context = NULL;
-
-SDL_AppResult
-SDL_AppInit (void **appstate, int argc, char **argv)
-{
- (void) appstate; (void) argc; (void) argv;
-
- INFO ("Running game with debugging facilities.");
- SDL_SetAppMetadata ("Wschód", VERSION, "eur.chopininteractive.wschod-game");
-
- if (!SDL_Init (SDL_INIT_VIDEO)) {
- ERROR ("Couldn't initialize SDL: %s", SDL_GetError());
- return SDL_APP_FAILURE;
- }
-
- window = SDL_CreateWindow ("Wschód", 640, 480, SDL_WINDOW_OPENGL);
-
- if (!window) {
- ERROR ("Couldn't create window: %s", SDL_GetError());
- return SDL_APP_FAILURE;
- }
-
- context = SDL_GL_CreateContext (window);
-
- return SDL_APP_CONTINUE;
-}
-
-SDL_AppResult
-SDL_AppEvent (void *appstate, SDL_Event *event)
-{
- (void) appstate;
-
- if (event->type == SDL_EVENT_QUIT) {
- return SDL_APP_SUCCESS;
- }
-
- return SDL_APP_CONTINUE;
-}
-
-SDL_AppResult
-SDL_AppIterate (void *appstate)
-{
- (void) appstate;
-
- glClearColor (0, 0, 0, 1);
- glClear (GL_COLOR_BUFFER_BIT);
- SDL_GL_SwapWindow (window);
-
- return SDL_APP_CONTINUE;
-}
-
-void
-SDL_AppQuit (void *appstate, SDL_AppResult result)
-{
- (void) appstate;
- (void) result;
- SDL_GL_DestroyContext (context);
-}
diff --git a/mapedit/shell.nix b/mapedit/shell.nix
deleted file mode 100644
index 8ed8896..0000000
--- a/mapedit/shell.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-let
- nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-25.05";
- pkgs = import nixpkgs { config = {}; overlays = []; };
-in
-
-
-pkgs.mkShellNoCC {
- packages = with pkgs; [
- gcc
- pkg-config
- gtk4
- ];
-}
diff --git a/mapedit/src/mapedit.c b/mapedit/src/mapedit.c
deleted file mode 100644
index 7311589..0000000
--- a/mapedit/src/mapedit.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include
-
-int
-main ()
-{
- return 0;
-}