Uh
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
+210
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 1.6 MiB |
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 510 KiB |
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
+3
-2
@@ -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);
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 306 KiB |
@@ -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)
|
||||
@@ -1,67 +0,0 @@
|
||||
#define SDL_MAIN_USE_CALLBACKS 1
|
||||
#include <SDL3/SDL.h>
|
||||
#include <SDL3/SDL_main.h>
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#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);
|
||||
}
|
||||
@@ -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
|
||||
];
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user