Roguelike odhalování mapy bez kostek? [GM:S/gmz]

Pokud si nevíte s něčím rady ohledně tvorby v Game Makeru - pište sem!
Odpovědět
Kaleta
Příspěvky: 16
Registrován: říjen 23, 2011, 1:53 pm
Facebook: http://facebook.com/

Roguelike odhalování mapy bez kostek? [GM:S/gmz]

Příspěvek od Kaleta » březen 28, 2015, 10:56 pm

Zdravím všechny.
Zkouším udělat engine na roguelike hru, odehrávající se ve mřížce. Mám dvě kritéria:
- Použít co nejvíc zabudovaných funkcí z Game Makeru (mp_grid pathfinding, ds_grid, atd)
- Udělat to pořádně - tahový systém, odhalování mapy, apod.

A právě s tím odhalováním mapy mám problém. Dokážu udělat jednoduchý a špinavý raycasting od hlavní postavy přes collision-line na všechny čtverečky na mapě a odhalit je nebo je skrýt podle toho, jestli jsou nebo nejsou vidět. Samozřejmě ta detekce kolizí není dokonalá a občas je vidět přes rohy něco, co by nemělo, ale to je teď jedno.

Povedlo se mi udělat odhalování mapy se čtverečky. Tady jsou 32x32, ale já je mám 64x64 a to už je teda dost zubatá grafika.
(pozor, obrázky jsou pouze ilustrační, nejsou z této hry, je to Dark Disciples I a II, super RPG s výborným příběhem a designem)
Obrázek

Proto jsem chtěl udělat alespoň trochu zaoblené okraje, něco jako tohle:
Obrázek

Teoreticky to jde (upravil jsem trochu jeden trik z automatické orientace sprajtů u zdí a převrátil ho "naruby"), ale ta detekce zdí a kolizí přes collision_line prostě není dost dobrá, aby to fungovalo. Navíc zdi mají ve zvyku zůstat ve "stínu" a to, že je schválně nechávám odhalit, ten efekt ještě zhoršuje.

Se změnami depth si hrát nechci, protože bych chtěl ještě poloviditelnost na mapě - co už bylo prozkoumáno (viditelné zdi) ale je "ve stínu".

Pokud se podíváte na zdroják, potřebujete pouze změnit dva skripty:
step_fovgrid
draw_fovgrid
draw_fovgrid_backup funguje skoro bezchybně...jenom ty kostky.

Prostě spusťte hru, choďte myší okolo (držení nebo klik, to je jedno) a držením Enteru vyzkoušíte druhý způsob vykreslování stínů.

Řeším to přes ds_grid, protože je to něco, od čeho bude záviset AI, resp. jestli vás nepřátelé uvidí a začne bitka. Chtěl bych i víc hlavních postav, takže to musí být globální datová struktura.
Ale to už bude ten raycasting hodně náročný a už teď to přepočítávání probíhá 1024krát za krok, bude to chtít vymyslet nějaká zjednodušení nebo omezení.

STAHUJTE ZDE

Takže v zásadě se ptám na dvě věci:
- Umíte někdo stíny bez kostiček, nebo aby ty velké kostky nevypadaly tak hrozně? (dokonce i moderní hry to mají)
- Umíte někdo lepší raycasting/line of sight pro fog of war?
http://www.unlok.ca/wayward/inspiration ... og-of-war/

Uživatelský avatar
Mikos
Příspěvky: 233
Registrován: srpen 6, 2011, 12:34 am

Re: Roguelike odhalování mapy bez kostek? [GM:S/gmz]

Příspěvek od Mikos » březen 28, 2015, 11:15 pm

Ohľadom toho fog-u (kostičiek) si pozri surfaces.
http://docs.yoyogames.com/source/dadios ... index.html

Menšia záťaž na RAM aj na cele PC a ak budeš šikovný tak to nemusí vyzerať tak kostrbato :) A ten RayCasting netuším čo chceš :D

Kaleta
Příspěvky: 16
Registrován: říjen 23, 2011, 1:53 pm
Facebook: http://facebook.com/

Re: Roguelike odhalování mapy bez kostek? [GM:S/gmz]

Příspěvek od Kaleta » březen 29, 2015, 12:54 am

Díky za tip :) Surfaces asi použiju na to vykreslování.

Jediné, co mě napadlo, je použít větší kruhy místo čtverců :D Ano, vypadá to lépe, jenom ty stíny se překrývají. Asi bude nejlepší naučit se surfaces, sloučit stíny do jednoho. Ještě by to šlo udělat nějakým pokročilým blend módem, ale to neumím.

