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 project to re-implement 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. For information on how the project is progressing, pop by the Pyskool blog once in a while.
Pyskool requires Python (version 2.5+) 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.
If you have Python installed in C:\Python25 you can 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 bak2skool.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 fileAt the moment there is not much of a game to play; all you can do is move Eric around the skool, launch the occasional punch or catapult pellet, and watch the other characters get on with daily skool life. (Though in Skool Daze mode you can now amuse yourself by trying to make all the shields flash.) 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'.
While Pyskool is in development, I find it useful to have certain functions bound to special keys. They are:
pyskool###.bmp)In case you hadn't noticed, Pyskool is very much a work in progress. There's lots of stuff that remains to be done, including (but not, as the saying goes, limited to):
No doubt there are bugs in Pyskool - and in this documentation - or ways it deviates unacceptably from the original games. Problems I'm aware of and have yet to fix include:
To report bugs (reproducible crashes, especially), please contact me (Richard Dymond) at rjdymond@gmail.com.
--scale and --ini command line options to sd.py and bts.pyInitial public release.
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.
The stock Pyskool graphics are stored in PNG files in subdirectories named
originalx1 and originalx2 under images/bts and images/sd. The PNG files are:
bubble.png - speech bubble and lipfont.png - the skool fontinventory.png - mouse, frog, waterpistol 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).
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 when looking for graphics to use in the game:
ImageDir, ImageSet and Scale from the [Game] section of the config file<ImageDir>/<ImageSet>x<Scale><ImageDir>/<ImageSet>x1 and scale them up
If you wanted to create your own hi-res graphics at 2x the original Spectrum
size, you could place them in a directory called <ImageDir>/Customx2 and use
the following config values in the [Game] section:
The ini file (skool_daze.ini or bak2skool.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:
ImageDir - the base directory containing the game imagesImageSet - the name of the image set to use (default is 'original')SoundsDir - the base directory containing the sound samplesInitialColumn - the x-coordinate of the leftmost column of the screen when the game startsBackground - the background colour of the screenScale - the scale factor to use for graphics; 1 = original Spectrum sizeGraphicsMode - 0 = hi-res colour; 1 = spectrum mode, meaning just two colours (ink and paper) per 8x8-pixel blockLogoPos - the x, y coordinates of the logo on screenScoreBoxPos - the x, y coordinates of the score/lines/hi-score box on screenScoreBoxXOffset - used for positioning text in the score boxLessonBoxPos - the x, y coordinates of the lesson box on screenLessonLength - the length of a lesson period in 1/20ths of a secondLessonStartTime - when a lesson starts (i.e. teacher will tell kids to sit down) in 1/20ths of a second from the start of the periodQuickStart - 0 to scroll the skool into view and play the theme tune (as in the original games); 1 to skip this sequence
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
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 waterpistol, (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)CATCH_MOUSE: Eric has caught a mouse (Back to Skool only)CONKER: Eric has knocked out the Bully or the Swot with a conker (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 - EricKISSING: kissing the Heroine - EricBENDING_OVER: bending over - EricFLY: catapult pellet in flight
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)spriteGroupId is the ID of the sprite group to use for the characterinitial-animatory-state 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 conkerD - can open doors and windowsF - can be knocked out by a fistG - belongs in the girls' skoolL - can give linesM - is scared of miceP - can be knocked over by a catapult pelletR - can receive linesT - is a teacher (i.e. conducts classes)W - usually walks (unlike kids who sometimes run)
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 Ericinitial-animatory-state 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 launchedhit-zone 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 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 [Lesson *] section names take the form
if the lesson will take place with a teacher in a classroom, or
if the lesson is a non-classroom period, where:
lessonId is the lesson ID as it appears in the [Timetable] sectioncharacterId is the character ID of the teacher taking Eric's classroomId is the ID of the room in which Eric's class will take placelocationId is one of PLAYTIME, REVISION LIBRARY, DINNER, 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 *] below). 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.
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 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 classroom in the skool. 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 room
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 Doors section contains details of the doors and windows in the game. Each
line takes the form:
where:
doorId is the door/window's unique IDx is the door/window's x-coordinatebottomY and topY are the y-coordinates of the bottom and top of the door/windowinitial-status is either open or shutauto-shuts, if present, indicates that the door will swing shut after a short time
The DoorImages section contains details of the images that will be used for the
doors and windows when they are open or shut. Each line takes the form:
where:
doorId is the door/window's unique ID (see [Doors])shutTopLeft are the coordinates (in (x, y) form) of the top left of the image of the door/window when shutsize is the size of the image (in (width, height) form)coords are the coordinates (in (x, y) form) of the door/window in the skool
The door/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 door/window 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/window are the same size.
The Walls section contains details of the impenetrable barriers in the skool.
Each line takes the form:
where x is the wall's x-coordinate, and bottomY and topY are the
y-coordinates of the bottom and top of the wall. For 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 (see below).
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).
The SitDownMessages section contains one line for each teacher of the form:
where characterId is the teacher's unique ID (see [Characters]), and
sit-down-message 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 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 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 withquestion-template 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
answer-template 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 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 messagelines-message 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 waterpistols
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 teacherlesson-message 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:
BoardDirtywhich, 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, and imageIndex is the index of
the shield's pair of images in mutables.png.
The [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 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 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.
This command has not yet been implemented.
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-TeacherReadingRoom-TeacherExamRoom-TeacherWhiteRoom-TeacherUpperRoom-TeacherMiddleRoom-TeacherBlueRoom-TeacherYellowRoom-TeacherScienceLab-TeacherIt controls teachers from the point where they wait at the edge of the blackboard for the Swot to show up until the end of the lesson. It's therefore responsible for making the teachers:
Some of these responsibilities have not yet been implemented.
The ConductClassWithEric command is used internally to control a teacher who
is teaching Eric and the Swot. It decides whether the class should be of the
question-and-answer variety, and then hands over control to ConductQASession
or TellKidsWhatToDo as appropriate.
The ConductQASession command is used internally to control a teacher during
a question-and-answer session with the Swot.
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. It's then up to whichever command was in control of
the character previously (most likely SitStill or GrassAndAnswerQuestions) to
reseat him.
The FindEric command is used in the following command lists (Skool Daze only):
The command is used to make a character look for Eric (to give him a message). It takes no arguments.
This command has not yet been implemented.
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.
This command has not yet been implemented.
The FindSeat command is used in the following command lists:
ExamRoom-BoyExamRoom-BullyExamRoom-SwotExamRoom-TearawayMapRoom-BoyMapRoom-BullyMapRoom-SwotMapRoom-TearawayReadingRoom-BoyReadingRoom-BullyReadingRoom-SwotReadingRoom-TearawayWhiteRoom-BoyWhiteRoom-BullyWhiteRoom-SwotWhiteRoom-TearawayBlueRoom-BoyBlueRoom-BullyBlueRoom-SwotBlueRoom-TearawayMiddleRoom-GirlScienceLab-BoyScienceLab-BullyScienceLab-SwotScienceLab-TearawayUpperRoom-GirlYellowRoom-BoyYellowRoom-BullyYellowRoom-SwotYellowRoom-TearawayIt 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 FollowLittleBoy 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. The command takes no arguments.
This command has not yet been implemented.
The Fly command is used internally to control an airborne catapult pellet (i.e.
one that has been fired). It moves the pellet through the air, checking to see
if any unfortunate characters lie in its path. When a pellet has finished its
flight, it is hidden from view and control is handed back over to the Hide
command.
The Fly command takes two arguments: range and hit-zone, as described in
the [CatapultPellets] section.
The GiveEric2000Lines command is used in the command lists GrassOnEric-Wacker
and HiddenPeaShooter-Wacker (Skool Daze only). It makes the headmaster give
Eric 2000 lines after the Swot has grassed on him or if he finds the hidden pea
shooter on the fire escape. The command takes no arguments.
This command has not yet been implemented.
The GiveLines command is used internally to make a teacher give lines. The
command takes two arguments: the unique ID of the character receiving the lines,
and the lines message ID (see [LinesMessages]) of the admonition to deliver.
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 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:
MapRoom-SwotReadingRoom-SwotExamRoom-SwotWhiteRoom-SwotBlueRoom-SwotYellowRoom-SwotScienceLab-SwotIt makes the Swot tell tales to the teacher just before class starts, and answer the teacher's questions later. It is also responsible for reseating the Swot if he's pushed out of his chair. The command takes no arguments.
The telling tales (Grass) part of this command has not yet been implemented.
The Hide command is used in the command list Pellet to control a catapult
pellet that is not airborne (and so should not be visible, because it's hiding
in the catapult owner's pocket). The command takes no arguments.
When the catapult pellet is fired, it is made visible and control is handed over to the Fly command.
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 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, and then
lets him drop (unless there is an unconscious kid below). The command takes no
arguments.
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 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. KnockedOver stuns the character, 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.
This command has not yet been fully implemented.
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 OpenDoor command is used in the following command lists (Back to Skool
only):
UpperRoom-TeacherMiddleRoom-TeacherOpenGateAndDoor-AlbertIt 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 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 Say command is used internally to make a character say something. It takes
one argument, namely the thing to say. 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 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 SetRestartPoint command is used in the following command lists:
GirlsSkoolWalkabout-TeacherMiddleRoom-TeacherOpenGateAndDoor-AlbertUpperRoom-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 ShutDoor command is used in the following command lists (Back to Skool
only):
Kitchen-TeacherGirlsSkoolWalkabout-TeacherShutGateAndDoor-AlbertIt 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-BoyGrassOnEric-BoyGrassOnEric-SwotGrassOnEric-WackerHiddenPeaShooter-BoyHiddenPeaShooter-TearawayHiddenPeaShooter-WackerStampede-LeaderThe 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-1Assembly-Boy-2Assembly-BullyAssembly-TearawayIt 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), or find another seat if he's pushed out of one. 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 StartAssemblyIfReady command is used in the command list Assembly-Teacher
(Back to Skool only) by MR CREAK, MR ROCKITT and MR WITHIT. It restarts the
command list unless it's time to start assembly. The command takes no arguments.
The StartLessonIfReady command is used in the following command lists in Skool
Daze:
DinnerDutyExamRoom-TeacherMapRoom-TeacherReadingRoom-TeacherWhiteRoom-Teacherand the following command lists in Back to Skool:
BlueRoom-TeacherMiddleRoom-TeacherScienceLab-TeacherUpperRoom-TeacherYellowRoom-TeacherThe 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:
ExamRoomReadyMapRoomReadyReadingRoomReadyWhiteRoomReadyand in Back to Skool:
BlueRoomReadyMiddleRoomReadyScienceLabReadyUpperRoomReadyYellowRoomReadyThe 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 TellEricAboutBully command is used in the BullyHasMumps-Boy command list
(Skool Daze only), and makes the character tell Eric that the Bully has mumps.
The command takes no arguments.
This command has not yet been implemented.
The TellEricAboutSwot command is used in the GrassOnEric-Boy command list
(Skool Daze only), and makes the character tell Eric that the Swot is going to
tell the headmaster what he's up to. The command takes no arguments.
This command has not yet been implemented.
The TellEricAboutTearaway command is used in the HiddenPeaShooter-Boy command
list (Skool Daze only), and makes the character tell Eric that the Tearaway has
hidden a pea shooter on the fire escape. The command takes no arguments.
This command has not yet been implemented.
The TellEricToGoHome command is used in the command list YouHaveMumps-Teacher
(Skool Daze only), and makes the character tell Eric to go home because he has
mumps. The command takes no arguments.
This command has not yet been implemented.
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 TellKidsWhatToDo command is used internally to control a teacher during
class. It makes the teacher tell the kids what to do (e.g. write an essay), then
walk up and down until the lesson ends.
The TripPeopleUp command is used in the command list Stampede-Leader (Skool
Daze only) by little boy no. 1; it makes him wander round the skool tripping
people up along the way. The command takes no arguments.
This command has not yet been implemented.
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 WalkAround command is used in the following command lists in Skool Daze:
BigWindowRandomWalkaboutStampede-LeaderWalkabout-BullyWalkabout-Tearawayand the following command lists in Back to Skool:
PlaytimeWalkabout-Boy/GirlWalkabout-BullyWalkabout-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 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.
This command has not yet been implemented.
The WipeBoard command is used internally by the ConductClass command to make
a character wipe a blackboard clean. The command takes no arguments.
The WriteOnBoard command is used internally by the ConductClass 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-TearawayReadingRoom-TearawayWhiteRoom-TearawayWriteOnBoards-Tearawayand the following command lists in Back to Skool:
BlueRoom-TearawayScienceLab-TearawayWriteOnBoardsInBoysSkool-TearawayWriteOnBoardsInGirlsSkool-TearawayYellowRoom-TearawayIt 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 bak2skool.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 bak2skool.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-1 with Creak-MapRoom-1:
This means that the third 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 bak2skool.ini and inspect the
[Timetable] section:
Let's replace that Creak-BlueRoom-1 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:
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.
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.
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.