Resultat 1 till 10 av 10

Ämne: [mikromotor] Yarnspin

  1. #1

    Utmaning [mikromotor] Yarnspin

    Jag ska förstås göra något till mikromotorutmaningen. Just nu tänker jag mig nåt som är väldigt inspirerat av de "Soloäventyr" jag spelade på 80-talet. Ni vet, de där böckerna där man fick välja vad man skulle göra, och gå till angiven siffra för att fortsätta läsa. Nån slags enkel motor för att göra den typen av spel, fast som dataspel, ska jag väl kunna få till...
    Senast redigerat av Mattias Gustavsson den 2016-04-23 klockan 15:16.

  2. #2
    Jag är inte sugen på att skriva en editor för det här, utan jag vill definiera spelen i nån slags text-filer. Vi får väl se vart jag slutar, men tänkte att jag börjar med gamla goda INI filer, eftersom jag redan har skrivit ett lib för att läsa sådana (https://github.com/mattiasgustavsson/libs).

    Nåt sånt här kanske?

    Kod:
    title="Example Game"
    start_scene=scene:wake_up
    
    
    [scene:wake_up]
    description="You wake up. The room is spinning very gently round your head. Or at least it would be if you could see it which you can't.\n\nIt is pitch black."
    option0_desc="Stand up."
    option0_action=scene:standing
    option1_desc="Do something else."
    option1_action=scene:something_else
    
    
    [scene:standing]
    description="Very difficult, but you manage it. The room is still spinning. It dips and sways a little."
    option0_desc="Ok, done."
    option0_action=scene:end_game
    
    
    [scene:something_else]
    description="You can't be serious."
    option0_desc="Ok."
    option0_action=scene:wake_up
    
    
    [scene:end_game]
    description="That's all, folks!"
    option0_desc="Ok."
    option0_action=exit
    Jo, det känns som en rimlig början, nåt att bygga vidare på. Ska försöka få en första version implementerad under helgen.

  3. #3
    Ok, nu har jag fått ihop koden för att läsa in ovanstående format, och parsa det in i interna datastrukturer. Än så länge så läser jag bara in det i följande datatyper:
    Kod:
    enum action_type_t
    	{
    	ACTION_TYPE_SCENE,
    	ACTION_TYPE_EXIT,
    	};
    
    
    struct action_t
    	{
    	string action_string;
    	action_type_t type;
    	string scene_id;
    	};
    
    
    
    
    struct option_t
    	{
    	string desc;
    	action_t action;
    	};
    
    
    
    
    struct scene_t
    	{
    	string_id id;
    	string description;
    	action_t action;
    	array<option_t> options;
    	};
    
    
    
    
    struct game_t
    	{
    	string title;
    	string start_scene;
    	array<scene_t> scenes;
    	};
    vilket känns som det kommer att vara ganska lättjobbat vid nästa steg. Än så länge skriver jag bara ut innehållet i struktarna ovan, efter parsningen, för att se att det funkar. Men nästa steg blir att implementera så man faktiskt kan spela spelet, göra alla val och komma till rätt ställe. Efter det får jag väl fylla på med fler features :-)

    Koden finns här för de som vill kolla

    http://mattiasgustavsson.com/temp/mi...engine_0_1.zip

    det är C++ med mina egna helper-libs, och den är enkel att bygga - öppna bara en visual studio command prompt, och gå till där du packat upp filen. Och skriv bara
    Kod:
    cl source\cyoa_engine.cpp
    cyoa_engine
    för att bygga och köra

  4. #4
    Så, nu har jag nåt första spelbart - fortfarande bara som printf-text i konsoll-fönstret, men likväl ett förstasteg.

    Kod och .exe: http://mattiasgustavsson.com/temp/mi...engine_0_2.zip

    Nu kan man faktiskt editera .ini filen, och faktiskt använda systemet för att berätta en story. Det känns bra att fort komma till den punkten när man faktiskt kan *spela* nåt.

    Körde en "cloc" också för att se hur mycket kod projektet har hittills:
    Kod:
    ------------------------------------------------------------------------------------------
    File                                        blank        comment           code
    ------------------------------------------------------------------------------------------
    source\libs\strpool.h                         334            147           1133
    source\libs\array.hpp                         266            140            609
    source\libs\ini.h                             160            114            520
    source\cyoa_engine.cpp                         66              2            358
    source\libs\strpool_util.hpp                   82             56            318
    source\libs\memtrack.hpp                      124             87            282
    source\libs\file.h                             56             74            107
    ------------------------------------------------------------------------------------------
    SUM:                                         1088            620           3327
    ------------------------------------------------------------------------------------------
    så 3300 rader totalt inklusive alla libs jag använder, varav 360 i själva motorn - för laddning och körning av spelet. Så ingen massiv kodbas än så länge iallafall.

    Jag kör ju med "memtrack.hpp", mitt eget system för att tracka minnesläckor. När man kör programmet, så rapporterar den (till visual studios Output fönster) hur mycket minne man använt som mest, och hur många allokeringar. Såhär ser det ut nu:
    Kod:
    Total memory allocations: 22
    Peak memory use: 1021937 bytes
    22 allokeringar på totalt ca 1 MB. Detta kan tyckas mycket, men en anledning är att många av mina system (t.ex. strpool) allokerar en del extra vid initiering, för att minska antalet allokeringar under körning (då man ju i regel har mycket minne nu, men att göra en allokering är väldigt kostsamt). Så jag räknar med att minnesanvändandet kommer att gå upp om vi lägger till fler system/libs, men inte för att man gör spelet i example_game.ini större (upp till en gräns). Men ska hålla koll på det, så får vi se hur det utvecklas :-)



    Får se vad nästa steg blir. Kanske mer avancerade "script"-kommandon för ini filen (t.ex. variabler/flaggor eller nåt). Eller kanske grafiska element? Tar gärna emot förslag och synpunkter
    Senast redigerat av Mattias Gustavsson den 2016-04-02 klockan 14:27.

  5. #5
    Jag har funderat lite, och jag vill ha det mer grafiskt. Och tänkte att det vore kul att göra nån slags tools för att ta public domain foton och använda som illustrationer i motorn, så har lekt lite med palettization idag. Det här är vad jag har hittills:




    Och bilden i orginalutförande ser ut så här:





    ett annat exempel, men utan mitt CRT filter den här gången:






    Bildprocessningen är väldigt långsam just nu (brute-forcear en del) men den stödjer att man kan skicka in en bild och en valfri palett på upp till 256 färger, och så croppas och resizas bilden automatiskt, och så kör jag lite sharpen filter och contrast/brightness/saturation filter på den, innan jag gör en palettization med bayer ordered dithering.

    Ska städa upp lite i den (just nu ganska kladdiga) koden, och sen postar jag det jag har (men kommer ju fortsätta att finslipa under resten av månaden också).

  6. #6

    Reg.datum
    maj 2012
    Ort
    Emerald Hills, CA
    Inlägg
    27
    Blog Entries
    5
    Ang. kvantiseringen till 256 färger, så stötte jag på den här posten i veckan som kanske är relevant för att få det snabbare (har inte hunnit kolla så noga än): https://optimiserly.wordpress.com/20...olour-palette/

  7. #7
    Tack för tipset, nån variant på det där kommer nog till användning!

    Testade lite mer med dithering - bayer dithering (ovan) kan ge lite noisy" resultat, så jag ville se om jag kunde få till nån lite "prydligare" dithering (även om den kanske inte är lika matematiskt korrekt). Här är vad jag fått till (samma palett som ovan).




    Och här med en enklare (16-färgers) palett. Jag gillar hur det blir fler enfärgade sjok, och att större dither-sektioner har ett jämnt dither mönster:


  8. #8
    Fortsätter att dona med den här. Har hittat på ett namn - Yarnspin. Och en splashscreen.



    Senaste dagarna har jag jobbar med ansiktsbilder till motorn. För scener har jag ju tänkt mig att man använder pixelifierade foton, men för ansikten är det inte lika lätt (man måste t.ex. ha ett godkännande från personen på bilden, även om bilden i sig är public domain, om man ska använda den till något story-baserat).

    Så jag använde mitt ansiktsgenererings-script, och tweakade dither/palettize koden en del, och så här blir resultatet.



    Tanken är att skicka med ett par tusen porträtt som dessa med motorn - de är ju helt autogenererade utan någon handpåläggning alls, och tar inte stor plats, så är ju rimligt att göra.

  9. #9
    Ser riktigt bra ut, blev sugen pa att pixliferia mig sjalv.

  10. #10
    Ok, så jag har dragit över tiden lite, men motorn är nästan klar. Som planerat har jag tänkt använda den för att göra ett spel nu under kristi himmelfärdshelgen, och efter det kommer jag nog att releasea den publik - om nån vill ha en preview release för att labba med så länge, så är det bara att höra av sig.

    Här är lite uppdaterade screenshots:



Bokmärken

Behörigheter för att posta

  • Du får inte posta nya ämnen
  • Du får inte posta svar
  • Du får inte posta bifogade filer
  • Du får inte redigera dina inlägg
  •