Žaidimą kuriau žaidybinių aplinkų technologijų egzaminui. Egzamino užduočiai atlikti buvo duotos dvi dienos,
per kurias reikėjo sukurti žaidimo prototipą. Pasirinkau sukurti 2d sėlinimo platformeri,
kuriame žaidėjas valdytų vagišių, kuris bando pavogti deimantą iš įvairių saugomų vietovių.
Platformer game is for "game enviroment technology" egzam. The task was to create a game prototype in two days,
using everything you have.
Fizika: Žaidimas padengtas 2D fizika. Veikėjas juda fizikos pagalba, todėl jis gali natūraliai sąveikauti su kitais fizikos objektais, pvz. durimis.
Aplinkos elementai: Aplinka susidaro iš 2D iškarpų, medžių, krūmų ir įvairiu architektūros statinių.
Personažas: Žaidėjas žaidžia už kleptomanijaką, kuris bando praturtėti pavagiant didžiausius deimantus iš muziejų ar privačių vietovių.
Physics: Game physics are gounded in 2D. The character moves with the help of physics force, so he can naturally interact with other objects, e.g. door.
Elements of the environment: The environment consists of 2D billboards, trees, shrubs and architectural structures.
Character: The player plays for a kleptomaniac who tries to get rich by stealing the biggest diamonds from museums or private establishments.
Aplinka: Aplinka kūriau su keliomis programomis - Medžius kūriau su TreeIt, nemokama medžiu kūrimo programa.
Kitiems aplinkos objektams sukurti (sienoms, žemei, šviestuvams ir tt) naudojau Gimp programa. Veikėjo animacijai naudojau programinę įrangą Spriter Pro.
Grafika: medžių ir kitų objektų shaderiai labai paprasti: Vertex Color * Tex = Output
Pridėti žaidimo aplinkai gyvumo, medžiams pridėjau vėjo vertex shader'i. Vertex shaderis naudoja triukšmo tekstūrą, kuri slenka pasaulio kordinatėmis ir deformuoja objekto vertex viršunies:
i = Pan(TexCoordinates* 0.01, 2vector) > Tex; Mask(R, 100 * Tex)
a = Power(Mask(TexCoordinates * 2vector), 39)
Lerp(i, 0, a)
The environment: for envirment creation I used several applications - Trees were created with TreeIt, a free tree creation program.
Other environmental objects (walls, ground, light fixtures, etc.) were created using Gimp. Spriter Pro software was used for character animations.
Graphics: shaders used by trees and other objects are very simple: Vertex Color * Tex = Output
To add "life" to the environment, I added vertex shader to the trees, that simulates wind.
The Vertex shader uses a noise texture that slides using world coordinates and deforms object vertex points:
i = Pan(TexCoordinates* 0.01, 2vector) > Tex; Mask(R, 100 * Tex)
a = Power(Mask(TexCoordinates * 2vector), 39)
Lerp(i, 0, a)
Kliūtis: Viena iš kliūčių yra kameros, kurios pastebėjus žaidėja po keleto sekundžių paskelbia aliarmą. Jos veikia colision pagrindu, jei aptinka žaidėja savo periferijoje, kamera išauna spinduli į veikėją, patikrinti ar veikėjas slepiasi ar ne. Aptikus žaidėją, kamera pradeda skelbti aliarmą, jei veikėjas pakankamai greitas ir pabėga iš kameros periferijos, aliarmas nepaskelbiamas.
Obstacle: One of the obstacles is cameras, which raises alarms after couple of seconds when player is in sight. They operate on a colision basis, if they detect a player character in their periphery collider, the camera ray traces to the character, to check whether the character is hiding or not. When the player is detected, the camera starts to sound an alarm, if the character is fast enough and escapes from the periphery of the camera, no alarm is issued.
Lazeris veikia dar paprasčiau, jis kas 0,05s šaudo spindulius, kurie laukia kol žaidėjas juos kirs. Kirtimo metu lazeris išsiunčia signalą į PlayerState kad žaidėjas pastebėtas ir žaidime paskelbiamas aliarmas.
Laser obsticle is even more simple, firing rays every 0.05s and waiting for the player to cross them. If triggered, the laser sends a signal to PlayerState that the player is noticed and alarm is raised instantly.
Personažo kūrimas: Personažą kūriau su Gimp programa, veikėjo judėjimą su Spriter pro. Animacija žaidime surišta su charakterio judėjimu. Jei žaidėjas bėgs greičiau, animacijos prisitaikys atitinkamai prie reikiamo greičio ir bus atvaizduojamos sparčiau.
Character creation: To create the character I used Gimp and animations with Spriter pro. The game has semi locomotion and is tied to the character movement. If the player runs faster, the animations will adjust to the required speed and render faster.
Sąveikos su aplinka: Sąveika su aplinka apima kliutis, slėpimosi vietas ir duris. Kaip minėjau aukščiau, kliūtys naudoja colision aptikimą ir ray tracing, slėpimosi vietos užlipdo „pasislėpusio“ etiketę veikėjui, į šia etiketę atsižvelgia kameros ir lazeriai.
Interactions with the environment: Interaction with the environment includes obstacles, hiding places and doors. As I mentioned above, obstacles use colision detection and ray tracing, hiding places attaches label "hiden" to the player character, this label then is taken into account by cameras and lasers.