Guerilla Simulator: Uprising in Yugoslavia
Dev
Or docker dev:
docker build -t guerilla-simulator .
docker run -p 3000:3000 guerilla-simulator
open http://localhost:3000/
Technology
- svg renderer
- react + typescript
- useReducer + local state
TODO
- napraviti react projekat ✓
- naći lokacije gradova + broj stanovnika ✓
- renderovati gradove na pozadini ✓
- naći render funkciju iz partisan games ✓
- fiksirati aspect ratio 1:1 i smisliti zoom (scroll) ✓
- implementirati voronoi oblasti
- dodati voronoi ✓
- napraviti komponentu za oblast ✓
- dodati granice države (ili neki limit ✓)
- veličinu mape setovati na jednom mestu, ne u css-u ✓
- podaci
- dodati manja partizanska mesta sa znaka ✓
- pronaći duplikate ✓
- nazivi
- prikazivati samo nazive većih gradova ✓
- prikazivati tačku grada ✓
- tačka srazmerno veličini ✓
- ne preklapati tačku i naziv ✓
- prikazivati naziv na hover ✓
- pozicija da bude objekat ✓
- stanja
- dodati osnovna stanja ✓
- obojiti stanja ✓
- dodati promenu stanja na klik ✓
- useReducer za čuvanje stanja ✓
- tačkasti region ✓
- svg
- odseći granice mape ✓
- dodati more ✓
- srediti isečenu južnu granicu (naći ispravan svg) !!
- dodati crnu granicu ✓
- prozor
- proširiti region stanje da bude objekat ✓
- dodati selected u initialState ✓
- toggle selected na klik ✓
- dodavati crnu granicu na selected ✓
- setovati inicijalno stanje u store (oslobođene teritorije) ✓
- otvarati prozor za selected ✓
- slati region data na select ✓
- proslediti još podataka prozoru ✓
- regije da imaju populaciju ✓
- pozicionirati prozor blizu pozicije regije (ne treba)
- sortirati regione po veličini pre renderovanja, da manji ne idu preko većih ✓
- postaviti nemce
- garnizon sukladno veličini mesta ✓
- dodati razne jedinice (pešaci, tenkovi, topovi, avioni) ✓
- postaviti ikonice
- izabrati ikonice za assets ✓
- sve prebaciti u svg ✓
- staviti ikonice na veća mesta ✓
- napraviti komponentu Icon ✓
- komponenta prima region data i uzima region state ✓
- na osnovu veličine garnizona i frakcije prikazuje odgovarajuću ikonicu ✓
- prikazivati random unit type od postojećih za svako mesto ✓
- da bude niz ikona za svaku kategoriju ✓
- da ne ide random, nego redom po nizu ✓
- probrati slike ✓
- srediti veličine slika ✓
- manje nemaca ✓
- više partizana (problem bio limit za mala mesta) ✓
- prikazivati slike samo na većim oblastima ✓
- izračunati površine poligona ✓
- da nemci budu okrenuti ka istoku a partizani ka zapadu ✓
- previše nemačkih aviona i tenkova, treba više vojnika, podesiti šanse ✓
- dodati hover na ustaničke teritorije ✓
- dodati legendu ✓
- postaviti partizane ✓
- inicijalno ustanici drže neka manja mesta ✓
- odrediti jačinu garnizona (samo pešadija dovoljna da osvoje neko susedno mesto) ✓
- srediti eslint (ne može)
- restruktuirati podatke ✓
- spojiti region data i state ✓
- provider u main ✓
- prosleđivati RegionState regionu ✓
- ukinuti upotrebu RegionData ✓
- ažurirati selected ✓
- refaktor Store i MapState ✓
- mehanika bitke
- mogućnost napada (attackable) ✓
- dodati regionu susedne oblasti ✓
- dodati indikator napada za susedne oblasti (roze boja?) ✓
- dobaviti susede od selected i menjati im boju na hover ✓
- samo ako je izabran oslobođen a susedi nisu ✓
- problem: boja se gubi kada kliknemo na suseda za napad ✓
- dodati attackable - ako je status okupiran i graniči se sa oslobođenim ✓
- faza napada (COMBAT_MOVE) ✓
- prikazivati attack dugme samo kad je attackable ✓
- dodati novo polje na region attackingForces ✓
- dodati izvedeno stanje attacked ✓
- dodati vizuelni indikator (💥) ✓
- status suvišan kad postoji frakcija, ukinuti ✓
- otvoriti opcije napada nakon klika na dugme ✓
- BUG: opcije ostaju otvorene za sve oblasti, modal pamti stanje ✓
- izabrati odakle se napada (ako ima više oslobođenih suseda) ✓
- izabrati koliko vojske se prebacuje (input range ili slično) ✓
- implementirati akciju ATTACK ✓
- zatvoriti dodatne opcije nakon napada ✓
- BUG: kad je moguć napad sa više teritorija, nakon prvog napada range se resetuje na 0 i ne može da se poveća ✓
- šta raditi sa teritorijama sa 0 partizana? postaju okupatorske?
- BUG: kada prebacim pola partizana pa još pola, ne računa ukupnu brojku ✓
- srediti modal ✓
- boje po uzoru na legendu ✓
- dugme hover je bez veze, promeniti ✓
- izbaciti višak informacija iz modala ✓
- dodati ikonice za frakcije ✓
- dodati ikonice za trupe ✓
- dodati indikator bitke u prozoru ✓
- umesto zastave ikona bitke ✓
- dodati indikaciju u prozoru sa koliko je trupa napadnuto ✓
- BUG: ne prikazuje napadajuće trupe odmah ✓
- pogledati pravila axis and allies ✓
- dodati osnovne faze igre ✓
- dodati dugme end turn ✓
- implementirati fazu bitke (CONDUCT COMBAT)
- pronalazimo sve napadnute oblasti (punimo battleQueue) ✓
- dodati osobine jedinica (napad, odbrana, itd) ✓
- dodati EKRAN BITKE ✓
- sa jedne strane partizani s druge nemci, sve jedinice. ✓
- idle animacija za vojnike
- dodati zastavničara
- attacking units fire (bacamo kocke za napad)
- dodati animaciju kocke ✓
- igrac klikce za bacanje ✓
- iterira napadajuće jedinice i za svaku baca kocku, plus bonus na glavnu ✓
- ukinuti battleQueue? rešavati bitke jednu po jednu?
- probati niz bitaka za redom ✓ (može biti dosadno kada ih je više od 3) ✓
- probati jednu po jednu ✓ (zanimljivije, ali sve komplikuje jer mešaju se faze) ✓
- prikazivati naziv trenutne faze na mapi ✓
- prikazati poruke sukladno fazama ✓
- dopustiti End turn i kada nema napada? ✓
- kad se završi vrtenje kockice, posle nekog vremena vratiti ikonicu? ✓
- pre prozora pobede, prvo skinuti švabe i prikazati dobijenu kockicu ✓
- defending units fire (koristimo kontra kocku za odbranu) ✓
- iterira sve odbrambene jedinice i za svaku baca kocku ✓
- napadajuće jedinice se odvajaju u niz pogođenih ✓
- remove casualties (skidamo mrtve) ✓
- animacija vojnici padaju ✓
- animacija pucanja (vatra ili trzaj) ✓
- uskladiti animaciju kocke sa završetkom animacija vojnika (ili izbaciti reset kocke) ✓
- izbaciti iz bitke ikonice koje ne pucaju, ali ih zadržati na mapi ✓
- srediti šanse, previše su ekstremne ✓
- info o stanju trupa sa obe strane ✓
- default ne prebacivati sve jedinice? ✓
- obeležiti i oblasti sa kojih se napada ✓
- tipografija, dugmići, prozori u shared ✓
- dodati dugme za bežanje ✓
- akcija šalje trenutni garnizon, region za povlačenje partizana i broj partizana koji se povlače ✓
- ukinuti winner ✓
- odvojiti modal i još nešto iz battle? ✓
- opcija na koje susedno oslobođeno mesto se povlači ✓
- stilizovati dugmiće i inpute bazično ✓
- “send troops” da postane “send more troops” kad već ima poslatih trupa ✓
- zabraniti send troop u fazi mobilizacije (tj. kada nije napad) ✓
- dodati bitku za svaku oblast ✓
- EndModal hendlati nerešeno ✓
- potvrdi End phase ako nema napada ✓
- odvojiti Map container koji hendla skrol ✓
- Faza mobilizacije ✓
- osmisliti mobilizaciju: automatsko popunjavanje uz info igraču ✓
- dodati nova polja (initialPopulation, totalMobilized) ✓
- ažurirati reducer ✓
- dodati animacije ✓
- dodati izveštaj/poruku ✓
- smanjivati population za svaku (partizansku) mobilizaciju ✓
- Faza bombardovanja ✓
- osmisliti logiku ✓
- iz većih gradova avioni bombarduju okolna mesta ✓
- partizani imaju malu šansu da obore avion ✓ (bacanje kocke?)
- ažurirati reducer ✓
- napraviti animaciju aviona po eliptičnoj putanji ✓
- uklopiti animaciju u logiku bombardovanja ✓
- dodati ikonicu aviona ✓
- refaktorisati, pregledati kod, ispravljati greške ✓
- BUG: avion se ne vidi jer neki lejeri idu preko njega ✓
- zameniti ikonu bombardovanja (smrt umesto medalje) ✓
- bitka animacije ✓
- dodati idle animacije tokom borbe✓ videti partizani animacija✓
- dodati tenk animaciju ✓
- sačekati kraj pucanja, pa mala pauza pre umiranja ✓
- vratiti useBattleLogic u Battle✓, refaktorisati uprostiti✓
- bolji trzaj✓
- srediti kockanje✓
- možda poneko da puca samostalno ponekad✓
- glavni tok ✓
- faza regrutacije zbunjuje, samo prikazati izveštaj i next ✓
- potvrda ako nema napada ✓
- povlačenje levo ✓
- izveštaji ✓
- reuse stilove ✓
- dodati slike na sve izveštaje✓
- širina izveštaja bitke treba manja✓
- bolji tekstovi za izveštaj bitke ✓
- dodati x za izveštaje ✓
- closeButton, confirmModal u modal css ✓
- da poruka faze nestaje kada se pojavi izveštaj ✓
- izvući BombingReport iz BombingOverlay ✓
- ujednačiti stilove za modal ✓
- srediti boje, closeButton da se vidi ✓
- inicijalno selektovati odakle se napada ✓
- dodati strelicu kao indikator napada od centra do centra ✓
- BUG: Užice i Sombor nekada počinju kao partizanski ✓
- Ofanziva
- napraviti useLiberatedCities hook ✓
- nakon oslobođenja 3 grada, počinje ofanziva✓
- faza ofanzive umesto bombardovanja ✓
- okupatori kod svakog oslobođenog grada koncentrišu šestostruko jače snage, na jednoj (najjačoj) susednoj teritoriji ✓
- snage nemačke ofanzive su šestostruko jače, uključujući postojeći garnizon ✓
- snage ofanzive treba da sadrže: Pešadija oko 90%, Artiljerija oko 6% i Tenkovi oko 3% ✓
- ime ofanzive u poruku (I, II, III…) ✓
- indikator ikonica tenka ✓
- indikator se ne koristi u OffensiveOverlay, koristiti iste ikonice
- napraviti niz ofanzive, kako bi mogle kontinuirano da napadaju ✓
- kad napadnu, igrač može birati borbu ili povlačenje (skoro nemoguće je odbraniti)
- dugme povlačenje ne radi
- povlačenje može biti i proboj kroz neprijateljske teritorije?
- nakon što osvoje oslobođene gradove (i poteraju partizane x koraka) ofanziva se završava
- pojačanja odlaze, u novookupiranim gradovima ostaju garnizoni
- svaki krug je jedan mesec, prikazuje se datum negde
- save game
- čuvati stanje da se ne resetuje ni inicijalizuje na reload
- resetuje se na new game
- kraj
- pobeda: oslobođenje zemlje
- poraz: uništenje ustanka
BUGS
- mobilizacijski izveštaj može da se zatvori klikom izvan, bez aktiviranja sledeće faze ✓
- trenutno može borba i u fazi mobilizacije ✓
- drag end ne treba da otvara prozor
- select koprivnica pokazuje susedne teritorije koje se ne graniče (graniče se izvan mask)
Završno
- Sacuvati finalne poligone kao data
- napraviti prave svg slike umesto ovih
- favicon
Ideje za kasnije
- dodati razne okupatore nejednakih karakteristika
- dodati zastavničara?
- dodati auto-battle (isprazniti battleQueue u reduceru?)