Documentatie

⚠️ 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.

Onderwerpen

  1. Introductie
  2. Installatie
  3. Themapakketten
  4. Overzicht
  5. De starter
  6. De speler
  7. Samenwerking
  8. De scènebewerker
  9. De entiteitbewerker
  10. De codebewerker en LOGO-achtige code
  11. Plug-ins

Introductie

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.

Installatie

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

Themapakketten

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

Overzicht

Het Gameeky-pakket bestaat uit vijf hoofdonderdelen:

  1. De starter is het hoofdonderdeel; hier vind je alle themapakketten en projecten.
  2. De speler is waar spellen gespeeld kunnen worden, al dan niet samen.
  3. De scènebewerker is waar scènes kunnen worden gemaakt en bewerkt.
  4. De entiteitbewerker is waar entiteiten kunnen worden gemaakt en bewerkt.
  5. De codebewerker biedt een manier met LOGO-achtige code te werken.

De starter

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:

Projecten delen

Via de starter kun je eenvoudig projecten delen. Exporteer een project door deze stappen te volgen:

  1. Klik in de starter op de optiesknop van het project en kies ‘Exporteren’.
  2. Volg de instructies op het scherm.

Importeer een project door deze stappen te volgen:

  1. Ga naar de starter, open het menu en klik op ‘Importeren’.
  2. Volg de instructies op het scherm.

De speler

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:

  1. Klik in de starter op de optiesknop van het project en kies ‘Spelen’.
  2. Ga via de speler naar het menu en klik op ‘Nieuw’.
  3. Kies in het geopende venster een scènebestand en klik op ‘Maken’.

Spelementen

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:

Bediening

In het spel kan het personage op twee manieren bestuurd worden:

Acties

De speler kan meerdere acties uitvoeren in de spelwereld:

Bestanden opslaan

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.

  1. Ga hiervoor naar het menu en klik op Opslaan als….
  2. Als je een spel wilt herstellen, volg dan de stappen hierboven om een scène te openen.

Samenwerking

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:

  1. Klik in de starter op de optiesknop van het project en kies ‘Spelen’.
  2. Ga via de speler naar het menu en klik op ‘Nieuw’.
  3. Kies in het maakvensters het aantal spelers en klik op ‘Maken’.

Meedoen aan een actief spel:

  1. Klik in de starter op de optiesknop van het project en kies ‘Spelen’.
  2. Kies een speler, ga naar het menu en klik op ‘Deelnemen’.
  3. Geef in het deelnamevenster het ip-adres op van de speler die het spel gestart is en klik op ‘Deelnemen’.

📝 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.

De scènebewerker

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:

  1. Klik in de starter op de optiesknop van het project en kies ‘Bewerken’.
  2. Ga vanuit de bewerker naar het menu en klik op ‘Nieuw’.

📝 Let op: themapakketten kunnen niet worden bewerkt zonder een bewerkbare kopie te maken. Ga naar het themapakket-optiesmenu en klik op ‘Kopiëren’.

Concepten

Een scène is een verzameling entiteiten op een tegelrooster. De basiskenmerken van een scène zijn:

Werkwijze

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:

  1. Entiteiten toevoegen: klik op een entiteit op het linkerpaneel en plaats deze op de scène door op een tegel te klikken.
  2. Entiteiten verwijderen: klik op het verwijdergereedschap op het linkerpaneel en vervolgens op een entiteit op een van de tegels.
  3. Entiteiten hebben vaste eigenschappen en gedrag, maar sommige kunnen worden aangepast. Klik op het bewerkgereedschap op het linkerpaneel en vervolgens op een entiteit op een van de tegels.
  4. Probeer de scène uit door in het menu te kiezen voor de optie ‘Uitproberen’.

De scènebewerker bevat extra gereedschappen die dingen makkelijker maken, zoals:

Tips en trucs

Als je nóg meer uit Gameeky wilt halen, probeer dan eens de volgende tips en trucs:

De entiteitbewerker

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:

  1. Open de scènebewerker en rechtsklik op een entiteit op het linkerpaneel.
  2. Klik in het menu op de optie ‘Bewerken’.

