⚠️ Waarschuwing: Gameeky is nog volop in ontwikkeling. Alles wat je ziet kan nog veranderen.
📝 Let op: dit document biedt geen uitleg tot in de puntjes, maar is louter bedoeld als snelstartgids.
Met Gameeky kunnen jonge enthousiastelingen en leraren op speelse wijze kennismaken met het bouwen van coöperatieve spellen. Meer bepaald:
📝 Let op: Gameeky is een leerprogramma in de vorm van een spelaandrijving. Als je op zoek bent naar een programma om professionele spellen te maken, kijk dan eens naar Godot.
Wij raden aan om Gameeky te installeren met behulp van het softwarecentrum van je systeem, bijvoorbeeld GNOME Software. Zoek naarGameeky en installeer het. Ook kun je Gameeky via Flathub installeren. Zoek ook daar naar Gameeky en volg de installatie-instructies.
De laatste methode, voor ervaren gebruikers, is via een terminalvenster:
flatpak --user install flathub dev.tchx84.Gameeky
Gameeky bevat pakketten met bouwstenen, zodat er een breed scala aan spellen kan worden gemaakt. Een voorbeeld van zo’n spel is dit, een middeleeuws fantasiespel waar alles draait om verzamelen. Elk themapakket bevat:
Deze bouwstenen kunnen worden hergebruikt om eigen scènes, nieuwe spellen en leermateriaal te maken.
Wij raden aan om themapakketten te installeren met behulp van het softwarecentrum van je systeem, bijvoorbeeld GNOME Software. Themapakketten worden hierin aangeboden als uitbreidingen. Ook kun je themapakketten via Flathub installeren. Kies daar een uitbreiding en volg de installatie-instructies.
De laatste methode, voor ervaren gebruikers, is via een terminalvenster:
flatpak --user remote-ls flathub | grep dev.tchx84.Gameeky.ThematicPack
flatpak --user install flathub dev.tchx84.Gameeky.ThematicPack.FreedomValley
Het Gameeky-pakket bestaat uit vijf hoofdonderdelen:
De starter is het centrale startpunt van Gameeky. Vanuit de starter
kun je themapakketten beheren en projecten laden uit de
~/Gameeky
-map. De beheerder ondersteunt alle
basistaken:
Via de starter kun je eenvoudig projecten delen. Exporteer een project door deze stappen te volgen:
Importeer een project door deze stappen te volgen:
De speler biedt een visuele representatie van de spelwereld en de manier waarop interactie met de wereld plaatsvindt.
Klik in de starter op de speelknop naast een project om een spel te starten. Het spel begint bij de standaardscène. Ieder themapakket en project bevat een standaardscène. Als je andere scènes wilt spelen, volg dan deze stappen:
In het spel neemt de scène de meeste schermruimte in beslag, maar er zijn andere elementen die je kunt aanklikken.
De HUD is een onderdeel van de gebruikersomgeving en bevindt zich onderaan het scherm. Hierop worden de spelerstatistieken getoond. De HUD bestaat uit de volgende items:
Ook gesprekken worden onderaan getoond, bijvoorbeeld gesprekken met de verteller of een ander personage. Dit onderdeel bestaat uit de volgende items:
In het spel kan het personage op twee manieren bestuurd worden:
De speler kan meerdere acties uitvoeren in de spelwereld:
De huidige staat van een spel kan op ieder moment worden opgeslagen en hersteld. Deze bestanden zijn volledige kopieën en kunnen dus worden gespeeld als ieder ander scènebestand.
Gameeky is ontworpen om samen te leren, maken en spelen. Alle spellen kunnen samen worden gespeeld en er zijn geen speciale vereisten. Ook is er geen beperking op het aantal gelijktijdige spelers, maar er kunnen wel technische beperkingen zijn, zoals het beschikbaar aantal computergeheugen.
Speel samen een spel door deze stappen te volgen:
Meedoen aan een actief spel:
📝 Let op: alle deelnemers moeten beschikken over een kopie van het project en/of gebruikte themapakket.
📝 Let op: scènes die gemaakt zijn op basis van een themapakket hoeven niet te worden gedeeld. Deze worden automatisch getoond tijdens het spelen, zolang beide spelers over het themapakket beschikken.
📝 Let op: gebruikers kunnen deelnemen aan een sessie als welk personage uit het themapakket dan ook, bijvoorbeeld een boom of steen. Dit kan door de sectie ‘Geavanceerd’ van het maak- of deelnamevenster uit te klappen en een ander type te kiezen.
Met behulp van de scènebewerker kunnen spelwerelden worden gemaakt en aangepast. Dit is de eenvoudigste manier om zonder programmeerkennis te werken in Gameeky.
Een bestaande scène kan worden bewerkt door op de bewerkknop naast het project op de starter te klikken. Voor een nieuwe scène wordt aangeraden om met een ander project of themapakket te starten. Volg deze stappen om een scène toe te voegen:
📝 Let op: themapakketten kunnen niet worden bewerkt zonder een bewerkbare kopie te maken. Ga naar het themapakket-optiesmenu en klik op ‘Kopiëren’.
Een scène is een verzameling entiteiten op een tegelrooster. De basiskenmerken van een scène zijn:
De werkwijze van het bewerken van scènes komt overeen met die van een tekenprogramma. Entiteiten worden in de scène geplaatst en weer verwijderd. De basis van het bewerken is als volgt:
De scènebewerker bevat extra gereedschappen die dingen makkelijker maken, zoals:
Als je nóg meer uit Gameeky wilt halen, probeer dan eens de volgende tips en trucs:
Met behulp van de entiteitbewerker kun je objecten en personages maken en bewerken. Hiervoor is geen programmeerkennis vereist, maar alleen een beetje kennis van hoe Gameeky werkt.
Voordat je een entiteit vanaf nul maakt, kan het handig zijn om bestaande entiteiten uit themapakketten te bestuderen. Dit kan op de volgende manier:
Nieuwe entiteit maken:
Entiteiten zijn alle objecten en personages in het spel, bijvoorbeeld het gras, de speler, een lichtbron, de achtergrondmuziek en zelfs het spelmechanisme. Een entiteit bestaat uit drie onderdelen:
Deze eigenschappen bepalen hoe entiteiten zich gedragen en omgaan met andere, bijvoorbeeld verschillende combinaties om een entiteit een steen of vijand te laten zijn.
Er zijn meer dan 20 mogelijkheden, maar een paar vereisen extra aandacht:
📝 Let op: tijdens het maken van een themapakket moet je bij entiteit nummer 1 altijd uitgaan van de speler.
Entiteiten worden op het scherm getoond als grafische onderdelen in 2D. Dit kunnen vaste of bewegende entiteiten zijn.
De grafische onderdelen worden toegekend op basis van bepaalde combinaties, meer bepaald de omstandigheden en windrichting. Zo kan een bepaalde animatie getoond worden bij het naar het westen bewegen en een andere bij het uitrusten in de richting van het zuiden.
Alle entiteiten moeten over een standaardonderdeel beschikken om te worden getoond in de scènebewerker en foutopsporingsmodule.
Net als grafische onderdelen kunnen entiteiten onder bepaalde omstandigheden geluid maken, bijvoorbeeld voetstappen tijdens het lopen. De windrichting maakt hierbij niet uit.
Er zijn echter geen standaardgeluiden, omdat geluiden optioneel zijn.
De werkwijze voor het maken van een entiteit is vergelijkbaar met het invullen van een formulier of sjabloon. Met behulp van de volgende stappen maak je een algemene entiteit:
Als je nóg meer uit Gameeky wilt halen, probeer dan eens de volgende tips en trucs:
Door ondersteuning voor samen spelen kun je meerdere personages bedienen met de code. Hiervoor biedt Gameeky een bibliotheek die gebruikers in staat stelt om een entiteit te bedienen met behulp van de programmeertaal Python, op een LOGO-achtige manier.
Speel samen een spel door deze stappen te volgen:
Speel samen een spel met behulp van de code door deze stappen te volgen:
Meedoen aan en verlaten van een spel:
from gameeky.library import Game
= Game()
game
game.join() game.quit()
Uitvoeren van acties:
from gameeky.library import Game, Direction
= Game()
game
game.join()
game.update()
=1000)
game.idle(time=1000)
game.move(Direction.EAST, time=1000)
game.move(Direction.WEST, time=1000)
game.take(time=1000)
game.use(time=1000)
game.drop(time=1000)
game.interact(time
game.quit()
Inspecteer de locatie en basiseigenschappen van het gebruikerspersonage (entiteit):
from gameeky.library import Game
= Game()
game
game.join()
game.update()
print(game.entity.position.x, game.entity.position.y)
game.quit()
Inspecteer de status van de scène:
from gameeky.library import Game
= Game()
game
game.join()
game.update()
for entity in game.scene.entities:
print(entity.position.x, entity.position.y)
game.quit()
📝 Let op: samenspelers kunnen alléén hun nabij omgeving verkennen en niet de volledige scène.
Inspecteer de statistieken van de speler (entiteit):
from gameeky.library import Game
= Game()
game
game.join()
game.update()
print(game.stats.durability, game.stats.stamina, game.stats.held)
game.quit()
Als je nóg meer uit Gameeky wilt halen, probeer dan eens de volgende tips en trucs:
Aanstichters kunnen het gedrag van een entiteit aanpassen. Een entiteit kan meerdere aanstichters gebruiken om complexer gedrag te vertonen. Er zijn vele aanstichtingen mogelijk, maar het resultaat is uiteindelijk beperkt ten opzichte van de code.
Daarom biedt Gameeky een manier om meer te doen met aanstichters dan wat er standaard mogelijk is.
Er zijn drie typen aanstichters:
Alle aanstichters beschikken over hun eigen speleigenschappen om het gedrag te kunnen aanpassen:
Maak een nieuwe entiteit aan door deze stappen te volgen:
~/Gameeky/PROJECTNAAM/actuators/NAAM_VAN_AANSTICHTER.py
📝 Opmerking: zelfgemaakte aanstichters kunnen eveneens worden bekeken vanuit de scènebewerker tijdens het aanpassen van specifieke entiteiten.
Een minimale aanstichterklasse:
from gameeky.plugins import Actuator as Plugin
class Actuator(Plugin):
def tick(self) -> None:
pass
Inspecteer de entiteit:
from gameeky.plugins import Actuator as Plugin
class Actuator(Plugin):
def tick(self) -> None:
print(self.entity.name)
Voer een actie uit op de entiteit:
from gameeky.plugins import Actuator as Plugin
from gameeky.common.definitions import Action, Direction
class Actuator(Plugin):
def tick(self) -> None:
self.entity.perform(Action.MOVE, Direction.SOUTH)
Verstuur tekst naar de entiteit:
from gameeky.plugins import Actuator as Plugin
class Actuator(Plugin):
def tick(self) -> None:
self.entity.tell("Hello...")
Inspecteer alle entiteiten die voor de neus van de huidige entiteit staan:
from gameeky.plugins import Actuator as Plugin
class Actuator(Plugin):
def tick(self) -> None:
for entity in self.entity.obstacles:
print(entity.name)
Inspecteer alle entiteiten die dezelfde locatie als de huidige entiteit hebben:
from gameeky.plugins import Actuator as Plugin
class Actuator(Plugin):
def tick(self) -> None:
for entity in self.entity.surfaces:
print(entity.name)
Inspecteer alle entiteiten in de nabije omgeving van de huidige entiteit:
from gameeky.plugins import Actuator as Plugin
class Actuator(Plugin):
def tick(self) -> None:
for entity in self.entity.surroundings:
print(entity.name)
📝 Let op: de controle van nabije entiteiten houdt ook rekening met de straal van de entiteit in kwestie.
Inspecteer alle entiteiten in de scène die niet statisch zijn:
from gameeky.plugins import Actuator as Plugin
class Actuator(Plugin):
def tick(self) -> None:
for entity in self.entity.scene.mutables:
print(entity.name)
Inspecteer alle entiteiten die door gebruikers bediend worden:
from gameeky.plugins import Actuator as Plugin
class Actuator(Plugin):
def tick(self) -> None:
for entity in self.entity.scene.playables:
print(entity.name)
Maak een aanstichter die elke vijf seconden een actie uitvoert:
from gameeky.plugins import Actuator as Plugin
class Actuator(Plugin):
= True
activatable
def tick(self) -> None:
if not self.ready:
return
print("Activated...")
super().tick()
📝 Let op: de eigenschap klaar houdt ook rekening met de straal van de entiteit in kwestie.
Maak een aanstichter die alleen een actie uitvoert als er interactie plaatsvindt:
from gameeky.plugins import Actuator as Plugin
class Actuator(Plugin):
= True
interactable
def prepare(self, interactee: "Entity") -> bool:
if interactee.playable is False:
return False
return super().prepare(interactee)
def tick(self) -> None:
if self.interactee is None:
return
print(f"Interacted with {self._interactee.name}")
super().tick()
Complexere voorbeelden zijn te vinden in de aanstichtermap van Gameeky.
Als je nóg meer uit Gameeky wilt halen, probeer dan eens de volgende tips en trucs: