Projekt gry typu automation/strategy w klimacie Factorio, rozszerzony o politykę, socjologię, symulację planet i generację tekstur przez AI.
Faza: preprodukcja MVP (vertical slice)
Tryb: single-player (co-op/P2P później)
Platformy: Windows + Linux
Cel wydajnościowy MVP: stabilne 60 FPS
Frontend jest przepisywany do Bevy. Na czas migracji nowy klient działa bez symulacji:
.\scripts\run-bevy.ps1Stary runtime C++ zostaje jako legacy reference do czasu osiągnięcia parytetu.
M7/M8: runtime visual+gameplay pass (zakończony etap bazowy)
Mamy działające okno gry z renderingiem pseudo-izometrycznym, gameplay core i pipeline tekstur:
- C++ runtime (
runtime/) z pętlą ~60 FPS, - pseudo-izometryczny render świata (height levels + side shading),
- AI-like generator tekstur materiałowych (deterministyczny per seed uruchomienia),
- opcjonalny zewnętrzny atlas tekstur (
assets/generated/runtime_texture_atlas.bin) generowany ze zdjęć referencyjnych, - wyraźne sygnatury surowców (iron/copper/coal),
- HUD runtime (metryki symulacji, kontrolki, status),
- integracja C++ <-> Rust (
sim_bootstrap,sim_tick,sim_set_policy,sim_generate_planet,sim_generate_system).
Następny milestone (M8): gameplay layer (wydobycie/crafting/placement) na obecnym rendererze.
Do runtime został dodany pierwszy grywalny rdzeń pętli:
E— ręczne wydobycie surowca z pola gracza,F— prosty smelting (2x iron ore + 1x coal -> 1x iron plate),B— postawienie/usunięcie extractora na złożu,- extractory wydobywają automatycznie w czasie (tick runtime),
- HUD pokazuje inwentarz, liczbę maszyn i komunikaty akcji.
- runtime został podzielony na moduły (
world,gameplay,render,runtime_state) dla porządku kodu. - render mapy został uspokojony: terrain-first + kontekstowe patche surowców (mniej chaosu wizualnego).
runtime/ # C++ runtime/silnik 2.5D
sim-rust/ # Rust: symulacja i procgen
tools-csharp/ # C#: narzędzia i pipeline
docs/ # dokumentacja modułów
scripts/ # skrypty developerskie
PowerShell:
.\scripts\build.ps1 -Configuration DebugSkrypt używa toolchainu MinGW/Ninja (C:\msys64\ucrt64\bin) oraz Rust target x86_64-pc-windows-gnu.
PowerShell:
.\scripts\package-runtime-release.ps1Skrypt buduje tylko runtime + bibliotekę symulacji Rust i tworzy paczkę:
dist\runtime-win64\(pliki do uruchomienia),dist\factorio-pt-runtime-win64.zip(artefakt pod GitHub Release).
Co jest już zaimplementowane:
- render top-down grid (Factorio-like),
- animacja wody i mgła zanieczyszczeń zależna od
pollution, - belty + item-flow (przedmioty poruszające się po taśmach),
- drzewa/las (C = chop tree -> wood),
- generator stylu świata per run (
P= nowy seed stylu), - HUD overlay (H = ukryj/compact/debug),
- płynne sterowanie i kamera (
WASD+Shiftsprint, kamera płynnie podąża za graczem).
Szybkie uruchomienie:
.\scripts\build.ps1 -Configuration Debug
Copy-Item ".\sim-rust\target\x86_64-pc-windows-gnu\debug\factorio_pt_sim.dll" ".\build\runtime\" -Force
.\build\runtime\factorio_pt_runtime.exe- 1 układ planetarny.
- 2 grywalne planety.
- Pętla: wydobycie -> crafting -> automatyzacja -> presja społeczna/polityczna -> decyzje -> skutki środowiskowe.
- Podstawowa polityka: frakcje, klasy społeczne, stabilność państwa.
- AI generuje tekstury lokalnie.
| Warstwa | Technologia | Odpowiedzialność |
|---|---|---|
| Runtime/silnik 2.5D | C++ | render, pętla gry, input, streaming świata, integracja systemów |
| Symulacja | Rust | ekonomia, polityka, procgen planet/biomów, reguły systemowe |
| Narzędzia i pipeline | C# | tooling developerskie, import/eksport danych, utility do contentu |
Zasada: brak duplikacji logiki gameplay między językami. Każdy moduł ma jednego właściciela technologicznego.
- 10 planet core jako wzorce.
- 990 planet proceduralnych opartych o core.
- 1 układ = 10 planet.
- Każdy układ ma unikalny charakter biomów i minimum 1 obszar unikalny na planetę.
- Domyślnie: lokalna generacja tekstur przy starcie świata i przy dużych zmianach środowiska.
- Tryb factorio-like: generowanie atlasu z lokalnego datasetu referencyjnego (legalne źródła) i automatyczne ładowanie w runtime.
- Tryb adaptacyjny:
- mocny sprzęt: preload całego układu,
- słabszy sprzęt: tylko aktywna planeta + streaming.
- Fallback: API dla słabszego sprzętu.
- Umieść legalne referencje w katalogach
assets/style-dataset/<klasa>/(lowland,midland,highland,water,mountain,iron,copper,coal,player). - (Opcjonalnie) skopiuj
assets/style-dataset/manifest.example.jsondomanifest.jsoni dopisz konkretne pliki. - Wygeneruj atlas (osobny program treningowy AI):
dotnet run --project .\tools-csharp\ai-trainer\FactorioPt.AiTrainer.csproj -- `
--dataset-root .\assets\style-dataset `
--output .\assets\generated\runtime_texture_atlas.bin `
--variants 8- Zbuduj i uruchom runtime:
powershell -ExecutionPolicy Bypass -File .\scripts\package-runtime-release.ps1
.\dist\runtime-win64\factorio_pt_runtime.exeKażdy surowiec musi pozostać czytelny dla gracza (np. żelazo ma dalej wyglądać jak żelazo). Dla MVP przyjmujemy walidację mieszaną:
- reguły kształtu/koloru/materialu,
- automatyczna klasyfikacja referencyjna,
- szybki test użytkownika.
standard:
- Moduł -> dokumentacja modułu
- Skończony moduł -> wpis i aktualizacja w głównym README
- Gigantyczny moduł -> osobne README modułu + link z głównego README
Szczegóły i szablony: docs/README.md
- World Generation (duży moduł): docs/modules/world-generation/README.md
- Runtime 2.5D: docs/modules/runtime/README.md
- Simulation Core: docs/modules/simulation-core/README.md
- Tooling Pipeline: docs/modules/tooling-pipeline/README.md