Author Topic: Internal Scripting  (Read 2995 times)

RibShark

  • Crewmate
  • **
  • Posts: 23
    • View Profile
Internal Scripting
« on: October 02, 2012, 11:53:10 AM »
I am thinking of making a level, but before I start I need to know some things:

  • If used correctly, is internal scripting allowed/recommended?
  • If so, how would I use it?
  • Is it likely to get patched in the future?

I'm relatively new to VVVVVV's level editing feature, in case you were wondering.
« Last Edit: October 02, 2012, 11:55:39 AM by RibShark »

ToasterApocalypse

  • Captain
  • *****
  • Posts: 1010
  • le lenny face
    • View Profile
Re: Internal Scripting
« Reply #1 on: October 02, 2012, 11:55:28 AM »
    I am thinking of making a level, but before I start I need to know some things:

    • If used correctly, is internal scripting allowed/recommended?
    • If so, how would I use it?
    • Is it likely to get patched in the future?

    I'm relatively new to VVVVVV's level editing feature, in case you were wondering.
    [/list]

    ONE: It is VERY good, but you have GOT to understand it well. The internal commands thread helps.
    TWO: Internal Commands. That thread. But to excecute the commands, say(-1)
    THREE: It got patched in 2.0. It was say(6)

    RibShark

    • Crewmate
    • **
    • Posts: 23
      • View Profile
    Re: Internal Scripting
    « Reply #2 on: October 02, 2012, 11:57:47 AM »
    THREE: It got patched in 2.0. It was say(6)

    OK, I presume this was because they made it so you could now have 11 lines total, so would say(12) work?

    ToasterApocalypse

    • Captain
    • *****
    • Posts: 1010
    • le lenny face
      • View Profile
    Re: Internal Scripting
    « Reply #3 on: October 02, 2012, 12:01:19 PM »
    THREE: It got patched in 2.0. It was say(6)

    OK, I presume this was because they made it so you could now have 11 lines total, so would say(12) work?

    Not sure. I don't think it would work, though.

    Ask FIQ, he's an expert on this kind of stuff.

    Dav999

    • Global Moderator
    • Captain
    • *****
    • Posts: 2171
      • View Profile
      • The Open Level Project
    Re: Internal Scripting
    « Reply #4 on: October 02, 2012, 12:19:22 PM »
    THREE: It got patched in 2.0. It was say(6)

    OK, I presume this was because they made it so you could now have 11 lines total, so would say(12) work?

    Yes, I've seen levels which used say(33).

    Ask FIQ, he's an expert on this kind of stuff.

    FIQ, or me, I also know a lot about this.

    RibShark

    • Crewmate
    • **
    • Posts: 23
      • View Profile
    Re: Internal Scripting
    « Reply #5 on: October 02, 2012, 12:20:22 PM »
    OK, so I think I just about got it working in 2.1.

    Thanks for the help!

    Although, I'm confused, as the methods I've seen use say(-1).
    Do all these do the same thing?

    Dav999

    • Global Moderator
    • Captain
    • *****
    • Posts: 2171
      • View Profile
      • The Open Level Project
    Re: Internal Scripting
    « Reply #6 on: October 02, 2012, 12:22:50 PM »
    Uh... How many different methods have you seen? In any case, they all do the same thing: making you able to use internal commands.

    alek

    • Captain
    • *****
    • Posts: 923
    • monolithic since 2012??
      • View Profile
      • Alek Fleischer
    Re: Internal Scripting
    « Reply #7 on: October 05, 2012, 03:45:23 PM »
    Commands in black are safe enough to use which, at most, can crash the game when you use them incorrectly. (Save the level before you test it and nothing can go wrong if you only use these commands.)
    Commands in blue are not optimal for use in custom levels, because they only work in the real game.
    Commands in orange are a bit dangerous to use and may corrupt your save data if you don't use them correctly.
    Commands in red shouldn't be used at all, because these will corrupt your save data.
    If I don't know what a command does, I have not coloured it, so that may happen if I know what it does.

    text(colour,x,y,lines) - creates a text box
    squeak(colour) - makes a crewmate squeak (or makes a terminal sound)
    changeplayercolour(colour) - changes the colour of :viridian:
    changecolour(colour a,colour b) - changes the colour of the crewmate with colour a into colour b (note: this only works with crewmates who have been created using the createcrewman command)
    alarmon - turns the alarm on
    alarmoff - turns the alarm off
    position(center/centerx/centery/colour,above/colour,below) - overrides the x,y of the text command
    backgroundtext - allows two text boxes to appear simultaneously
    endtext - makes a text box disappear
    endtext_fast - makes a text box disappear immediately
    speak - shows a text box, without removing old text boxes
    speak_active - shows a text box, and removes any old text box
    cutscene() - makes cutscene bars appear
    endcutscene() - makes cutscene bars disappear
    untilbars() - wait until cutscene()/endcutscene() is completed
    customifflag(n,script) - same as ifflag(n,script) in simplified scripting
    ifflag(n,script) - same as ifflag(n,script) in simplified scripting, but loads an internal script
    loadscript(script) - load an internal script
    iftrinkets(n,script) - same as iftrinkets(n,script) in simplfied scripting, but loads an internal script
    iftrinketsless(n,script) - same as iftrinketsless(n,script) in simplfied scripting, but loads an internal script
       blue because: these four commands can only load scripts from the real game, and there are equivalents which load custom scripts instead of built-in scripts

    customiftrinkets(n,script) - same as iftrinkets(n,script) in simplfied scripting
    customiftrinketsless(n,script) - same as iftrinketsless(n,script) in simplfied scripting
    createcrewman(x,y,colour,mood,direction) - creates a crewmate (not rescuable)
    createentity(x,y,n,meta,meta) - creates an entity, I have a list of them, so if you want, I can post it here
       orange because: it is possible to create a teleporter with this command, which destroys your save data if you touch it

    vvvvvvman() - you know what it does
    undovvvvvvman() - back to normal
    hideplayer() - makes :viridian: invisible
    showplayer() - makes :viridian: visible
    gamestate(x) - changes the gamestate (there is a list of gamestates in this topic)
       orange because: some gamestates destroy your save file, and it can really glitch the game if you don't use it correctly

    gamemode(x) - gamemode(teleporter) to show the map, gamemode(game) to hide it
    blackout() - should make the screen black, but freezes the screen
    blackon() - unfreezes the screen
       blue because: these two commands should make the screen black, but that only works in the real game for some reason. If you want to make the screen black, use fadeout() and fadein()

    fadeout() - fades the screen to black
    fadein() - fades back
    untilfade() - wait until fadeout()/fadein() is completed
    gotoroom(x,y) - teleport (without any effects) to room x+1,y+1
    gotoposition(x,y,z) - teleport (without any effects) to position x,y in this room, and z is whether you are flipped or not, 1 for flipped, 0 for normal (you can also use gotoposition(x,y), then you will have normal gravity by default)
    flash(x) - makes the screen white, you can change the time how long the screen should stay white (just flash won't work, you have to use flash(5) in combination with playef(9) and shake(20) if you want a normal flash)
    play(x) - play a song, but the song numbers are different (I have a list)
    jukebox(x) - makes a jukebox terminal white and turns off the color of all the other terminals (in custom levels, it just seems to turn off the white color of all activated terminals).
    musicfadeout() - fades the music out
    musicfadein() - opposite of musicfadeout() (doesn't seem to work)
    stopmusic() - stops the music at once
    resumemusic() - opposite of stopmusic() (doesn't seem to work)
    playef(x,n) - play a sound effect (I have a list) I don't know what the n does, but just use playef(x) without the second argument until I found out what it does
    changemood(colour,mood) - changes the mood of a crewmate (0 for happy, 1 for sad, only works for crewmates created with createcrewman)
    everybodysad() - makes everybody sad (only for crewmates created with createcrewman + :viridian:)
    changetile(colour,tile) - changes the tile of a crewmate (you can change it to any sprite in sprites.png, and it only works for crewmates created with createcrewman)
    face(a,b) - makes the face of crewmate a point to crewmate b (only works with crewmates created with createcrewman)
    companion(x) - I don't know exactly how this works
       blue because: I have read it only works on :vermillion:

    changeai(crewmate,followplayer/followpurple/followyellow/followred/followgreen/followblue/faceplayer/followposition,x/panic/faceleft/faceright) - can change the face direction of a crewmate or the walking behaviour
    changedir(colour,direction) - just like changeai(colour,faceleft/faceright), this changes face direction, 0 is left, 1 is right
    walk(left/right,x) - makes :viridian: walk
    flipgravity(colour) - flips the gravity of a certain crewmate (it won't always work on yourself)
    changegravity - haven't tested it
    flipme - makes :viridian: flip/go to the ceiling (?)
    tofloor - makes :viridian: go to the floor
       blue because: it isn't really something which only works in the real game, because if you're lucky, these commands work, but otherwise they won't work at all.

    foundtrinket(x) - makes a trinket found
    runtrinketscript - Play Passion For Exploring?
       blue because: you can just use play(4) to play Passion For Exploring, and I guess this will do something different when used in the real game.

    altstates(x) - changes the layout of some rooms, like the trinket room in the ship before and after the explosion, and the secret lab entrance
       blue because: custom levels don't support altstates at all.

    createlastrescued(x,y) - creates the last rescued crewmate at position x,y (?)
    rescued(colour) - makes someone rescued
    missing(colour) - makes someone missing
       blue because: I think these only work for crewmates in the real game

    finalmode(x,y) - final level (46,54)
       blue because: why would you want to use the final level in custom levels?

    setcheckpoint() - sets the checkpoint to the current location
    textboxactive - no idea what this does.
    ifexplored(x,y,script) - if x+1,y+1 is explored, go to script
       blue because: I guess it loads an internal script, but I think you can use ifexplored(x,y,stop) and customiftrinkets(0,customscript) to go to a script if an area has not been explored yet

    iflast(crewmate,script) - if crewmate x was rescued last, go to script (it uses numbers here: 2: :vitellary: 3: :vermillion: 4: :verdigris: 5 :victoria: (I don't know the number for :viridian: and :violet:)
       blue because: I think these only work for crewmates in the real game

    ifskip(x) - if you skip the cutscenes in No Death Mode, go to script x
       blue because: you can't skip cutscenes in custom levels

    ifcrewlost(a,b) - if crewmate a is lost, go to script b
       blue because: I think these only work for crewmates in the real game, and if it does work, it probably loads an internal script

    showcoordinates(x,y) - show coordinates x,y on the map
    hidecoordinates(x,y) - hide coordinates x,y on the map
       -NOTE: This works for the map for custom levels in 2.1
    showship - show the ship on the map?
    hideship - hide the ship on the map?
       blue because: I guess that if you have made the ship at the exact same location as in the real game, that you can make the ship purple, but otherwise: no.

    showsecretlab - show the secret lab on the map?
    hidesecretlab - hide the secret lab on the map?
       blue because: again, only if you have made the secret lab at the exact same location as in the real game, this command makes sense.

    showteleporters() - show the teleporters on the map (I guess it only shows the teleporter in Space Station 1)
    hideteleporters() - hide the teleporters on the map
    showtargets() - show the targets on the map (unknown teleporters which show up as ?s)
    hidetargets() - hide the targets on the map
    showtrinkets() - show the trinkets on the map?
    hidetrinkets() - hide the trinkets on the map?
       blue because: There is no way you have all teleporters or trinkets at the same location as in the real game, but maybe hidetrinkets can be used to hide all trinkets from the map, if the map in 2.1 shows trinkets (I have no idea what a 2.1 map looks like)

    hascontrol() - makes the player have control, however doesn't work in the middle of scripts
    nocontrol() - the opposite of hascontrol()
    specialline(x) - special dialogs, with text(colour,0,0,0) before it?
       blue because: I have never seen any of the lines below these commands (they're talking about lollipops ???) and I don't know when you see them

    destroy(gravitylines) - same behaviour as simplified command
    destroy(warptokens) - same behaviour as simplified command
    destroy(platforms) - same (glitchy) behaviour as simplified command
    delay(x) - same behaviour as simplified command
    flag(x,on/off) - same behaviour as simplified command
    telesave() - saves your game (in the regular teleporter save, so don't use it!)
       red because: this is one of the two commands in this list which you really shouldn't use, to make a long story short: it destroys your teleporter save, regardless of how you use it.

    befadein() - instantly fade in from fadeout()
    createactivityzone(colour) - creates a zone where you are standing which says "Press ACTION to talk to (Crewmate)"
       blue because: you can't control what happens if you press enter

    createrescuedcrew() - creates all rescued crewmates
       blue because: crewmates rescued with rescued(colour), so you have to put that command in a script box after you rescue a certain crewmate to make this work.

    trinketyellowcontrol() - diolog of :vitellary: when he gives you a trinket in the real game
    trinketbluecontrol() - dialog of :victoria: when she gives you a trinket in the real game
       blue because: I don't think there is a purpose for using this in a custom level

    rollcredits() - makes the credits roll.
       red because: It destroys your save after the credits are completed!

    teleportscript(levelonecomplete) - used to set a script which is run when you use a teleporter (in this case levelonecomplete)
       blue because: It loads an internal script, and you can't really use teleporters, and if you make them with createentity(x,y,14,0,0), you'll have to touch the teleporter which corrupts your save data

    clearteleportscript() - clears the teleporter script set with teleporterscript(x)
       blue because: It is useless without teleportscript(x) and this command isn't even used in the game itself!

    moveplayer(x,y) - moves the player x pixels to the right and y pixels down (and of course you can also use negative numbers to make him move up or to the left)
    do(n) - unused command, starts a loop block which will repeat n times
    loop - put this at the end of the loop block
    Quote from: Example
    cutscene()
    untilbars()
    squeak(terminal)
    text(gray,0,0,1)
    You will hear 3 coin sounds in a row.
    position(center)
    speak_active
    endtext
    do(3)
    playef(4)
    delay(20)
    loop

    squeak(terminal)
    text(gray,0,0,1)
    The loop has ended.
    position(center)
    speak_active
    endtext
    endcutscene()
    untilbars()
    leavesecretlab() - turn off "secret lab mode"
       blue because: the secret lab is not accessible in custom levels.


    Some commands I'm not sure about if they exist or not:

    ifwarp(x)

    Some new ones which I will test:
    resumemusic()
    musicfadein()

    That's all I know for now... :viridian:

    Important: if you have to specify a certain crewmate, don't use their names, because that won't work. Use their colours:
    :viridian: = cyan or player
    :victoria: = blue
    :vermillion: = red
    :vitellary: = yellow
    :verdigris: = green
    :violet: = purple
    = gray or terminal


    HOW TO USE INTERNAL COMMANDS:

    For the ones who don't know:

    Code: [Select]
    say(-1)
    text(1,0,0,4)
    say(5)
    [internal]
    [internal]
    [internal]
    [internal]
    text(1,0,0,4)
    say(5)
    [internal]
    [internal]
    [internal]
    [internal]
    text(1,0,0,4)
    say(5)
    ...

    It has to end with:

    Code: [Select]
    ...
    [internal]
    [internal]
    [internal]
    [internal
    text(1,0,0,4)
    say(4)
    endtext
    endcutscene()
    untilbars()
    loadscript(stop)

    You don't have to use say(5) if you want to use less than 4 commands in a row, you can use say(4) to have 3 commands in a row, say(3) to have 2 commands in a row, et cetera. For example:

    Code: [Select]
    say(-1)
    text(1,0,0,4)
    say(4)
    [internal]
    [internal]
    [internal]
    text(1,0,0,4)
    say(5)
    [internal]
    [internal]
    [internal]
    [internal]
    text(1,0,0,4)
    say(2)
    [internal]
    text(1,0,0,4)
    say(4)
    endtext
    endcutscene()
    untilbars()
    loadscript(stop)

    Text boxes in internal scripting are a bit hard to do.