Ghetto Engineer - LD#32

Jaa meneillään olevat projektisi tai valmiit pelit muun yhteisön kanssa täällä.
Post Reply
MessyC
Newcomer
Posts: 10
Joined: Sat Mar 15, 2014 10:53 pm

Ghetto Engineer - LD#32

Post by MessyC »

Ghetto Engineer on Ludum Dare #32 compoa varten tekemäni peli. Kisan teemana oli tällä kertaa "An unconventional weapon", eli epätavallinen ase. Ajattelin tehdä pelin CoolBasicillä, koska fuck everything. Lopputuloksena siis 1082 rivin sorsa ja toimiva peli - 48 tunnissa.

Ghetto Engineerissä tarina kulkee näin: "Muori on leiponut keksejä. Mene tapaamaan häntä. Tämä on kuitenkin vaarallinen huudi, joten parempi varustautua." Tehtävänäsi on siis rakentaa autotallista löytyvistä materiaaleista ase, jonka avulla pääset muorin luo. Matkalla on paljon thugeja, jotka haluavat mukiloida sinut. Voit kantaa matkallasi vain yhtä asetta, joten valitse materiaalit harkiten. Käytä mielikuvitustasi, mutta muista että kaikki hulluuden luomukset eivät välttämättä toimi. Jotkin aseista voivat olla myös huonoja, joten joudut ehkä kokeilemaan uudestaan.
  • HIIRI: vedä materiaaleja
  • WASD/NUOLET: liiku
  • SPACE: ammu
  • ALT: tee jotain erikoista, jos mahdollista
Pelissä on 12 asetta (spoiler)
Imuri + pallo
Imuri + veitsi
Imuri + harja
Imuri + harja + naru
Harja + naru
Harja + naru + pallo
Harja + naru + pallo + veitsi
Harja + naru + maila + veitsi
Maila + naru + veitsi
Putki + jousi + pallo
Putki + jousi + maila
Putki + jousi + maila + naru
Screenshotteja
Image
Image
Ylpeydenaiheeni on lennossa keksitty algoritmi, joka järjestää objektien piirtojärjestyksen y-koordinaattien perusteella. CoolBasicin suorituskyvyn vuoksi algoritmi on kuitenkin säädetty epätarkaksi, mutta toimii suhteellisen hyvin.

Code: Select all

Function f_orgObjectOrder()

//g_rAcc1 = -n, eli negatiivinen kokonaisluku
//g_rAcc2 = -g_rAcc1 - 1

For y = g_height To 0 Step g_rAcc1
	InitObjectList
	o = NextObject()
	While Not(o = 0)
		oy = Int(f_screenY(ObjectY(o) - ObjectSizeY(o) / 2))
		For i = 0 To g_rAcc2
			If(oy = y+i) Then ObjectOrder o, -1 : Exit
		Next i
		o = NextObject()
	Wend
Next y

DrawGame

EndFunction
Lyhyesti: käydään läpi joka ruudun y-koordinaattilla (alhaalta ylöspäin, välinä g_rAcc1) jokainen objekti ja sen y-koordinaatti ruudulla. Jos objekti on ruudun y-koordinaatilla (tai sen ja seuraavan välissä, g_rAcc2 = -g_rAcc1 -1), siirretään objekti piirtojärjestyksessä alimmaiseksi. Hankalasti selitetty ja koodi on suoraan sorsasta (paitsi kommentit). Toimii kuitenkin, tosin pienillä ongelmilla (pelaa peliä niin tiedät).

Jännä kokemus, Ludum Dare on muutenkin haastava ja CoolBasicillä se oli vielä haastavampi. Olen kuitenkin tyytyväinen, sillä sain toimivan pelin aikaiseksi ja se on edes hieman innovatiivinen. Niin ja todella myös ihan pelattavakin! Varoitus: Source on latauslinkin paketissa, mutta jos et halua sulattaa silmiäsi, on parempi ettet edes tarkastele sitä. Vapaasti käytettävissä kuitenkin, kunhan et väitä koodia omaksesi.

LATAUSLINKKI
LUDUM DARE -SIVU
Post Reply