Hvordan designer man et javascript-spil? (i 13KB eller mindre)

Endnu en Js13K er bestået. Det er tredje gang, jeg deltager i dette spiljam. Jeg kan godt lide at tro, at jeg altid lærer en ting eller to med disse. (Du kan spille spillet her)

Spiltemaet

Da årets tema udkom ('BACK'), besluttede jeg, at jeg ville lave et spil om besætningen på et skib, der forliste på en ø og forsøger at vende hjem. De ville være nødt til at indsamle ressourcer for at genopbygge skibet i et spil, der ville være en blanding af Cookie Clicker, Minecraft og det gamle Grow-flashspil.

Prototyping

Jeg begyndte straks at lave en prototype af en ø-generationsalgoritme. Den skulle have alt:hav, sand, græs, træer, malme, dyr, ferskvandssøer, måske endda floder (mit yndlingsværktøj til prototype er https://codepen.io/).

Bortset fra, at jeg aldrig har gjort noget eksternt som dette. Efter to dage med frustrerende resultater opgav jeg spillet og gik i seng.

Næste dag indså jeg, at al den tid, jeg brugte på den fejlslagne ø-generator, ikke bragte mig tættere på det spil, jeg satte mig for at bygge slet . Så jeg skrabede alt og startede forfra. Hvad var Jeg satte mig for at lave? Jeg satte mig ned med en notesblok og skrev.

  1. Jeg ville have en klikker. Spillet handler om at klikke efter ressourcer. Så jeg gav den knapper. Du klikker, du får det.
  2. Jeg ønskede, at ressourcer skulle være flygtige. De kan heller ikke bare være frie. Så jeg gjorde det sådan, at folk hver dag vil spise maden. Desuden tager hver person et par sekunder at gå og snuppe maden.
  3. Endelig Jeg ville have drama . Hvad sker der, hvis du ikke fodrer folk? Til sidst droppede jeg hele "+5 mad", når nogen dør. Spillet er morbidt nok uden kannibalisme. Du kan teste min endelige prototype her.
  4. Den fjerde komponent, jeg ville have til mit spil, var et sæt "projekter" som du skal nå, før du endelig kan bygge skibet. Inspireret af "Grow" ønskede jeg, at den rækkefølge, som spilleren gennemfører projekterne i, skulle påvirke slutmålet. Så hvis du for eksempel udvikler fiskeri tidligt, får du mere mad, men så har du færre folk klar til at arbejde, da en person nu er en dedikeret fisker.

Afbalancering af fremskridt og sværhedsgrad

De fleste projekter, jeg fandt på, er et resultat af at forsøge at balancere og genbalancere spillet.

  1. Når man klikker på foder og jager hele tiden, er der kun lidt fritid til at læse vildtbeskederne og projektbeskrivelsen; så jeg skabte fiskeri for at automatisere madindsamling.

  2. Med fiskeprojektet færdigt, er det virkelig trivielt at oplagre et lort ton mad meget hurtigt; så jeg skabte død af vilde dyr at nerve jagthandlingen.

  3. Oplagring af træ var også meget let. Så jeg gav også logning en lille risiko for dyreangreb.

  4. Nu er dyreangreb et for stort problem! Så jeg imødegik dette med "Våben"-projektet, som reducerer chancen for dødsfald ved dyreangreb.

  5. Jeg var stadig i gang med at stable masser af træ. Så jeg lavede det, så folk brænder en lille smule træ hver dag (til opvarmning og madlavning).

  6. Efter alt dette indså jeg, at ved slutningen af ​​spillet der var ingen risiko for at dø . Med en stabil madforsyning var det umuligt at tabe spillet. Så jeg sneg mig en "Guds vrede"-parameter ind. Gud vil sænke dit løbske skib, hvis du ikke bygger ham et kapel og beder meget. 🙏🙏🙏

Brugergrænsefladen

Jeg havde fuldstændig skrabet planerne om en kortgenerator. Men jeg ville have en form for brugergrænseflade. Jeg besluttede at holde loggen fra prototypen og lave en slags lille "kort" for at antyde spilleren til, hvad der sker. Jeg gav spillet elementer og kontroller animationer for at gøre alt mere tilfredsstillende at se (også lidt mere kaotisk, men det er ok (håber jeg)). Jeg lavede øen ved hjælp af SVG. SVG i HTML5-tiden er både en velsignelse og en forbandelse. Men mere om det i en anden artikel.

Spillet er forvirrende i starten. Du begynder at spille, dine folk dør efter to dage, fordi alting sker for hurtigt; så du råber på skærmen og opdaterer. Hvis du prøver igen, bliver du distraheret af at læse projektbeskrivelserne; alle sultede. Du opdaterer. Du prøver igen. Det er så irriterende at opdatere siden for at genstarte et spil. Quick-death-spil skal også være meget hurtige at genstarte. Så jeg tilføjede en genstartsknap, der nulstiller spillet. Tilføjelsen af ​​nulstillingsknappen var også en meget refaktorerende øvelse, fordi det tvang mig til at samle alle spildata de samme steder og initialisere dem korrekt.

Beregning af score

Endelig trængte mit spil til en belønning. Jeg følte, at resultatet vinder/taber var en trist slutning og ikke særlig engagerende. Så jeg udviklede en scoreligning:

  1. Hver person, der ikke dør, giver dig mange point

  2. Hvert projekt, du gennemfører, giver dig også nogle point

  3. Den endelige score er omvendt proportional med det antal dage, du tager at afslutte

  4. Scoren er også omvendt proportional med Guds Vrede

  5. Du får en bonus bare for at forlade øen.

Hvis du undrer dig, var min bedste score indtil videre 349 point

Jeg tror, ​​jeg formåede at lave et lille underholdende spil, og jeg ser frem til næste års udfordring. Lad mig vide, om du kan blive færdig om 30 dage! Jeg tror, ​​det er muligt!

Statistik for nørder

Jeg udviklede mit spil ved hjælp af Typescript, men kom aldrig til at bruge typer. Jeg brugte gulp til at bygge mit spil og til at zippe mine filer.

Jeg kodede på VSCode, på Ubuntu, på en XPS13.

Jeg arbejdede omkring 15 timer om ugen 5 til 6 dage om ugen siden dag et af konkurrencen.

Bortset fra gulp-projektbyggeren lavede jeg spillet fra bunden uden nogen biblioteker. Jeg er stadig ved at skrive en mere teknisk obduktion.