Nieuwe entiteit maken:

  1. Open de scènebewerker en rechtsklik ergens op het linkerpaneel.
  2. Klik in het menu op de optie ‘Toevoegen’.

Concepten

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:

  1. Het spelmechanisme.
  2. Grafische onderdelen..
  3. Geluiden.

Spelmechanisme

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.

Grafische onderdelen

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.

Geluiden

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.

Werkwijze

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:

  1. Klik op het tabblad ‘Spel’ en vul alle waarden van boven naar onder in. Alle eigenschappen hebben hun eigen standaardwaarden; alleen de identificatie is blanco, maar moet wel worden ingevuld. Hierdoor kun je de entiteit makkelijk terugvinden in de scènebewerker.
  2. Klik op het tabblad ‘Grafische onderdelen’ en vervolgens op de knop ‘Toevoegen’. Laat de status en richting op ‘Standaard’ staan. Klap de detailsectie uit om een afbeelding te kiezen. Klik op ‘Bekijken’ om de gekozen afbeelding te controleren.
  3. Bewaar de entiteit en gebruik deze in de scènebewerker.

Tips en trucs

Als je nóg meer uit Gameeky wilt halen, probeer dan eens de volgende tips en trucs:

De codebewerker en LOGO-achtige code

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.

Werkwijze

Speel samen een spel door deze stappen te volgen:

  1. Klik in de starter op de optiesknop van het project en kies ‘Spelen’.
  2. Ga via de speler naar het menu en klik op ‘Nieuw’.
  3. Kies in het maakvensters het aantal spelers en klik op ‘Maken’.

Speel samen een spel met behulp van de code door deze stappen te volgen:

  1. Klik in de starter op de optiesknop van het project en kies ‘Spelen’.
  2. Kies een speler, ga naar het menu en klik op ‘Deelnemen met code’.
  3. Schrijf Python-code die gebruikmaakt van de Gameeky-bibliotheek. Hieronder vind je enkele voorbeelden.
  4. Klik op de knop ‘Spelen’.

Voorbeelden

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()

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=1000)

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()

Tips en trucs

Als je nóg meer uit Gameeky wilt halen, probeer dan eens de volgende tips en trucs:

Plug-ins

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.

Concepten

Er zijn drie typen aanstichters:

  1. Gewone aanstichters die iets doen bij elke beweging in de scène, bijv., om de entiteit te verplaatsen naar een willekeurige locatie.
  2. Activeerbare aanstichters reageren alleen binnen bepaalde tijdspannen of indien expliciet geactiveerd door een andere entiteit, bijv. om iedere vijf seconden een vijand te laten opduiken.
  3. Aanstichters met interactie werken alleen als andere entiteiten een interactie met ze hebben, bijv. om een entiteit te teleporteren naar een locatie zodra de entiteit contact maakt met het portaal.

Alle aanstichters beschikken over hun eigen speleigenschappen om het gedrag te kunnen aanpassen:

Werkwijze

Maak een nieuwe entiteit aan door deze stappen te volgen:

  1. Op een nieuw document in een tekstbewerker.
  2. Schrijf een aanstichter‘klasse’. Hieronder vind je enkele voorbeelden.
  3. Bewaar het document in ~/Gameeky/PROJECTNAAM/actuators/NAAM_VAN_AANSTICHTER.py
  4. Ga in de entiteitbewerker naar het tabblad ‘Spel’ en klik op de sectie ‘Aanstichters’.
  5. Nu verschijnt er een nieuwe optie genaamd NAAM_VAN_AANSTICHTER bij de rest.
  6. Selecteer de aanstichter en bewaar deze op de schijf.

📝 Opmerking: zelfgemaakte aanstichters kunnen eveneens worden bekeken vanuit de scènebewerker tijdens het aanpassen van specifieke entiteiten.

Voorbeelden

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):
    activatable = True

    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):
    interactable = True

    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.

Tips en trucs

Als je nóg meer uit Gameeky wilt halen, probeer dan eens de volgende tips en trucs: