Skip to content

Custom Commands#

The below lists all custom commands available in Student Transfer, including their syntax and (hopefully) illustrative examples.


Values that have to be filled in by the user are marked by being enclosed in <>. If you encounter such a value, remove it entirely (including <>) and substitute your own value.

Optional values are marked by being enclosed in [], e.g. [<optional_value>]. This means they can be optionally appended to the command to enabled additional functionality. These brackets may appear around other enclosing characters to denote that they are optional, e.g. [(<value_a, value_b>)].

If a value takes one out of a set of fixed values, that is denoted by (), e.g. (<option_a, option_b, option_c>). This means that this specific value can only be one of the options listed in this definition.

If a value can contain multiple values, it is enclosed by &&, e.g. &<value_a>&. This means when substituting your own value, you can add multiple values as a comma-separated list, like this: val_a, val_b, val_c.


Who am I kidding, nobody understands this shit anyway, just go and look at the examples already.

Data Types#

  • int: An integer number, e.g. 5. Integers are full numbers without any decimal places.
  • float: A floating point number, e.g. 5.4. Floating point numbers can have decimal places, but an int can be used in their stead as well.
  • label: A label that exists in the game, defined by the label statement.
  • string: A piece of text surrounded by double quotes, e.g. "this is a string".
  • body: The name of a body that exists in the game, e.g. johnGB.
  • character: The script name of a character that exists in the game, e.g. john.
  • outfit: An outfit that exists for a character, e.g. the outfit uniform for the character john.
  • accessory: An accessory that exists for a character, e.g. the accessory bedhead for the character sandra.
  • background: A background that exists in the game, e.g. bg main room day shut.


timedchoice <timeout:float> <fail_label:label> <menu_title:label>
# "C" will show up as an extra menu choice if the player
# has opted to disable timed choices in the preferences.
timedchoice 5.0 day2 "C"

    "Which letter of the alphabet is better?"


        "Not so nice."

    "Continuation of the main script."

label day2:
    "You failed that choice pretty badly!"


gameover <title:string>
gameover "This is the end, my friend."


# To start a text message conversation
text start <from_character:character>

# To set the title of a text message conversation
text title <title:string>

# To end a text message conversation
text end
text start john
text title "Connie"

msg john "Connie, we need to break up."

think "That should do it. Short and to the point."

show john a_0
john "And it's sent."

text end


msg <from_character:character> <message:string> [instant]
# To send a regular message
msg john "Connie, we need to break up."

# To send a message instantly without waiting for the user to click to continue
msg john "Connie, we need to break up." instant


title <header:string> [<subtitle:string>]
title "Day 1"

title "Day 1" "It's a wonderful world"


outfit <target_character:character> <target_outfit:outfit>
outfit john uniform


accessory <target_character:character> (<clear,add,remove,set>) &<accessory_name:accessory>&
# To clear all accessories
# This command does not support listing accessories in it
# since it clears them anyway
accessory sandra clear

# To add a new accessory
accessory sandra add glasses

# To add a multi-state accessory
accessory sadie add hair_twintail

# To remove an accessory
accessory sandra remove glasses

# To replace all current accessories
accessory sandra set bedhead, glasses


body <from_character:character> <to_character:character> [<target_outfit:outfit>]
# To set the body with the default outfit
body john katrina

# To set the body with a custom outfit
body john katrina uniform


swap [(<float,zap>)] <character_from:character> <start_expr:expression> : <end_expr:expression>, <character_to:character> <start_expr:expression> : <end_expr:expression>
# To swap with the default effect
swap john a_0 : a_3, katrina a_0 : a_8

# To swap with an alternative effect
swap zap john a_0 : a_3, katrina a_0 : a_8


clone <from_character:character> <to_character:character>
clone john katrina


morph begin (<magic,alien>) <from_character:character> <to_character:character> <target_outfit:outfit> <target_expression:expression> [<relative_scale:float>] [<target_ypos:float>]
morph do <target_character:character>
morph end <target_character:character>
morph finish <target_character:character>
# To show the full morph animation
morph begin alien rachel yui uniform b_2

rachel "What is happening to me?!"

morph do rachel

"Finally, the transformation ground to a halt."

morph end rachel

# To quickly finish the morph
morph begin alien rachel yui uniform b_2

rachel "What the hell?!"

morph finish rachel

# To modify the relation scaling and the vertical positioning of the target sprite
morph begin alien rachel yui uniform b_2 3.0 1.2  # This reduces the scaling effect by 3 and sets the target ypos to 1.2

rachel "Where did my legs go?!"

morph finish rachel


exspirit <target_character:character> <target_expression:expression>
exspirit john a_0


possess <from_character:character> <to_character:character> <target_expression:expression>
possess john mina a_3


scry (<into,outof>) <target_character:character>
scry into john
"Everything went black as I was pulled out of my body."
scene black
show yui a_0 at center
scry outof yui


"And thus the path ended abruptly."



routename <title:string>
routename "Hello, World!"




phone_call <from_character:character> @ <location:background> : <to_character:character> @ <location:background>
phone_call john @ bg house_davis bedroom_john day_shut : katrina @ bg school entrance day


pauseaudio <channel:string>
pauseaudio music


resumeaudio <channel:string>
resumeaudio music


FIXME <message:string>
FIXME "This is broken as fuck."

Last update: November 11, 2022