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.
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 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:
MESSAGE, assemblyMessageTemplate
which defines the template for the assembly message, and:
VERB, verb
NOUN, noun
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 Bike section contains a single line of the form:
bikeId, spriteGroupId, initialAnimatoryState, initialLocation, commandListId, topLeft, size, coords
where:
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 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:
characterId, message
where:
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:
TEARAWAY, i hate^$WACKER
where $WACKER will be replaced by whatever name has been given to the character whose unique ID is WACKER (see [Characters]).
The Blackboards section defines the blackboards in the classrooms. Each line takes the form:
roomId, x, y
where:
Each line in the CatapultPellets section takes the form:
characterId, pelletId, spriteGroupId, commandListId, range, hitZone
where:
Each 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 Chairs section contains one line for each classroom in the skool. Each line takes the form:
roomId, x1, x2, x3..., xN
where:
The order in which the x-coordinates are listed is significant: x1 should correspond to the ‘front seat’ and xN should correspond to the ‘back seat’. So if x1 < xN (as in the stock skool_daze.ini and back_to_skool.ini), characters will sit down facing left; if x1 > xN, characters will sit down facing right.
Each line in the Characters section takes the form:
characterId, name[/title], spriteGroupId, initialAnimatoryState, (x, y), flags
and corresponds to a single character, where:
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:
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:
"char", offset, width
where:
The [CommandList ...] section names take the form:
CommandList commandListId
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:
[CommandList Walkabout1-Wacker]
GoTo, HeadsStudy:Window
GoToRandomLocation
Restart
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 Conker section defines a conker (as knocked out of the tree by a catapult pellet). It contains a single line of the form:
objectId, spriteGroupId, commandListId, minX, maxX, minY, maxY
where:
The Conker section appears only in back_to_skool.ini.
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:
cupId, emptyTopLeft, size, coords
where:
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 DeskLid section contains a single line of the form:
deskLidId, spriteGroupId, commandListId
where:
The DeskLid section appears only in back_to_skool.ini.
The Desks section contains one line for each classroom in the skool. Each line takes the form:
roomId, x1, x2...
where
The Desks section appears only in back_to_skool.ini.
The Doors section contains details of the doors in the game. Each line takes the form:
doorId, x, bottomY, topY, initiallyShut, autoShuts, shutTopLeft, size, coords
where:
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 Eric section describes our hero, Eric. It contains a single line in the format:
characterId, name, spriteGroupId, initialAnimatoryState, (x, y), flags
where:
For a description of the format of the initial animatory state and the available flags, see [Characters].
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:
floorId, minX, maxX, y
where:
The unique IDs are used in the [Routes] section.
Each line in the Frogs section takes the form:
frogId, spriteGroupId, initialAnimatoryState, initialLocation, commandListId
where:
Any 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 Game section contains configuration parameters in the format:
parameterName, parameterValue
Recognised parameters are:
The Grass section contains five lines of the form:
Writers, characterId[, characterId...]
WriteTale, <text>
Hitters, characterId[, characterId...]
HitTale, <text>
AbsentTale, <text>
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 $characterId (where characterId is the unique ID of any character, and which will be replaced by the name of that character).
Each line in the Images section takes the form:
imageId, path
where
Recognised image IDs and the images they refer to are:
Each line in the Inventory section takes the form:
itemId, topLeft, size
where:
The item IDs recognised by Pyskool are as follows:
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 [Lesson ...] section names take the form:
Lesson lessonId [*]characterId, roomId
if the lesson will take place with a teacher in a classroom or the dinner hall, or:
Lesson lessonId locationId
if the lesson is an unsupervised period, where:
Each line in a [Lesson ...] section takes the form:
characterId, commandListId
where
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 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:
characterId|*, lessonMessage[, condition]
where:
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:
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 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:
characterId|*, linesMessageId, linesMessage
where
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:
WITHIT, NO_HITTING, BE GENTLE^NOW
*, NO_HITTING, DON'T HIT^YOUR MATES
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:
Lines message IDs used only in Skool Daze are:
Lines message IDs used only in Back to Skool are:
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.
Each line in the Mice section takes the form:
mouseId, spriteGroupId, initialAnimatoryState, initialLocation, commandListId
where:
Any 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 NoGoZones section corresponds to a region of the skool Eric is never supposed to enter. The lines take the form:
zoneId, minX, maxX, bottomY, topY
where:
Whenever Eric is spotted in one of these zones by a teacher, the GET_OUT lines message will be delivered in screeching tones.
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:
plantId, spriteGroupId, x, y, commandListId
where:
The Plants section appears only in back_to_skool.ini.
The [QuestionsAndAnswers ...] section names take the form:
QuestionsAndAnswers characterId
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:
Question, questionId, groupId, questionTemplate
where:
There should be at least one Question entry in a [QuestionsAndAnswers ...] section.
The second type of entry is the Answer entry:
Answer, questionId, answerTemplate
where:
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:
QAPair, groupId, qa1, qa2
where
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:
SpecialQuestion, question
SpecialAnswer, answer
SpecialGroup, groupId, qaPairIndex
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 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:
characterId, (x1, y1), (x2, y2)...
where:
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 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:
roomId, name, y, minX, maxX, getAlong
where:
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:
homeFloorId, *|destFloorId[, destFloorId[, ...]], nextStaircaseId
where:
How 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:
Bottom, LeftMiddle, LeftTop, UpToToilets
Bottom, GirlsMiddle, GirlsTop, GirlsSkoolLower
Bottom, *, UpToStage
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).
The Safe section contains a single line of the form:
topLeft, size, coords
where:
The safe 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 inverse image of the safe is at (x + width, y), where (x, y) are the coordinates of the normal image of the safe.
If the safe will never need to flash (as in Back to Skool), topLeft and size will not be used, and so may be set to any value.
The Screen section contains parameters that determine the appearance and layout of the screen. Each line has the form:
parameterName, parameterValue
Recognised parameters are:
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:
objectId, spriteGroupId, commandListId
where:
The SherryDrop section appears only in back_to_skool.ini.
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:
score, topLeft, size, coords
where:
The shield 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 inverse image of a shield is at (x + width, y), where (x, y) are the coordinates of the normal image of the shield.
The SitDownMessages section contains one line for each teacher of the form:
characterId, sitDownMessage
where
For example:
CREAK, SIT DOWN YOU LITTLE ANARCHISTS
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:
locationId, x, y
where
An example of a location ID is BlueRoomDoorway, which means exactly what you think it means.
Each line in the Sounds section takes the form:
soundId, path
where
Recognised sound sample IDs and the samples they refer to are:
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:
Playtime-Mumps
Playtime-SwotGrass
Playtime-HiddenPeaShooter
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 [SpriteGroup ...] section names take the form:
SpriteGroup spriteGroupId
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:
spriteId, index
where
Recognised sprite IDs and their meanings are:
The Staircases section contains details of the staircases in the skool. Each line takes the form:
staircaseId[:alias], bottom, top[, force]
where:
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:
UpToStudy:DownFromStudy, (91, 10), (84, 3)
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.
Each line in the Stinkbombs section takes the form:
characterId, stinkbombId, spriteGroupId, commandListId
where:
Each 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.
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.
The Walls section contains details of the impenetrable barriers in the skool. Each line takes the form:
wallId, x, bottomY, topY
where:
For example:
FarLeftWall, 0, 20, 0
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).
Each line in the Water section takes the form:
characterId, waterId, spriteGroupId, commandListId
where:
Each 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.
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:
objectId, spriteGroupId, commandListId
where:
The WaterDrop section appears only in back_to_skool.ini.
The Windows section contains details of the windows in the game. Each line takes the form:
windowId, x, bottomY, topY, initiallyShut, openerCoords, shutTopLeft, size, coords
where:
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.