Previously on...
In the last article I learned a ton about Pulp and all the wonderful ways it makes developing simple games for the Playdate real easy.
Even for simple games, though, it's tough to make a fun game without a little programming.
That's where PulpScript comes in.
Thus far, I've studied a few games' script files.
Many were easy to interpret.
But there were commands I didn't fully understand.
I hope that reading the official PulpScript Docs fills in all those gaps...and sheds plenty more light on what I can do with this handy API.
Table of Contents
- Woah! This document is nearly three times as long as the Pulp Docs!
- Looks like there is a section on the aspects of the language, then several sections all about the many functions made available by the API
General
This language has:
- Variables
- Event Handlers
- Persistant Storage
- Math
- Control Flow
- Comments
- Strings
- Loops
- Dates and Times
I've dabbled in all of that!
Interesting excerpts
All game logic must occur inside an event handler.
All variables are globally scoped.
All uninitialized variables have a default value of
0.Variables can hold a number or a string. Strings must be wrapped in double quotes.
Compound expressions are not supported.
Oh, that explains why I kept seeing overly nested if...then clauses in all the games: because there's not logical AND or OR in PulpScript!
String comparisons are case-sensitive.
Callbacks and event handlers can be exited early with the done statement
Variables can be persisted across launches using the
storeandrestorefunctions.
Oh, so that's what those keywords were doing!
- 
calltriggers an event for the current tile
- 
emittriggers an event for all tiles that implement that particular event
- No forloops, but there is awhileloop
Functions
The built-in functions I recall:
- load
- finish
- loop
- update
- confirm
- cancel
- crank
- draw
- interact
- collect
When these functions are called:
- on the game, or once on the game
- on each room, or the current room
- on each tile or the current tile
- on the Player each time they move or collide with a tile
- on an item when the player collides with that tile
The menu-related functions:
- change
- select
- dismiss
- invalid
I wonder how the cursor is controlled in a Pulp game...especially such that a series of menu items in-game can be selected using any of the buttons on the Playdate.
The functions I now know exist:
- 
start,enter,exit
- bump
- 
dock,undock
- any
- mimic
  
  
  The event object
Throughout the built-in functions, the event object may have one or more of the following read-only members a.k.a. properties:
- 
dx- horizontal direction: -1 (up), 0 (same), 1 (down)
- 
dy- vertical direction: -1 (up), 0 (same), 1 (down)
- 
tx- X coordinate of the target tile relative to the room
- 
ty- Y coordinate of the target tile relative to the room
- 
x- X coordinate of the tile
- 
y- Y coordinate of the tile
- 
tile- name of the current tile
- 
room- name of the current room
- 
px- current player X coordinate
- 
py- current player Y coordinate
- 
aa- absolute angle of the crank
- 
ra- relative angle of the crank (degree difference relative to the previous frame)
- 
frame- number of frames elapsed since game start
- 
ax- accelerometer's X value
- 
ay- accelerometer's Y value
- 
az- accelerometer's Z value
- 
orientation- a string describing the Playdate's current orientation
- 
option- currently selected option's name
- 
game- name of the game
- 
player- name of the player tile
  
  
  The config object
This object can be used to override the default settings through its writable members.
Things that can be changed include:
- Input delays
- Camera settings
- Color of out-of-bounds tiles
- Time delays
- Text interaction and display timings
  
  
  The datetime object
Lots of great variables for use in tracking time!
String formatting
Hooray for use of curly braces to interpolate values inside a string!
And very cool that strings can be padded on each side a specific amount.
And putting tiles in a string? Hmm. I'm not sure how I would use that, but cool.
Functions again!
- 
logworks as expected
- 
dumpis a great troubleshooting tactic
- 
saypresents a message...and can be positioned and re-sized!
- 
askis like aswitchstatement where each clause is anoptionand the body of a reaction
- I wonder how menudiffers in appearance and use thanask
- 
finis the true game-ending prompt, eh? At least because it emits theon finish doevent
- 
swapreplaces a tile's artwork with that of another
- 
frameandframeIndexcapture a frame from a tile's animation set
- 
playstarts - optionally interrupting? - a tile's series of animation frames
- 
waitcreates a delay, with exception to therunloop...? And there's a caveat about preventing player movement? I don't quite understand those parts yet.
- 
shakeis a nice touch!
- 
telllets me manipulate one tile from another
- 
callandemitdo the same thing, but one for a single tile and the other for any/all applicable tiles
- 
mimicseems interesting, but not sure what a use case is at this moment
- 
ignoreandlistenare great player-input-disabling functions!
- 
actis very interesting: perform some foreshadowing!
- 
drawcan only be called from the Player'sdrawevent...interesting.
- 
hidemakes it impossible to draw the player. So...like, to simulate a tunnel?
- 
windowdraws a window frame. Cool?
- 
labelplaces text on the room and not in a window or prompt: so for UI elements, perhaps?
- 
filldraws rectangles!
- 
cropessentially creates a mask over the room within which drawing can occur
- 
gotomoves the player to a position in a room
- 
soundplays a sound
- 
onceplays a song and stops, optionally doing more things when the song has finished
- 
loopplays a song again and again
- 
stopends the currently playing song
- 
btmadjusts the beat of the song
- 
storesets a value in storage when a game or room is entered or exited
- 
restoresets a value from one in storage
- 
tossdeletes values from storage
- 
randomgenerates a random integer
- 
floorrounds a decimal down to the nearest integer
- 
ceilrounds a decimal up to the nearest integer
- 
roundrounds a decimal to the closest integer
- 
sine,cosine,tangentdo geometry things based on a number
- 
radiansconverts a number from degrees to radians
- 
degreesconverts a number from radians to degrees
- 
invertdraws the opposite color and returns the current mode
- 
solididentifies a tile as solid or not
- 
typeidentifies a tile's type
- 
ididentifies a tile from its position or name
- 
nameidentifies a tile from its position or id
Lots of feelings
- So many event functions!
- So many event object members!
- So many other functions!
- Tons of knowledge gaps filled!
- Lots of questions about some of these functions and event handlers!
- Excitement to logtons of things in tons of event handlers to learn first-hand how all this works!
What next?
- Try to find a comprehensive tutorial on building a game in Pulp?
- Start with the list of links on the Pulp help page?
- Or see what's on Youtube?
- Or skip all that and just play around in the editor myself, struggling gleefully the whole time?
It all sounds like it's gonna be a ton of fun...especially now that I'm more familiar with PulpScript and how Tiles work.
 
 
              
 
    
Top comments (0)