Raycasting je tohle, collision_line je jako paprsek od hráče na každou z kostek. V této chvíli používám tuhle metodu: Celá místnost je rozdělená na kostičky, 64x64, kterých je 1024 kusů. Každý krok (ne step) se testuje collision_line mezi každou ze 1024 kostek a hráčem. Jestli je volno, tak se kostka odbarví, jinak zase zčerná. Hrubé, ale účinné a jde to asi i trochu optimalizovat.

Uživatelský avatar
D-Sheep
Příspěvky: 768
Registrován: září 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Bydliště: Praha, CZE
Kontaktovat uživatele:

Re: Roguelike odhalování mapy bez kostek? [GM:S/gmz]

Příspěvek od D-Sheep » březen 29, 2015, 12:55 am

Jestli to chceš mít opravdu pořádně a efektivně, doporučoval bych ti ukládat si mapu stínů v něčem, co se jmenuje Quadtree. Je to geniální způsob, jak ukládat řídkou bitmapu. Protože tohle, co tam máš teď, je použitelný jen pro malý místnosti. Pokud budeš mít štěstí a já trochu času, dám dohoromady nějakou ukázku implementace v GM.

Uživatelský avatar
Mikos
Příspěvky: 233
Registrován: srpen 6, 2011, 12:34 am

Re: Roguelike odhalování mapy bez kostek? [GM:S/gmz]

Příspěvek od Mikos » březen 29, 2015, 1:07 am

Keď už tak tak namiesto collision_line by som nato použil place_meeting

http://docs.yoyogames.com/source/dadios ... eting.html

Na také niečo je to podľa mňa praktickejšie :)

Kaleta
Příspěvky: 16
Registrován: říjen 23, 2011, 1:53 pm
Facebook: http://facebook.com/

Re: Roguelike odhalování mapy bez kostek? [GM:S/gmz]

Příspěvek od Kaleta » březen 29, 2015, 12:36 pm

D-Sheep píše:Jestli to chceš mít opravdu pořádně a efektivně, doporučoval bych ti ukládat si mapu stínů v něčem, co se jmenuje Quadtree. Je to geniální způsob, jak ukládat řídkou bitmapu. Protože tohle, co tam máš teď, je použitelný jen pro malý místnosti. Pokud budeš mít štěstí a já trochu času, dám dohoromady nějakou ukázku implementace v GM.
Wow, před pár dny jsem to myslím viděl u generování náhodných místností a drolících se textur :)
Máš pravdu, je to geniální a vůbec by mě nenapadlo pro fog of war. Ale nedělej si s tím tu práci, povedlo se mi ty cykly dost razantně omezit asi na čtvrtinu, z 1024 na 252-260, jenom tím, že beru zrovna ty, co jsou na obrazovce a ne v celé místnosti.

Tady je upravená verze:
https://dl.dropboxusercontent.com/u/374 ... engine.gmz

Spíš je problém s tím zobrazením stínů, s překrývajícími se kolečky. Budu se muset podívat na surfaces.
Mikos píše:Keď už tak tak namiesto collision_line by som nato použil place_meeting

http://docs.yoyogames.com/source/dadios ... eting.html

Na také niečo je to podľa mňa praktickejšie :)
Pokud si dobře pamatuju, tak place_meeting zabírá jenom bod. Já potřebuju zabrat čáru mezi dvěma body a zjistit, jestli je volná. Tj. něco takového:

Obrázek

Uživatelský avatar
Mikos
Příspěvky: 233
Registrován: srpen 6, 2011, 12:34 am

Re: Roguelike odhalování mapy bez kostek? [GM:S/gmz]

Příspěvek od Mikos » březen 29, 2015, 8:02 pm

Toto cez collision_line nepôjde :) uff.. no to bude chcieť kombináciu surfaces a draw_vertex a veľa matematiky :D

GL&HF :) skúsim niečo zbúchať ak budem mať čas :)

Ehm dodám ešte pri niečom takom je dobre mať spravené mergovanie.

Kaleta
Příspěvky: 16
Registrován: říjen 23, 2011, 1:53 pm
Facebook: http://facebook.com/

Re: Roguelike odhalování mapy bez kostek? [GM:S/gmz]

Příspěvek od Kaleta » březen 30, 2015, 2:47 pm

