In 1985, Microsphere published Skool Daze, a game for the Sinclair ZX Spectrum. Later in the same year, the sequel Back to Skool was published.
Each game was based in a boys' school (though Back to Skool added a playground and a girls' school) and revolved around the antics of Eric, the hero. In Skool Daze, Eric must steal his report card from the school safe - the combination of which must be extracted from the teachers' brains using flashing shields or, in the case of the history teacher, post-hypnotic suggestion. In Back to Skool, Eric must get his report card back into the school safe, this time with the extra help provided by a water pistol, stinkbombs, a bike, mice, a frog and a girlfriend.
Pyskool is a re-implementation of these classic games in Python and Pygame, with the aim of making them easy to customise by editing a configuration file or - for more advanced customisation - writing some Python code.
The latest version of Pyskool can always be obtained from pyskool.ca.
Pyskool requires Python (version 2.5+, but not version 3.x) and Pygame (version 1.7+).
You almost certainly have Python already installed, and there are probably
Pygame packages available via the package management system. Debian-based
distros have python-pygame
, openSUSE has python-pygame
, Fedora has
pygame
, and FreeBSD has py25-game
(for example).
To start Pyskool in Skool Daze mode, open a terminal window, change to the directory containing this documentation, and do:
or, to run Pyskool in Back to Skool mode:
For OS X there are Python packages available here, and Pygame packages available here.
When Python and Pygame are installed, open a terminal window, change to the directory containing this documentation, and do:
to run Pyskool in Skool Daze mode; or, to run Pyskool in Back to Skool mode:
For Windows there are Python packages available here, and Pygame packages available here.
To run Pyskool in Skool Daze mode, double-click the sd.py
file in the same
directory as this documentation. To run Pyskool in Back to Skool mode,
double-click bts.py
.
If that doesn't work, try the command line. Open a command prompt, change to the directory containing this documentation, and do:
to run Pyskool in Skool Daze mode; or, to run Pyskool in Back to Skool mode:
The sd.py
and bts.py
executables support a few command line options:
--version
- show the version number of Pyskool-h
/--help
- show a summary of the available options-s
/--scale
- set the scale of the display, overriding the Scale
setting in the ini file-i
/--ini
- use an ini file other than skool_daze.ini
or back_to_skool.ini
-q
/--quick-start
- start the game quickly by skipping the scroll-skool-into-view and theme tune sequence; overrides the QuickStart
setting in the [Game] section of the ini fileIn the role of our hero, Eric (or any other name you decide to call him and the rest of the cast), you know that inside the staffroom safe are kept the school reports. And, being Eric, you realise that you must at all costs remove your report before it comes to the attention of the Headmaster.
The combination to the safe consists of four letters, each master knowing one letter and the Headmaster's letter always coming first. To get hold of the combination, you first have to hit all the shields hanging on the school walls. Trouble is, this isn't as easy as it looks. Some of them can be hit by jumping up. Others are more difficult. You could try and hit a shield by bouncing a pellet off a master's head whilst he is sitting on the ground. Or, being Eric, you may decide to knock over one of the boys and, whilst he's flattened, clamber up on him so that you can jump higher.
OK. So all the shields are flashing wildly, disorientating the poor masters. Knock them over now and, before they can stop themselves, they'll reveal their letter of the code. All except for the history master, of course, who because of his great age and poor eyesight can't be trusted to remember. His letter has been implanted into his mind hypnotically. To make him reveal it, you must find out the year he was born (which, in case you were wondering, changes each game). Then, creep into a room before he gets there and, if the board is clean, write it on the blackboard. When he goes into that room and sees his birthdate he will, as if by post-hypnotic suggestion, give away his letter.
Now that you know all the letters of the combination, all you have to do is work out which order they go in. You know that the Headmaster's letter is always first, but as for the other three...you'll just have to try the various possibilities. Find a clean blackboard and write out a combination.
Rush back to the staffroom and jump up to reach the safe with your hand. If nothing happens, then the combination must be wrong, so you'd better find another clean blackboard and try a different one.
With the safe open, your troubles still aren't over, as the flashing shields are rather a giveaway. To stop them flashing, you now have to hit all of them again.
Done it? Congratulations! You are now allowed, along with all your friends, to move on to the next class at school. But remember, there will be reports at the end of this term...
Boys shall attend lessons as shown in the timetable at the bottom of the screen. (Remember that because you cheated in the exams last year, you always go to the same lessons as the swot.)
Boys do not score points by attending lessons, but may be given lines if caught in the wrong place.
Boys who acquire over 10,000 lines shall be expelled immediately from the school.
Boys are not allowed to enter the staffroom or the Headmaster's study. Take care.
At playtime, boys are supposed to be playing and not in any of the classrooms.
Boys shall not hit their schoolmates.
Boys shall not fire catapults.
Boys are expected to walk quietly in the corridors - they are not for running or sitting in.
School dinners are compulsory.
Boys will be neat and polite at all times.
Having managed to steal your report during the last few skooldaze of term, you've spent the whole holiday forging teachers' signatures and handwriting to make yourself look like the brightest, sweetest natured, most helpful little soul ever to carry a satchel.
Now all you've got to do is get it back into the Head's safe...
A couple of years ago, your elder brother had exactly the same problem and has lent you his old copy of the School Rules, on which he's scribbled some notes in invisible ink. Holding the paper over a bonfire made from the swot's cap, you can just make out the following:
The keys to move Eric around are:
Eric always walks fast. In the original games Eric walked slow unless you held down the shift key; I always held down the shift key, so didn't feel motivated to include a 'slow mode'.
Other useful keys are:
pyskool###.bmp
or pyskool###.png
)Back to Skool mode also uses the following keys:
To pedal the bike, use the left and right arrow keys (or 'o' and 'p'). Use the up arrow key (or 'q') to stand on the saddle, and the down arrow key (or 'a') to dismount. You can jump while standing on the saddle by pressing 'j' or the up arrow key (or 'q').
What follows is a description of every section of the ini files, and every command found in the command lists that control the characters. Armed with this knowledge, you'll be able to start mucking around with how Pyskool works and the game characters behave.
If you can't be bothered to read any of this and instead just want to get your modding hands dirty right now, head over to Example customisations.
If you're even lazier than that, head over to Example ini files for a description of the ready-made customised ini files distributed with Pyskool.
The stock Pyskool graphics are stored in PNG files in subdirectories named
bts
, common
and sd
under images/originalx1
. The PNG files are:
bubble.png
- speech bubble and lipfont.png
- the skool fontinventory.png
- mouse, frog, water pistol etc. (Back to Skool only)logo.png
- the, er, logomutables_ink.png
- doors, windows etc. (Back to Skool only)mutables_paper.png
- doors, windows etc. (Back to Skool only)mutables.png
- doors, windows etc. (Back to Skool) or shields and safe (Skool Daze)scorebox.png
- the score/lines/hi-score boxskool_ink.png
- the skool (ink colours only)skool_paper.png
- the skool (paper colours only)skool.png
- the skool (full colour)sprites.png
- the characters in various 'animatory states'
These images were extracted straight from memory snapshots of Skool Daze and
Back to Skool, and are therefore identical to the graphics in the original
games (hence the original
prefix in the directory name), except for minor
glitches that have been fixed. (See
Skool Daze graphic glitches
and
Back to Skool graphic glitches.)
The *_ink.png
and *_paper.png
files are used in GraphicsMode
1 (see [Game])
in order to emulate the Spectrum display, which was restricted to two colours
('ink' and 'paper') per 8x8-pixel block.
sprites.png
is an 8x16 array of sprites for the characters in the game. These
sprites are all facing left, and are flipped to obtain the corresponding
right-facing sprite.
Any of these images can be customised using your favourite image editor.
Pyskool performs the following steps to determine the base directory for graphics to use in the game:
ImagesDir,
ImageSet
and Scale
from the [Game]
section of the config file<ImagesDir>/<ImageSet>x<Scale>
<ImageDir>/<ImageSet>x1
and scale them upThe actual image files used from the base directory are defined in the [Images] section.
If you wanted to create your own hi-res graphics at 2x the original Spectrum
size, you could place them under a base directory called <ImagesDir>/Customx2
and use the following config values in the [Game]
section:
The ini file (skool_daze.ini
or back_to_skool.ini
) determines many aspects
of the game, such as the names of the characters, the order of the lessons, and
what characters do during lessons. Each section of the ini file is described
below.
The Game
section contains configuration parameters in the format:
Recognised parameters are:
Background
- the background colour of the screenImagesDir
- the base directory containing the game imagesImageSet
- the name of the image set to useInitialColumn
- the x-coordinate of the leftmost column of the screen when the game startsInventoryPos
- the x, y coordinates of the inventory on screen (Back to Skool only)GameFps
- the number of frames per second at which the game should attempt to run; raise it to increase the game speed, or lower it to decrease the game speedGraphicsMode
- 0 = hi-res colour; 1 = spectrum mode, meaning just two colours (ink and paper) per 8x8-pixel blockLessonBoxPos
- the x, y coordinates of the lesson box on screenLessonLength
- the length of a lesson period in frames (see GameFps
)LessonStartTime
- when a lesson starts (i.e. teacher will tell kids to sit down) in frames (see GameFps
) from the start of the periodLogoPos
- the x, y coordinates of the logo on screenMaxLines
- the maximum number of lines Eric may accumulate before being expelledMouseInventoryPos
- the x, y coordinates of the mouse inventory on screen (Back to Skool only)Name
- the name of the gameQuickStart
- 0 to scroll the skool into view and play the theme tune (as in the original games); 1 to skip this sequenceScale
- the scale factor to use for graphics; 1 = original Spectrum sizeScoreBoxAttribute
- the attribute value (bright/ink/paper) for the score boxScoreBoxPos
- the x, y coordinates of the score/lines/hi-score box on screenScoreBoxXOffset
- used for positioning text in the score boxScrollFps
- the number of frames per second at which the screen should be scrolled (when the game starts and during play); raise it to make the screen scroll faster, or lower it to scroll more slowlySoundsDir
- the base directory containing the sound samples
Each line in the Images
section takes the form:
where imageId
is the unique ID of an image, and path
is the location of the
corresponding image file on disk (relative to the ImagesDir
directory declared
in the [Game] section). Recognised image IDs and the images they refer to are:
FONT
: the skool fontINVENTORY
: mouse, frog, water pistol etc. (Back to Skool only)LOGO
: the logoMUTABLES
: doors, windows etc. (Back to Skool) or shields and safe (Skool Daze)MUTABLES_INK
: doors, windows etc. (Back to Skool only)MUTABLES_PAPER
: doors, windows etc. (Back to Skool only)SCOREBOX
: , the score/lines/hi-score boxSKOOL
: the skool (full colour)SKOOL_INK
: the skool (ink colours only)SKOOL_PAPER
: the skool (paper colours only)SPEECH_BUBBLE
: speech bubble and lipSPRITES
: the characters in various 'animatory states'
Each line in the Sounds
section takes the form:
where soundId
is the unique ID of a sound sample, and path
is the location of
the sound sample on disk (relative to the SoundsDir
directory declared in the
[Game] section). Recognised sound sample IDs and the samples they refer to are:
BELL
: the bellCATAPULT
: catapult being firedKNOCKED_OUT
: Eric being decked or knocked out of his chairLINES1
: lines screech 1LINES2
: lines screech 2WALK0
: Eric walking (1)WALK1
: Eric walking (2)WALK2
: Eric walking (3)WALK3
: Eric walking (4)TUNE
: opening tuneALL_SHIELDS
: Eric has hit all the shields or opened the safe (Skool Daze only)SHIELD
: Eric has hit a shield (Skool Daze only)BINGO
: Eric has (a) found the water pistol, (b) found stinkbombs, (c) kissed his girlfriend, (d) got the Science Lab storeroom key, (e) released the bike, (f) caught the frog, or (g) got the frog in the cup in the girls' skool (Back to Skool only)MOUSE
: Eric has caught a mouse (Back to Skool only)CONKER
: Eric has knocked out Albert with a conker (Back to Skool only)SHERRY
: Eric has filled the water pistol with sherry (Back to Skool only)SAFE_KEY
: Eric has got the safe key (Back to Skool only)UP_A_YEAR
: Eric has got his report back in the safe (Back to Skool only)
The [SpriteGroup *]
section names take the form:
where spriteGroupId
is a unique ID for a group of sprites in sprites.png
(see
Graphics) - such as BOY
for the little boys, or TEARAWAY
for the Tearaway.
The unique ID can be anything you like; it is used only in the [Characters]
section later on to link a character to a specific group of sprites.
Each line in a SpriteGroup
section represents a single sprite from sprites.png
and takes the form:
where spriteId
is the descriptive ID for the sprite (unique within the
section), and index
is the index of the sprite as it appears in sprites.png
.
Recognised sprite IDs and their meanings are:
WALK0
: standing/walking (1) - all charactersWALK1
: midstride (1) - all charactersWALK2
: standing/walking (2) - all charactersWALK3
: midstride (2) - all charactersSITTING_ON_CHAIR
: sitting on a chair - kidsSITTING_ON_FLOOR
: sitting on the floor - kidsKNOCKED_OUT
: lying flat on back - kidsKNOCKED_OVER
: sitting on floor holding head - adultsARM_UP
: arm up (as if writing or opening door) - Eric, the Tearaway, the Heroine and teachersHITTING0
: hitting (1) - Eric and the BullyHITTING1
: hitting (2) - Eric and the BullyCATAPULT0
: firing catapult (1) - Eric and the TearawayCATAPULT1
: firing catapult (2) - Eric and the TearawayRIDING_BIKE0
: riding bike (1) - EricRIDING_BIKE1
: riding bike (2) - EricWATERPISTOL
: shooting water pistol - EricBENDING_OVER
: bending over - EricKISSING_ERIC
: kissing Eric - the HeroineFLY
: catapult pellet in flightRUN
: mouseSIT
: frog sittingHOP1
: frog hopping (phase 1)HOP2
: frog hopping (phase 2)WATER0
: water fired from a pistol (phase 1)WATER1
: water fired from a pistol (phase 2)WATER2
: water fired from a pistol (phase 3)WATER3
: water fired from a pistol (phase 4)WATER4
: water fired from a pistol (phase 5)STINKBOMB
: stinkbomb cloudDESK_EMPTY
: desk lid (empty desk)DESK_STINKBOMBS
: desk lid (with stinkbombs)DESK_WATER_PISTOL
: desk lid (with water pistol)PLANT_GROWING
: plant (half-grown)PLANT_GROWN
: plant (fully grown)BIKE_ON_FLOOR
: bike resting on the floorBIKE_UPRIGHT
: bike uprightWATER_DROP
: drop of water (knocked from a cup)SHERRY_DROP
: drop of sherry (knocked from a cup)CONKER
: conker
Each line in the Characters
section takes the form:
and corresponds to a single character, where:
characterId
is the character's unique ID (which should be alphanumeric and is used to refer to the character in other parts of the ini file)name
is the character's name (as displayed in the game), and title
(if supplied) is the name used by the Swot to address the characterspriteGroupId
is the ID of the sprite group to use for the characterinitialAnimatoryState
is the character's initial animatory state(x, y)
are the character's initial coordinatesflags
is a string of flags defining the character's abilities and vulnerabilities
The initial animatory state takes form "Ln" or "Rn", where "L" means
facing left, "R" means facing right, and n is the index of the WALKn
sprite (see [SpriteGroup *]).
Recognised flags and their meanings are:
A
- is an adultB
- belongs in the boys' skoolC
- can be knocked over by a conker (see also 'Z
')D
- can open doors and windowsE
- responsible for expelling EricF
- can be knocked out by a fistG
- belongs in the girls' skoolH
- responsible for fetching Eric when he's trying to escapeK
- holds the key to the safeL
- can give linesM
- is scared of miceN
- can smell stinkbombs (and will open a nearby window if possible)P
- can be knocked over by a catapult pelletR
- can receive linesS
- holds a safe combination letterT
- is a teacher (i.e. conducts classes)W
- usually walks (unlike kids who sometimes run)X
- holds a bike combination digitY
- holds a storeroom door combination letterZ
- will be temporarily paralysed if struck by a falling conker (see also 'C
')
The Eric
section describes our hero, Eric. It contains a single line in the
format:
where:
characterId
is Eric's unique ID (which should be alphanumeric)name
is Eric's namespriteGroupId
is the ID of the sprite group to use for EricinitialAnimatoryState
is Eric's initial animatory state(x, y)
are Eric's initial coordinatesflags
is a string of flags defining Eric's abilities and vulnerabilitiesFor a description of the format of the initial animatory state and the available flags, see [Characters].
Each line in the CatapultPellets
section takes the form:
where:
characterId
is the unique ID of the catapult-wielding characterspriteGroupId
is the ID of the sprite group to use for the pelletcommandListId
is the unique ID of the command list that the pellet will userange
is the distance the pellet will fly after being launchedhitZone
is the size of the interval at the end of the pellet's flight where it can knock a character overEach character whose unique ID appears in this section will be fitted out with a catapult. In the stock Pyskool this will be Eric and the Tearaway - the only characters with catapult-firing sprites.
The WaterDrop
section defines a drop of water (as knocked out of a cup by a
catapult pellet). It contains a single line of the form:
where:
objectId
is a unique ID for the drop of waterspriteGroupId
is the ID of the sprite group to use for the drop of watercommandListId
is the unique ID of the command list that the drop of water will use when knocked out of a cup
The WaterDrop
section appears only in back_to_skool.ini
.
The SherryDrop
section defines a drop of sherry (as knocked out of a cup by a
catapult pellet). It contains a single line of the form:
where:
objectId
is a unique ID for the drop of sherryspriteGroupId
is the ID of the sprite group to use for the drop of sherrycommandListId
is the unique ID of the command list that the drop of sherry will use when knocked out of a cup
The SherryDrop
section appears only in back_to_skool.ini
.
The Conker
section defines a conker (as knocked out of the tree by a catapult
pellet). It contains a single line of the form:
where:
objectId
is a unique ID for the conkerspriteGroupId
is the ID of the sprite group to use for the conkercommandListId
is the unique ID of the command list that the conker will use when knocked out of the treeminX
, maxX
, minY
and maxY
define the rectangle inside the tree that contains the conker; a pellet that hits a spot in that rectangle will cause a conker to fall
The Conker
section appears only in back_to_skool.ini
.
Each line in the Water
section takes the form:
where:
characterId
is the unique ID of the character to give water pistol-firing ability tospriteGroupId
is the ID of the sprite group to use for the water fired from the pistolcommandListId
is the unique ID of the command list that the water will use when fired from the pistolEach character whose unique ID appears in this section will be given the ability to fire a water pistol. In the stock Pyskool this will be Eric alone; he is the only character with a water pistol-firing sprite.
The Water
section appears only in back_to_skool.ini
.
Each line in the Stinkbombs
section takes the form:
where:
characterId
is the unique ID of the character to give stinkbomb-dropping ability tospriteGroupId
is the ID of the sprite group to use for the stinkbomb when droppedcommandListId
is the unique ID of the command list that the stinkbomb will use when droppedEach character whose unique ID appears in this section will be given the ability to drop a stinkbomb. In the stock Pyskool this will be Eric.
The Stinkbombs
section appears only in back_to_skool.ini
.
Each line in the Mice
section takes the form:
where:
mouseId
is the unique ID of the mousespriteGroupId
is the ID of the sprite group to use for the mouseinitialAnimatoryState
is the mouse's initial animatory stateinitialLocation
is the mouse's initial coordinates (in (x, y)
form)commandListId
is the unique ID of the command list that the mouse will useAny mouse defined in this section will be catchable by ERIC, and show up in the on-screen mouse inventory when caught.
The Mice
section appears only in back_to_skool.ini
.
Each line in the Frogs
section takes the form:
where:
frogId
is the unique ID of the mousespriteGroupId
is the ID of the sprite group to use for the froginitialAnimatoryState
is the frog's initial animatory stateinitialLocation
is the frog's initial coordinates (in (x, y)
form)commandListId
is the unique ID of the command list that the frog will useAny frog defined in this section will be catchable by ERIC, and show up in the on-screen inventory when caught.
The Frogs
section appears only in back_to_skool.ini
.
The Bike
section contains a single line of the form:
where:
bikeId
is the bike's IDspriteGroupId
is the ID of the sprite group to use for the bikeinitialAnimatoryState
is the bike's initial animatory stateinitialLocation
is the bike's initial coordinates (in (x, y)
form) after being unchainedcommandListId
is the unique ID of the command list that the bike will usetopLeft
is the coordinates (in (x, y)
form) of the top left of the image of the base of the tree with no bike attachedsize
is the size of the image (in (width, height)
form)coords
are the coordinates (in (x, y)
form) of the mutable image in the play area
The bike images can be found in mutables.png
(or mutables_ink.png
and
mutables_paper.png
if GraphicsMode
is 1 - see Graphics). mutables.png
is
arranged so that the image of the bike attached to the base of the tree is at
(x + width, y)
, where (x, y)
are the coordinates of the image of the base
of the tree with no bike attached. These two images are the same size.
The Bike
section appears only in back_to_skool.ini
.
The Timetable
section contains an ordered list of lesson IDs. Lessons happen
starting with the first in the list, and proceed one by one to the end of the
list. When the last lesson in the list is finished, the game loops back round to
the first lesson in the list.
An example of a lesson ID is Creak-BlueRoom-1
, which refers to the first of
a set of lessons in which Eric and the Swot are taught by Mr Creak in the Blue
Room. The lesson ID could be anything, but it's helpful to make it descriptive.
A lesson can be thought of as a set of entries from the personal timetables
of the characters. These sets of entries can be found in the [Lesson *]
sections, described below.
The SpecialPlaytimes
section is used only in skool_daze.ini
, and contains a
list of lesson IDs that refer to playtimes which will be considered "special".
A special playtime does not appear in the timetable proper (though you could
insert it), but three times out of eight a random special playtime is
substituted for an actual playtime timetable entry. In the stock skool_daze.ini
the SpecialPlaytimes
section looks like this:
Thus, three playtimes out of every eight in Skool Daze mode will be one of those where you have to steer clear of the pestilential Bully, prevent the Swot from reaching the head's study, or fix the race to the fire escape between the Tearaway and the headmaster.
The [Lesson *]
section names take the form
if the lesson will take place with a teacher in a classroom or the dinner hall, or
if the lesson is an unsupervised period, where:
lessonId
is the lesson ID as it appears in the [Timetable] sectioncharacterId
is the character ID of the teacher taking Eric's class (prefixed by '*' if the teacher's name should not be printed in the lesson box, as during DINNER)roomId
is the ID of the room in which Eric's class will take placelocationId
is one of PLAYTIME
, REVISION LIBRARY
, and ASSEMBLY
Each line in a [Lesson *]
section takes the form
where characterId
is the unique ID of a character (see [Characters]), and
commandListId
is the ID of the 'command list' that will control the character's
movements during the lesson. A command list is a sequence of commands - such as
GoTo
or FindSeat
- that make a character appear intelligent (kind of). See
[CommandList *] for more details.
In any [Lesson *]
section there should be one line for each character
defined in the [Characters]
section.
The RandomLocations
section contains lists of suitable locations for the
characters to visit when they go on walkabouts (e.g. during playtime). Each
line takes the form:
where characterId
is the character's unique ID (see [Characters]), and
(x1, y1)
and so on are the coordinates of locations in the skool. There must
be at least one pair of coordinates per line, and there should be one line for
each character defined in the [Characters]
section.
The SkoolLocations
section contains a list of descriptive IDs for commonly used
locations in the skool. These descriptive IDs are used by the GoTo command
in the command lists that control the characters (see [CommandList *]). Each
line in this section takes the form:
where locationId is the descriptive ID, and x
and y
are the coordinates of the
location. An example of a location ID is BlueRoomDoorway
, which means exactly
what you think it means.
Each line in the Inventory
section takes the form:
where:
itemId
is the unique ID of an item that can be collectedtopLeft
is the coordinates (in (x, y)
form) of the top left of the image of the item in inventory.png
size
is the size of the image (in (width, height)
form)The item IDs recognised by Pyskool are as follows:
SAFE_KEY
- the key to the head's safeSTOREROOM_KEY
- the key to the science lab storeroomFROG
- a frogWATER_PISTOL
- a water pistol (containing water)SHERRY_PISTOL
- a water pistol (containing sherry)STINKBOMBS3
- three stinkbombsSTINKBOMBS2
- two stinkbombsSTINKBOMBS1
- one stinkbombMOUSE
- a mouse
The order in which the items appear in the Inventory
section determines the
order in which they will be printed in the on-screen inventory.
See also the Mice and Frogs sections (for details on those
animals), and the InventoryPos
and MouseInventoryPos
game configuration
parameters in the Game section.
The Inventory
section appears only in back_to_skool.ini
.
The [CommandList *]
section names take the form
where commandListId
is a descriptive unique ID for the list of commands that
follows. These unique IDs are used in the [Lesson *]
sections: for each type
of lesson there is, every character is assigned a single command list to follow.
One example of a command list is:
This command list is used occasionally by the headmaster; it makes him repeatedly go to one of his random locations and then back to his study.
Each line in a command list takes the form of the command name followed by a comma-separated list of arguments. See the command reference for more details on the commands that may be used to control a character.
The Rooms
section contains one line for each room or region in the skool that
Eric will be expected to show up at when the timetable requires it. Each line
takes the form:
where:
roomId
is the room's unique IDname
is the room's name (as displayed in the lesson box at the bottom of the screen)y
is the room's y-coordinate (3 = top floor, 10 = middle floor)minX
and maxX
are the x-coordinates of the left and right ends of the roomgetAlong
is 'Y' if Eric should get lines for being in the room when the timetable does not require his presence
The Chairs
section contains one line for each classroom in the skool. Each line
takes the form:
where roomId
is the classroom's unique ID (see [Rooms]), and x1
, x2
and
so on are the x-coordinates of the chairs in the classroom.
The Desks
section contains one line for each classroom in the skool. Each line
takes the form:
where roomId
is the classroom's unique ID (see [Rooms]), and x1
, x2
and
so on are the x-coordinates of the desks in the classroom.
The Desks
section appears only in back_to_skool.ini
.
The DeskLid
section contains a single line of the form:
where:
spriteGroupId
is the ID of the sprite group to use for the desk lid when raisedcommandListId
is the unique ID of the command list that the desk lid will use when raised
The DeskLid
section appears only in back_to_skool.ini
.
The Doors
section contains details of the doors in the game. Each line takes
the form:
where:
doorId
is the door's unique IDx
is the door's x-coordinatebottomY
and topY
are the y-coordinates of the bottom and top of the doorinitiallyShut
is 'Y' if the door should be shut when the game startsautoShuts
is 'Y' if the door should swing shut after a short timeshutTopLeft
is the coordinates (in (x, y)
form) of the top left of the image of the door when shutsize
is the size of the image (in (width, height)
form)coords
are the coordinates (in (x, y)
form) of the door in the skool
The door images can be found in mutables.png
(or mutables_ink.png
and
mutables_paper.png
if GraphicsMode
is 1 - see Graphics). mutables.png
is
arranged so that the image of a door when open is at (x + width, y)
, where
(x, y)
are the coordinates of the image of the same door/window when shut.
The open/shut images for any given door are the same size.
The Doors
section appears only in back_to_skool.ini
.
The Windows
section contains details of the windows in the game. Each line
takes the form:
where:
windowId
is the window's unique IDx
is the window's x-coordinatebottomY
and topY
are the y-coordinates of the bottom and top of the windowinitiallyShut
is 'Y' if the window should be shut when the game startsopenerCoords
are the coordinates (in (x, y)
form) at which a character should stand in order to open the windowshutTopLeft
is the coordinates (in (x, y)
form) of the top left of the image of the window when shutsize
is the size of the image (in (width, height)
form)coords
are the coordinates (in (x, y)
form) of the window in the skool
The window images can be found in mutables.png
(or mutables_ink.png
and
mutables_paper.png
if GraphicsMode
is 1 - see Graphics). mutables.png
is
arranged so that the image of a window when open is at (x + width, y)
,
where (x, y)
are the coordinates of the image of the same window when shut.
The open/shut images for any given window are the same size.
The Windows
section appears only in back_to_skool.ini
.
The Walls
section contains details of the impenetrable barriers in the skool.
Each line takes the form:
where:
wallId
is the wall's unique IDx
is the wall's x-coordinatebottomY
and topY
are the y-coordinates of the bottom and top of the wallFor example:
defines the wall at the far left (x=0) of the skool, which stretches from the bottom floor (y=20) to the ceiling of the top floor (y=0).
The Staircases
section contains details of the staircases in the skool. Each
line takes the form:
where:
staircaseId
is the staircase's unique IDalias
is an optional alias for the staircase (also unique)bottom
and top
are the coordinates of the bottom and top of the staircase (in (x, y)
form)force
, if present, indicates that the staircase must be climbed or descended by Eric if he moves to a location between the bottom and the top
In the stock Pyskool, force
is used only for the staircase in Back to Skool
that leads down to the assembly hall stage; it's the only staircase that you
must go up or down if you approach it.
An example of a line from the Staircases
section is:
which defines the staircase that leads up to the head's study in Back to Skool.
This staircase's unique ID is UpToStudy
, but it can also be referred to as
DownFromStudy
. These unique IDs and aliases are used later on in the
[Routes] section.
The Floors
section contains details of the "floors" in the skool. A "floor"
(note the quotes) is a region of the skool that cannot be reached from another
region of the skool without navigating a staircase. For example, in Skool Daze,
the region to the left of the Map Room wall is one floor, and the region to the
right of the Map Room wall is another floor. You can't get from one to other
without going up or down a staircase (walking through walls is prohibited).
Each line in this section takes the form:
where:
floorId
is the floor's unique IDminX
and maxX
are the x-coordinates of the left and right limits of the floory
is the y-coordinate of the floor (3 = top floor, 10 = middle floor, 17 = bottom floor)The unique IDs are used in the [Routes] section.
The Routes
section is one of the most important sections in the ini file. It
defines the routes (a route may be considered as a list of staircases) that the
characters must take to get from where they are to wherever they are going. Any
errors here will result in the characters wandering aimlessly around the skool,
unable to find classrooms, the playground, or the toilets. Disaster!
Anyway, each line in this section takes the form:
where:
homeFloorId
is the unique ID of one floor (see [Floors]) - the "home" floordestFloorId
is the unique ID of another floor (see [Floors]) - the destination floornextStaircaseId
is the unique ID of the staircase (see [Staircases]) that must be climbed or descended first on a journey from the home floor to the destination floorHow this works is best illustrated by example. Let's look at the routes defined for the bottom floor in Back to Skool to everywhere else in the skool:
The first line says that to get from the bottom floor (Bottom
) to the floors
called LeftMiddle
and LeftTop
(see [Floors]), the first staircase you need to
navigate is UpToToilets
(see [Staircases]). The second line says that to get
from the bottom floor to the middle floor (GirlsMiddle
) or top floor
(GirlsTop
) in the girls' skool, you need to use the GirlsSkoolLower
staircase first. The third line says that to get anywhere else (*
) from the
bottom floor, you need to take the stairs up to the stage (UpToStage
).
Each line in the NoGoZones
section corresponds to a region of the skool Eric is
never supposed to enter. The lines take the form:
where zoneId
is a descriptive name for the zone (not used anywhere else), minX
and maxX
are the lower and upper x-coordinates of the zone, and bottomY
and
topY
are the y-coordinates of the bottom and top of the zone. Whenever Eric is
spotted in one of these zones by a teacher, the GET_OUT
lines message will be delivered in screeching tones.
The SitDownMessages
section contains one line for each teacher of the form:
where characterId
is the teacher's unique ID (see [Characters]), and
sitDownMessage
is what the teacher says at the start of a lesson. For
example:
The CharacterWidths
section is used to determine the location and size of the
font bitmaps in the font.png
graphic. Each line takes the form:
where char
is the font character (e.g. f
, @
, !
), offset
is the font
character's distance in pixels from the left of the image, and width
is its
width in pixels.
The AssemblyMessages
section contains all the information required to build
a message used by the headmaster during assembly in Back to Skool. There are
three types of entry in this section:
which defines the template for the assembly message, and:
which define the verbs and nouns to substitute into the message template. There must be at least one verb and one noun; they are chosen at random to form the message.
The AssemblyMessages
section appears only in back_to_skool.ini
.
The Blackboards
section defines the blackboards in the classrooms. Each line
takes the form:
where roomId
is the classroom's unique ID (see [Rooms]) and x
and y
are the
coordinates of the top left corner of the blackboard.
The BlackboardMessages
section contains a list of messages written on the
blackboard by the teachers or the tearaway. Each line in this section takes the
form:
where characterId
is the unique ID of the teacher or the tearaway, and message
is the message.
There are two special characters used in the blackboard messages: '^' and '$'. '^' represents the newline character, and '$' is used to prefix the unique ID of a character, as in:
where $WACKER
will be replaced by whatever name has been given to the
character whose unique ID is WACKER
(see [Characters]).
The [QuestionsAndAnswers *]
section names take the form
where characterId
is the unique ID of a teacher (see [Characters]).
There are at least three types of entry in a [QuestionsAndAnswers *]
section.
The first type of entry is the Question
entry:
where:
questionId
is a unique (within the section) ID for the questiongroupId
is the ID of the group of QAPairs (see below) the question is associated withquestionTemplate
is the question template
There should be at least one Question
entry in a [QuestionsAndAnswers *]
section.
The second type of entry is the Answer
entry:
where questionId
is the ID of the question to which this is the answer, and
answerTemplate
is the answer template. There should be one Answer
entry for
each Question
entry in a [QuestionsAndAnswers *]
section.
The third type of entry in this section is the QAPair
entry:
where groupId
is the ID of the group of QAPairs to which this particular QAPair
belongs, and qa1
and qa2
are the words that will replace the macros in
question-template
and answer-template.
There should be at least one QAPair
entry per [QuestionsAndAnswers *]
section (and ideally many more than one, to
prevent the question-and-answer sessions between teachers and the Swot from
being rather monotonous).
The optional fourth type of entry in a [QuestionsAndAnswers *]
section
consists of three lines:
and is used to define the "special" question Eric will need the answer to in
order to obtain the relevant teacher's safe combination letter. The
SpecialQuestion
keyword is followed by the text of the special question (which
will be posed by the teacher at the start of the lesson). The SpecialAnswer
keyword is followed by the text of the Swot's answer to the special question
(which will contain a macro to be expanded). The SpecialGroup
keyword is
followed by groupId
(which specifies the ID of the group of QA Pairs from which
the "magic word" will be taken), and qaPairIndex
(which is 0 or 1, and refers
to which element of the QAPair will be the magic word). Once Eric has figured
out what the magic word is, he will need to write it on a blackboard and hope
that the teacher sees it while all the shields are flashing, whereupon the
teacher will reveal his safe combination letter.
If the SpecialQuestion,
SpecialAnswer
and SpecialGroup
lines are not present,
there will be no magic word associated with the teacher. In that case, simply
knocking the teacher over with a catapult pellet will make him reveal his safe
combination letter.
The LinesMessages
section contains a list of admonitions delivered by
lines-givers when Eric has been spotted doing something he shouldn't. Each line
in this section takes the form:
where
characterId
is the unique ID of the lines-giving characterlinesMessageId
is the unique ID of the following messagelinesMessage
is the admonition itself
If *
is used instead of a character ID, the lines message will be used by all
lines-givers (unless they have been explicitly assigned a lines message with the
same lines message ID). For example:
would make Mr Withit scream "BE GENTLE NOW" whenever he sees Eric throwing a punch, whereas every other teacher would scream "DON'T HIT YOUR MATES" instead.
A lines message always spans two lines on-screen. A caret (^)
is used to
indicate where the words should be wrapped.
Lines message IDs used in both Skool Daze and Back to Skool are:
GET_OUT
- Eric's somewhere that only staff are allowed to beGET_ALONG
- Eric is not in class when he should beSIT_DOWN
- Eric is not sitting down in classGET_UP
- Eric is sitting on the floorCOME_ALONG_1
- the truant Eric is being guided to the classroomCOME_ALONG_2
- the truant Eric is still being guided to the classroomNEVER_AGAIN
- teacher thinks Eric knocked him downNO_TALES
- the Swot gets his just desertsBE_PUNCTUAL
- Eric was late for classSTAY_IN_CLASS
- Eric popped out of class and then returnedNO_WRITING
- Eric mustn't write on blackboardsNO_CATAPULTS
- catapults are forbiddenNO_HITTING
- as is beating up the other kidsLines message IDs used only in Skool Daze are:
NO_SITTING_ON_STAIRS
- sitting on stairs is not allowed in Skool DazeCOME_ALONG_3
- the truant Eric still hasn't made it to the classroomNO_JUMPING
- jumping is not allowed in Skool DazeLines message IDs used only in Back to Skool are:
GET_OFF_PLANT
- standing on plants is not goodNO_BIKES
- riding bikes inside the skool is also not goodBACK_TO_SKOOL
- Eric should be in the boys' skool, not the girls'SIT_FACING_STAGE
- Eric needs to face the headmaster during assemblyNO_STINKBOMBS
- stinkbombs are prohibitedNO_WATERPISTOLS
- as are water pistols
The lines message IDs are used internally, and should not be changed. If a
particular lines message ID is missing from the list, then lines will not be
given for the infraction it refers to. So if there were no entry in the
LinesMessages
section with the lines message ID 'NO_HITTING
', no lines would
ever be dished out for hitting.
The LessonMessages
section contains a list of messages that will be used by
teachers who are not teaching Eric, or teachers who are teaching Eric but have
chosen not to do a question-and-answer session. Each line in the section takes
the form:
where:
characterId
is the unique ID of a teacherlessonMessage
is the message to add to that teacher's repertoirecondition
is a condition identifier that must evaluate to true before the message can be used
If *
is used instead of a specific character ID, the message will be placed in
every teacher's repertoire. The message may contain the character sequence
'$n
', which will be replaced by a random number between 100 and 999. The only
recognised condition identifier is:
BoardDirty
which, if specified, means the message will be used only if the blackboard (if there is one) has been written on. Any other condition identifier will evaluate to true.
The Shields
section contains information about shields (of which there are 15
in Skool Daze, and none in Back to Skool). Each line describes a single shield,
and takes the form:
where x
and y
are the shield's coordinates, score
is the number of points
awarded for making the shield flash or unflash, and imageIndex
is the index of
the shield's pair of images in mutables.png
(which are used to make the shield
flash).
The Shields
section appears only in skool_daze.ini
.
The Safe
section contains a single line of the form:
where x
and y
are the safe's coordinates, and score
is the number of points
awarded for opening the safe. If imageIndex
is present, it is taken to be the
index of the safe's pair of images in mutables.png
; these images will be
used to make the safe flash when it is opened (which happens only in Skool
Daze).
The Cups
section contains information about cups (of which there are four in
Back to Skool, and none in Skool Daze). Each line describes a single cup, and
takes the form:
where:
cupId
is the unique ID of the cupemptyTopLeft
is the coordinates (in (x, y)
form) of the top left of the image of the cup when emptysize
is the size of the image (in (width, height)
form)coords
are the coordinates (in (x, y)
form) of the cup in the skool
The cup images can be found in mutables.png
(or mutables_ink.png
and
mutables_paper.png
if GraphicsMode
is 1 - see Graphics). mutables.png
is
arranged so that the image of a cup when it contains water is at
(x + width, y)
, and the image of a cup when it contains sherry is at
(x + 2 * width, y)
(where (x, y)
are the coordinates of the image of the
cup when empty). The three images for any given cup are the same size.
The Cups
section appears only in back_to_skool.ini
.
The Plants
section contains information about plants (of which there are four
in Back to Skool, and none in Skool Daze). Each line describes a single plant,
and takes the form:
where:
plantId
is the unique ID of the plantspriteGroupId
is the ID of the sprite group to use for the plantx
and y
are the coordinates of the plant (when it is growing or has grown)commandListId
is the unique ID of the command list that the plant will use when watered
The Plants
section appears only in back_to_skool.ini
.
The Grass
section contains five lines of the form:
The information in this section is used by the Swot to determine who can be blamed for hitting him or writing on a blackboard, and what to say when telling tales.
The Writers
line contains a comma-separated list of IDs of characters who can
be blamed for writing on a blackboard. The WriteTale
line contains the text of
the blackboard-writing tale.
The Hitters
line contains a comma-separated list of IDs of characters who can
be blamed for hitting the Swot. The HitTale
line contains the text of the
so-and-so-hit-me tale.
The AbsentTale
line contains the text that will be spoken by the Swot when he's
telling on Eric for being absent during class.
The text of a tale may contain '$TITLE
' (which will be replaced by the
teacher's title, as defined in the [Characters] section), '$1
' (which will be
replaced by the name of the hitter or writer chosen from the Hitters
or
Writers
list), or '$
' (where characterId
characterId
is the unique ID of
any character, and which will be replaced by the name of that character).
The SkoolMessages
section is a dumping ground for messages that have no
obvious home anywhere else. Each line takes the form:
where messageId
is a unique message ID, and message
is the message text.
Currently, the only recognised message ID is:
NEXT_YEAR
- message printed in the lesson box when Eric has completed the game and advanced a yearThe [CommandList *] sections contain commands and parameters that control the characters. Brief descriptions of the commands used in these command lists follow. Unless specified otherwise, commands are used in both Back to Skool and Skool Daze.
The AddLines
command is used in the command lists GrassOnEric-Wacker
and
HiddenPeaShooter-Wacker
(Skool Daze only) to add to Eric's lines total after he
has been found guilty of misdeeds. The number of lines to be added to the total
is specified by the command's sole argument.
The AwaitAssemblyTime
command is used in the command list Assembly-Wacker
(Back to Skool only). It makes the headmaster return to the start of the command
list unless it's time to go down to the stage for assembly. The command takes no
arguments.
The Catch
command is used internally to control Eric while he's trying to
catch a mouse or frog. It makes Eric bend over, checks to see whether an animal
is present (and if it is, adds it to the appropriate inventory), and then makes
Eric stand up. The command takes no arguments.
The ChaseEricOut
command is used in the ChaseEricOut-Take
command list in
Back to Skool. It controls Miss Take as she chases Eric, with the intent of
making him leave the girls' skool and return to the boys'. It is very similar
to the ShadowEric command, except that it makes the headmistress go no further
than the skool gate.
The ChaseEricOut-Take
command list takes control of Miss Take whenever the
MonitorEric command deems it necessary for Miss Take to abandon her regular
skool duties and start hounding our hero.
The CheckIfTouchingEric
command is used in the command list
MumpsWalkabout-Bully
(Skool Daze only), which is used by the Bully when he has
mumps. It checks whether the Bully is touching Eric, and alerts whichever
teacher is following the YouHaveMumps-Teacher command list (Mr Rockitt by
default) if necessary. The command takes no arguments.
The ClimbOverSkoolGate
command is used internally to control Eric when he is
stepping off a fully grown plant over the closed skool gate. It guides him over
the gate and down to the ground on the other side.
The ConductAssembly
command is used in the command list Assembly-Wacker
(Back
to Skool only). It makes the headmaster tell the kids they're in detention. The
command takes no arguments.
The ConductClass
command is used in the following command lists:
MapRoom-Teacher
ReadingRoom-Teacher
ExamRoom-Teacher
WhiteRoom-Teacher
UpperRoom-Teacher
MiddleRoom-Teacher
BlueRoom-Teacher
YellowRoom-Teacher
ScienceLab-Teacher
It controls a teacher from the point where he reaches the edge of the blackboard. If the teacher is teaching Eric, it makes the teacher wait until the Swot shows up, and then hands over control to ConductClassWithEric. Otherwise it immediately hands over control to the ConductClassWithoutEric.
The ConductClassWithEric
command is used internally to control a teacher who
is teaching Eric and the Swot. It takes over control from the ConductClass
command as soon as the Swot shows up and sits down. It's responsible for making
the teacher:
The ConductClassWithoutEric
command is used internally to control a teacher
who is teaching a class that does not contain Eric and the Swot. It takes over
control from the ConductClass command immediately. It controls a teacher from
the point where he reaches the edge of the blackboard and is responsible for
making him:
The Dethroned
command is used internally to control a character who has been
pushed out of his seat in class. It makes him sit stunned on the floor for a
brief period, then stand up, after which it's up to the FindSeat command to
reseat him. The Dethroned
command takes no arguments.
The DoAssemblyDuty
command is used in the AssemblyDuty
command list (Back to
Skool only) to control Mr Withit as he does assembly duty. It makes Mr Withit
do nothing (i.e. stand still) unless Eric is absent from the assembly hall, in
which case it hands over control to the FetchEric command; when that command
exits, the command list is restarted. The DoAssemblyDuty
command itself exits
when assembly is over (i.e. Mr Wacker has finished speaking).
The DropStinkbomb
command is used internally to make a stinkbomb-carrying
character (i.e. Eric) drop a stinkbomb (Back to Skool only). It takes no
arguments.
The DumpWaterPistol
command is used internally to make Eric throw away the
water pistol. The water pistol will be relocated in a random desk, and will
contain water (as opposed to sherry). The command takes no arguments.
The EndGame
command is used in the following command lists:
ExpelEric:TooManyLines
YouHaveMumps-Teacher
(Skool Daze only)ExpelEric:NotABird
(Back to Skool only)Unsurprisingly, the command ends the game.
The EvadeMouse
command is used internally to control a character who is scared
of mice and has spotted one nearby. It makes the character either jump up and
down or stand on a chair. The command takes no arguments.
The Fall
command is used in the WaterDrop
, SherryDrop
and Conker
command lists (Back to Skool only) to control the descent of a drop of water or
sherry from a cup, or the descent of a conker from a tree. Until the object
has been knocked out of its resting place, the command does nothing. Otherwise,
it guides the object to the floor, and interacts appropriately with any
character it hits. After the object has hit somebody or the floor, it is
hidden from view. The Fall
command takes no arguments.
The FallToFloor
command is used internally to control Eric's descent to the
floor (upon which he may land either sitting or standing). It is invoked in the
following situations:
The FetchEric
command is used internally by the ConductClassWithEric command
to make a teacher track down the truant Eric and shepherd him back to the
classroom. It takes no arguments.
The FindEric
command is used in the following command lists:
ExpelEric:TooManyLines
ExpelEric:NotABird
(Back to Skool only)BullyHasMumps-Boy
(Skool Daze only)GrassOnEric-Boy
(Skool Daze only)GrassOnEric-Wacker
(Skool Daze only)HiddenPeaShooter-Boy
(Skool Daze only)HiddenPeaShooter-Wacker
(Skool Daze only)YouHaveMumps-Teacher
(Skool Daze only)
The command is used to make a character look for Eric (to give him a message);
it also stops the skool clock (which can be restarted later on with a SetClock
command) to allow Eric to be found before the bell rings. When Eric has been
found, he is frozen so that he has no choice but to listen to the message.
FindEric
takes no arguments.
The FindEricIfMissing
command is used in the command list DinnerDuty
. It
makes whichever teacher is on dinner duty go and look for Eric if he's not in
the dinner hall.
The FindSeat
command is used in the following command lists in Skool Daze:
ExamRoom-Boy
ExamRoom-Bully
ExamRoom-Swot
ExamRoom-Tearaway
MapRoom-Boy
MapRoom-Bully
MapRoom-Swot
MapRoom-Tearaway
ReadingRoom-Boy
ReadingRoom-Bully
ReadingRoom-Swot
ReadingRoom-Tearaway
WhiteRoom-Boy
WhiteRoom-Bully
WhiteRoom-Swot
WhiteRoom-Tearaway
and the following command lists in Back to Skool:
BlueRoom-Boy
BlueRoom-Bully
BlueRoom-Swot
BlueRoom-Tearaway
MiddleRoom-Girl
ScienceLab-Boy
ScienceLab-Bully
ScienceLab-Swot
ScienceLab-Tearaway
UpperRoom-Girl
YellowRoom-Boy
YellowRoom-Bully
YellowRoom-Swot
YellowRoom-Tearaway
It makes a boy or girl find a seat in the classroom and sit down; it also makes the character find another seat if he's knocked out of one (unless the character is the Swot, who must return to the same seat to avoid having to move his speech bubble during lessons). The command takes no arguments.
The FireCatapult
command is used internally to make a catapult-carrying
character (i.e. Eric or the Tearaway) fire his catapult. It takes no arguments.
The FireNowAndThen
command is used as an argument to the SetControllingCommand
command to make the Tearaway fire his catapult occasionally. If the command
decides that the time is ripe to send a projectile whizzing through the air, it
passes control to the FireCatapult command. The FireNowAndThen
command takes
no arguments.
The FireWaterPistol
command is used internally to make a water pistol-carrying
character (i.e. Eric) fire his water pistol (Back to Skool only). It takes no
arguments.
The FlyOverSkoolGate
command is used internally to control Eric when he flying
over the closed skool gate (after hitting it while standing on the saddle of
the bike - see the RideBike command). It guides Eric over the gate and down to
the ground, upon which he will land in the sitting position.
The Follow
command is used in the command list Stampede-Follower
(Skool Daze
only). It is used by little boys 2-11 to sync their movements with those of the
stampede leader, little boy 1. (Internally it syncs destinations, and hands
over control to the GoTo command.) The command takes a single argument: the
unique ID of the character to follow.
The Freeze
command is used internally by the FindEric command to freeze Eric
once he has been found. It continually monitors the keyboard to check whether
Eric has acknowledged delivery of a message (by pressing 'U'). It is then up to
the TellEric or TellEricAndWait command to unfreeze Eric as appropriate. The
Freeze
command takes no arguments.
The GoTo
command is arguably the most important command ever in the history of
Pyskool. Without it, the characters would stay rooted to the spot, Pyskool would
be boring, and you wouldn't be reading this. Sad. Anyway, GoTo
takes a single
argument, which must be one of the following:
Location:characterId
, where characterId
is the unique ID of a character; this identifier resolves to the current location of the character with the given IDI leave it to the reader to guess what the command does.
The GoToRandomLocation
command is used in many command lists to make a
character go to one of his random locations. It takes no
arguments.
The GoTowardsXY
command is used internally to make a character turn round or
take one step in the direction of the destination x
and y
coordinates
specified in the two arguments, instead of continuing all the way to the
destination. The command is used primarily by the FindEric and FetchEric
commands, which require tracking of a moving target (our hero) rather than a
fixed destination.
The GoToXY
command is used internally to make a character go to a location
specified by an (x, y) pair of coordinates. In fact, the GoTo command resolves
its location ID parameter into an (x, y) pair of coordinates and then hands over
control to GoToXY
. Unsurprisingly, GoToXY
takes two arguments: x
and y
,
as in:
Although GoToXY
is not used explicitly in any of the stock command lists, there
is nothing to stop you using it in a command list if you wish.
The GrassAndAnswerQuestions
command is used in the following command lists in
Skool Daze:
MapRoom-Swot
ReadingRoom-Swot
ExamRoom-Swot
WhiteRoom-Swot
and the following command lists in Back to Skool:
BlueRoom-Swot
YellowRoom-Swot
ScienceLab-Swot
It makes the Swot tell tales to the teacher just before class starts, and answer the teacher's questions later. The command takes no arguments.
The Grow
command is used in the Plant
command list (Back to Skool only) to
control the growth of a plant after it has been watered. If the plant is not
growing, the command does nothing. Otherwise, it animates the plant growth, and
lifts any characters who are standing on the plant. When the plant dies, it
drops any characters who were standing on the plant, and hides it from view.
The Grow
command takes no arguments.
The Hit
command is used internally to make a fist-wielding character (i.e. Eric
or the Bully) throw a punch. It takes no arguments.
The HitNowAndThen
command is used as an argument to the SetControllingCommand
command to make the Bully throw a punch occasionally. If the command decides
that the time is ripe to send a fist whizzing through the air, it passes control
to the Hit command. The HitNowAndThen
command takes no arguments.
The Hop
command is used internally by the MoveFrog command to control the
movements of a frog as it embarks on a long hop or a short hop, or turns round.
The Jump
command is used internally to control Eric while he's jumping. It
lifts him into the air, checks to see whether he has reached a shield, a cup,
or the safe, and then lets him drop (unless there is an unconscious kid or a
plant pot below).
The JumpIfOpen
command is used in the command lists UpperRoom-Teacher
and
MiddleRoom-Teacher
(Back to Skool only) to jump back to the start of the
command list if the boys' skool door is still open. The command takes two
arguments: the unique ID of the door (see [Doors]) to check for openness, and the
number of commands to jump back or ahead, as in:
The JumpIfShut
command is used in the command list ShutGateAndDoor-Albert
(Back to Skool only) to jump ahead in the command list if the boys' skool door
or the skool gate is already shut. The command takes two arguments: the door or
gate's unique ID (see [Doors]), and the number of commands to jump ahead, as in:
The JumpOffSaddle
command is used internally to control Eric when he is
jumping off the saddle of the bike (see the RideBike command). It lifts him
into the air, checks to see whether he has reached a cup (into which a frog may
be placed), and then lets him drop to the floor.
The JumpOutOfWindow
command is used internally to control Eric when he is
stepping off a fully grown plant through an open window. It guides him through
the window and down to the ground, upon which he may land with his feet or his
back.
The Kiss
command is used internally to control Eric while he's kissing (or
trying to kiss) Hayley. If Hayley is neither facing Eric nor in front of him at
the time of the attempted kiss, Eric will take a step forward and then back
again, with no kiss scored. If Hayley is in front of Eric and facing him, one
of two things will happen: (a) Eric will score a kiss, or (b) Hayley will smack
Eric in the face (if she feels he's tried to grab one kiss too many already).
If Eric does land a kiss, his lines total will be reduced by 1000 (or to zero
if he has less than 1000 lines).
The KnockedOut
command is used internally to control a child character who has
been knocked out (by Eric, the Bully, or the Tearaway). KnockedOut
keeps the
character out cold for a brief period and then makes him stand up; after that,
the character will resume whatever he was doing before.
This command would not really be useful in a command list, but if you want to use it, go knock yourself out. (Groan. - Ed.)
The KnockedOver
command is used internally to control an adult character who
has been downed by a catapult pellet or a stampeding boy. KnockedOver
stuns the
character, makes him reveal his safe combination letter (if appropriate), also
makes him give lines to the nearest main child character (if any), and then
helps him up off the floor; after that, the character will resume whatever he
was doing before.
The MonitorEric
command is used as a subcommand (set by the SetSubcommand
command) in the following command lists in Back to Skool:
Kitchen-Teacher
MiddleRoom-Teacher
UpperRoom-Teacher
The MonitorEric
command makes Miss Take her keep an eye out for Eric in the
girls' skool when it's not playtime. If she spots him, her command list is
switched to the one named by the command's sole argument.
The MoveAboutUntil
command is used to make a character repeatedly walk a random
number of paces away from a fixed point and back again. The fixed point will be
the point the character reached before MoveAboutUntil
was invoked.
The command takes a single argument, which determines when the character should proceed to the next command in his command list. For Skool Daze, possible arguments and their meanings are:
Boy1Ready
- little boy no. 1 is ready to start the first stampedeBoy1ReadyAgain
- little boy no. 1 is ready to start the second stampedeEndOfLesson
- the end of the lessonEricHasMumps
- Eric has caught mumps from the BullyEricWasTold
- Eric has been informed of (a) the Swot's plan to grass him up to the headmaster, (b) the hidden pea shooter on the fire escape, or (c) the contagious nature of the Bully's conditionExamRoomReady
- it's time to start the lesson in the Exam RoomMapRoomReady
- it's time to start the lesson in the Map RoomReadingRoomReady
- it's time to start the lesson in the Reading RoomSwotGrassed
- the Swot has grassed on EricSwotReady
- the Swot is at the fire escape, waiting for Eric to be informed that he's going to tell tales to the headmasterTearawayReady
- the Tearaway is ready to race the headmaster to the fire escape to collect the hidden pea shooterWackerReady
- the headmaster is either (a) in his study, where the Swot may find him in order to grass on Eric, or (b) ready to race the Tearaway to the fire escape to collect the hidden pea shooterWhiteRoomReady
- it's time to start the lesson in the White RoomFor Back to Skool, possible arguments and their meanings are:
BlueRoomReady
- it's time to start the lesson in the Blue RoomEndOfLesson
- the end of the lessonMiddleRoomReady
- it's time to start the lesson in the Middle Room of the girls' skoolScienceLabReady
- it's time to start the lesson in the Science LabTimeForAssembly
- it's time to sit down for assemblyUpperRoomReady
- it's time to start the lesson in the Upper Room of the girls' skoolYellowRoomReady
- it's time to start the lesson in the Yellow Room
The MoveBike
command is used in the Bike
command list (Back to Skool only)
to control the bike when Eric is not sitting on the saddle. If the bike has not
been unchained yet, or is resting on the ground, the command does nothing.
Otherwise, it moves the bike along until it runs out of momentum, at which
point it will fall over. The MoveBike
command takes no arguments.
The MoveDeskLid
command is used in the DeskLid
command list (Back to Skool
only) to control a desk lid when it has been raised (by Eric). When the desk
lid is not raised, the command does nothing. Otherwise, it transfers the
contents of the desk (if any) to Eric's pocket. When the desk lid is ready to
drop, it is hidden from view. The MoveDeskLid
command takes no arguments.
The MoveFrog
command is used in the Frog
command list (Back to Skool only).
It is used to control the movements of a frog. When a frog decides to move, it
chooses from three options: turn round, short hop, and long hop. Each of these
movements is controlled by the Hop command. The MoveFrog
command takes no
arguments.
The MoveMouse
command is used in the Mouse
command list (Back to Skool only).
It is used to control the movements of a mouse: scamper up and down a few
times, hide for a brief period, repeat. The command takes no arguments.
The MovePellet
command is used in the Pellet
command list to control a
catapult pellet. If the pellet has not been launched, the command does nothing.
Otherwise, it moves the pellet through the air, checking whether any shields or
unfortunate characters lie in its path. When a pellet has finished its flight,
it is hidden from view. The MovePellet
command takes no arguments.
The MoveWater
command is used in the Water
command list (Back to Skool only)
to control a jet of water fired from a water pistol. If the water has not been
fired, the command does nothing. Otherwise, it moves the water through the air,
checking whether any cups or plant pots lie in its path. When the water has
finished its flight, it is hidden from view. The MoveWater
command takes no
arguments.
The OpenDoor
command is used in the following command lists (Back to Skool
only):
UpperRoom-Teacher
MiddleRoom-Teacher
OpenGateAndDoor-Albert
It takes one argument, namely the unique ID of the door (see [Doors]) to open. Unsurprisingly, it makes the character open the door in question - unless that door is already open, in which case the command does nothing.
The Pause
command is used internally by the Kiss command to occupy Hayley
(i.e. prevent her from executing her current command list) while she is
responding to an attempted kiss from Eric. The command exits (and Hayley will
resume her current command list) after the response (a kiss or slap in the
face) has been made.
The ReleaseMice
command is used internally to control Eric when he's releasing
mice. It makes Eric bend over, releases up to five mice (depending on how many
Eric has caught) at the spot in front of Eric, and then makes Eric stand up.
The command takes no arguments.
The Restart
command is used in many command lists to return to the first
command in the list. For example:
This command list is used by the headmaster; it makes him go to his study, then
to one of his random locations, and then back to his study,
and so on. The Restart
command takes no arguments.
The RideBike
command is used internally to control Eric while he's on the
bike (Back to Skool only). It may hand over control to another command
depending on what happens while Eric is on the bike:
The Say
command is used internally to make a character say something. It takes
two arguments: the thing to say, and whether to notify listeners when done
(which defaults to False,
and is set to True
only during lessons so that the
teacher and the swot don't talk over each other). For example:
would make a character say 'Hello mum!'.
Although Say
is not used explicitly in any of the stock command lists, there is
nothing to stop you using it in a command list if you wish.
The SetClock
command is used in the following command lists in Skool Daze:
BullyHasMumps-Boy
GrassOnEric-Boy
GrassOnEric-Wacker
HiddenPeaShooter-Boy
HiddenPeaShooter-Wacker
The command restarts the clock with a certain amount of time remaining until the
bell rings, specified by the sole parameter. SetClock
is always used at some
point after a FindEric command, which stops the clock to allow enough time for
Eric to be found. In the BullyHasMumps-Boy
, GrassOnEric-Boy
and
HiddenPeaShooter-Boy
command lists, SetClock
is used to ensure that the
special playtime has enough time to run until the next lesson.
The SetClock
command is also used in the Assembly-Wacker
command list in Back
to Skool. It is used to ensure that the bell rings shortly after Mr Wacker has
finished delivering the detention message.
The SetControllingCommand
command is an awkwardly named command that takes
another command - and that command's parameters - as its only argument, as in:
What happens then is that on every pass through the main loop of the game,
OtherCommand
(the 'controlling' command) will be called for the character so
controlled. The idea is that OtherCommand
will make the character do something
continuously (e.g. walk fast) or occasionally (e.g. fire a catapult or throw a
punch).
In the stock command lists, SetControllingCommand
uses the following commands
as parameters:
MumpsWalkabout-Bully
to see whether he has passed on his foul disease to our heroWalkabout-Bully
to make him hunt down our hero's girlfriend and deck herGrassOnEric-Wacker
and HiddenPeaShooter-Wacker
to make him rush to find Eric or rush to the fire escapeShutGateAndDoor-Albert
to make him keep his eyes peeled for an escaping Eric
The 'controlling' command remains in effect until the following command in the
command list has completed. For example, in the command list MapRoom-Tearaway
the first two commands are:
so FireNowAndThen
is called for the Tearaway on every pass through the main
loop of the game until he reaches the location MapRoom:0
.
The SetSubcommand
command places a subcommand in the character's current
command list. This subcommand is then executed on each pass through the main
loop, before and in addition to the current command in the character's command
list. The parameters of SetSubcommand
are the subcommand name and the
subcommand's parameters, as in:
The SetSubcommand
command is used in the following command lists in Back to
Skool:
Kitchen-Teacher
MiddleRoom-Teacher
UpperRoom-Teacher
In these command lists, SetSubcommand
is used to place the MonitorEric
subcommand in Miss Take's command list, which makes her keep an eye out for
Eric in the girls' skool when it's not playtime.
The subcommand persists for the duration of the command list (which is usually until the end of the lesson).
The SetRestartPoint
command is used in the following command lists in Back to
Skool:
GirlsSkoolWalkabout-Teacher
MiddleRoom-Teacher
OpenGateAndDoor-Albert
UpperRoom-Teacher
The command has the effect of discarding itself and all previous commands in the
command list, so that any Restart or StartLessonIfReady command appearing
further down the command list will bring control back up the list to the command
following SetRestartPoint
instead of the top of the list.
For example, the GirlsSkoolWalkabout-Teacher
command list looks like this:
The SetRestartPoint
command here effectively makes itself and all previous
commands disappear, so when Restart
is reached at the end, control passes to
GoToRandomLocation
instead of GoTo, DrinksCabinet
. The command takes no
arguments.
The ShadowEric
command is used in the ShadowEric
command list, which Mr
Wacker adopts after he's been alerted that Eric is trying to escape (see the
WatchForEric command). The command makes Mr Wacker track down Eric and shadow
him until the bell rings. It takes no arguments.
The ShutDoor
command is used in the following command lists (Back to Skool
only):
Kitchen-Teacher
GirlsSkoolWalkabout-Teacher
ShutGateAndDoor-Albert
It takes one argument, namely the unique ID of the door (see [Doors]) to shut. Unsurprisingly, it makes the character shut the door in question - unless that door is already shut, in which case the command does nothing.
The Signal
command is used in the following command lists (Skool Daze only):
BullyHasMumps-Boy
GrassOnEric-Boy
GrassOnEric-Swot
GrassOnEric-Wacker
HiddenPeaShooter-Boy
HiddenPeaShooter-Tearaway
HiddenPeaShooter-Wacker
Stampede-Leader
The command takes a single argument: the name of the signal to set. Signals are used by the MoveAboutUntil command to make a character pace up and down until the time is right to proceed to the next command in the command list. This scheme allows characters' movements to be coordinated.
For example, take a look at the command list HiddenPeaShooter-Boy
, which is
used by little boy no. 10 in the Playtime-HiddenPeaShooter
lesson:
This command list makes the boy find and tell Eric about the pea shooter, but only after both the headmaster and the Tearaway have arrived at the Revision Library (where their race to the fire escape begins). The boy then signals that he has told Eric what's up, whereupon the headmaster and the Tearaway begin their race.
See also the Unsignal command.
The SitForAssembly
command is used in the following command lists (Back to
Skool only):
Assembly-Boy-1
Assembly-Boy-2
Assembly-Bully
Assembly-Tearaway
It makes the character sit down in the assembly hall until the headmaster has finished speaking. The command takes no arguments.
The SitStill
command is always found immediately after the FindSeat
command
when it appears in a command list. It makes the character stay seated (in other
words, do nothing). The command takes no arguments.
It sounds brutal, but there really was a command list in Back to Skool that
contained instructions to make the Bully track down Eric's girlfriend in order
to knock her about. In Pyskool, the equivalent (but more flexible) command is
StalkAndHit,
which takes a single argument: the unique ID of the character to
track down. The command is used in the Walkabout-Bully
command list (Back to
Skool only).
StalkAndHit
should be used as an argument to the SetControllingCommand
command, as in:
As a controlling command, StalkAndHit
continually updates the character's
destination to match that of the target, and makes him throw punches now and
then along the way.
The StartDinnerIfReady
command is used in the command list DinnerDuty
. It
restarts the command list unless it's time to start looking out for Eric during
dinner. The command takes no arguments.
The StartLessonIfReady
command is used in the following command lists in Skool
Daze:
DinnerDuty
ExamRoom-Teacher
MapRoom-Teacher
ReadingRoom-Teacher
WhiteRoom-Teacher
and the following command lists in Back to Skool:
BlueRoom-Teacher
YellowRoom-Teacher
ScienceLab-Teacher
UpperRoom-Teacher
MiddleRoom-Teacher
The command takes a single argument, which is the name of a signal that indicates which room the teacher will teach in when ready. In Skool Daze, these signals are:
ExamRoomReady
MapRoomReady
ReadingRoomReady
WhiteRoomReady
and in Back to Skool:
BlueRoomReady
MiddleRoomReady
ScienceLabReady
UpperRoomReady
YellowRoomReady
The command restarts the command list unless it's time to start the lesson, in which case it raises the named signal (so the kids know when to sit down).
The Stink
command is used in the Stinkbomb
command list (Back to Skool only)
to control a stinkbomb after it's been dropped. If the stinkbomb has not been
dropped, the command does nothing. Otherwise, it animates the stinkbomb cloud,
checking whether any characters with a sensitive nose are nearby, and
compelling them to open the nearest window. When the stench has dissipated, the
cloud is hidden from view. The Stink
command takes no arguments.
The StopEric
command is used internally by the WatchForEric command to make
Albert raise his arm and alert Mr Wacker when he has spotted Eric trying to
escape. The command exits when Eric leaves the 'danger zone' near Albert.
The TellClassWhatToDo
command is used internally by the ConductClassWithEric
and ConductClassWithoutEric commands to make a teacher tell the class what to
do (which usually involves writing an essay, turning to a certain page in their
books, or revising for their exams).
The TellEric
command is used in the following command lists:
ExpelEric:TooManyLines
ExpelEric:NotABird
(Back to Skool only)GrassOnEric-Wacker
(Skool Daze only)HiddenPeaShooter-Wacker
(Skool Daze only)YouHaveMumps-Teacher
(Skool Daze only)It makes the character deliver the message in the command's sole argument, and then unfreeze Eric (if he was frozen, as by the FindEric command).
The TellEricAndWait
command is used in the following command lists (Skool Daze
only):
BullyHasMumps-Boy
GrassOnEric-Boy
HiddenPeaShooter-Boy
It makes the character deliver the message in the command's sole argument, and then unfreeze Eric (if he was frozen, as by the FindEric command) as soon as he has registered understanding of the message so delivered. If Eric is slow to respond, the message will be repeated periodically.
The TellKidsToSitDown
command is used internally by the StartLessonIfReady
command to make a character (a teacher, normally) tell the kids to sit down
when it's time to start class. The command takes no arguments.
The TripPeopleUp
command is used as an argument to the SetControllingCommand
command in the command lists Stampede-Leader
and Stampede-Follower
(Skool
Daze only); it makes the character trip up anyone in his path as he proceeds to
his destination. The command takes no arguments.
The Unsignal
command is used in the command lists Stampede-Leader
and
HiddenPeaShooter-Tearaway
(Skool Daze only), to lower signals previously
raised. It takes a signal name as its sole argument, as in:
The WaitAtDoor
command is used in the command list ShutGateAndDoor-Albert
(Back to Skool only) to make Albert wait at the skool door or the skool gate
until all the characters are on the correct side and it's therefore safe to shut
the door or gate. The character flags B
and G
(see [Characters]) are used to
determine which skool (and hence which side of the door) a character belongs to.
The WaitAtDoor
command takes a single argument: the unique ID of the door or
gate (see [Doors]).
The WaitUntil
command is used in the command list Assembly-Teacher
(Back to
Skool only) by Mr Creak and Mr Rockitt. It makes the teacher do nothing (i.e.
stand still) until a signal is raised. The command takes a single argument: the
name of the signal to wait for (AssemblyFinished
in this case).
The WalkAround
command is used in the following command lists in Skool Daze:
BigWindow
RandomWalkabout
Stampede-Leader
Walkabout-Bully
Walkabout-Tearaway
and the following command lists in Back to Skool:
PlaytimeWalkabout-Boy/Girl
Walkabout-Bully
Walkabout-Tearaway
It takes a single argument, which is the number of walkarounds to do - a
"walkaround" being a short trip away from the origin (wherever the character was
when the WalkAround
command was invoked) and back again.
The WalkAround
command is also used internally by the MoveAboutUntil command.
The WalkFast
command is used as an argument to SetControllingCommand in the
command lists GrassOnEric-Wacker
and HiddenPeaShooter-Wacker
(Skool Daze
only) to make the headmaster rush on his way to the fire escape (to find the
hidden pea shooter) or to Eric (to give him lines).
The WalkUpOrDown
command is used internally by the ConductClassWithEric and
ConductClassWithoutEric commands to make a teacher turn round and walk three
paces. Called repeatedly, it makes the teacher walk up and down.
The WatchForEric
command is used as an argument to SetControllingCommand in
the command list ShutGateAndDoor-Albert
(Back to Skool only) to make Albert
keep his eyes peeled for our hero jumping out of skool windows. If Albert does
spot Eric trying to escape, control is handed over to the StopEric command.
The WatchForEric
command takes two arguments: the name of the command list
to use for the character who will be alerted by Albert when he spots Eric
trying to escape (ShadowEric
in the stock Pyskool); and the alert message to
be screamed by Albert.
The WipeBoard
command is used internally by the ConductClassWithEric and
ConductClassWithoutEric commands to make a character wipe a blackboard clean.
The command takes no arguments.
The Write
command is used internally to control Eric while he's writing on a
blackboard. It would be of no use in a command list.
The WriteOnBoard
command is used internally by the ConductClassWithEric,
ConductClassWithoutEric and WriteOnBoardUnless commands to make a character
write on a blackboard. The character should (ideally) be standing at the target
blackboard before this command is invoked.
The command takes a single argument, namely the message to be written on the board. So if you wanted to use the command explicitly in a command list, you could put something like:
The WriteOnBoardUnless
command is used in the following command lists in Skool
Daze:
ExamRoom-Tearaway
ReadingRoom-Tearaway
WhiteRoom-Tearaway
WriteOnBoards-Tearaway
and the following command lists in Back to Skool:
BlueRoom-Tearaway
ScienceLab-Tearaway
WriteOnBoardsInBoysSkool-Tearaway
WriteOnBoardsInGirlsSkool-Tearaway
YellowRoom-Tearaway
It makes the Tearaway write on a blackboard unless the board has already been written on or the signal named in the command's sole argument has been raised. The signals used in Skool Daze are:
EndOfLesson
- the lesson has endedExamRoomReady
- it's time to start the lesson in the Exam RoomReadingRoomReady
- it's time to start the lesson in the Reading RoomWhiteRoomReady
- it's time to start the lesson in the White Roomand the signals used in Back to Skool are:
BlueRoomReady
- it's time to start the lesson in the Blue RoomEndOfLesson
- the lesson has endedScienceLabReady
- it's time to start the lesson in the Science LabYellowRoomReady
- it's time to start the lesson in the Yellow RoomSo now you know everything there is to know about the ini file and command lists, you're ready to don your 'modding' hat and get customising. Right? Well, if not, you might want to follow the example customisations below to get a feel for what's possible.
Maybe the simplest thing to customise is what the characters say. In this example we customise Mr Creak's sit down message (i.e. how he tells the kids to sit down when it's time to start a lesson).
To do this, find the [SitDownMessages] section in skool_daze.ini
and edit the
line:
so that it reads:
(or whatever other polite request you'd like to see Mr Creak utter). Then run Pyskool in Skool Daze mode and giggle like a schoolboy (or girl) as the profanities pour from the history teacher's mouth.
An equally simple and giggle-inducing trick is to change what the characters write on the blackboards. In this example we'll modify Mr Withit's blackboard messages in Back to Skool.
Open up back_to_skool.ini
and find the section named [BlackboardMessages]. In
there you will see a bunch of lines that start with WITHIT
(Mr Withit's unique
ID):
For fun, you can replace these messages with something more interesting, or add more messages (having only six to choose from makes Mr Withit a dull man). Note that the '^' character will be replaced with a newline.
Then run Pyskool in Back to Skool mode and smile with satisfaction as Mr Withit complies with your particular blackboard message whims.
Did you ever think it was unfair that the little kids in Skool Daze (i.e. not Eric, the Swot, the Tearaway or the Bully) never got lines? Eric would down a teacher with a catapult pellet, but any little kids in the vicinity could breeze past the teacher with complete impunity while Eric (or, if he was lucky, one of the other big kids) got slapped in the face with a bunch of lines.
Well this is Pyskool, and we can change all that. To make the little kids in
Skool Daze potential lines recipients, go to the Characters
section in
skool_daze.ini
and find the lines corresponding to the little boys:
The last field in each line (which contains 'F' by default) is the character flags field. The character flag that turns a character into a potential lines recipient is 'R'. So add that flag to each line, thus:
Now start Pyskool in Skool Daze mode, find a teacher milling about with a bunch of little kids, let rip with the catapult, and experience the satisfaction of seeing the hitherto nameless ones get their come-uppance.
The teachers in Skool Daze and Back to Skool - well, Mr Wacker and Mr Creak in particular - were always asking for a smack. Unfortunately, in the original games teachers were inexplicably impervious to Eric's pugilistic efforts. Eric could always whip out his catapult and send a teacher to the floor with a pellet, but it's not quite the same thing.
Anyway, with Pyskool, you get to change the rules. To make the teachers
punchable with effect, open up skool_daze.ini
or back_to_skool.ini
and go to
the Characters
section. There you will find the lines corresponding to the
teachers; in skool_daze.ini
they look like this:
The last field in each of these lines is the flags
field (see [Characters]). To
make a teacher punchable, we need to add the F
flag. For example:
Make the change for each teacher you'd like to see Eric (and, as a side effect, the Bully too) be able to punch, and off you go and get your long-awaited revenge.
A somewhat more involved customisation is creating a new lesson. In this example we'll create a lesson where Mr Creak teaches Eric in the Map Room. In the original Skool Daze, Mr Creak never taught anywhere but in the Reading and White Rooms, so it'll be good for him to stretch his ageing legs and get on over to the Map Room.
First we are going to add an entry to the [Timetable] section. So, open up
skool_daze.ini,
head over to the Timetable
section, and insert a new lesson
ID or replace an existing one - preferably near the top, so you don't have to
flick through too many lessons in Pyskool in order to test it. The top few
lessons in the stock skool_daze.ini
are:
You could replace Withit-MapRoom-2
with Creak-MapRoom-1
:
This means that the second lesson of the day will be the one with ID
Creak-MapRoom-1
. But that lesson doesn't exist yet, because we just made it
up. So now it's time to create the lesson.
Now that the Timetable
section contains a brand new lesson ID, we have to make
sure there is a corresponding [Lesson *] section. For this we're going to take a
short cut. Since a lesson with Mr Creak in the Map Room is going to be almost
the same as a lesson in the Map Room with any other teacher, we're going to find
one such lesson, copy and paste it, and make the necessary modifications.
A good candidate for this copy/paste/modify plan is the lesson
Withit-MapRoom-1
, so find the section named
[Lesson Withit-MapRoom-1 WITHIT, MapRoom]
, copy and paste it somewhere else
amid the [Lesson *]
sections, and rename it thus:
Now we're almost done. All that remains is to assign the appropriate command list to Mr Creak, and an alternative appropriate command list to Mr Withit. The simplest thing to do is switch their command lists round, thus:
And that's it. Now run Pyskool in Skool Daze mode, and give Mr Creak a round of applause as he makes it to the Map Room for the first time in his long career.
Let's try our hand at a completely new lesson in Back to Skool this time. What about one where every boy and girl piles into the Science Lab with Mr Rockitt? That should be interesting.
You're an old hand at this now. Open up back_to_skool.ini
and inspect the
[Timetable] section:
Let's replace that Creak-YellowRoom-2
entry with a carefully chosen unique ID
for our new lesson:
Time to create the lesson itself.
We'll use the copy/paste/modify trick again, but this time there will be a lot
more modifying to do. The lesson Rockitt-ScienceLab-1
would be a good template
to use, so find the lesson section named
[Lesson Rockitt-ScienceLab-1 ROCKITT, ScienceLab]
, copy and paste it
somewhere else amid the lesson sections, and rename it thus:
The next step is to assign appropriate command lists to the characters. The
appropriate command list for the little boys and girls is ScienceLab-Boy
-
don't be fooled by the -Boy
suffix. So modify those command lists thus:
Now for the teachers. Mr Rockitt will obviously have to be in the Science Lab and the other teachers might as well just wander around, since they'll have nothing better to do:
Mr Wacker and Albert are fine as they are. Next, the main kids. They all need to pile into the Science Lab:
Now we're ready. Fire up Pyskool in Back to Skool mode, and watch the Science Lab fill to bursting point. Fun.
So you've modified messages and lessons, but to be brutally honest, you haven't proved yourself as a Pyskool modder until you've created your own command list. Recall that a command list is a list of commands (!) that control a character during a lesson.
In this exercise we'll take the command list that controls the Tearaway when he's on a blackboard-defacing spree in Skool Daze:
and turn it into a command list that leaves the Tearaway frustrated by the
global chalk shortage. One simple way to do this is to replace the three
WriteOnBoardUnless
commands with these commands:
And for good measure we'll insert another Say
command after
GoToRandomLocation
:
When these modifications are complete, the command list should look like this:
Now run Pyskool in Skool Daze mode and watch as the hapless Tearaway's blackboard-daubing career is dashed to the ground.
The title of this subsection is a little misleading, because at the moment there
is only one example ini file distributed with Pyskool, which is
examples/sd_take_too.ini
. In order to make use of it, invoke sd.py
with the
-i/--ini
option:
and say hello to Skool Daze's new philosophy teacher, who may look somewhat familiar.
To report bugs in, make complaints about, or suggest improvements to Pyskool, contact me (Richard Dymond) at rjdymond@gmail.com, or leave a comment on the Pyskool blog.
Pyskool is now functionally complete, by which I mean that it does everything that the original Skool games do. (Except for a demo mode; if you think there's something else it should do but doesn't, let me know.) However, that doesn't mean there's nothing left to do.
Some things I'll probably do, sooner rather than later:
Yes, these things are pretty boring from an end-user perspective. Some less-boring things I am considering doing, which may or may not ever get done:
No doubt there are bugs in Pyskool - and in this documentation - or ways it deviates unacceptably from the original games. Please report any bugs (reproducible crashes, especially) you find, and help to make Pyskool a solid and stable platform for developing new Skool-based games. (See Contact details.)
Bugs and deficiencies that I'm aware of at the moment include:
Added the following features in Back to Skool mode:
Also fixed the following bugs:
Added the following features in Back to Skool mode:
Also fixed the following bugs:
sprites.png
)SHERRY
sound sample (see [Sounds])GameFps
and ScrollFps
configuration parameters (see [Game])Also fixed the following bugs:
In Skool Daze mode:
sd_take_too.ini
In Skool Daze mode:
--scale
and --ini
command line options to sd.py
and bts.py
Initial public release.
At the time of writing this, there are no frequently asked questions, or even any infrequently asked questions. So for now I'll fill this section with questions made up by me.
Though the conversion of the original games to Python/Pygame is pretty faithful (I think), there are some differences, noted below.
General differences:
In Skool Daze mode:
In Back to Skool mode:
Because Python is an elegant, expressive, and excellent programming language. Plus it enables rapid development, which is good because I'm writing Pyskool in my limited spare time. Pygame's pretty good too. I don't know how else I'd do graphics with Python.
If you need to ask, you probably shouldn't be here. Actually, what are you doing here? Go and play Jet Set Willy, or something.