Inhoud
- (terug naar het begin)
- 8 - Waarmee wil je verder?
- 9 - Spelers met karakter
- 10 - Animatie
- 11 - Actie
- 12 - Grotere levels en editor
- 13 - Op avontuur!
- 14 - Meer voorbeelden
13 - Op avontuur!
In het vorige hoofdstuk heb je gezien hoe je grotere levels kunt maken. Maar zo’n wijde wereld moet natuurlijk wel gevuld worden met interessante mogelijkheden. Daar gaan we nu mee aan de slag.
Je kunt dit spel met meerdere ‘kamers’ bijvoorbeeld als beginpunt gebruiken.
Gesprekjes
Het is in een avonturenspel natuurlijk leuk als je andere wezens tegenkomt waar je mee kunt praten.
Misschien komen we wel een konijn tegen:
Konijn K
Gray Black
.0.0.
00000
01010
.000.
00000
Vergeet niet om het Konijn
ook toe te voegen aan de Object
groep onder LEGEND
, en natuurlijk ergens in je wereld een konijn te plaatsen (met de letter K
in de code, of via de editor).
Het konijn doet natuurlijk nog niets tot we er een regel voor aanmaken. Voeg een RULE
toe zodat je een gesprekje kunt voeren door tegen het konijn aan te lopen:
[ > Speler | Konijn ] -> message Ik ben Flappie, wie ben jij?
Als het goed is, stelt Flappie zich nu voor. Het is wel leuk als hij meer dan een ding zegt. Dat kun je doen door meerdere konijn-objecten te maken:
Konijn1 K
Gray Black
.0.0.
00000
01010
.000.
00000
Konijn2
Gray Black
.0.0.
00000
01010
.000.
00000
Konijn3
Gray Black
.0.0.
00000
01010
.000.
00000
Maak in het LEGEND
gedeelte een groep Konijn
aan waar al deze objecten in zitten:
Konijn = Konijn1 or Konijn2 or Konijn3
Pas nu de regel die hierboven hadden gemaakt als volgt aan:
[ > Speler | Konijn1 ] -> [ Speler | Konijn2 ] message Ik ben Flappie, wie ben jij?
Als je het spel draait, zal het konijn de eerste keer dat je tegen ‘m aan loopt iets zeggen, maar daarna niet meer. Dat komt doordat de regel hierboven er een Konijn2
van heeft gemaakt. Je moet dus nog regel(s) toevoegen die zorgt dat Konijn2
ook iets terugzegt. Lukt dat?
OPLOSSING
[ > Speler | Konijn2 ] -> [ Speler | Konijn3 ] message Ik heb zo'n trek!
[ > Speler | Konijn3 ] -> [ Speler | Konijn1 ] message Heb je misschien een wortel voor me?
Zoals je ziet maken we bij de tweede regel van Konijn2
een Konijn3
en bij de derde regel maken we er weer een Konijn1
van. Hierdoor kun je het gesprekje nog eens herhalen als je vergeten was wat Flappie ook alweer precies zei.
Hier zie je het resultaat.
Voorwerpen
Natuurlijk moeten er voorwerpen te vinden zijn in je spel die je verder helpen.
Duwen
De simpelste manier om in PuzzleScript iets te doen met voorwerpen is door het zo te maken dat je het voorwerp kunt duwen, net als de blokjes in vorige hoofdstukken.
Laten we een wortel en een spruitje voor het konijn toevoegen. We maken ook meteen een extra versie van het konijn, GevoerdKonijn
, zodat we kunnen ‘onthouden’ wanneer het konijn iets gegeten heeft.
Wortel W
Orange Green
...11
..001
..00.
.00..
0....
Spruitje P
Green
.....
.000.
.000.
.000.
.....
GevoerdKonijn
Gray Black
.0.0.
00000
01010
.000.
00000
Maak bij LEGEND
een groep Groente
en voeg die toe aan Objects
:
Groente = Wortel or Spruitje
Objects = Muur or Speler or Konijn or Groente
Plaats nu een wortel en spruitje in je wereld (met de letters W
en P
). Plaats ze zo dat het mogelijk is om ze naar het konijn te duwen.
Met deze regels kunnen we de wortel en het spruitje naar het konijn duwen:
(Groente duwen)
[ > Speler | Groente ] -> [ > Speler | > Groente ]
Misschien is het leuk als het konijn de wortel wel wil maar het spruitje niet:
[ > Spruitje | Konijn ] -> [ Spruitje | Konijn ] message Ik hou niet van spruitjes!
(Konijn eet wortel op)
[ > Wortel | Konijn ] -> [ | GevoerdKonijn ]
Hoe zou je het zo kunnen maken dat het konijn je bedankt als je nog eens met hem praat nadat je ‘m gevoerd hebt?
OPLOSSING
[ > Speler | GevoerdKonijn ] -> message Dankjewel, dat was lekker!
En kun je zorgen dat het konijn genoeg heeft aan 1 wortel en “nee dank je” zegt als je er nog een aanbiedt?
OPLOSSING
[ > Wortel | GevoerdKonijn ] -> message Ik heb genoeg gehad!
Hier is een werkend voorbeeld.
Niet duwen maar dragen
Wat als we voorwerpen niet in het rond willen duwen, maar willen dat de speler het voorwerp oppakt en met zich mee draagt? Dat is wat lastiger, omdat we in PuzzleScript niet zomaar een lijst voorwerpen kunnen bijhouden die de speler bij zich draagt.
We kunnen wel een extra ‘laag’ (COLLISIONLAYER
) gebruiken in PuzzleScript waar ‘draagbare’ voorwerpen zoals de wortel en het spruitje op staan:
================
COLLISIONLAYERS
================
(De 'grond')
Background
(Alle gewone spelobjecten: speler, konijn, muren)
Object
(Door de speler te dragen objecten, in dit geval de groente)
Groente
Doordat de groente nu op een aparte laag staat, is het mogelijk dat de speler en een van de groentes een vakje delen.
We moeten nu wel onze regels aanpassen zodat we voorwerpen dragen in plaats van duwen:
(Zodra de speler op het vakje van een draagbaar voorwerp staat, moet dat voorwerp met de speler meebewegen)
[ > Speler Groente ] -> [ > Speler > Groente ]
Als je wilt dat de speler een gedragen voorwerp ook weer neer kan leggen door op x
te drukken, voeg dan deze regel toe:
(Zet draagbaar voorwerp neer op een lege plek naast speler)
[ ACTION Speler Groente | no Object no Groente ] -> [ Speler | Groente ]
ACTION
betekent hier dat er net op x
is gedrukt. PuzzleScript zal in dat geval zoeken naar een aangrenzend leeg vakje (geen Object
, geen Groente
) en zal daar de groente neerzetten.
We moeten ook onze regels voor het voeren van het konijn iets aanpassen, omdat de speler en het spruitje tegelijkertijd richting het konijn bewegen. Als je dit niet doet, komen de regels voor het voeren in de war met de regels voor het praten met het konijn:
(Konijn houdt niet van spruitjes)
[ > Speler > Spruitje | Konijn ] -> [ Speler Spruitje | Konijn ] message Ik hou niet van spruitjes!
(Konijn eet wortel op)
[ > Speler > Wortel | Konijn no GevoerdKonijn ] -> [ Speler | GevoerdKonijn ]
(Konijn hoeft maar 1 wortel)
[ > Speler > Wortel | GevoerdKonijn ] -> [ Speler Wortel | GevoerdKonijn ] message Ik heb genoeg gehad!
(Gevoerd konijn bedankt speler)
[ > Speler | GevoerdKonijn ] -> [ Speler | GevoerdKonijn ] message Dat was lekker, dankjewel!
Als het niet lukt, kijk dan hier voor een werkend voorbeeld.
In een echt spel wil je natuurlijk dat het Konijn
je iets geeft als dank voor de wortel, zodat je verder kan komen in het spel. Bijvoorbeeld een sleutel. Kun je bedenken hoe je dat doet?
OPLOSSING
Maak daarvoor eenOBJECT
Sleutel
aan, voeg 'm toe aan Objects
(onder LEGEND
) en pas de regel voor het geven van de wortel aan:
[ > Speler > Wortel | Konijn no GevoerdKonijn ] -> [ Speler Sleutel | GevoerdKonijn ]
(Konijn no GevoerdKonijn
betekent dat het elk Konijn
mag zijn, behalve GevoerdKonijn
)
Geheime deuren, knoppen
Als we een deur willen maken die opengaat als je een knop indrukt, bijvoorbeeld door er een kistje op te zetten, heb je eerst een aantal OBJECTS
nodig:
Kistje @
(Een kistje dat de speler kan duwen)
white gray darkgray
00001
01112
01112
01112
12222
Deur D
(De deur die je kunt openen met de knop)
brown darkbrown
.101.
01010
01010
01010
01010
DeurOpen O
(De deur als-ie geopend is)
brown
.....
0....
0....
0....
0....
Knop K
(De knop waarmee je de deur kunt openen)
blue
.....
.000.
.000.
.000.
.....
Je kunt van de deur natuurlijk ook een geheime deur maken! Pas daarvoor het plaatje aan zodat het er (bijna) hetzelfde uitziet als een muur.
Je kunt zelf kiezen waar je deze zaken in je wereld plaatst. Maar we moeten wel de LEGEND
en COLLISIONLAYERS
aanpassen. Bij LEGEND
:
Vloer = Knop or DeurOpen
(Dit zijn al onze voorwerpen)
Voorwerp = Muur or Speler or Kistje or Muntje or Deur
Bij COLLISIONLAYERS
:
================
COLLISIONLAYERS
================
Achtergrond
(We hebben een extra laag voor de knop en de open deur, omdat de speler of een kistje tegelijk op hetzelfde vakje moeten kunnen staan)
Vloer
Voorwerp
Je hebt natuurlijk een regel nodig zodat de Speler een kistje kan duwen:
(De Speler kan Kistjes duwen)
[ > Speler | Kistje ] -> [ > Speler | > Kistje ]
Om de deur open te laten gaan als er iets op de knop staat:
(Open deur als er een voorwerp op de knop staat, sluit 'm anders)
late [ Knop Voorwerp ] [ Deur ] -> [ Knop Voorwerp ] [ DeurOpen ]
late [ Knop no Voorwerp ] [ DeurOpen ] -> [ Knop ] [ Deur ]
Zoals je ziet staan er twee keer rechte haken []
links en rechts van de ->
. Zo’n regel kijkt naar meerdere vakjes die waar dan ook in de puzzel kunnen staan. Dus de eerste regel betekent “als er ergens in het level een vakje is met een Knop
en een Voorwerp
”, en ergens anders in het level is een vakje met een Deur
, dan moet die Deur
een DeurOpen
worden.
Het woordje late
(“laat”) hebben we nodig zodat deze regels toegepast worden nadat het kistje bewogen heeft. Probeer maar eens wat er gebeurd als je dit woordje weglaat.
Deze regels werken ook als je meerdere knoppen en deuren zou hebben. Als alle knoppen ingedrukt worden, gaan alle deuren open. Weet je hoe het komt dat het zo werkt?
ANTWOORD
De eerste regel opent elke deur als ergens in het level een ingedrukte knop is, maar de tweede regel sluit elke deur weer dicht als ergens in het level een niet ingedrukte knop is. Dus tot alle knoppen ingedrukt zijn, blijven alle deuren dicht.Hier is een werkend voorbeeld.
Natuurlijk kun je ook een valstrik maken met een (bijna) onzichtbare knop waar de speler juist niet op moet gaan staan, omdat er dan bijvoorbeeld ergens een deur dichtgaat en de speler opgesloten zit.
Magische drankjes
Magie is natuurlijk altijd leuk in een avonturenspel. Bijvoorbeeld een drankje waardoor je elastisch wordt en jezelf door de tralies heen kunt wringen om jezelf uit een gevangenis te bevrijden!
We hebben nu twee spelerobjecten nodig: een GewoneSpeler
en een MagischeSpeler
:
GewoneSpeler S
(Het figuurtje dat je bestuurt)
darkgray brown lightblue blue
.000.
.111.
22222
.333.
.3.3.
MagischeSpeler
(De speler, nadat die het drankje gedronken heeft)
darkgray
.000.
.000.
00000
.000.
.0.0.
Drankje D
(Een magisch drankje)
purple
..0..
..0..
.000.
.000.
.000.
Tralies T
white
0.0.0
0.0.0
0.0.0
0.0.0
0.0.0
Maak in LEGEND
de groep Speler
aan:
Speler = GewoneSpeler or MagischeSpeler
Player = Speler
(Player = Speler
staat er alleen zodat PuzzleScript, dat overal Engels gebruikt, ook weet wat onze speler is)
We zetten de Tralies
op een eigen COLLISIONLAYER
, omdat de MagischeSpeler
straks op hetzelfde vakje moet kunnen staan.
================
COLLISIONLAYERS
================
Achtergrond
Tralies
Voorwerp
Als je het drankje drinkt, willen we natuurlijk een magisch geluid laten horen:
=======
SOUNDS
=======
Drankje DESTROY 80302508
Kun jij nu de regels voor het magische drankje schrijven?
ANTWOORD
Deze regels heb je nodig:
(Als Speler het Drankje drinkt wordt die magisch)
[ > Speler | Drankje ] -> [ > MagischeSpeler | ]
(Gewone speler kan zich niet door tralies heen wringen)
[ > GewoneSpeler | Tralies ] -> CANCEL
Je wilt misschien dat je het drankje maar 1 keer kan gebruiken. Hoe zou je dat in een regel kunnen vangen?
ANTWOORD
(Als je door de tralies heen gaat, verlies je je magie weer)
[ > MagischeSpeler Tralies | ] -> [ Tralies | GewoneSpeler ]
Hier is het werkende voorbeeld.