Mikos píše:Toto cez collision_line nepôjde :) uff.. no to bude chcieť kombináciu surfaces a draw_vertex a veľa matematiky :D

GL&HF :) skúsim niečo zbúchať ak budem mať čas :)

Ehm dodám ešte pri niečom takom je dobre mať spravené mergovanie.
Díky, ale ke štěstí mi chybí jenom to mergování, jestli vím, co myslíš :) Vidíš ty stíny a tmu?
Obrázek
Opravdické dynamické stíny naštěstí dělat nemusím (i když by bylo hezké to umět), mám to o dost jednodušší, že tou collision_line jenom testuju, jestli je nějaký čtverec viditelný, černý, nebo šedý. Ty zaoblené okraje by byly hezké, ale asi se bez nich musím obejít, nebo udělat efekty přes surfaces.

Ale možná by tě zajímalo, že přesně tohle už udělal Jazzuo v hodně staré verzi GM. Jak vidíš, tak surfaces není třeba :D
http://www.gamemakergames.com/archive/action-maze
Obrázek

Uživatelský avatar
Mikos
Příspěvky: 233
Registrován: srpen 6, 2011, 12:34 am

Re: Roguelike odhalování mapy bez kostek? [GM:S/gmz]

Příspěvek od Mikos » duben 2, 2015, 9:40 pm

Ako si na tom :) veľmi rád by som sa dozvedel niečo viac o tvojom postupe :) sám som si pozrel system raycastu (naozaj to chce matematiku) :) a zostrojil som niečo :) ak by si mal s tým stále problém daj vedieť :)

Kaleta
Příspěvky: 16
Registrován: říjen 23, 2011, 1:53 pm
Facebook: http://facebook.com/

Re: Roguelike odhalování mapy bez kostek? [GM:S/gmz]

Příspěvek od Kaleta » květen 27, 2015, 2:25 pm

Mikos píše:Ako si na tom :) veľmi rád by som sa dozvedel niečo viac o tvojom postupe :) sám som si pozrel system raycastu (naozaj to chce matematiku) :) a zostrojil som niečo :) ak by si mal s tým stále problém daj vedieť :)
Promiň, že dlouho nepíšu - mám teď toho hodně ve škole i v práci. Tady máš novou verzi.
https://dl.dropboxusercontent.com/u/374 ... engine.gmz

Co se týče postupu, tak hlavní věc je skript step_fovgrid (složka process step). Udělal jsem jenom to, že jsem to převedl na surfaces a trochu se s tím naučil pracovat. Věřil bys, že vykreslování sprajtu na surface (resp. gumování tmavosti) je stejné bez ohledu na alpha? Musím místo alpha dát světlost do make_color_hsv(odstín,sytost, světlost), potom to určuje, nakolik bude ten surface průhledný.

Jinak jsem to dal tak nějak dohromady - vypadá to prasácky (prolínání stínů), funguje to prasácky (naštěstí pouze pro omezené množství políček na obrazovce), zvládá to jenom jeden (centrální) zdroj světla, ale dělá to to, co by fog of war měl dělat.

Pro další vývoj by bylo třeba vyřešit tyhle problémy:
- Neprolínat stíny. Tam, kde je černota, je černota, to není problém. (i když nějaká textura na neprozkoumané oblasti by byla hezká :) ) Tam, kde je stín, by měla být uniformní poloprůhledná šeď. A úplně nejlepší by bylo, kdyby okraje mezi stínem a světlem a stínem a temnotou měly gradient. To vyžaduje dost pokročilou znalost surfaces a kdoví čeho ještě.

- Zlepšit algoritmus. Nejdřív vykreslit temnotu všude. Potom vykreslit světla pro všechny světelné zdroje. A pak to zase částečně zakrýt podle toho, co je viditelné z centrálního zdroje světla - nebo vícero centrálních zdrojů.
Je dobré to dělat přes datové struktury jako ds_grid, protože potom je viditelnost objektivní a to lze využít pro věci jako plížení, kradení a útoky ze zálohy.

Kdyby se povedlo alespoň okopírovat tenhle herní engine, byl by to nevídaný úspěch. Upřímně řečeno, autor Jeff Vogel používá skoro stejný engine od roku 1994, používá i spoustu notoricky stejné grafiky, ani ta hratelnost není někdy dokonalá a soustředí se čistě příběh, questy a objevování. Čtvercový tahový systém je prostě poklad vývojářského světa.
[youtube]http://www.youtube.com/watch?v=9H0Q01lpgk4[/youtube]

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 4 hosti