distractionware forums

VVVVVV => VVVVVV Help => Topic started by: Hilbert on July 28, 2012, 06:23:29 AM

Title: Internal commands
Post by: Hilbert on July 28, 2012, 06:23:29 AM
Collect all internal commands here.
Title: Re: Internal commands
Post by: Dav999 on July 28, 2012, 06:43:41 AM
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.

squeak(colour) - makes a crewmate squeak (or makes a terminal sound)
text(colour,x,y,lines) - creates a text box (which doesn't appear until you use speak_active or speak)
position(center/centerx/centery/colour,above/colour,below) - overrides the x,y of the text command (sets the position of the text box)
endtext - makes a text box disappear (fade out)
endtextfast - makes a text box disappear immediately (without fading out)
speak - shows a text box, without removing old text boxes. Also pauses the script until you press action (unless there's a backgroundtext command above it, see below)
speak_active - shows a text box, and removes any old text box. Also pauses the script until you press action (unless there's a backgroundtext command above it, see below)
backgroundtext - if you put this command on the line above speak or speak_active, the game will not wait until you press action after creating the text box. This can be used to create multiple text boxes at the same time, like this:
Code: [Select]
squeak(player)
text(gray,0,0,1)
This is text box one.
backgroundtext
speak_active
text(gray,0,50,1)
This is text box two!
backgroundtext
speak
text(gray,0,100,1)
They will appear all at once!
speak
endtext
Normally, a text box in internal scripting looks like this:
Code: [Select]
squeak(color)
text(color,x,y,lines)
[The text]
position(x[,x])
speak_active
After the last text box, or before a delay after a text box, use 'endtext', to make the text box disappear. You don't have to do this in between text boxes.
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
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
   blue because: It shows teleporters of the main game

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:
Code: [Select]
0 - Path Complete
1 - Pushing Onwards
2 - Positive Force
3 - Potential For Anything
4 - Passion For Exploring
5 - Pause
6 - Presenting VVVVVV
7 - Plenary
8 - Predestined Fate
9 - ecroF evitisoP
10 - Popular Potpurri
11 - Pipe Dream
12 - Pressure Cooker
13 - Paced Energy
14 - Piercing The Sky
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 (?) Doesn't have anything to do with flipping Viridian (http://www.wegenforum.nl/images/smilies/icon_facepalm.gif) It has something to do with text boxes in flip mode.
tofloor - makes :viridian: go to the floor. This has always worked for me, actually.
flip - make :viridian: flip either way, this always works.
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
(http://d2bm3ljpacyxu8.cloudfront.net/width/30/crop/0,0,30x35/afbeeldinge.webs.com/terminal.jpg) = gray or terminal


HOW TO USE INTERNAL COMMANDS:

There are two methods to do it. Those methods are listed below, and I attached an example with those two methods as a vvvvvv level.

--- METHOD 1 - THE SAY(-1) METHOD ---

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

It has to end with:

Code: [Select]
...
{internal command}
{internal command}
{internal command}
{internal command}
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 command}
{internal command}
{internal command}
text(1,0,0,4)
say(5)
{internal command}
{internal command}
{internal command}
{internal command}
text(1,0,0,4)
say(2)
{internal command}
text(1,0,0,4)
say(4)
endtext
endcutscene()
untilbars()
loadscript(stop)

Text boxes in internal scripting are a bit hard to do, because you can only use 4 lines in a row. There's a post somewhere else in this topic which explains how to do it. This post is already REALLY long.

--- METHOD 2 - WITHOUT CUTSCENE BARS---

If you want to use internal commands without cutscene bars, put this in the script box which Viridian walks through:

Code: (script1) [Select]
iftrinkets(0,script2)
Then make a new script. In this case the new script is called 'script2' (you can use any name using a-z or 0-9, note that A-Z and some special characters should not be used). Delete the script box, so that Viridian doesn't activate it directly. The script has to be activated by the script containing iftrinkets(0,script2).

The second script should look like this:

Code: (script2 first part) [Select]
say(5)
{internal command}
{internal command}
{internal command}
{internal command}
text(1,0,0,4)
say(5)
{internal command}
{internal command}
{internal command}
{internal command}
text(1,0,0,4)
say(5)
...

It has to end with:

Code: (script2 last part) [Select]
...
{internal command}
{internal command}
{internal command}
{internal command}
text(1,0,0,4)
say(2)
endtext
loadscript(stop)
text(1,0,0,4)

Note that in the last part of this script, there has to be one blank line after the last text(1,0,0,4). Not 0, because then things get deleted because of a bug in the script editor, and not more than 1, because then it won't work. 'text(1,0,0,4)' has to be the second last line, and the last line has to be empty.

Just like in the say(-1) method, 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: (script2) [Select]
say(4)
{internal command}
{internal command}
{internal command}
text(1,0,0,4)
say(5)
{internal command}
{internal command}
{internal command}
{internal command}
text(1,0,0,4)
say(2)
{internal command}
text(1,0,0,4)
say(2)
endtext
loadscript(stop)
text(1,0,0,4)
Title: Re: Internal commands
Post by: FIQ on July 28, 2012, 10:56:06 AM
Do you have the *full* gamestate list?
Title: Re: Internal commands
Post by: Dav999 on July 28, 2012, 11:50:54 AM
Do you have the *full* gamestate list?

This should be complete:

2 - "To do: write quick intro to story!"
4 - "Press arrow keys or WASD to move"
5 - Fadeout, fadein, play Passion for Exploring
8 - "Press enter to view map and quicksave"
9 - Super Gravitron
10 - Gravitron
11 - "When you're NOT standing on stop and wait for you"
12 - "You can't continue to the next room until he is safely accross."
14 - "When you're standing on the floor,"
16 - Makes Viridian sad
17 - "If you prefer, you can press UP or DOWN instead of ACTION to flip."
22 - "Press ACTION to flip"
30 - "I wonder why the ship teleported me here alone?" "I hope everyone else got out ok…"
31 - "Violet, is that you?" cutscene
32 - "A teleporter!" "I can get back to the ship with this!"
33 - Victoria-cutscene
34 - Vitellary-cutscene
35 - Verdigris-cutscene
36 - Vermilion-cutscene
37 - Vitellary after gravitron
38 - Vermilion after gravitron
39 - Verdigris after gravitron
40 - Victoria after gravitron
47 - "Ohh! I wonder what that is?" trinket cutscene
48 - "This seems like a good place to store anything I find out there…" (Victoria not found yet)
49 - Play Predestined Fate
50 - "Help! Can anyone hear this message?"
51 - "Verdigris? Are you out there? Are you ok?"
52 - "Please help us! We've crashed and need assistance!"
53 - "Hello? Anyone out there?"
54 - "This is Doctor Violet from the D.S.S. Souleye! Please respond!"
55 - "Please… Anyone…"
56 - "Please be alright, everyone…"
With gamestate 50-56, you can choose where to start, because everything will appear after each other (did anyone know that if you wait after "Help! Can anyone hear this message?", there will be more text?)
81 - Go back to the main menu
82 - Results of time trial
84 - Results of time trial (I think 82 works better than 84)
85 - Flash + play Positive Force
90 - First cutscene (goes to another location)
91 - Play Potential For Anything (also goes to another location)
92 - Same as above (but goes to another location as above)
93 - Go to another location and play Positive Force
94 - Go to another location and play Pushing Onwards
97 - Go to another location and play Pipe Dream
100 - Verdigris: "Captain! I've been so worried!"
101 - Same as above
102 - Same as above
104 - "I'm glad you're ok!" dialog that will never go away
106 - "I've been trying to find a way out, but I keep going around in circles…"
108 - "Don't worry! I have a teleporter key!"
110 - "Follow me!"
115 - Red dialog at the bottom of the screen saying "Sorry Eurogamers! Teleporting around the map doesn't work in this version!"
116 - Same as above
120 - Flip, and then Vitellary says: "Captain! You're ok!" "I've found a teleporter, but I can't get it to go anywhere…" Viridian: "I can help with that!" "I have the teleporter codex for our ship!" Vitellary: "Yey! Let's go home!" (never heard of this cutscene before? :-\)
121 - Same as above
122 - Same as above, but without flipping
124 - "I've found a teleporter, but I can't get it to go anywhere…"
126 - "I can help with that!"
128 - "I have the teleporter codex for our ship!"
130 - "Yey! Let's go home!"
200 - Final mode
3050 - Level Complete! You have rescued Violet!
4010 - Flash + warp
4070 - The Final Level, but the game will crash when you reach timeslip!
4080 - Captain teleported back to the ship: "Hello!" [C[C[C[C[Captain!] cutscene + credits
!!!The above will mess up your save data so don't do it unless you backed up!!!
4090 - Cutscene after you complete space station 1

Please note that gamestates are dangerous and can mess up save data (like 4080)!

EDIT: I meant space station, not intermission.
Title: Re: Internal commands
Post by: TheoX on July 28, 2012, 02:07:31 PM
Wow!  How many of these are new and how many were there before?

vvvvvvman() - you know what it does
I actually don't.  :-\
Title: Re: Internal commands
Post by: ToasterApocalypse on July 28, 2012, 02:13:42 PM
Wow!  How many of these are new and how many were there before?

vvvvvvman() - you know what it does
I actually don't.  :-\

You know in the laboratry cutscene after getting all 20 trinkets
you go huge

yes
Title: Re: Internal commands
Post by: Hilbert on July 28, 2012, 02:28:26 PM
Wow!  How many of these are new and how many were there before?

vvvvvvman() - you know what it does
I actually don't.  :-\
COMBINE INTO AN UBER- GIANT GUY LIKE IN THE SPOILERS secret lab CUTSCENE
Title: Re: Internal commands
Post by: FIQ on July 28, 2012, 02:34:13 PM
Here is the *complete* gamestate list if anyone wonders (Edited some of yours to detail exactly what happens) :p

Quote
0 - Break out from most gamestates
1 - Set gamestate to 0 (i.e. same as above in practice)
2 - "To do: write quick intro to story!"
4 - "Press arrow keys or WASD to move"
5 - Runs the script "returntohub" (i.e. fadeout, teleport to right before The Tower, fadein, play Passion for Exploring)
7 - Removes textboxes
8 - "Press enter to view map and quicksave"
9 - Super Gravitron
10 - Gravitron
11 - "When you're NOT standing on stop and wait for you" (Tries to access flipmode check to write "the ceiling" or "the floor", and check crewmate, but as this fails, the above prints instead)
12 - "You can't continue to the next room until he is safely accross."
13 - Removes textboxes quickly
14 - "When you're standing on the floor," (the same applies here as for 11)
15 - Makes Viridian happy
16 - Makes Viridian sad
17 - "If you prefer, you can press UP or DOWN instead of ACTION to flip."
20 - If flag 1 is 0, set flag 1 to 1 and remove textboxes
21 - If flag 2 is 0, set flag 2 to 1 and remove textboxes
22 - "Press ACTION to flip"
30 - "I wonder why the ship teleported me here alone?" "I hope everyone else got out ok…"
31 - "Violet, is that you?" cutscene (as long as flag 6 is 0)
32 - If flag 7 is 0: "A teleporter!" "I can get back to the ship with this!"
33 - If flag 9 is 0: Victoria-cutscene
34 - If flag 10 is 0: Vitellary-cutscene
35 - If flag 11 is 0: Verdigris-cutscene
36 - If flag 8 is 0: Vermilion-cutscene
37 - Vitellary after gravitron
38 - Vermilion after gravitron
39 - Verdigris after gravitron
40 - Victoria after gravitron
41 - If flag 60 is 0: run the beginning of intermission 1 cutscene
42 - If flag 62 is 0: run the 3rd intermission 1 cutscene
43 - If flag 63 is 0: run the 4th intermission 1 cutscene
44 - If flag 64 is 0: run the 5th intermission 1 cutscene
45 - If flag 65 is 0: run the 6th intermission 1 cutscene
46 - If flag 66 is 0: run the 7th intermission 1 cutscene
47 - If flag 69 is 0: "Ohh! I wonder what that is?" trinket cutscene
48 - If flag 70 is 0: "This seems like a good place to store anything I find out there…" (Victoria not found yet)
49 - If flag 71 is 0: Play Predestined Fate
50 - "Help! Can anyone hear this message?"
51 - "Verdigris? Are you out there? Are you ok?"
52 - "Please help us! We've crashed and need assistance!"
53 - "Hello? Anyone out there?"
54 - "This is Doctor Violet from the D.S.S. Souleye! Please respond!"
55 - "Please… Anyone…"
56 - "Please be alright, everyone…"
With gamestate 50-56, you can choose where to start, because everything will appear after each other (did anyone know that if you wait after "Help! Can anyone hear this message?", there will be more text?)
80 - If screen is black (and only if), continue to state 81 (My guess is that this is called when ESC is pressed, before the pause meny opens)
81 - Go back to the main menu
82 - Results of time trial (bugged)
83 - If screen is back, continue to state 84
84 - Results of time trial (I think 82 works better than 84)
85 - The Time Trial version of gamestate 200 (Flash, play Positive Force, turn on finalstretch mode)
States 90-95 are time trial related, but doesn't work properly in custom levels. The only real effects that happens in custom levels is a warp, and music change
90 - Space Station 1
91 - The Laboratory
92 - Warp Zone
93 - The Tower
94 - Space Station 2
95 - Final Level
96 - If the screen is black, continue to state 97
97 - Exit from Super Gravitron (teleport and play Pipe Dream)
100 - If flag 4 is 0: continue to state 101
101 - If you are flipped, flip back to floor, continue to state 102
The following states (102-112) tries to go to the current state + 1, like in 50-56 (but doesn't loop around), but may glitch as half of the states (103, 105, 107, 109, 111) doesn't exist.
102 - Verdigris: "Captain! I've been so worried!"
104 - "I'm glad you're ok!"
106 - "I've been trying to find a way out, but I keep going around in circles…"
108 - "Don't worry! I have a teleporter key!"
110 - "Follow me!"
112 - Removes textboxes
115 - Essentially nothing, continue to state 116
116 - Red dialog at the bottom of the screen saying "Sorry Eurogamers! Teleporting around the map doesn't work in this version!", continue to state 117, which doesn't exist, so things may fail
118 - Removes textboxes
State 120-128 works a bit like 102-112, i.e. in a series, but with less broken things
120 - If flag 5 is 0: continue to state 121
121 - If you're on the floor, flip.
122 - Vitellary: "Captain! You're ok!"
124 - Vitellary: "I've found a teleporter, but I can't get it to go anywhere…"
126 - "I can help with that!"
128 - "I have the teleporter codex for our ship!"
130 - "Yey! Let's go home!" (never heard of this cutscene before? Probably things Terry played with before coming up with the current story/etc /fiq)
132 - Removes textboxes
200 - Final mode
1000 - Turns on cutscenebars, freezes the game, continue to state 1001
1001 - You got a shiny trinket! dialog (but you didn't actually get any, this is just called each time you get one), continue to state 1003
1003 - Revert game to normal
1010 - You found a crewmate! in the same manner as for trinkets
2000 - Save the game
2500-2509 - Perform a teleport to some weird non-existent location, supposedly to The Laboratory I guess, continue to state 2510
2510 - Viridian: "Hello?", continue to state 2512
2512 - Viridian: "Is anybody there?", continue to state 2514
2514 - Removes textboxes, play Potential For Anything
3000-3099 states:
3000-3005 - Level Complete! You've rescued the crewmate applied to companion(), defaults to Verdigris. 6=Verdigris, 7=Vitellary, 8=Victoria, 9=vermillion, 10=viridian (yes, really), 11=Violet (Gamestates: 3006-3011=Verdigris, 3020-3026=Vitellary, 3040-3046=Victoria, 3060-3066=Vermillion, 3080-3086=Viridian, 3050-3056=Violet)
3070-3072 - Perform postrescue things, usually return to ship
4010 - Flash + warp
4070 - The Final Level, but the game will crash when you reach timeslip! (Because of how the game gets entity information, which is broken in custom levels)
4080 - Captain teleported back to the ship: "Hello!" [C[C[C[C[Captain!] cutscene + credits
!!!The above will mess up your save data so don't do it unless you backed up!!!
4090 - Cutscene after you complete space station 1

There is more but I can't check more at the moment

Some commands:
foundtrinket(x) - Found a trinket. x is the trinket ID (1-20 usually). The ID is hard to grab in a custom level, bruteforce if you're uncertain and see which is removed. 21+ will increase the trinket counter but not actually give any trinkets - in case you want secrets for 105%+ trinket completion :)
runtrinketscript - Makes the music continue as normal (plays Passion for exploring from where it stopped if you ran the above when it was playing already, if not, play it from the beginning). If you're using foundtrinket(), I suggest that you use a combination of endtext() and play() instead.
ifexplored(x,y,script) - If x+1,y+1 is explored, run "script"
iflast(x,script) - if crewmember x was the last one rescued, run "script"
specialline(x) - Some dialogs are called by this (x is a number). No idea why really
altstates(x) - Change altstate.

In the normal game, 2 maps has more than one layout. These can be switched by switching the altstate. The rooms affected is the trinket room @ship and the secret lab entrance. 0 is normal (normal trinket room, open entrance). 1 is exploded-trinkets trinket room and a secret lab entrance with 2 walls. 2 is when one of the walls is broken by VVVVVV Man.
Title: Re: Internal commands
Post by: Dav999 on July 28, 2012, 03:15:19 PM
How did you discover all the flag-related things? :o

Maybe there are also gamestates with letters, just like music(0a), music(5a) and music(9a)!
Title: Re: Internal commands
Post by: FIQ on July 28, 2012, 03:20:35 PM
How did you discover all the flag-related things? :o

Maybe there are also gamestates with letters, just like music(0a), music(5a) and music(9a)!
I cheated. Not going to tell more than that, to prevent Terry from being mad at me. :D
I also cheated to find the gamestate for "game complete" in Back to VVVVVV (otherwise I just did things the same way as you to look scripts)
There are no gamestates with letters.

music(5a) isn't really a music ID - I just inserted "a" in my examples to show how you could trick the parser to play track 5 instead of translaing music(5) to play(6).
Title: Re: Internal commands
Post by: Dav999 on July 28, 2012, 03:42:14 PM
I cheated. Not going to tell more than that, to prevent Terry from being mad at me. :D

I actually tried the first 203 gamestates one by one, then I searched in the binary for the remaining gamestates (the four digit ones). I wonder what you mean with 'cheated'? ??? :-\
Title: Re: Internal commands
Post by: Pyrite on July 28, 2012, 03:53:02 PM
How do you use these.
Title: Re: Internal commands
Post by: blue626 on July 28, 2012, 03:57:51 PM
Wow!  How many of these are new and how many were there before?

Note that these are part of internal scripting, meaning that they were commands used in the main game and should not be used in user levels. Actually, you need to use a combination of say commands to use them in user levels (in other ways the commands would be erased), but they still will create glitches, unless you know how to use them well. Some people have already used them in levels, but I still recommend to not use them. I suppose they are the same in 2.0 and 2.1.beta..


The "I have a teleported key!" cutscenes don't appear in the game in versions 1.2, 2.0 and, probably, 2.1.beta. I wonder if these were used in beta versions or prototypes of the game, as well as the "Sorry Eurogamers" cutscene :D.
So many internal commands and gamestates! I wonder why there are big gaps in the gamestates' numbers.
FIQ: You already have seen the scripts of the main game (by opening agile on a text editor), didn't you? So, you know the flags used and the place and time on the game they're used. If you can test gamestates on custom levels you could just change the flags and watch! But, you must have done something else, that you can't say in the forums to prevent Terry from being mad at you... Does it have to do with the main game and its scripts? Did you play the main  game again?

Roskilla: Look at your post. I suppose that you wanted to write in white what you wrote in blue-green. Also, Toaster already said the same thing!
Title: Re: Internal commands
Post by: FIQ on July 28, 2012, 04:06:32 PM
I cheated. Not going to tell more than that, to prevent Terry from being mad at me. :D

I actually tried the first 203 gamestates one by one, then I searched in the binary for the remaining gamestates (the four digit ones). I wonder what you mean with 'cheated'? ??? :-\
I really don't want to tell it (Hey Terry, if you care/wonder, throw me a PM).

manofperson: By tricking the parser, the explanation is in various places in this forum, but it all boils down to this:

say(-1)
text(1,0,0,4)
say(5)
internalscript
internalscript
internalscript
internalscript
text(1,0,0,4)
say(5)
internalscript
internalscript
internalscript
internalscript
text(1,0,0,4)
say(5)
...
text(1,0,0,4)
say(5)
internalscript
internalscript
endcutscene
untilbars
loadscript(stop)

blue626: agile? And no, not that. Yes, flags can be tested by bruteforcing, but that would take ages :P
Title: Re: Internal commands
Post by: Dav999 on July 28, 2012, 04:21:36 PM
It's hard to extract the full game script from the binary, because it is compressed or something. I noticed that no line of text appears twice.
For example:

squeak(terminal)
text(gray,0,0,2)
This is a
terminal!
position(center)
speak_active
squeak(terminal)
text(gray,0,0,2)
Again, this is a
terminal!
position(center)
speak_active
squeak(terminal)
text(gray,0,0,2)
And this is another
example text!
position(center)
speak_active

Would appear in the binary as something like this (I use a hex editor to read the binary):

squeak(terminal).text(gray,0,0,2).This is a.terminal!.position(center).speak_active.Again, this is a.And this is another.example text!

Lines that are used more than once just disappear the second time!
Title: Re: Internal commands
Post by: FIQ on July 28, 2012, 04:30:29 PM
That's very logical. The strings should be stored 1 time only and taken when needed.
Makes more sense if you know machine code (which I don't, so I can't explain fully).
Title: Re: Internal commands
Post by: Pyrite on July 28, 2012, 07:21:37 PM
how do you use these in 2.1
Title: Re: Internal commands
Post by: Dav999 on July 29, 2012, 01:42:58 AM
how do you use these in 2.1
manofperson: By tricking the parser, the explanation is in various places in this forum, but it all boils down to this:

say(-1)
text(1,0,0,4)
say(5)
internalscript
internalscript
internalscript
internalscript
text(1,0,0,4)
say(5)
internalscript
internalscript
internalscript
internalscript
text(1,0,0,4)
say(5)
...
text(1,0,0,4)
say(5)
internalscript
internalscript
endcutscene
untilbars
loadscript(stop)
Title: Re: Internal commands
Post by: Hilbert on July 29, 2012, 05:43:16 AM
It's hard to extract the full game script from the binary, because it is compressed or something. I noticed that no line of text appears twice.
For example:

squeak(terminal)
text(gray,0,0,2)
This is a
terminal!
position(center)
speak_active
squeak(terminal)
text(gray,0,0,2)
Again, this is a
terminal!
position(center)
speak_active
squeak(terminal)
text(gray,0,0,2)
And this is another
example text!
position(center)
speak_active

Would appear in the binary as something like this (I use a hex editor to read the binary):

squeak(terminal).text(gray,0,0,2).This is a.terminal!.position(center).speak_active.Again, this is a.And this is another.example text!

Lines that are used more than once just disappear the second time!
Instead of periods for dividers, I think it uses the | key
Title: Re: Internal commands
Post by: Dav999 on July 29, 2012, 07:05:40 AM
Instead of periods for dividers, I think it uses the | key
That only appears in custom levels, which is why you shouldn't use ä (the | character looks like ä in the VVVVVV font). But in the real game, it uses the zeroth character, which shows up as a period:
(http://d2bm3ljpacyxu8.cloudfront.net/width/478/crop/0,0,478x367/afbeeldinge.webs.com/hex.jpg)

In a text editor it will not even show anything:
(http://d2bm3ljpacyxu8.cloudfront.net/width/640/crop/0,0,640x411/afbeeldinge.webs.com/text.jpg)

So, it doesn't use | as a seperator.
Title: Re: Internal commands
Post by: Pyrite on July 29, 2012, 08:00:55 AM
but isn't that in 2.0? i tried using the text command it doesn't work.
Title: Re: Internal commands
Post by: Dav999 on July 29, 2012, 08:34:19 AM
but isn't that in 2.0? i tried using the text command it doesn't work.

What do you mean by 'that'? The internal commands or | as a seperator?
Title: Re: Internal commands
Post by: FIQ on July 29, 2012, 08:55:41 AM
The text command is (interestingly) the most complex thing to work with internally. Only use it if you must. You'll have to recreate how it's made with simple scripting, something like this can be used:

say(-1)
text(1,0,0,4)
say(5)
(do things)
text(1,0,0,4)
say(2)
squeak(cyan)
text(1,0,0,4)
say(5)
text(cyan,-1,30,1)
Test!
speak_active
endtext
text(1,0,0,4)
say(2)
squeak(cyan)
text(1,0,0,4)
say(5)
text(cyan,-1,30,1)
Test with 2
lines!
speak_active
text(1,0,0,4)
say(2)
squeak(cyan)
text(1,0,0,4)
say(5)
text(cyan,-1,30,1)
Last test!
speak_active
endtext
text(1,0,0,4)
say(5)
(more non-dialog things)
text(1,0,0,4)
say(3)
endcutscene
untilbars
loadscript(stop)

Note that the last text line *must* include endtext (it's optional otherwise), and therefore can only be 1 line max, if you're not going to exit from the internal scripting "mode". If you're fine with exiting it, you can use this (but it will make the last dialog appear in center as position(center) is inserted by the parser):

...
text(1,0,0,4)
say(5)
text(cyan,0,0,4)
The
last
text
dialog


EDIT: typos
Title: Re: Internal commands
Post by: Dav999 on July 29, 2012, 09:25:03 AM
Internally, text boxes will look like this:

squeak(terminal)
text(gray,0,0,1)
This is a text box.
position(center)
speak_active

squeak(terminal) makes a terminal sound, text(gray,0,0,1) stores the following line of text in the memory, position(center) overrides the coordinates used in the text() command and makes sure the text box is in the center, and without speak_active nothing would show up at all: speak_active makes the text box appear.

Terry didn't have to worry about the number of lines available for commands, but if you want to use internal commands in the level editor, you have to use this:

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)
Etc.

You can only use 4 lines of internal code after each other each time, so the code I showed in the beginning of this post won't fit. You have to split it up. You have to split it after squeak(terminal), because these lines:

text(gray,0,0,1)
This is a text box.
position(center)
speak_active

have to come after each other.

So you can use:

say(-1)
text(1,0,0,4)
say(2)
squeak(terminal)
text(1,0,0,4)
say(5)
text(gray,0,0,1)
This is a text box.
position(center)
speak_active
text(1,0,0,4)
say(4)
endtext
endcutscene()
untilbars()
loadscript(stop)

Now you can only have a text box with one line of text. If you omit position(center), the text box will appear at the top left corner of the screen. If you omit speak_active, no text box will appear at all. If you put these commands after text(1,0,0,4) say(5), you will see a text box with gibberish. You can omit position(center), as long as you use coordinates in the text() command to put it at the appropriate position. FIQ used 54,55 to put it in the center. If you use that, you can use two lines:

say(-1)
text(1,0,0,4)
say(2)
squeak(terminal)
text(1,0,0,4)
say(5)
text(gray,54,55,2)
This is a text box
with two lines!
speak_active
text(1,0,0,4)
say(4)
endtext
endcutscene()
untilbars()
loadscript(stop)

If you use 2.1, and only IF, you can also use this:

say(-1)
text(1,0,0,4)
say(infinite number of lines)
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
etc.

So you can use something like this:

say(-1)
text(1,0,0,4)
say(13)
squeak(terminal)
text(gray,0,0,5)
This
is a
long
text
box.
position(center)
speak_active
endtext
endcutscene()
untilbars()
loadscript(stop)

But please note that this only works with 2.1, and it will not work with 2.0!
Title: Re: Internal commands
Post by: FIQ on July 29, 2012, 12:40:38 PM
Internally, text boxes will look like this:

squeak(terminal)
text(gray,0,0,1)
This is a text box.
position(center)
speak_active

squeak(terminal) makes a terminal sound, text(gray,0,0,1) stores the following line of text in the memory, position(center) overrides the coordinates used in the text() command and makes sure the text box is in the center, and without speak_active nothing would show up at all: speak_active makes the text box appear.

Terry didn't have to worry about the number of lines available for commands, but if you want to use internal commands in the level editor, you have to use this:

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)
Etc.

You can only use 4 lines of internal code after each other each time, so the code I showed in the beginning of this post won't fit. You have to split it up. You have to split it after squeak(terminal), because these lines:

text(gray,0,0,1)
This is a text box.
position(center)
speak_active

have to come after each other.

So you can use:

say(-1)
text(1,0,0,4)
say(2)
squeak(terminal)
text(1,0,0,4)
say(5)
text(gray,0,0,1)
This is a text box.
position(center)
speak_active
text(1,0,0,4)
say(4)
endtext
endcutscene()
untilbars()
loadscript(stop)

Now you can only have a text box with one line of text. If you omit position(center), the text box will appear at the top left corner of the screen. If you omit speak_active, no text box will appear at all. If you put these commands after text(1,0,0,4) say(5), you will see a text box with gibberish. You can omit position(center), as long as you use coordinates in the text() command to put it at the appropriate position. FIQ used 54,55 to put it in the center. If you use that, you can use two lines:

say(-1)
text(1,0,0,4)
say(2)
squeak(terminal)
text(1,0,0,4)
say(5)
text(gray,54,55,2)
This is a text box
with two lines!
speak_active
text(1,0,0,4)
say(4)
endtext
endcutscene()
untilbars()
loadscript(stop)

If you use 2.1, and only IF, you can also use this:

say(-1)
text(1,0,0,4)
say(infinite number of lines)
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
etc.

So you can use something like this:

say(-1)
text(1,0,0,4)
say(13)
squeak(terminal)
text(gray,0,0,5)
This
is a
long
text
box.
position(center)
speak_active
endtext
endcutscene()
untilbars()
loadscript(stop)

But please note that this only works with 2.1, and it will not work with 2.0!
A thing I noticed way after using 54,55 is that you can, in fact, make it in center in the x axis (<---->) by using -1 as coordinate, i.e. text(cyan,-1,55,1). This will always be at center, no matter how long the text string is, so no need to calculate that.

Also, as I said before, you MUST have endtext at the last textbox that will appear in your script, or the textbox will not go away.
Title: Re: Internal commands
Post by: FIQ on July 29, 2012, 01:03:21 PM
The simplified -> internal scripting conversions, if anyone wonders (most useful if you want to utilize them in internal scripts as they work normally): ("|" means >1 line).

Simplified: Internal
ifflag(N,script): customifflag(N,script)
iftrinkets(N,script): customiftrinkets(N,script)
iftrinketless(N,script): customiftrinketless(N,script)
delay(N): delay(N)
destroy(x): destroy(x)
map(on/off): map(on/off)
flag(N,on/off): flag(N,on/off)
flash: flash(5)|playef(9)|shake(20)
happy: squeak(cyan)|changemood(player,0)
happy(crewmate/colour): squeak(colour)|changemood(colour,0)
sad: squeak(cry)|changemood(player,1)
sad(crewmate/colour): squeak(cry)|changemood(colour,1)
squeak(crewmate/colour): squeak(colour)
music(N):
The following conversion will be made if possible:
0->stopmusic()
1->play(1)
2->play(2)
3->play(3)
4->play(4)
5->play(6)
6->play(8)
7->play(10)
8->play(11)
9->play(12)
10->play(13)
11->play(14)
other->play(other) (This is why music(0a), for example, works)

say(1)|hi: squeak(terminal)|text(terminal,0,0,1)|hi|customposition(center)|speak_active|endtext
reply(1)|hi: squeak(cyan)|text(cyan,0,0,1)|hi|customposition(player,above)|speak_active|endtext
say(1,crewmate/colour)|hi: squeak(colour)|text(colour,0,0,1)|hi|customposition(colour,above)|speak_active|endtext

Also, the parser will first scan the script "file" before any execution for say()/reply() lines. If it finds any, the following will be altered:

cutscene()
untilbars()
(THE SCRIPT)
endcutscene()
untilbars()

This is why the internal scripting exploit always turn on these, and this is why checking flags to stop a script containing say()/reply() scripts is a bad idea and will make cutscenebars stuck.
Title: Re: Internal commands
Post by: Dav999 on July 29, 2012, 01:42:09 PM
say(1)|hi: squeak(terminal)|text(terminal,0,0,1)|hi|customposition(center)|speak_active|endtext
reply(1)|hi: squeak(cyan)|text(cyan,0,0,1)|hi|customposition(player,above)|speak_active|endtext
say(1,crewmate/colour)|hi: squeak(colour)|text(colour,0,0,1)|hi|customposition(colour,above)|speak_active|endtext

What is the difference between position(x) and customposition(x)? I don't think it converts to customposition, because if I run this script in 2.0:

say(6)
This
is a
text
box with
six
lines.
say(2)
This is a text
box with two lines.

I get a text box with:

This
position(center)
speak_active
squeak(terminal)
text(gray,0,114,2)
This is a text

Which is the proof it converts to position(). Also if I make a text box using internal script, and if I use customposition(center), it doesn't work. In that case it works with the coordinates specified in text().
Also, I didn't find a single customposition in the binary!

A thing I noticed way after using 54,55 is that you can, in fact, make it in center in the x axis (<---->) by using -1 as coordinate, i.e. text(cyan,-1,55,1). This will always be at center, no matter how long the text string is, so no need to calculate that.

Nicely found! Also, if you use text(colour,-1,-1,lines), it replaces position(centerx).
Title: Re: Internal commands
Post by: blue626 on July 29, 2012, 03:25:25 PM
If you use 2.1, and only IF, you can also use this:

say(-1)
text(1,0,0,4)
say(infinite number of lines)
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
[internal]
etc.

So you can use something like this:

say(-1)
text(1,0,0,4)
say(13)
squeak(terminal)
text(gray,0,0,5)
This
is a
long
text
box.
position(center)
speak_active
endtext
endcutscene()
untilbars()
loadscript(stop)

But please note that this only works with 2.1, and it will not work with 2.0!

If you read the 1st post in the "Script commands index and tips" thread, you'll see that in say/reply(n), n can be only 1-11, so, say(13) won't work. say(13) = text box with 5 lines, so, say(11) = text box with 3 lines. If you want text boxes (using internal scripting) with more than 3 lines, you have to split the internal commands (using more say(-1) and text(1,0,0,4) commands).

EDIT: Looking at the posts above, where Dav999 and FIQ wrote examples of how to use internal scripting, and reading what Dav999 wrote about the command text, I don't see why do you have to use text(1,0,0,4) sometimes. I also don't see why you'll need say(-1) at the start. Look at the example below, specially, at the 1st line:

text(1,0,0,1)
say(5)
Internal scripting
Internal scripting
Internal scripting
Internal scripting
Internal scripting


Wouldn't it work? If not, would it work if I replaced the 1st line with text(1,0,0,4), or if I wrote say(-1) before the 1st line?

EDIT 2: I know why you need say(-1) now (because the editor would erase the text command if this command wasn't written, am I right?). I still don't know why do you need to use text(1,0,0,4).
Title: Re: Internal commands
Post by: Dav999 on July 29, 2012, 05:30:26 PM
If you read the 1st post in the "Script commands index and tips" thread, you'll see that in say/reply(n), n can be only 1-11, so, say(13) won't work. say(13) = text box with 5 lines, so, say(11) = text box with 3 lines. If you want text boxes (using internal scripting) with more than 3 lines, you have to split the internal commands (using more say(-1) and text(1,0,0,4) commands).

It can't produce a text box longer than 11 lines, but it can be used to accept an unlimited number of internal commands (I've seen custom levels which used say(33), and this will work in 2.1, but not in 2.0)

EDIT: Looking at the posts above, where Dav999 and FIQ wrote examples of how to use internal scripting, and reading what Dav999 wrote about the command text, I don't see why do you have to use text(1,0,0,4) sometimes. I also don't see why you'll need say(-1) at the start. Look at the example below, specially, at the 1st line:

text(1,0,0,1)
say(5)
Internal scripting
Internal scripting
Internal scripting
Internal scripting
Internal scripting


Wouldn't it work? If not, would it work if I replaced the 1st line with text(1,0,0,4), or if I wrote say(-1) before the 1st line?

EDIT 2: I know why you need say(-1) now (because the editor would erase the text command if this command wasn't written, am I right?). I still don't know why do you need to use text(1,0,0,4).

I also don't know why there has to be text(1,0,0,4). I can't see the logic of taking 4 lines below it, but yeah. It works. :P

You don't have to use squeak(), position(), speak_active, endtext, endcutscene(), untilbars() and loadscript(stop), if you use the say(-1) trick again for every dialog you want to have coloured:

say(-1)
text(1,0,0,4)
say(5)
text(red,0,0,4)
This can
contain
four
lines!

Will create a red text box in the middle of the screen, and instead of say(), you can also use reply() to make a text box appear above :viridian:

reply(-1)
text(1,0,0,4)
reply(3)
text(yellow,0,0,2)
This box is yellow, but will
appear above the player!

This works because position() and speak_active are already part of the say(5) command or reply(5) command, whichever you use.

And you can just use the remaining space for other internal commands, or to extend it using text(1,0,0,4) say(5). That way, not everything has to be internal code.
Title: Re: Internal commands
Post by: FIQ on July 30, 2012, 03:32:10 AM
Because you want to overwrite 4 lines below. Let me show why:
You're using this, for example, to write a custom command (I only use the things absolutely necessary to show why it has to be used:

say(-1)
text(1,0,0,4)
say(3)
endcutscene()
untilbars()
loadscript(stop)

This is converted to (with "# text" telling what the parser does, "// text" tells what really happens):
cutscene() # It found a say() or reply() command // insert cutscenebars
untilbars() # Therefore, these are inserted // wait for cutscenebars to be inserted
squeak(terminal) # It found say(-1), insert before-dialog stuff // terminal sound
text(gray,0,114,-1) # The say() in itself is converted to this. The parser think it will be a 1-line dialog. // does nothing
text(1,0,0,4) # Believed to be part of dialog // Start a text dialog of 4 lines
customposition(center) # End of say(-1) // Part of text dialog, therefore not executed
speak_active # Print the dialog of say(-1) // Part of text dialog, therefore not executed
squeak(terminal) # It found say(3) // Part of text dialog, therefore not executed
text(gray,0,114,3) # Print a dialog with 3 lines // Part of text dialog, therefore not executed
endcutscene() # Believed to be part of dialog // End cutscene
untilbars() # Believed to be part of dialog // Wait until bars are gone
loadscript(stop) # Believed to be part of dialog // Stop the script (If this isn't used, a dialog will be created, see below for content)
customposition(center) # End of say(3) // Not executed
speak_active # Print the dialog of say(3) // Not executed
endtext # Ends all text dialogs // Not executed
endcutscene() # End cutscene // Not executed
untilbars() # Wait until bars are gone // Not executed


If loadscript(stop) isn't used, the script will continue - and therefore write the content of our text(1,0,0,4) command (as we didn't use other dialogs), which will be:

customposition(center)
speak_active
squeak(terminal)
text(gray,0,114,3)


Dav999: In 2.0, you couldn't use say()/reply() to get the dialogs of other crewmates. This works in 2.1. As crewmate are handled in another way in custom levels than in the main game, a "new" position command has to be created to position it accordingly to these. So in 2.0, position(center) is what say()/reply() will make, in 2.1, it's named customposition().
Title: Re: Internal commands
Post by: Dav999 on July 30, 2012, 04:33:08 AM
Dav999: In 2.0, you couldn't use say()/reply() to get the dialogs of other crewmates. This works in 2.1. As crewmate are handled in another way in custom levels than in the main game, a "new" position command has to be created to position it accordingly to these. So in 2.0, position(center) is what say()/reply() will make, in 2.1, it's named customposition().

Ok. Now I get it. But does sad(crewmate)/happy(crewmate) really convert to changemood(colour,mood) then? Because I tried changemood(colour,0) on a crewmate who has been placed there with O: Crewmate and not with createcrewman(), and he stayed sad. Maybe the changemood() command has been changed in 2.1, but I don't know.
Title: Re: Internal commands
Post by: FIQ on July 30, 2012, 06:13:57 AM
Right, I forgot that. It's *impossible* to change mood of "O" crewmates in 2.0. In 2.1, this is possible with changecustommood().
Title: Re: Internal commands
Post by: Dav999 on July 30, 2012, 06:22:20 AM
changecustommood().

Not customchangemood()? :)
Title: Re: Internal commands
Post by: FIQ on July 30, 2012, 06:24:51 AM
changecustommood().

Not customchangemood()? :)
Nope!
Title: Re: Internal commands
Post by: Dav999 on July 30, 2012, 07:00:42 AM
changecustommood().

Not customchangemood()? :)
Nope!

That's a bit odd then:

customifflag
customiftrinkets
customiftrinketsless
customposition
changecustommood ???
Title: Re: Internal commands
Post by: FIQ on July 30, 2012, 07:13:40 AM
changecustommood().

Not customchangemood()? :)
Nope!

That's a bit odd then:

customifflag
customiftrinkets
customiftrinketsless
customposition
changecustommood ???
Ask simonroth, not me :P
Title: Re: Internal commands
Post by: blue626 on August 02, 2012, 11:24:37 AM
foundtrinket(x) - Found a trinket. x is the trinket ID (1-20 usually). The ID is hard to grab in a custom level, bruteforce if you're uncertain and see which is removed. 21+ will increase the trinket counter but not actually give any trinkets - in case you want secrets for 105%+ trinket completion :)
In the normal game, 2 maps has more than one layout.

Do you mean that one of the trinkets is erased from the level after using that command? If yes, then where was the trinket :victoria: (or :vitellary:) found, in the main game? It uses that command in there, am I right? And if you use that command with x>20 after getting all the trinkets, does it show "Twenty One"? I have read about a code that contains a list of the numbers for the trinket counter, like "Zero", "One", "Two", etc. It contained "Twenty One", but not "Twenty Two", etc. and that produced the 21st trinket glitch. It was fixed in v.1.1, but I don't know if "Twenty One" is still in the code. Did you try using that command with x>20 twice? I wonder what that does...

2 maps? Do you mean Dim. VVVVVV and the Polar Dimension? Does the Polar Dim. have alt sates too?

Also, I don't understand the difference between ifflag and customiffflag (and with iftrinkets too).

Btw: In one of my previous posts in this thread, I wrote "agile". I didn't want to write that! :D I might have written the words too fast and then one was corrected automatically to "agile". :-[ >:( Just ignore that word.
Title: Re: Internal commands
Post by: Dav999 on August 02, 2012, 01:18:15 PM
Also, I don't understand the difference between ifflag and customiffflag (and with iftrinkets too).

Ifflag loads a hardcoded script (from the real game) when used in internal scripting, and because all simplified commands have to be converted to internal commands, a new command had to be made that loads a custom script. That command isn't used in the real game, just like all commands which contain 'custom'. It was just made to be able to convert certain things.

Btw: In one of my previous posts in this thread, I wrote "agile". I didn't want to write that! :D I might have written the words too fast and then one was corrected automatically to "agile". :-[ >:( Just ignore that word.

I know that, autocorrect. What were you trying to write?
Quote
Title: Re: Internal commands
Post by: blue626 on August 02, 2012, 03:02:44 PM
So, ifflag (internally) loads a script from the main game while customifflag (internally) loads a user-made script (in a user level). Am I right?

I still don't know about foundtrinket and the 21st and 22nd trinkets, though.

Btw: In one of my previous posts in this thread, I wrote "agile". I didn't want to write that! :D I might have written the words too fast and then one was corrected automatically to "agile". :-[ >:( Just ignore that word.

I know that, autocorrect. What were you trying to write?
Quote

I looked at the post now. It was reply 13. I was trying to write "a file" and probably forgot to write the space. Also, it seems that you pressed the "Insert Quote" button by accident.
Title: Re: Internal commands
Post by: Dav999 on August 02, 2012, 03:22:47 PM
So, ifflag (internally) loads a script from the main game while customifflag (internally) loads a user-made script (in a user level). Am I right?

Yes!

Also, it seems that you pressed the "Insert Quote" button by accident.

Yes, whoops! I'm not going to delete it, though :P
Title: Re: Internal commands
Post by: FIQ on August 03, 2012, 03:15:37 AM
The trinket used doesn't exists in the game somewhere. As Terry created the map, he could have inserted the entities with whatever metadata he wanted. He simply left one ID to use with foundtrinket(). He could even use numbers >20. It wouldn't log trinket completion in the savefile, but it would otherwise do no difference at all (as long as he also changed the ID for the found-trinket entity (entity 22) that applies to that trinket, in the trinket collection), and wouldn't really matter.

EDIT: Never mind, it wouldn't work. The trinket would be collected, and show up in the collection - but as trinkets >20 isn't saved as "found" in the savefile, when you quit and return, the trinket would be gone from the collection (but you would still have the same number of trinkets, as that is stored in another way)
Title: Re: Internal commands
Post by: blue626 on August 03, 2012, 03:04:59 PM
I noticed somethiing: why do you need to write the following text before the internal commands?

say(-1)
text(1,0,0,4)
say(5)

Couldn't you use the following?

say(-4)
say(5)

Or even this last text?

say(-5)

And, why is the text command used above has a number instead of a color (like when you create text boxes with internal scripting)?
Title: Re: Internal commands
Post by: FIQ on August 03, 2012, 03:53:54 PM
I noticed somethiing: why do you need to write the following text before the internal commands?

say(-1)
text(1,0,0,4)
say(5)

Couldn't you use the following?

say(-4)
say(5)

Or even this last text?

say(-5)

And, why is the text command used above has a number instead of a color (like when you create text boxes with internal scripting)?
say(-4), say(-2403), say(-1), every of them works fine.

text(1,0,0,4) - the 1 was when I played around with the parser (before I found a "correct" way to execute things as I wanted). I realize that you can use whatever you want - it doesn't matter at all. text(terryisanicedev,0,0,4) should work as well :)

I just sticked to say(-1), text(1,0,0,4) to be consequent.
Title: Re: Internal commands
Post by: Dav999 on August 03, 2012, 04:08:56 PM
I noticed somethiing: why do you need to write the following text before the internal commands?

say(-1)
text(1,0,0,4)
say(5)

Couldn't you use the following?

say(-4)
say(5)

Or even this last text?

say(-5)

And, why is the text command used above has a number instead of a color (like when you create text boxes with internal scripting)?
say(-4), say(-2403), say(-1), every of them works fine.

text(1,0,0,4) - the 1 was when I played around with the parser (before I found a "correct" way to execute things as I wanted). I realize that you can use whatever you want - it doesn't matter at all. text(terryisanicedev,0,0,4) should work as well :)

I just sticked to say(-1), text(1,0,0,4) to be consequent.

A new way to put comments in scripts!
Do the coordinates matter or do they have to be 0,0?

say(-12321)
text(ThisDoesntMatter,Does,It,4)
say(5)
Title: Re: Internal commands
Post by: FIQ on August 03, 2012, 11:27:49 PM
I noticed somethiing: why do you need to write the following text before the internal commands?

say(-1)
text(1,0,0,4)
say(5)

Couldn't you use the following?

say(-4)
say(5)

Or even this last text?

say(-5)

And, why is the text command used above has a number instead of a color (like when you create text boxes with internal scripting)?
say(-4), say(-2403), say(-1), every of them works fine.

text(1,0,0,4) - the 1 was when I played around with the parser (before I found a "correct" way to execute things as I wanted). I realize that you can use whatever you want - it doesn't matter at all. text(terryisanicedev,0,0,4) should work as well :)

I just sticked to say(-1), text(1,0,0,4) to be consequent.

A new way to put comments in scripts!
Do the coordinates matter or do they have to be 0,0?

say(-12321)
text(ThisDoesntMatter,Does,It,4)
say(5)
It might ignore that line as coordinates isn't numvers, but otherwise they don't matter.
Title: Re: Internal commands
Post by: blue626 on August 04, 2012, 08:22:06 AM
I noticed somethiing: why do you need to write the following text before the internal commands?

say(-1)
text(1,0,0,4)
say(5)

Couldn't you use the following?

say(-4)
say(5)

Or even this last text?

say(-5)

And, why is the text command used above has a number instead of a color (like when you create text boxes with internal scripting)?
say(-4), say(-2403), say(-1), every of them works fine.

Then, why don't you use the following?

say(-5)
(4 lines of internal scripting)
say(-5)
(4 lines of internal scripting)
say(-5)
(4 lines of internal scripting)
...

If, for some reason, the text command is needed, you could also try this:

say(-4)
say(5)
(4 lines of internal scripting)
say(-4)
say(5)
(4 lines of internal scripting)
say(-4)
say(5)
(4 lines of internal scripting)
...

In the same post, you wrote this:

I just sticked to say(-1), text(1,0,0,4) to be consequent.

I don't understand that.
Title: Re: Internal commands
Post by: Dav999 on August 04, 2012, 08:35:48 AM
I noticed somethiing: why do you need to write the following text before the internal commands?

say(-1)
text(1,0,0,4)
say(5)

Couldn't you use the following?

say(-4)
say(5)

Or even this last text?

say(-5)

And, why is the text command used above has a number instead of a color (like when you create text boxes with internal scripting)?
say(-4), say(-2403), say(-1), every of them works fine.

Then, why don't you use the following?

say(-5)
(4 lines of internal scripting)
say(-5)
(4 lines of internal scripting)
say(-5)
(4 lines of internal scripting)
...

If, for some reason, the text command is needed, you could also try this:

say(-4)
say(5)
(4 lines of internal scripting)
say(-4)
say(5)
(4 lines of internal scripting)
say(-4)
say(5)
(4 lines of internal scripting)
...

In the same post, you wrote this:

I just sticked to say(-1), text(1,0,0,4) to be consequent.

I don't understand that.

Have you tried if that works? Because it may not work if you haven't tried.
Title: Re: Internal commands
Post by: blue626 on August 05, 2012, 11:29:02 AM
I never tested internal scripting myself, and I'll probably never test it, because of the glitches it may create, and because I'll probably never create a level with internal scripting. I don't need it. I was just curious about it.
Title: Re: Internal commands
Post by: ToasterApocalypse on August 05, 2012, 12:11:06 PM
Thanks to this thread I now know the gamestate to main menu

Now I can make cool level with petrikovs and gosts
Title: Re: Internal commands
Post by: Dav999 on August 05, 2012, 12:58:04 PM
I never tested internal scripting myself, and I'll probably never test it, because of the glitches it may create, and because I'll probably never create a level with internal scripting. I don't need it. I was just curious about it.

Actually, there are not many commands which can be dangerous for save data, and that's more or less the only dangerous thing that could happen. In most of the cases, nothing will happen if you use a command incorrectly. And you can easily crash the game with simplified commands too 8)

Thanks to this thread I now know the gamestate to main menu

Now I can make cool level with petrikovs and gosts

petrikovs? ??? gosts? ???
Did you mean ghosts?
Note that enemies are not the most convenient to make with internal scripting, because each time you enter the room that has them, you have to wait for the cutscene bars to appear and -after that- the enemies appear. There is no way to access internal scripting without activating the cutscene bars. (There is a workaround, if you use the lab tileset and have a high floor and a low ceiling, and make the cutscene bars appear earlier, then it is possible to make the enemies appear immediately because if the cutscene bars are already there, you don't have to wait for them)
Title: Re: Internal commands
Post by: ToasterApocalypse on August 05, 2012, 01:54:23 PM
I never tested internal scripting myself, and I'll probably never test it, because of the glitches it may create, and because I'll probably never create a level with internal scripting. I don't need it. I was just curious about it.

Actually, there are not many commands which can be dangerous for save data, and that's more or less the only dangerous thing that could happen. In most of the cases, nothing will happen if you use a command incorrectly. And you can easily crash the game with simplified commands too 8)

Thanks to this thread I now know the gamestate to main menu

Now I can make cool level with petrikovs and gosts

petrikovs? ??? gosts? ???
Did you mean ghosts?
Note that enemies are not the most convenient to make with internal scripting, because each time you enter the room that has them, you have to wait for the cutscene bars to appear and -after that- the enemies appear. There is no way to access internal scripting without activating the cutscene bars. (There is a workaround, if you use the lab tileset and have a high floor and a low ceiling, and make the cutscene bars appear earlier, then it is possible to make the enemies appear immediately because if the cutscene bars are already there, you don't have to wait for them)

PETRIKOV: A forumer in a forum I know as 'Off Topic'. He spams the letter E everywhere and has accumulated a total of 9900 psts in 2 months.
gosts: maybe its gosts: Some kind of fad in OT too.
RIPOFF OF GOSTS:
maybe its goats
maybe its saidletski
maybe its gasts
maybe its zobies
Title: Re: Internal commands
Post by: FIQ on August 05, 2012, 02:12:43 PM
I never tested internal scripting myself, and I'll probably never test it, because of the glitches it may create, and because I'll probably never create a level with internal scripting. I don't need it. I was just curious about it.

Actually, there are not many commands which can be dangerous for save data, and that's more or less the only dangerous thing that could happen. In most of the cases, nothing will happen if you use a command incorrectly. And you can easily crash the game with simplified commands too 8)

Thanks to this thread I now know the gamestate to main menu

Now I can make cool level with petrikovs and gosts

petrikovs? ??? gosts? ???
Did you mean ghosts?
Note that enemies are not the most convenient to make with internal scripting, because each time you enter the room that has them, you have to wait for the cutscene bars to appear and -after that- the enemies appear. There is no way to access internal scripting without activating the cutscene bars. (There is a workaround, if you use the lab tileset and have a high floor and a low ceiling, and make the cutscene bars appear earlier, then it is possible to make the enemies appear immediately because if the cutscene bars are already there, you don't have to wait for them)
That's a nice hack, and I was going to use it in Back to VVVVVV. Then I realized that many things turn off cutscenebars. Quicksaving is an example.

Also you can't create custom enemies with createentity(), it doesn't hold enemy sprite data - ingame room settings do, and these just happen to have the possibility to have other enemies than 16x16 ones. :P

And even if createentity() would support enemy sprite, it would still not work, as it only supports setting of 2 metadata points, instead of... well, infinite (as long as the first 2 wouldn't happen to be JUST the direction that the enemy was going and the sprite).

Enemies has the following: X, Y, 1 (Entity ID), Direction, Speed, Border1 X, Border1 Y, Border2 X, Border2 Y
Title: Re: Internal commands
Post by: Dav999 on August 05, 2012, 02:28:05 PM
That's a nice hack, and I was going to use it in Back to VVVVVV. Then I realized that many things turn off cutscenebars. Quicksaving is an example.

Quicksaving also makes you change back to :viridian: if you were playing as :verdigris: in my level, just like dying. (That's why you can't die there, I was glad to see the color persisted when you change screens) I would cut off a huge part of my level if I would have removed the color change, so yeah...
Title: Re: Internal commands
Post by: blue626 on August 10, 2012, 04:40:15 AM
Looking at the internal commands list, I see that there are no commands to change warp direction, tile set and room-name, like in the Final Level. So, I suppose that the Polar Dim. has 2 altsates too, am I right?
Also, you mentioned ifflag twice, not describing it right the 2nd time. EDIT: No, you didn't. I was wrong.

EDIT 2:
Enemies has the following: X, Y, 1 (Entity ID), Direction, Speed, Border1 X, Border1 Y, Border2 X, Border2 Y

Why do you need the last 4 values if you have the first 2? Do they define the enemy size? If they are needed for some reason, why do you need the first 2? Why did you mention that if you can't create costum enemies with createentity?
Title: Re: Internal commands
Post by: Dav999 on August 10, 2012, 05:32:33 AM
Some things are hardcoded in, and the final level uses finalmode(x,y) (and gamestates?)
Title: Re: Internal commands
Post by: FIQ on August 10, 2012, 10:34:36 AM
finalstretch=1 turns off warping in polar dimension (and the disco-style colorchanging). This is done by gamestate(200). gamestate(200) also turns off warp directions for the room you're in right now (as it wouldn't update otherwise until you change room). All this is hardcoded, the only script-thingy is the fact that gamestate(200) is activated by a script (the DIY V Repair terminal).
Title: Re: Internal commands
Post by: Hilbert on August 11, 2012, 08:26:27 AM
2500-2509 - Perform a teleport to some weird non-existent location, supposedly to The FINAL LEVEL I guess, continue to state 2510
Title: Re: Internal commands
Post by: blue626 on August 11, 2012, 08:55:49 AM
2500-2509 - Perform a teleport to some weird non-existent location, supposedly to The FINAL LEVEL I guess, continue to state 2510

I guess you're right, considering gamestates 2510 and 2512.
I think that gamestate 2514 is wrong too:
2514 - Removes textboxes, play Potential For Anything Predestined Fate

Why did you change the color to black? Isn't it already black?
Title: Re: Internal commands
Post by: Dav999 on August 11, 2012, 01:36:22 PM
Why did you change the color to black? Isn't it already black?
:P
Maybe he wanted to change the colour to something else and then realized it wasn't appropriate and change the text to 'black' instead of removing the tags.
This post however, contains huge amounts of useless layout tags which you don't notice until you quote because it doesn't change anything :viridian:
Try to quote this post, it's a living hell to read it actually :vermillion:
Time to get back on topic.
Title: Re: Internal commands
Post by: FIQ on August 12, 2012, 04:35:45 AM
2500-2509 - Perform a teleport to some weird non-existent location, supposedly to The FINAL LEVEL I guess, continue to state 2510

I guess you're right, considering gamestates 2510 and 2512.
I think that gamestate 2514 is wrong too:
2514 - Removes textboxes, play Potential For Anything Predestined Fate

Why did you change the color to black? Isn't it already black?
I just tried, it does play Potential For Anything.
Title: Re: Internal commands
Post by: Hilbert on August 12, 2012, 08:57:12 AM
[quote author=Dav999 link=topic=1089.msg9085#msg9085 date=1344717382]
[quote author=blue626 link=topic=1089.msg9082#msg9082 date=1344700549]
Why did you change the color to black? Isn't it already black?
[/quote][left][color=white][color=limegreen][color=maroon][color=navy][color=teal][color=brown][color=beige][color=blue][color=purple][color=orange][color=green][color=pink][color=yellow][color=red][color=black][u][i][b][s]:P[/s][/b][/i][/u][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/left][left][color=black]Maybe he wanted to change the colour to something else and then realized it wasn't appropriate and change the text to 'black' instead of removing the tags.[/color][/left][left][color=black]This post however, contains huge amounts of useless layout tags which you don't notice until you quote because it doesn't change anything[/color][color=black] [/color][color=white][color=limegreen][color=maroon][color=navy][color=teal][color=brown][color=beige][color=blue][color=purple][color=orange][color=green][color=pink][color=yellow][color=red][color=black][u][i][b][s]:viridian:[/s][/b][/i][/u][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/left][left][color=black]Try to quote this post, it's a living hell to read it actually[/color][color=black] [/color][color=white][color=limegreen][color=maroon][color=navy][color=teal][color=brown][color=beige][color=blue][color=purple][color=orange][color=green][color=pink][color=yellow][color=red][color=black][u][i][b][s]:vermillion:[/s][/b][/i][/u][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/left][left][color=black]Time to get back on topic.[/color][/left]
[/quote]
Title: Re: Internal commands
Post by: Dav999 on August 12, 2012, 09:23:15 AM
That wasn't really necessary :victoria:
Title: Re: Internal commands
Post by: ToasterApocalypse on August 12, 2012, 09:56:42 AM
[quote author=Dav999 link=topic=1089.msg9085#msg9085 date=1344717382]
[quote author=blue626 link=topic=1089.msg9082#msg9082 date=1344700549]
Why did you change the color to black? Isn't it already black?
[/quote][left][color=white][color=limegreen][color=maroon][color=navy][color=teal][color=brown][color=beige][color=blue][color=purple][color=orange][color=green][color=pink][color=yellow][color=red][color=black][u][i][b][s]:P[/s][/b][/i][/u][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/left][left][color=black]Maybe he wanted to change the colour to something else and then realized it wasn't appropriate and change the text to 'black' instead of removing the tags.[/color][/left][left][color=black]This post however, contains huge amounts of useless layout tags which you don't notice until you quote because it doesn't change anything[/color][color=black] [/color][color=white][color=limegreen][color=maroon][color=navy][color=teal][color=brown][color=beige][color=blue][color=purple][color=orange][color=green][color=pink][color=yellow][color=red][color=black][u][i][b][s]:viridian:[/s][/b][/i][/u][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/left][left][color=black]Try to quote this post, it's a living hell to read it actually[/color][color=black] [/color][color=white][color=limegreen][color=maroon][color=navy][color=teal][color=brown][color=beige][color=blue][color=purple][color=orange][color=green][color=pink][color=yellow][color=red][color=black][u][i][b][s]:vermillion:[/s][/b][/i][/u][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/color][/left][left][color=black]Time to get back on topic.[/color][/left]
[/quote]

 :o
Title: Re: Internal commands
Post by: Dav999 on August 12, 2012, 10:54:29 AM
Yep, that's what you get after you quote my post on the previous page :P (assuming that everybody has set the default number of posts per page)
Title: Re: Internal commands
Post by: blue626 on August 12, 2012, 11:43:29 AM
2500-2509 - Perform a teleport to some weird non-existent location, supposedly to The FINAL LEVEL I guess, continue to state 2510

I guess you're right, considering gamestates 2510 and 2512.
I think that gamestate 2514 is wrong too:
2514 - Removes textboxes, play Potential For Anything Predestined Fate

Why did you change the color to black? Isn't it already black?
I just tried, it does play Potential For Anything.

But, aren't gamestates 2510 and 2512 the dialog at the beginning of the Final Level? Why does it play Potential for Anything, then? Have you tested gamestate 2509 again? Why do you think it teleports to the Lab?

I don't see any reason for the gaps in the gamestates' numbers. Sometimes gamestates skip one number (2510, 2512) sometimes they skip many numbers. I don't know almost anything about proggraming games (except VVVVVV scripting), so, it might be obvious that I don't know the reason. Perhaps you don't know it too.
Title: Re: Internal commands
Post by: FIQ on August 12, 2012, 11:53:37 AM
2500-2509 - Perform a teleport to some weird non-existent location, supposedly to The FINAL LEVEL I guess, continue to state 2510

I guess you're right, considering gamestates 2510 and 2512.
I think that gamestate 2514 is wrong too:
2514 - Removes textboxes, play Potential For Anything Predestined Fate

Why did you change the color to black? Isn't it already black?
I just tried, it does play Potential For Anything.

But, aren't gamestates 2510 and 2512 the dialog at the beginning of the Final Level? Why does it play Potential for Anything, then? Have you tested gamestate 2509 again? Why do you think it teleports to the Lab?

I don't see any reason for the gaps in the gamestates' numbers. Sometimes gamestates skip one number (2510, 2512) sometimes they skip many numbers. I don't know almost anything about proggraming games (except VVVVVV scripting), so, it might be obvious that I don't know the reason. Perhaps you don't know it too.
No, I don't.

And it IS playing Potential For Anything. Try for yourself


say(-1)
text(1,0,0,4)
say(4)
gamestate(2514)
endcutscene
untilbars
loadscript(stop)


About teleporting, if I say that it teleports to somewhere, I'm pretty confident in it. Just create a 20x20 custom level map and test the game state, and see where teleports go, etc.

And no, I've no idea why gamestates occasionally skip numbers. It's just the way it is.
Title: Re: Internal commands
Post by: Dav999 on August 12, 2012, 01:03:37 PM
Quote
102 - Verdigris: "Captain! I've been so worried!"
104 - "I'm glad you're ok!"
106 - "I've been trying to find a way out, but I keep going around in circles…"
108 - "Don't worry! I have a teleporter key!"
110 - "Follow me!"

102, 104, 106, 108, 110 are dialogs, so maybe 103, 105, 107, 109 and 111 are endtexts?
Like this:

Gamestate 102:
Code: [Select]
squeak(green)
text(green,0,0,1)
Captain! I've been so worried!
position(green,above)
speak_active

Gamestate 103:
Code: [Select]
endtext
Gamestate 104:
Code: [Select]
squeak(player)
text(cyan,0,0,1)
I'm glad you're ok!
position(player,above)
speak_active

Gamestate 105:
Code: [Select]
endtext
Gamestate 106:
Quote
squeak(green)
text(green,0,0,3)
I've been trying to find a
way out, but I keep going
around in circles...
position(green,above)
speak_active

Gamestate 107:
Code: [Select]
endtext
Gamestate 108:
Code: [Select]
squeak(player)
text(cyan,0,0,2)
Don't worry! I have a
teleporter key!
position(player,above)
speak_active

Gamestate 109:
Code: [Select]
endtext
Gamestate 110:
Code: [Select]
squeak(player)
text(cyan,0,0,1)
Follow me!
position(player,above)
speak_active

Gamestate 111:
Code: [Select]
endtext
But why split all these dialogs in different gamestates? As if was necessary to skip some dialogs or change the order! :-\
Title: Re: Internal commands
Post by: FIQ on August 12, 2012, 02:43:44 PM
Quote
102 - Verdigris: "Captain! I've been so worried!"
104 - "I'm glad you're ok!"
106 - "I've been trying to find a way out, but I keep going around in circles…"
108 - "Don't worry! I have a teleporter key!"
110 - "Follow me!"

102, 104, 106, 108, 110 are dialogs, so maybe 103, 105, 107, 109 and 111 are endtexts?
Like this:

Gamestate 102:
Code: [Select]
squeak(green)
text(green,0,0,1)
Captain! I've been so worried!
position(green,above)
speak_active

Gamestate 103:
Code: [Select]
endtext
Gamestate 104:
Code: [Select]
squeak(player)
text(cyan,0,0,1)
I'm glad you're ok!
position(player,above)
speak_active

Gamestate 105:
Code: [Select]
endtext
Gamestate 106:
Quote
squeak(green)
text(green,0,0,3)
I've been trying to find a
way out, but I keep going
around in circles...
position(green,above)
speak_active

Gamestate 107:
Code: [Select]
endtext
Gamestate 108:
Code: [Select]
squeak(player)
text(cyan,0,0,2)
Don't worry! I have a
teleporter key!
position(player,above)
speak_active

Gamestate 109:
Code: [Select]
endtext
Gamestate 110:
Code: [Select]
squeak(player)
text(cyan,0,0,1)
Follow me!
position(player,above)
speak_active

Gamestate 111:
Code: [Select]
endtext
But why split all these dialogs in different gamestates? As if was necessary to skip some dialogs or change the order! :-\
In general, most gamestates <200 is very early and I guess they was created before the actual scripting language. Note that most, if not all, dialogs in the current game is created from VVVVVVscript and not with hardcoded gamestates. For example, look at gamestate 2. Familiar? ;)
http://distractionware.com/games/flash/vvvvvvproto/

And no, there's no gamestate 103 at all. (or 105, etc)
Title: Re: Internal commands
Post by: Dav999 on August 12, 2012, 03:21:21 PM
That explains why a lot of gamestates are actually scripts. Actually, there are just a few scripts which aren't also accessible using gamestates! So maybe continuing using gamestates would have been a better option instead of creating a scripting language, if there was no level editor in which we can use that scripting language! :vermillion: So in this case, it would not have been a better option.

And I know that prototype already, I have played it before. (I don't know what kind of shoes :viridian: wore before version 1.0, but it made the prototype the slipperiest game I've ever seen!)
Title: Re: Internal commands
Post by: Bearboy on August 13, 2012, 03:10:18 AM
I'm just gonna interrupt and say:
How do make teleporter in terminal?
Title: Re: Internal commands
Post by: Dav999 on August 13, 2012, 03:33:52 AM
I'm just gonna interrupt and say:
How do make teleporter in terminal?

Do you mean making a big round teleporter or teleport using a command?
Title: Re: Internal commands
Post by: Bearboy on August 13, 2012, 03:54:43 AM
Teleporter in a terminal, internal script that executes via a terminal to teleport you to another room.
Also, the word teleport is underlined in red?  ???
Title: Re: Internal commands
Post by: Dav999 on August 13, 2012, 07:13:00 AM
Teleporter in a terminal, internal script that executes via a terminal to teleport you to another room.
Also, the word teleport is underlined in red?  ???

gotoroom(x-1,y-1), because the level editor starts with 1 but internal scripts start with 0, so if you want to teleport to room (5,13), you should use gotoroom(4,12). If you also want to go to another location in that room, which is likely, you should use gotoposition(x,y), otherwise you will change rooms while staying in the same spot on the screen. If the room you're teleporting to has a wall in that spot, you will get stuck. The coordinates are a bit trial and error, so just start somewhere like 50,50 and just decide from that whether you need to move up, down, left, right, or if it's perfect.
Title: Re: Internal commands
Post by: Bearboy on August 13, 2012, 07:40:04 AM
Teleporter in a terminal, internal script that executes via a terminal to teleport you to another room.
Also, the word teleport is underlined in red?  ???

gotoroom(x-1,y-1), because the level editor starts with 1 but internal scripts start with 0, so if you want to teleport to room (5,13), you should use gotoroom(4,12). If you also want to go to another location in that room, which is likely, you should use gotoposition(x,y), otherwise you will change rooms while staying in the same spot on the screen. If the room you're teleporting to has a wall in that spot, you will get stuck. The coordinates are a bit trial and error, so just start somewhere like 50,50 and just decide from that whether you need to move up, down, left, right, or if it's perfect.
Is there a way to make that little flashy sequence before you dissappear?
Title: Re: Internal commands
Post by: Dav999 on August 13, 2012, 08:01:09 AM
Something like this:

Code: [Select]
flash(5)
playef(9)
shake(20)
delay(30)
flash(5)
playef(9)
shake(20)
delay(30)
flash(5)
playef(10)
hideplayer()
delay(30)
gotoroom(x,y)
delay(30)
flash(5)
playef(9)
shake(20)
delay(30)
flash(5)
playef(9)
shake(20)
delay(30)
flash(5)
playef(10)
showplayer()

So to get that, you will need to enter this:

Code: [Select]
say(-1)
text(1,0,0,4)
say(5)
flash(5)
playef(9)
shake(20)
delay(30)
text(1,0,0,4)
say(5)
flash(5)
playef(9)
shake(20)
delay(30)
text(1,0,0,4)
say(5)
flash(5)
playef(10)
hideplayer()
delay(30)
text(1,0,0,4)
say(5)
gotoroom(x,y)
delay(30)
flash(5)
playef(9)
text(1,0,0,4)
say(5)
shake(20)
delay(30)
flash(5)
playef(9)
text(1,0,0,4)
say(5)
shake(20)
delay(30)
flash(5)
playef(10)
text(1,0,0,4)
say(4)
showplayer()
endcutscene()
untilbars()
loadscript(stop)
Title: Re: Internal commands
Post by: blue626 on August 13, 2012, 08:19:10 AM
What sound effects are playef(9) and playef(10)? You said that flash(x) was like flash in regular scripting, so won't that make the flash sound effect? Why do you need to hide the player for some time?

Btw: this thread already has >75 replies! That shows that, for some people, internal scripting is interesting. Also, some people have asked questions about internal scripting here.
Title: Re: Internal commands
Post by: Dav999 on August 13, 2012, 08:53:20 AM
What sound effects are playef(9) and playef(10)? You said that flash(x) was like flash in regular scripting, so won't that make the flash sound effect? Why do you need to hide the player for some time?

I think I was wrong, because flash(x) only makes a white screen, and it doesn't shake or make sound. playef(9) is the flash sound and playef(10) is the warp sound. You need to hide the player because he teleports away in the one room, and one moment later, he appears in the other room. Disappearing and appearing doesn't happen at the same time. If you see somebody teleported away, you can't see him anymore, right? Then, the view changes to the place he teleports to and he appears. The warping technology would be VERY fast if there was absolutely no time between disappearing in one room and appearing in the other!
Title: Re: Internal commands
Post by: Bearboy on August 13, 2012, 10:32:40 AM
Something like this:

Code: [Select]
flash(5)
playef(9)
shake(20)
delay(30)
flash(5)
playef(9)
shake(20)
delay(30)
flash(5)
playef(10)
hideplayer()
delay(30)
gotoroom(x,y)
delay(30)
flash(5)
playef(9)
shake(20)
delay(30)
flash(5)
playef(9)
shake(20)
delay(30)
flash(5)
playef(10)
showplayer()

So to get that, you will need to enter this:

Code: [Select]
say(-1)
text(1,0,0,4)
say(5)
flash(5)
playef(9)
shake(20)
delay(30)
text(1,0,0,4)
say(5)
flash(5)
playef(9)
shake(20)
delay(30)
text(1,0,0,4)
say(5)
flash(5)
playef(10)
hideplayer()
delay(30)
text(1,0,0,4)
say(5)
gotoroom(x,y)
delay(30)
flash(5)
playef(9)
text(1,0,0,4)
say(5)
shake(20)
delay(30)
flash(5)
playef(9)
text(1,0,0,4)
say(5)
shake(20)
delay(30)
flash(5)
playef(10)
text(1,0,0,4)
say(4)
showplayer()
endcutscene()
untilbars()
loadscript(stop)

Man, I wish I could copy and paste that in.
I may have to do it a few times  :victoria:
Title: Re: Internal commands
Post by: ToasterApocalypse on August 13, 2012, 10:48:41 AM
After finding an interesting entity (entity ID: 1), I am going to make a level containing it.

teehee
Title: Re: Internal commands
Post by: Dav999 on August 13, 2012, 10:48:58 AM
You can put it in one script, then open it in a text editor and copy and paste that script after the first one and change the name. (it's a bit tricky though)


|teleport1:|say(-1)|text(1,0,0,4)|say(5)|etcetera|anotherscript|say|Hi|

|teleport1:|say(-1)|text(1,0,0,4)|say(5)|etcetera|teleport2:|say(-1)|text(1,0,0,4)|say(5)|etcetera|anotherscript|say|Hi|

|teleport1:|say(-1)|text(1,0,0,4)|say(5)|etcetera|teleport2:|say(-1)|text(1,0,0,4)|say(5)|etcetera|teleport3:|say(-1)|text(1,0,0,4)|say(5)|etcetera|anotherscript|say|Hi|


Like that. And of course things like coordinates need to be changed, but you can quickly do it this way.
Title: Re: Internal commands
Post by: Dav999 on August 13, 2012, 10:56:46 AM
After finding an interesting entity (entity ID: 1), I am going to make a level containing it.

teehee

Well, there are more interesting entities than enemies, because I thought you can't specify a sprite. You can get enemy sprites like the yes men/stop heads/word enemies/pretty much everything though, but they don't move and they don't kill.
Title: Re: Internal commands
Post by: blue626 on August 13, 2012, 11:03:15 AM
Couldn't you just do it with less flashes and commands? Why do you need playef(10) twice? Also, you forgot gotoposition(x,y). Example:

say(-1)
text(1,0,0,4)
say(5)
flash(5)
playef(9)
shake(20)
delay(30)
text(1,0,0,4)
say(4)
playef(10)
hideplayer()
delay(30)
text(1,0,0,4)
say(4)
gotoroom(x,y)
gotoposition(x,y)
delay(30)
text(1,0,0,4)
say(5)
flash(5)
playef(9)
shake(20)
delay(30)
text(1,0,0,4)
say(4)
showplayer()
endcutscene()
untilbars()
loadscript(stop)

It's still long, though. Perhaps, even less flashes and commands?
Title: Re: Internal commands
Post by: Bearboy on August 13, 2012, 11:28:12 AM
You can put it in one script, then open it in a text editor and copy and paste that script after the first one and change the name. (it's a bit tricky though)


|teleport1:|say(-1)|text(1,0,0,4)|say(5)|etcetera|anotherscript|say|Hi|

|teleport1:|say(-1)|text(1,0,0,4)|say(5)|etcetera|teleport2:|say(-1)|text(1,0,0,4)|say(5)|etcetera|anotherscript|say|Hi|

|teleport1:|say(-1)|text(1,0,0,4)|say(5)|etcetera|teleport2:|say(-1)|text(1,0,0,4)|say(5)|etcetera|teleport3:|say(-1)|text(1,0,0,4)|say(5)|etcetera|anotherscript|say|Hi|


Like that. And of course things like coordinates need to be changed, but you can quickly do it this way.

Do you mean opening the .vvvvvv in something like notepad?
Title: Re: Internal commands
Post by: Dav999 on August 13, 2012, 12:38:21 PM
Couldn't you just do it with less flashes and commands? Why do you need playef(10) twice? Also, you forgot gotoposition(x,y). Example:

say(-1)
text(1,0,0,4)
say(5)
flash(5)
playef(9)
shake(20)
delay(30)
text(1,0,0,4)
say(4)
playef(10)
hideplayer()
delay(30)
text(1,0,0,4)
say(4)
gotoroom(x,y)
gotoposition(x,y)
delay(30)
text(1,0,0,4)
say(5)
flash(5)
playef(9)
shake(20)
delay(30)
text(1,0,0,4)
say(4)
showplayer()
endcutscene()
untilbars()
loadscript(stop)

It's still long, though. Perhaps, even less flashes and commands?

You forgot a second playef(10). If you add that, I guess it's perfect.

Do you mean opening the .vvvvvv in something like notepad?

Exactly! Near the bottom are the <script> tags, and everything in between those tags is scripting.
Title: Re: Internal commands
Post by: ToasterApocalypse on August 13, 2012, 01:51:24 PM
LIST OF ENTITY ID THINGIES

1: Wierd purple thingy that kills you(Unused enemy?)
2: An immobile moving platform
3: A disappearing platform
4: A 1x1 quicker quicksand block
5: A flipped Viridian, you will flip gravity when touched
6: Weird red flashy thingy that disappears quickly
7: Same as above, bit doesn't flash and is coloured cyan
8: A coin from the prototype
9: Trinket
10: Activated flipped checkpoint (you don't respawn at it, even if you touch)
11: Invisible gravity line
12: Same as above(?)
13: Warp token without a destination
14: The round teleporter
15: Verdigris
16: Flipped Vitellary
17: Victoria
18: Viridian
19: Vermillion
20: Flipped terminal (Activates but no script)
21: Same as above but when touched the terminal doesn't light up
22: Nothing?
23:Gravitron Square
24: A Viridian that follows you (if you touch a wall it never stops running into that wall)
25: Not sure (nothing?)
26: The warp token to the Secret Lab (does not work)
27: Weird glitchy Viridians at the top of the screen

I'm not sure if there's anymore, but afterwards I tried IDs 28-32 and nothing happened.
brb using the trinkets to get more than 20 trinkets to see what happens
Title: Re: Internal commands
Post by: ToasterApocalypse on August 13, 2012, 02:06:12 PM
And this is what happens when you go above 50 trinkets.
(http://25.media.tumblr.com/tumblr_m8pp942Pmq1rvyxoko1_500.png)
Title: Re: Internal commands
Post by: Dav999 on August 13, 2012, 02:44:52 PM
I find createentity a bit unpredictable, I've used createentity(x,y,21,18,0) in my level to test it, and I got a terminal. Then I made a new level in which I tested it one by one, but this time, the exact same command, createentity(x,y,21,18,0), produced a white enemy sprite like you see in Linear Collider! ??? WTH? 20 also created such a thing, but you could activate it if you touch it as if it was a terminal. Also, entity ID 10 created a CD thing like you see in Security Swoop or something like that, and 18 and 24 are gray crewmates instead of cyan.

11=horizontal gravity line
12=vertical gravity line
22=should be trinket, but only shows up if you collect a trinket in that room without leaving it (used when :victoria: gives you a trinket in the ship, it is the only createentity command used in the game)
25=you have to use the metadata to change the created sprite, so createentity(x,y,25,M,0)
   0=top cup holder
   1=bottom cup holder
   2=cup
   3=flipped cup
   4=crewmate cup
   5=flipped crewmate cup
   6=sad crewmate cup
   7=flipped sad crewmate cup
   8=trinket cup
   9=flipped trinket cup
   10=nothing?
   11=nothing?
   12=square
   13=1/4th of a disappearing platform frame 1
   14=frame 2
   15=frame 3
   16=another square
   17=another square
   18=another square (when I first tested it it was a V???)
   19=square
   20=square
   (I don't know if it goes further than 20)

And it does go above 27, actually, 27-50 are all glitched :viridian:'s at the top of the screen, 51-54 is nothing?, 55 is a rescuable crewmate, where you have to use metadata 2 for the colours, createentity(x,y,55,0,M):
0= :viridian:
1= :violet:
2= :vitellary:
3= :vermillion:
4= :verdigris:
5= :victoria:
6= :viridian:
7= :viridian:
8= :viridian:
9= :viridian:…

56 is an enemy, and 57, 58 and 59 are glitched :viridian:'s. After that I stopped.

Now, can someone please tell me why a lot of entities are :viridian: at the top of the screen, standing still until you move, then it starts to slide in the direction you walked to, and if you go further in that direction, it moves faster. If you walk in the opposite direction, :viridian: at the top of the screen slows down. As if the normal :viridian: is a joystick!
Title: Re: Internal commands
Post by: Dav999 on August 13, 2012, 03:01:41 PM
And this is what happens when you go above 50 trinkets.
(http://25.media.tumblr.com/tumblr_m8pp942Pmq1rvyxoko1_500.png)

I changed the number of trinkets in my save file once, and it said Trinkets Found: Lots
Title: Re: Internal commands
Post by: FIQ on August 13, 2012, 03:26:10 PM
I find createentity a bit unpredictable, I've used createentity(x,y,21,18,0) in my level to test it, and I got a terminal. Then I made a new level in which I tested it one by one, but this time, the exact same command, createentity(x,y,21,18,0), produced a white enemy sprite like you see in Linear Collider! ??? WTH? 20 also created such a thing, but you could activate it if you touch it as if it was a terminal. Also, entity ID 10 created a CD thing like you see in Security Swoop or something like that, and 18 and 24 are gray crewmates instead of cyan.

11=horizontal gravity line
12=vertical gravity line
22=should be trinket, but only shows up if you collect a trinket in that room without leaving it (used when :victoria: gives you a trinket in the ship, it is the only createentity command used in the game)
25=you have to use the metadata to change the created sprite, so createentity(x,y,25,M,0)
   0=top cup holder
   1=bottom cup holder
   2=cup
   3=flipped cup
   4=crewmate cup
   5=flipped crewmate cup
   6=sad crewmate cup
   7=flipped sad crewmate cup
   8=trinket cup
   9=flipped trinket cup
   10=nothing?
   11=nothing?
   12=square
   13=1/4th of a disappearing platform frame 1
   14=frame 2
   15=frame 3
   16=another square
   17=another square
   18=another square (when I first tested it it was a V???)
   19=square
   20=square
   (I don't know if it goes further than 20)

And it does go above 27, actually, 27-50 are all glitched :viridian:'s at the top of the screen, 51-54 is nothing?, 55 is a rescuable crewmate, where you have to use metadata 2 for the colours, createentity(x,y,55,0,M):
0= :viridian:
1= :violet:
2= :vitellary:
3= :vermillion:
4= :verdigris:
5= :victoria:
6= :viridian:
7= :viridian:
8= :viridian:
9= :viridian:…

56 is an enemy, and 57, 58 and 59 are glitched :viridian:'s. After that I stopped.

Now, can someone please tell me why a lot of entities are :viridian: at the top of the screen, standing still until you move, then it starts to slide in the direction you walked to, and if you go further in that direction, it moves faster. If you walk in the opposite direction, :viridian: at the top of the screen slows down. As if the normal :viridian: is a joystick!
Didn't know about id55 :p

Sprite metadata takes sprite info from <vvvvvvdir>/data/graphics/sprites.png. You can also put numbers lower than 0 for sprites @ 25 - the entity thingy just adds some number to get the trophy sprites. Try -36.
What you are taking with 12+ is actually data from an entire other file, "entcolours.png", but as colors isn't shown, you just see blocks instead of conveyor belt parts.

I don't know why undefined entity IDs gives glitchy viridians at the top. Also, ToasterApocalypse, you forgot entity ID 0 ;)

The purple enemy thing is the first enemy sprite, but I don't think it was used ever. As custom levels leave enemy info undefined (internally, that is), that sprite is all you'll get. I guess pink is the default colour (might have to do with the fact that the first gameplay room is Welcome Aboard, which also is pink). Entity ID 56 is pretty much custom level's version of 1, but as the sprite that should be shown isn't updated if a room lacks enemies, it'll be a square, unless the room contains other enemies, or you've visited a room just before with other entities (in which case those will be used).
Title: Re: Internal commands
Post by: FIQ on August 13, 2012, 03:53:13 PM
Dav999 just made me aware (in another topic) that you could use squeak(off) to turn off the terminal (or Viridian) sound in internal scripts in 2.1.

But - I just realized that this wont do any good if not doing one of the work-arounds suggested below.

Why? Because squeak(off) turns off squeaking. How surprising indeed. But what you maybe don't realize is that this is done with simply scripting, and will edit the conversion of say() and reply() commands internally, removing the squeak() line. This will make so custom scripting needs text(1,0,0,3) instead of text(1,0,0,4), while still needing text(1,0,0,4) in 2.0... effectively making the level 2.1-only.

But, as said, this is possible to work-around with compatibility to 2.0 (except that the terminal sound still sounds in 2.0, of course). I'll show how

Work-around 1 - Version checking

versioncheck
squeak(off)
say(-1)
text(1,0,0,4)
say(4)
flag(N,on)
endcutscene
untilbars
loadscript(stop)

This is a bit interesting. While 2.0 will do the usual thing, 2.1 will ignore the first internal line, as text(1,0,0,4) writes over one line too much. If you use flag(N,on) here, it will be turned on in 2.0, while kept off in 2.1. This way, you can check which version the user runs! While this has other benefits, the main benefit of working around the 1,0,0,4 vs 1,0,0,3 problem here is easy solvable. Here's an use after turned on the flag. It will however force you to make the scripts twice.

script:
ifflag(N,script_2_0)
squeak(off)
say(-1)
text(1,0,0,3)
say(5)
(Do your thing)

script_2_0
say(-1)
text(1,0,0,4)
say(5)
(Do your thing here as well)

Work-around 2 - Limit yourself to using 3 lines per internal scripting "iteration". Makes dialogs next-to impossible to do, however!

script
squeak(off)
say(-1)
text(1,0,0,4)
say(5)
#
internal
internal
internal
text(1,0,0,4)
(...)

The "#" line will be executed in 2.0, but not in 2.1. Therefore, leaving something that isn't a command - like "#" will make 2.0 and 2.1 do the same thing.
Title: Re: Internal commands
Post by: Dav999 on August 13, 2012, 04:23:12 PM
That's clever, finally a way to check the version! I also wanted to point out workaround 2, but when I was finished writing, you already changed your post. This is what I was going to post:

I think the easiest workaround is to use this:

Code: [Select]
squeak(off)
say(-1)
text(1,0,0,4)
say(5)
#
[internal]
[internal]
[internal]
text(1,0,0,4)
say(5)
#
[internal]
[internal]
[internal]
text(1,0,0,4)
(et cetera)

You lose one line in the row, but the only reason of wanting four lines in a row would be if you want to use text, and if you want to use internal text, just don't turn it off because you can use that squeaking sound for the dialog!
Title: Re: Internal commands
Post by: FIQ on August 13, 2012, 04:39:16 PM
That's clever, finally a way to check the version! I also wanted to point out workaround 2, but when I was finished writing, you already changed your post. This is what I was going to post:

I think the easiest workaround is to use this:

Code: [Select]
squeak(off)
say(-1)
text(1,0,0,4)
say(5)
#
[internal]
[internal]
[internal]
text(1,0,0,4)
say(5)
#
[internal]
[internal]
[internal]
text(1,0,0,4)
(et cetera)

You lose one line in the row, but the only reason of wanting four lines in a row would be if you want to use text, and if you want to use internal text, just don't turn it off because you can use that squeaking sound for the dialog!
Well, there's another reason, and that is that the script will become much longer.
Title: Re: Internal commands
Post by: Dav999 on August 13, 2012, 04:46:00 PM
You will be able to type that very fast if you do it often, so most of your time will be spent thinking about the thing you want to do, and the commands you're going to need for that.
Title: Re: Internal commands
Post by: Dav999 on August 14, 2012, 03:24:38 AM
I found another command, telesave(). It saves the game to the regular teleporter save of the actual game, not a quicksave of the level itself. If you load that save, you won't end up in your own level, but in dimension VVVVVV, and most likely you will end up in walls/somewhere you shouldn't be. So it shouldn't be used, actually. (So again, this will destroy your teleporter save). I added it to the list anyway to make it a bit more complete.
Title: Re: Internal commands
Post by: blue626 on August 14, 2012, 04:20:43 AM
EDIT: Looking at the posts above, where Dav999 and FIQ wrote examples of how to use internal scripting, and reading what Dav999 wrote about the command text, I don't see why do you have to use text(1,0,0,4) sometimes. I also don't see why you'll need say(-1) at the start. Look at the example below, specially, at the 1st line:

text(1,0,0,1)
say(5)
Internal scripting
Internal scripting
Internal scripting
Internal scripting
Internal scripting


Wouldn't it work? If not, would it work if I replaced the 1st line with text(1,0,0,4), or if I wrote say(-1) before the 1st line?

EDIT 2: I know why you need say(-1) now (because the editor would erase the text command if this command wasn't written, am I right?). I still don't know why do you need to use text(1,0,0,4).

I also don't know why there has to be text(1,0,0,4). I can't see the logic of taking 4 lines below it, but yeah. It works. :P

You don't have to use squeak(), position(), speak_active, endtext, endcutscene(), untilbars() and loadscript(stop), if you use the say(-1) trick again for every dialog you want to have coloured:

say(-1)
text(1,0,0,4)
say(5)
text(red,0,0,4)
This can
contain
four
lines!

Will create a red text box in the middle of the screen, and instead of say(), you can also use reply() to make a text box appear above :viridian:

reply(-1)
text(1,0,0,4)
reply(3)
text(yellow,0,0,2)
This box is yellow, but will
appear above the player!

This works because position() and speak_active are already part of the say(5) command or reply(5) command, whichever you use.

And you can just use the remaining space for other internal commands, or to extend it using text(1,0,0,4) say(5). That way, not everything has to be internal code.

I don't understand how to use simplified commands with what you said in this quote. If it is possible, then, there's a way to warp :viridian: to other places with less commands than this:
Couldn't you just do it with less flashes and commands? Why do you need playef(10) twice? Also, you forgot gotoposition(x,y). Example:

say(-1)
text(1,0,0,4)
say(5)
flash(5)
playef(9)
shake(20)
delay(30)
text(1,0,0,4)
say(4)
playef(10)
hideplayer()
delay(30)
text(1,0,0,4)
say(4)
gotoroom(x,y)
gotoposition(x,y)
delay(30)
text(1,0,0,4)
say(5)
flash(5)
playef(9)
shake(20)
delay(30)
text(1,0,0,4)
say(4)
showplayer()
endcutscene()
untilbars()
loadscript(stop)

It's still long, though. Perhaps, even less flashes and commands?

Perhaps you can use simplified scripting and then use internal scripting, and then use simp. script. again by writing commands that aren't inside a say command. Example:

flash
delay(30)
say(-1)
text(1,0,0,4)

say(3)
playef(10)
hideplayer()
delay(30)

flash
delay(30)
say(-1)
text(1,0,0,4)

say(4)
showplayer()
endcutscene()
untilbars()
loadscript(stop)


The text in bold is int. scripting, while the normal text is simp. scripting. It's STILL long! I don't know why do you need the red lines. If they aren't necessary, you can have less less 3 lines. I still don't know why can't you put say(-3) instead of the orange lines. If you can do that, you can have less 3+4=7 lines.
Title: Re: Internal commands
Post by: Dav999 on August 14, 2012, 04:51:14 AM
Let's try it out then!

Script:
Code: [Select]
say(-3)
playef(10)
hideplayer()
delay(30)
flash
delay(30)
say(-1)
text(1,0,0,4)
say
showplayer()

What happens the first time:

warpsound and an empty gray text box, player is not hidden
[waits until you press action]
delay(30), flash, delay(30), gray textbox which says:
Quote from: Textbox
position(center)
speak_active
squeak(terminal)
text(gray,0,114,1)

What happens the second time:

warpsound and a text box which says "position(center)", player is not hidden
[waits until you press action]
delay(30), flash, delay(30), gray textbox which says:
Quote from: Textbox
position(center)
speak_active
squeak(terminal)
text(gray,0,114,1)

So, it does not work. To avoid dialog rubbish you should go to a built-in script which is empty, so we choose a script which doesn't exist and use loadscript(stop). Unless you want to keep the black bars, you need to write endcutscene() to make them disappear and untilbars() to wait until they have disappeared. And not using text(1,0,0,4) and say after that will also make dialog rubbish.
Title: Re: Internal commands
Post by: Dav999 on August 14, 2012, 11:14:39 AM
Some new commands:

befadein()
changedir(colour,direction)
createactivityzone(colour)
createrescuedcrew()
everybodysad()
trinketyellowcontrol()
trinketbluecontrol()
rollcredits()
teleportscript(levelonecomplete)

I forgot to include these:

musicfadeout()
stopmusic()

These commands turn out to be different than I thought (@FIQ: did you know about this?):

gotoposition(x,y,z) turns out to have an extra argument, the z is whether you end up flipped or not, but you can also use that command with only two arguments
playef(x,n) also turns out to have an extra argument, and I don't know what that argument does (in the real game, it's always 10, but you can also use that command with only one argument)

It looks like there are also some unused commands:

ifwarp(x) ?
clearteleportscript(x) ?

The list has been updated!
Title: Re: Internal commands
Post by: FIQ on August 14, 2012, 11:45:30 AM
Some new commands:

befadein()
changedir(colour,direction)
createactivityzone(colour)
createrescuedcrew()
everybodysad()
trinketyellowcontrol()
trinketbluecontrol()
rollcredits()
teleportscript(levelonecomplete)

I forgot to include these:

musicfadeout()
stopmusic()

These commands turn out to be different than I thought (@FIQ: did you know about this?):

gotoposition(x,y,z) turns out to have an extra argument, the z is whether you end up flipped or not, but you can also use that command with only two arguments
playef(x,n) also turns out to have an extra argument, and I don't know what that argument does (in the real game, it's always 10, but you can also use that command with only one argument)

It looks like there are also some unused commands:

ifwarp(x) ?
clearteleportscript(x) ?

The list has been updated!
befadein() - Instantly fades in
changedir(colour,left|right) - Changes what direction a crewmate is facing
createactivityzone(colour) - Create a "Press ACTION to talk to (Crewmate)" zone, flags will decide which line is used
createrescuedcrew() - Creates all the crewmates that's rescued at the moment (controlled by rescued(colour))
everybodysad() - Makes everybody sad (viridian + internal crewmates)
trinketyellowcontrol() - Prints the dialog by Vitellary when he found a trinket
trinketbluecontrol() - Prints the dialog by Victoria when she found a trinket
rollcredits() - Rolls the credits
teleportscript(x) - set internal script "x" as "teleportscript".
clearteleportscript(x) - removes "teleportscript"
ifwarp(x) - Huh?

Teleportscript is a script that overrides the default teleport functionality (open a map and choose destination). It's used in the maingame when you've just rescued a crewmate.
Title: Re: Internal commands
Post by: Dav999 on August 14, 2012, 12:07:53 PM
Some new commands:

befadein()
changedir(colour,direction)
createactivityzone(colour)
createrescuedcrew()
everybodysad()
trinketyellowcontrol()
trinketbluecontrol()
rollcredits()
teleportscript(levelonecomplete)

I forgot to include these:

musicfadeout()
stopmusic()

These commands turn out to be different than I thought (@FIQ: did you know about this?):

gotoposition(x,y,z) turns out to have an extra argument, the z is whether you end up flipped or not, but you can also use that command with only two arguments
playef(x,n) also turns out to have an extra argument, and I don't know what that argument does (in the real game, it's always 10, but you can also use that command with only one argument)

It looks like there are also some unused commands:

ifwarp(x) ?
clearteleportscript(x) ?

The list has been updated!
befadein() - Instantly fades in
changedir(colour,left|right) - Changes what direction a crewmate is facing
createactivityzone(colour) - Create a "Press ACTION to talk to (Crewmate)" zone, flags will decide which line is used
createrescuedcrew() - Creates all the crewmates that's rescued at the moment (controlled by rescued(colour))
everybodysad() - Makes everybody sad (viridian + internal crewmates)
trinketyellowcontrol() - Prints the dialog by Vitellary when he found a trinket
trinketbluecontrol() - Prints the dialog by Victoria when she found a trinket
rollcredits() - Rolls the credits
teleportscript(x) - set internal script "x" as "teleportscript".
clearteleportscript(x) - removes "teleportscript"
ifwarp(x) - Huh?

Teleportscript is a script that overrides the default teleport functionality (open a map and choose destination). It's used in the maingame when you've just rescued a crewmate.

changedir doesn't support left/right, only numbers. I had already added a description of what everybodysad() and rollcredits() do, and that trinket[colour]control() had something to do with :victoria: or :vitellary: giving you a trinket. But does befadein() instantly fade in from fadeout()? clearteleportscript(x) doesn't appear in any script, so when is it used? And does createactivityzone(terminal) make "Press ENTER to activate terminal"? (and createactivityzone(terminals) "Press ENTER to activate terminals", as seen in the ship?)
Title: Re: Internal commands
Post by: FIQ on August 14, 2012, 12:32:36 PM
Some new commands:

befadein()
changedir(colour,direction)
createactivityzone(colour)
createrescuedcrew()
everybodysad()
trinketyellowcontrol()
trinketbluecontrol()
rollcredits()
teleportscript(levelonecomplete)

I forgot to include these:

musicfadeout()
stopmusic()

These commands turn out to be different than I thought (@FIQ: did you know about this?):

gotoposition(x,y,z) turns out to have an extra argument, the z is whether you end up flipped or not, but you can also use that command with only two arguments
playef(x,n) also turns out to have an extra argument, and I don't know what that argument does (in the real game, it's always 10, but you can also use that command with only one argument)

It looks like there are also some unused commands:

ifwarp(x) ?
clearteleportscript(x) ?

The list has been updated!
befadein() - Instantly fades in
changedir(colour,left|right) - Changes what direction a crewmate is facing
createactivityzone(colour) - Create a "Press ACTION to talk to (Crewmate)" zone, flags will decide which line is used
createrescuedcrew() - Creates all the crewmates that's rescued at the moment (controlled by rescued(colour))
everybodysad() - Makes everybody sad (viridian + internal crewmates)
trinketyellowcontrol() - Prints the dialog by Vitellary when he found a trinket
trinketbluecontrol() - Prints the dialog by Victoria when she found a trinket
rollcredits() - Rolls the credits
teleportscript(x) - set internal script "x" as "teleportscript".
clearteleportscript(x) - removes "teleportscript"
ifwarp(x) - Huh?

Teleportscript is a script that overrides the default teleport functionality (open a map and choose destination). It's used in the maingame when you've just rescued a crewmate.

changedir doesn't support left/right, only numbers. I had already added a description of what everybodysad() and rollcredits() do, and that trinket[colour]control() had something to do with :victoria: or :vitellary: giving you a trinket. But does befadein() instantly fade in from fadeout()? clearteleportscript(x) doesn't appear in any script, so when is it used? And does createactivityzone(terminal) make "Press ENTER to activate terminal"? (and createactivityzone(terminals) "Press ENTER to activate terminals", as seen in the ship?)
Didn't see your descriptions, sorry (and yes, I meant 0|1).
befadein() fades in instantly from a black screen (from fadeout()), yes.
createactivityzone() will only support the crewmate colors (and "terminal", not "terminals"). It will default to "terminal", which will output the one at the Laboratory ("?SYNTAX ERROR").

clearteleportscript(x) isn't used, but it does remove the teleportscript that is set.
Title: Re: Internal commands
Post by: Dav999 on August 14, 2012, 01:15:17 PM
But how is that teleport script cleared if the command is not used? Wouldn't that script just repeat each time you get to a teleporter or is this done with flags?

EDIT: createactivityzone(terminal) will create a zone with 'Press ENTER to explode'. :vermillion: If you press enter, you get the first part of the cutscene in the beginning.

'Press ENTER to explode' ??? I'm pretty sure it's used nowhere in the game...
Title: Re: Internal commands
Post by: ToasterApocalypse on August 14, 2012, 01:16:15 PM
Question: How to stop all music with play()?
Title: Re: Internal commands
Post by: Dav999 on August 14, 2012, 01:20:10 PM
Question: How to stop all music with play()?

musicfadeout() if you want it to fadeout, and stopmusic() if you want it to stop instantly.
Title: Re: Internal commands
Post by: ToasterApocalypse on August 14, 2012, 01:22:13 PM
Question: How to stop all music with play()?

musicfadeout() if you want it to fadeout, and stopmusic() if you want it to stop instantly.

Thanks. I was just working on the end script for switchback and I wanted to stop the music for some sort of dramatic effect of sorts.
Title: Re: Internal commands
Post by: Dav999 on August 14, 2012, 01:37:14 PM
If you use clearteleportscript, which of the following is correct:
-clearteleportscript
-clearteleportscript()
-clearteleportscript(the script which was set earlier)

Which brings me to another question that just needs to be asked. Why do some commands have () after them? (Question for Terry, maybe)
Title: Re: Internal commands
Post by: FIQ on August 14, 2012, 02:38:01 PM
If you use clearteleportscript, which of the following is correct:
-clearteleportscript
-clearteleportscript()
-clearteleportscript(the script which was set earlier)

Which brings me to another question that just needs to be asked. Why do some commands have () after them? (Question for Terry, maybe)
() will not really have any effect. "endcutscene" and "encutscene()" does the same. I guess the latter was used to make it more readable.

clearteleportscript shouldn't be used with any parameter.

Also, I don't think you understand what it really does.

teleportscript(x): teleportscript="x"
clearteleportscript(): teleportscript=""

It just clears the fact that "x" should be used as the teleportscript. Look at tsave/qsave.vvv, there's a teleportscript attribute there. Usually it's empty, but when you've rescued a crewmate (but not exited the level) and save, you end up with content there. This is what will be removed if you use clearteleportscript(). Note that clearteleportscript() is never used in the game - it gets cleared automatically when you use a teleporter when it's running it.

Understand?
Title: Re: Internal commands
Post by: Dav999 on August 14, 2012, 02:43:59 PM
Understand?

Yes.

I've updated the second post with some words I found which might be commands or not:

tilecol(x)
moveplayer(?)
donothing
loop
position(centery)
changeai(colour,followpurple/followyellow/followred/followgreen/followblue/faceplayer)
leavesecretlab()
jukebox(x)
resumemusic()
musicfadein()
Title: Re: Internal commands
Post by: FIQ on August 14, 2012, 02:54:57 PM
tilecol(x) - doesn't exists
moveplayer(?) - moves player
donothing - noop (essentially the same as writing an unknown command)
loop - see below
position(centery) - see below
changeai(colour,followpurple/followyellow/followred/followgreen/followblue/faceplayer)
followcrewmatecolor - follow that crewmate the same way as "followplayer" but for other crewmates
faceplayer - the auto-reface behaviour they have in ship, etc, when they automatically looks where Viridian is.
leavesecretlab() - turn off "secret lab mode" (i.e. pause menu showing different things)
jukebox(x) - better use play(x) instead, it plays different jukebox music
resumemusic() - opposite of stopmusic()
musicfadein() - opposite of musicfadeout()

position(centerx) - Makes the dialog at center at X axis
position(centery) - Makes the dialog at center at Y axis

Combine the two and you've the same functionality as position(center). :P

VVVVVVscript (internally) supports looping a certain script more than one time. This is how:

Code: [Select]
squeak(terminal)
text(gray,0,0,2)
This is an example show-off.
Game will flash 5 times!
position(center)
speak_active
endtext
do(5)
flash(5)
playef(9)
shake(20)
delay(30)
loop
squeak(terminal)
text(gray,0,0,1)
See?
position(center)
speak_active
endtext

This was never used in the main game, however. Maybe someone will find an use for it?
You don't want to give it negative numbers unless you like infinite loops, however.
Title: Re: Internal commands
Post by: Dav999 on August 14, 2012, 03:25:07 PM
I know a use for it, I have a sound effect which needs to be played 6 times in a row. Now I wrote that command six times with delays in between.

I still don't understand moveplayer(?). I understood that it had something to do with moving the player ::) But how about the arguments, where does it move the player to, does he walk or teleport, etc.

Oh, and the list has been updated!
Title: Re: Internal commands
Post by: FIQ on August 14, 2012, 03:57:10 PM
moveplayer(x,y) - Moves player x/y amount of pixels. moveplayer(50,0) will send the player 50 pixels right, moveplayer(50,-50) will send the player 50 pixels right and 50 pixels up. It's a gotoposition() relative to current position, pretty much.

There you go :P
Title: Re: Internal commands
Post by: Dav999 on August 14, 2012, 04:13:44 PM
Is there also an equivalence for moving crewmates instead of player?
Title: Re: Internal commands
Post by: FIQ on August 14, 2012, 05:14:49 PM
Is there also an equivalence for moving crewmates instead of player?
After a quick look, doesn''t seem so! Could've missed it though.
Title: Re: Internal commands
Post by: Dav999 on August 15, 2012, 01:25:02 AM
I tested resumemusic() and musicfadein(), and they don't seem to work. Do you have to put a song command underneath or above it or something? They're never used in a built-in script.

EDIT: jukebox(x) also doesn't work. Have you tested these commands?
Title: Re: Internal commands
Post by: FIQ on August 15, 2012, 06:46:53 AM
I tested resumemusic() and musicfadein(), and they don't seem to work. Do you have to put a song command underneath or above it or something? They're never used in a built-in script.

EDIT: jukebox(x) also doesn't work. Have you tested these commands?
Note to self: try to confirm what I says :D

musicfadein(x) - seems to do essentially nothing (it DOES something, but it doesn't affect gameplay in any way)
resumemusic() - Plays "resumesong", which seems to always be Positive Force
jukebox(x) - Makes a jukebox terminal white and turns off the color off all the other terminals (In custom levels, it just seem to turn off the white color of all activated terminals).
Title: Re: Internal commands
Post by: blue626 on August 15, 2012, 07:51:45 AM
I like the idea of warning people about commands that may or are dangerous or can only be used in the main game. But, commands like telesave() aren't always dangerous, as there are some players that always use quicksave. Anyway, keep that warning there.
That reminds me of something. What type of save is the one after completing the Final Level? Quick or tele? Affter making that save and selecting "Continue", it doesn't let you select tele save or quick save and goes directly to the game.

Why are there commands that are never used, even in the main game? Why were they created?

EDIT: createactivityzone(terminal) will create a zone with 'Press ENTER to explode'. :vermillion: If you press enter, you get the first part of the cutscene in the beginning.

'Press ENTER to explode' ??? I'm pretty sure it's used nowhere in the game...

It's probably from a prototype or a beta, like some of the gamestates. Maybe a way to go back to the beggining. Why do they still work? It's similar to the way the tiles that only appeared in the prototype appeared in Direct Mode in 2.1.beta...

Why, when you use createentity you create trinkets, and collect more than 50, you get "Lots out of Twenty"? Weird, it's similar to the 21st trinket glitch I mentioned before. What does it say when you collect 21? And 22? And >22? It's weird because the number of trinkets is written in words, not numbers.

EDIT: According to one of FIQ's posts, companion(x) might work if you use numbers instead of colors. I don't know why it only worked for :vermillion: when PJBottomz tried.

Btw: 115 replies! For the last 2 4 days, this has been the only thread in this board with new posts. And, lost of posts!
Title: Re: Internal commands
Post by: FIQ on August 15, 2012, 08:30:26 AM
I like the idea of warning people about commands that may or are dangerous or can only be used in the main game. But, commands like telesave() aren't always dangerous, as there are some players that always use quicksave. Anyway, keep that warning there.
That reminds me of something. What type of save is the one after completing the Final Level? Quick or tele? Affter making that save and selecting "Continue", it doesn't let you select tele save or quick save and goes directly to the game.

Why are there commands that are never used, even in the main game? Why were they created?

EDIT: createactivityzone(terminal) will create a zone with 'Press ENTER to explode'. :vermillion: If you press enter, you get the first part of the cutscene in the beginning.

'Press ENTER to explode' ??? I'm pretty sure it's used nowhere in the game...

It's probably from a prototype or a beta, like some of the gamestates. Maybe a way to go back to the beggining. Why do they still work? It's similar to the way the tiles that only appeared in the prototype appeared in Direct Mode in 2.1.beta...

Why, when you use createentity you create trinkets, and collect more than 50, you get "Lots out of Twenty"? Weird, it's similar to the 21st trinket glitch I mentioned before. What does it say when you collect 21? And 22? And >22? It's weird because the number of trinkets is written in words, not numbers.

EDIT: According to one of FIQ's posts, companion(x) might work if you use numbers instead of colors. I don't know why it only worked for :vermillion: when PJBottomz tried.

Btw: 115 replies! For the last 2 4 days, this has been the only thread in this board with new posts. And, lost of posts!
:vermillion: is the default character with companion(). I guess PJBottomz played with it and never tried numbers.

EDIT: The reason that the wordnumbers doesn't go over 50 is probably because how Terry implemented it. I guess he just made 51 different words instead of doing it dynamically, and made "Lots" a default word when none else is used. Why he made 51 (0-50) instead of 21 (0-20) is something that I've no idea of though (Terry would know it, definitely :p)
Title: Re: Internal commands
Post by: Dav999 on August 15, 2012, 09:15:26 AM
I like the idea of warning people about commands that may or are dangerous or can only be used in the main game. But, commands like telesave() aren't always dangerous, as there are some players that always use quicksave. Anyway, keep that warning there.
That reminds me of something. What type of save is the one after completing the Final Level? Quick or tele? Affter making that save and selecting "Continue", it doesn't let you select tele save or quick save and goes directly to the game.

It uses tele, because there is a teleporter at the end of every level, which you have to touch. So if I understand it well, it deletes your quick save? :-\

Why are there commands that are never used, even in the main game? Why were they created?

I guess Terry just started off with a few commands, and adding commands each time he needed one. So maybe he needed to have a loop in one script, created a do(n) and loop command, then decided it was better to do it in another way and just left it there. Just like clearteleporterscript(), it would be used after every teleporter, but then it was decided that it was much better to put it in a teleporter by default (or maybe it was used after you find a crewmate and then backtrack to another teleporter, and then it was a much better idea to just not make the player able to go back after finding a crewmate.)

Why, when you use createentity you create trinkets, and collect more than 50, you get "Lots out of Twenty"? Weird, it's similar to the 21st trinket glitch I mentioned before. What does it say when you collect 21? And 22? And >22? It's weird because the number of trinkets is written in words, not numbers.

I think that the maximum number of anything wouldn't go above 50, and that if you go above that it would say 'Lots'. I think that those words were put in the game before the idea to put 20 trinkets in the game.

EDIT: According to one of FIQ's posts, companion(x) might work if you use numbers instead of colors. I don't know why it only worked for :vermillion: when PJBottomz tried.

Companion only works with numbers, and in the real game, only numbers are used. Strangely enough, only if you use it with :vermillion:, he will walk across screens. :-\ Maybe it has something to do with that his teleporter is to the right, and most of the others had to leave on the left or something.
Title: Re: Internal commands
Post by: FIQ on August 15, 2012, 09:16:02 AM
Looking at the internal commands list, I see that there are no commands to change warp direction, tile set and room-name, like in the Final Level. So, I suppose that the Polar Dim. has 2 altsates too, am I right?
Also, you mentioned ifflag twice, not describing it right the 2nd time. EDIT: No, you didn't. I was wrong.

EDIT 2:
Enemies has the following: X, Y, 1 (Entity ID), Direction, Speed, Border1 X, Border1 Y, Border2 X, Border2 Y

Why do you need the last 4 values if you have the first 2? Do they define the enemy size? If they are needed for some reason, why do you need the first 2? Why did you mention that if you can't create costum enemies with createentity?
These are enemy borders (the ones that you in custom levels set with F4).
Title: Re: Internal commands
Post by: Dav999 on August 15, 2012, 09:23:32 AM
F4? Is that only in 2.1? ???
Title: Re: Internal commands
Post by: FIQ on August 15, 2012, 09:32:09 AM
F4? Is that only in 2.1? ???
Yep, 2.1 has nicer keybindings in the level editor. It's shift+4 in 2.0 IIRC.

The quicksave isn't deleted, but is hidden. If you somehow destroy your telesave to the state before the game is complete, it'll reappear.
Title: Re: Internal commands
Post by: blue626 on August 15, 2012, 12:40:25 PM
Why, when you use createentity you create trinkets, and collect more than 50, you get "Lots out of Twenty"? Weird, it's similar to the 21st trinket glitch I mentioned before. What does it say when you collect 21? And 22? And >22? It's weird because the number of trinkets is written in words, not numbers.
I think that the maximum number of anything wouldn't go above 50, and that if you go above that it would say 'Lots'. I think that those words were put in the game before the idea to put 20 trinkets in the game.

Anything? Isn't it just for trinkets? Or, do you mean crewmates? Try to make a costum level with 50 crewmates, if that's what you mean. Also, is there a limit for the number of crewmates in costum levels? I'm sure it's >19, because Dim. WWWWWW has 20.
Well, he already had the idea of having 20 trinkets in the 1st prototype (get one of them and "You found a shiny trinket; One out of Twenty" will appear). But, that explains the existence of "Lots", the rest of the numbers and the 21st trinket glitch.

EDIT: According to one of FIQ's posts, companion(x) might work if you use numbers instead of colors. I don't know why it only worked for :vermillion: when PJBottomz tried.

Companion only works with numbers, and in the real game, only numbers are used. Strangely enough, only if you use it with :vermillion:, he will walk across screens. :-\ Maybe it has something to do with that his teleporter is to the right, and most of the others had to leave on the left or something.

 :verdigris: also leaves to the right, so that can't be the reason. What is it, then?

Title: Re: Internal commands
Post by: Dav999 on August 15, 2012, 01:24:11 PM
Why, when you use createentity you create trinkets, and collect more than 50, you get "Lots out of Twenty"? Weird, it's similar to the 21st trinket glitch I mentioned before. What does it say when you collect 21? And 22? And >22? It's weird because the number of trinkets is written in words, not numbers.
I think that the maximum number of anything wouldn't go above 50, and that if you go above that it would say 'Lots'. I think that those words were put in the game before the idea to put 20 trinkets in the game.

Anything? Isn't it just for trinkets? Or, do you mean crewmates? Try to make a costum level with 50 crewmates, if that's what you mean. Also, is there a limit for the number of crewmates in costum levels? I'm sure it's >19, because Dim. WWWWWW has 20.
Well, he already had the idea of having 20 trinkets in the 1st prototype (get one of them and "You found a shiny trinket; One out of Twenty" will appear). But, that explains the existence of "Lots", the rest of the numbers and the 21st trinket glitch.

(http://d2bm3ljpacyxu8.cloudfront.net/width/908/crop/0,0,908x564/afbeeldinge.webs.com/20%20crewmates.jpg)

(http://d2bm3ljpacyxu8.cloudfront.net/width/908/crop/0,0,908x565/afbeeldinge.webs.com/20%20trinkets.jpg)

What I meant was that Terry probably put those words in the game before deciding there would be 20 trinkets and certainly before deciding the maximum number of crewmates in custom levels would be 20. He didn't know how many trinkets there was going to be, so he could just put in 50 trinkets without having to change the words.

EDIT: According to one of FIQ's posts, companion(x) might work if you use numbers instead of colors. I don't know why it only worked for :vermillion: when PJBottomz tried.

Companion only works with numbers, and in the real game, only numbers are used. Strangely enough, only if you use it with :vermillion:, he will walk across screens. :-\ Maybe it has something to do with that his teleporter is to the right, and most of the others had to leave on the left or something.

 :verdigris: also leaves to the right, so that can't be the reason. What is it, then?

I have no idea, maybe a compile bug or something? :-\ I really wouldn't know.
Title: Re: Internal commands
Post by: FIQ on August 15, 2012, 02:13:11 PM
Why, when you use createentity you create trinkets, and collect more than 50, you get "Lots out of Twenty"? Weird, it's similar to the 21st trinket glitch I mentioned before. What does it say when you collect 21? And 22? And >22? It's weird because the number of trinkets is written in words, not numbers.
I think that the maximum number of anything wouldn't go above 50, and that if you go above that it would say 'Lots'. I think that those words were put in the game before the idea to put 20 trinkets in the game.

Anything? Isn't it just for trinkets? Or, do you mean crewmates? Try to make a costum level with 50 crewmates, if that's what you mean. Also, is there a limit for the number of crewmates in costum levels? I'm sure it's >19, because Dim. WWWWWW has 20.
Well, he already had the idea of having 20 trinkets in the 1st prototype (get one of them and "You found a shiny trinket; One out of Twenty" will appear). But, that explains the existence of "Lots", the rest of the numbers and the 21st trinket glitch.

(http://d2bm3ljpacyxu8.cloudfront.net/width/908/crop/0,0,908x564/afbeeldinge.webs.com/20%20crewmates.jpg)

(http://d2bm3ljpacyxu8.cloudfront.net/width/908/crop/0,0,908x565/afbeeldinge.webs.com/20%20trinkets.jpg)

What I meant was that Terry probably put those words in the game before deciding there would be 20 trinkets and certainly before deciding the maximum number of crewmates in custom levels would be 20. He didn't know how many trinkets there was going to be, so he could just put in 50 trinkets without having to change the words.

EDIT: According to one of FIQ's posts, companion(x) might work if you use numbers instead of colors. I don't know why it only worked for :vermillion: when PJBottomz tried.

Companion only works with numbers, and in the real game, only numbers are used. Strangely enough, only if you use it with :vermillion:, he will walk across screens. :-\ Maybe it has something to do with that his teleporter is to the right, and most of the others had to leave on the left or something.

 :verdigris: also leaves to the right, so that can't be the reason. What is it, then?

I have no idea, maybe a compile bug or something? :-\ I really wouldn't know.
No, the problem is that rooms which may or may not have crewmates are hardcoded, and which one that should be used. That's why in most rooms companion() doesn't work at all. Make a 20,20 map and be around Warp Zone, and Verdigris will show up after the right companion() numbers. Etc.
Title: Re: Internal commands
Post by: Dav999 on August 15, 2012, 02:31:13 PM
But then why does :vermillion: work everywhere (everywhere I tested, at least)? Is it because the tower level is not a usual level you can't really give the tower coordinates?
Title: Re: Internal commands
Post by: blue626 on August 16, 2012, 08:09:53 AM
But then why does :vermillion: work everywhere (everywhere I tested, at least)? Is it because the tower level is not a usual level you can't really give the tower coordinates?

It probably isn't, because :vermillion: isn't on "The Tower", but on the room "Seeing Red" after the tower. He can't even get to the Tower, because there's a large "step" in "Seeing Red" and crewmates can't flip when they follow :viridian: like that.

Wait, it sill don't understand why the word "Lots" exists in the game and appears when you get >50 trinkets. Even if the game would have more than 50 trinkets, the player should know when he has got all of them, so, creating the word "Lots" doesn't make sense (at least for me). Only Terry knows why.
Title: Re: Internal commands
Post by: FIQ on August 16, 2012, 09:01:24 AM
But then why does :vermillion: work everywhere (everywhere I tested, at least)? Is it because the tower level is not a usual level you can't really give the tower coordinates?

It probably isn't, because :vermillion: isn't on "The Tower", but on the room "Seeing Red" after the tower. He can't even get to the Tower, because there's a large "step" in "Seeing Red" and crewmates can't flip when they follow :viridian: like that.

Wait, it sill don't understand why the word "Lots" exists in the game and appears when you get >50 trinkets. Even if the game would have more than 50 trinkets, the player should know when he has got all of them, so, creating the word "Lots" doesn't make sense (at least for me). Only Terry knows why.
Lots is just a fallback... Would you rather see " out of Twenty" instead of "Lots out of Twenty"?
Title: Re: Internal commands
Post by: Dav999 on August 16, 2012, 10:24:09 AM
Yes, I think 'Lots' was meant for when something glitched and it is above 50 and there is nothing else to display. Just like when you change the map music to 0a, 5a or 9a manually in the vvvvvv file, and you want to change the map music from the level menu, it says the current song is "?: something else", but still plays it.
Title: Re: Internal commands
Post by: blue626 on August 16, 2012, 02:26:51 PM
So, what you're saying is that Terry thought that there might be glitches that make having more than the maximum number of trinkets possible, am I right?. I suppose that's possible.
Title: Re: Internal commands
Post by: Dav999 on August 16, 2012, 02:36:26 PM
Or people changing their save file...?

        <trinkets>51</trinkets>

(http://d2bm3ljpacyxu8.cloudfront.net/width/144/crop/0,0,144x49/afbeeldinge.webs.com/Lots.png)
Title: Re: Internal commands
Post by: Dav999 on August 16, 2012, 02:55:43 PM
(http://d2bm3ljpacyxu8.cloudfront.net/width/908/crop/0,0,908x565/afbeeldinge.webs.com/Zero.png)

:viridian:
Title: Re: Internal commands
Post by: blue626 on August 16, 2012, 03:16:47 PM
Let me guess: You wrote a negative number in the trinkets number in the save file. Am I right? If so, what did it say about the number of trinkets? Nothing (Like "out of Twenty)?
Title: Re: Internal commands
Post by: Dav999 on August 16, 2012, 03:24:52 PM
Let me guess: You wrote a negative number in the trinkets number in the save file. Am I right?

Yes! I wrote -1.

If so, what did it say about the number of trinkets? Nothing (Like "out of Twenty)?

No. It said "Lots out of Twenty" :D Lots is just the word for anything that's not 0-50, as it's more likely that people have too many trinkets than that people end up with a negative amount of trinkets.
Title: Re: Internal commands
Post by: FIQ on August 17, 2012, 12:01:54 PM
I re-downloaded 2.0 from Steam and tried it with my own level to see if there were any difference. I found *one* difference, so it seems that internal commands are pretty much interchangeable between versions.

The difference: I use musicfadeout() in one instance (actually 2, but in the same way), and resumed the music with play(<the song ID>). This didn't work in 2.0 for some reason and refused to play the track again. I've a great feeling that this is in fact the same bug that stops music in Time Trials after a retry. Anyway, a workaround is just to play another soundtrack and then change immediately - preferably a quiet song like "Presenting VVVVVV" to avoid it from being noticed.
Title: Re: Internal commands
Post by: Dav999 on August 17, 2012, 12:49:41 PM
I re-downloaded 2.0 from Steam and tried it with my own level to see if there were any difference. I found *one* difference, so it seems that internal commands are pretty much interchangeable between versions.

The difference: I use musicfadeout() in one instance (actually 2, but in the same way), and resumed the music with play(<the song ID>). This didn't work in 2.0 for some reason and refused to play the track again. I've a great feeling that this is in fact the same bug that stops music in Time Trials after a retry. Anyway, a workaround is just to play another soundtrack and then change immediately - preferably a quiet song like "Presenting VVVVVV" to avoid it from being noticed.

I can see why that happens. If you want to play a song by using a command, and that song is already playing, it won't change anything. It might not have registered that that song has stopped playing, so it doesn't do anything. However, if you restart a time trial, it doesn't ALWAYS refuse to play again. What happens if you first use play(0) and then restart the song?
Title: Re: Internal commands
Post by: blue626 on August 17, 2012, 02:32:31 PM
However, if you restart a time trial, it doesn't ALWAYS refuse to play again.

Really? It always refuses when I restart a Time Trial.

Maybe it erases the play command before executing the script if it's the same as the song that's playing and in 2.1.beta it erases it only after executing the commands before it?

EDIT: This thread already has 10 pages! And it's the 3rd with most replies in this forum!
Title: Re: Internal commands
Post by: Dav999 on August 17, 2012, 03:45:31 PM
However, if you restart a time trial, it doesn't ALWAYS refuse to play again.

Really? It always refuses when I restart a Time Trial.

Maybe it erases the play command before executing the script if it's the same as the song that's playing and in 2.1.beta it erases it only after executing the commands before it?

That's possible, but I think the musicfadeout() command does fade out the music, but doesn't change a variable somewhere that indicates what music is currently playing.

EDIT: This thread already has 10 pages! And it's the 3rd with most replies in this forum!

It will become 1st, just watch. :vermillion:
Title: Re: Internal commands
Post by: Hilbert on August 17, 2012, 04:28:32 PM
Toaster I know you're looking at this...
Title: Re: Internal commands
Post by: Bearboy on August 18, 2012, 02:16:19 AM
How do you people know how to do all this stuff?

Did you just check the whole game internally to see what scripts there were?

WUT. :vitellary:
Title: Re: Internal commands
Post by: blue626 on August 18, 2012, 03:27:34 AM
How do you people know how to do all this stuff?

Did you just check the whole game internally to see what scripts there were?

WUT. :vitellary:

Yes, they opened a file with code from the game to see which commands it used. Then they tested them in a costum level using the say/text/say combination (without it they wouldn't work).

EDIT: This thread already has 10 pages! And it's the 3rd with most replies in this forum!

It will become 1st, just watch. :vermillion:

Do you know how many replies the thread in 1st has? 228! This thread still has ≈140. That's still a big number of replies, though.

Toaster I know you're looking at this...

 ??? What?
Title: Re: Internal commands
Post by: Dav999 on August 18, 2012, 06:54:57 AM
How do you people know how to do all this stuff?

Did you just check the whole game internally to see what scripts there were?

WUT. :vitellary:

Yes, they opened a file with code from the game to see which commands it used. Then they tested them in a costum level using the say/text/say combination (without it they wouldn't work).

You can open the executable in a text/hex editor (hex is better) and scroll down to the script. There are also some commands which were never used, like clearteleportscript(), and the looping function. I didn't find these in scripts, but somewhere where commands were placed under each other.
Title: Re: Internal commands
Post by: ToasterApocalypse on August 18, 2012, 06:58:01 AM
Toaster I know you're looking at this...

My cover is blown.

Title: Re: Internal commands
Post by: blue626 on August 18, 2012, 07:12:32 AM
Toaster I know you're looking at this...

My cover is blown.

He probably looked in the "Who's online" list. I don't know why he said that ???.
Title: Re: Internal commands
Post by: Dav999 on August 18, 2012, 07:21:59 AM
Toaster I know you're looking at this...

My cover is blown.

He probably looked in the "Who's online" list. I don't know why he said that ???.

Probably randomness :P
Title: Re: Internal commands
Post by: FIQ on August 18, 2012, 08:54:45 AM
I just realized (a bit too late maybe) that Terry might or might not like that we're kinda reverse-engineering VVVVVV (at least the scripting language part of it) here. :P

But I guess he doesn't care, or this topic would have been deleted way ago.

Anyway, bearboy, yes, that's pretty much what Dav999 did to find the commands.
Title: Re: Internal commands
Post by: blue626 on August 18, 2012, 12:23:36 PM
I just realized (a bit too late maybe) that Terry might or might not like that we're kinda reverse-engineering VVVVVV (at least the scripting language part of it) here. :P

But I guess he doesn't care, or this topic would have been deleted way ago.

I already though of that for some time now!
What you're doing (using internal scripting) couldn't be done if the glitch in he parser didn't exist. This wasn't supposed to be done, obviously, and that's why I never tested internal scripting and I'll never make a level with it (and why I said "what you're doing). Terry may even remove the glitch in 2.1 (stable).
I think he doesn't care, though. He could have erased locked this topic weeks ago. You may test internal scripting and use it in levels. I'm sure those levels won't get featured in Terry's blog, though.
Title: Re: Internal commands
Post by: Dav999 on August 18, 2012, 01:08:58 PM
Terry may even remove the glitch in 2.1 (stable).

I don't think he would remove it, because the only thing you will gain from it is that some really nice levels will be broken. I understand why the say(6) # say(5) # [internal x4] exploit was fixed, because the say command had to support more than 5 lines, so that it doesn't glitch if you use more. I don't see why the say(-1) would need to be removed. It's just not logical.

I think he doesn't care, though. He could have erased locked this topic weeks ago. You may test internal scripting and use it in levels. I'm sure those levels won't get featured in Terry's blog, though.

When was the last featured level? Does Terry still feature levels?
Title: Re: Internal commands
Post by: FIQ on August 18, 2012, 01:41:22 PM
Terry may even remove the glitch in 2.1 (stable).

I don't think he would remove it, because the only thing you will gain from it is that some really nice levels will be broken. I understand why the say(6) # say(5) # [internal x4] exploit was fixed, because the say command had to support more than 5 lines, so that it doesn't glitch if you use more. I don't see why the say(-1) would need to be removed. It's just not logical.

I think he doesn't care, though. He could have erased locked this topic weeks ago. You may test internal scripting and use it in levels. I'm sure those levels won't get featured in Terry's blog, though.

When was the last featured level? Does Terry still feature levels?
Also, Terry did like your "Dimension Of Secrets" which, obviously, featured internal scripting. :P

The only reason of him fixing the glitch is if he also creates a new command with the only purpose of running internal scripts, "internal(N)", or something like that. Otherwise, removing it wouldn't make any sense.
Title: Re: Internal commands
Post by: Dav999 on August 18, 2012, 02:03:23 PM
The only reason of him fixing the glitch is if he also creates a new command with the only purpose of running internal scripts, "internal(N)", or something like that. Otherwise, removing it wouldn't make any sense.

That would make the level incompatible with 2.0, and a number of lines would be a little bit inconvenient, because if you have a lot of internal commands, you have to count all the lines. Something like putting all internal commands between [] would be very useful, or even an advanced mode. In that case, putting all internal commands between [] would be a perfect solution, because some people may be too lazy to write 'squeak(x) text(x,x,x,x) Bla bla bla position(x,x) speak_active' again and again, so it would look something like this:

Code: [Select]
say
You will teleport now.
flash
[
changeplayercolour(teleporter)
]
sad
reply
Wait, what? No!
[
flash(5)
playef(10)
hideplayer()
delay(15)
fadeout()
untilfade()
]
etc.

Note, {} would be more perfect, but then you will have to put it between ö and Á :P.
Title: Re: Internal commands
Post by: FIQ on August 18, 2012, 02:58:31 PM
The only reason of him fixing the glitch is if he also creates a new command with the only purpose of running internal scripts, "internal(N)", or something like that. Otherwise, removing it wouldn't make any sense.

That would make the level incompatible with 2.0, and a number of lines would be a little bit inconvenient, because if you have a lot of internal commands, you have to count all the lines. Something like putting all internal commands between [] would be very useful, or even an advanced mode. In that case, putting all internal commands between [] would be a perfect solution, because some people may be too lazy to write 'squeak(x) text(x,x,x,x) Bla bla bla position(x,x) speak_active' again and again, so it would look something like this:

Code: [Select]
say
You will teleport now.
flash
[
changeplayercolour(teleporter)
]
sad
reply
Wait, what? No!
[
flash(5)
playef(10)
hideplayer()
delay(15)
fadeout()
untilfade()
]
etc.

Note, {} would be more perfect, but then you will have to put it between ö and Á :P.
True.

Also, I don't believe 2.0 compatibility is a problem once 2.1 is a stable version that also work with OSX. :P

Also, say() with lines >5 already breaks 2.0 compatibility :P

Also, "internal_start()" and "internal_end()" commands would be even better than [] I think.
Title: Re: Internal commands
Post by: Dav999 on August 19, 2012, 01:51:26 AM
The only reason of him fixing the glitch is if he also creates a new command with the only purpose of running internal scripts, "internal(N)", or something like that. Otherwise, removing it wouldn't make any sense.

That would make the level incompatible with 2.0, and a number of lines would be a little bit inconvenient, because if you have a lot of internal commands, you have to count all the lines. Something like putting all internal commands between [] would be very useful, or even an advanced mode. In that case, putting all internal commands between [] would be a perfect solution, because some people may be too lazy to write 'squeak(x) text(x,x,x,x) Bla bla bla position(x,x) speak_active' again and again, so it would look something like this:

Code: [Select]
say
You will teleport now.
flash
[
changeplayercolour(teleporter)
]
sad
reply
Wait, what? No!
[
flash(5)
playef(10)
hideplayer()
delay(15)
fadeout()
untilfade()
]
etc.

Note, {} would be more perfect, but then you will have to put it between ö and Á :P.
True.

Also, I don't believe 2.0 compatibility is a problem once 2.1 is a stable version that also work with OSX. :P

Also, say() with lines >5 already breaks 2.0 compatibility :P

Also, "internal_start()" and "internal_end()" commands would be even better than [] I think.

[] is only one character, so you can easily recognize them compared to other commands. internal_start() and internal_end() are approximately the same length as the other commands, so it is harder to see what is internal scripting and what is not.

EDIT: 11 pages, 150 posts! This will become 1st one day :vermillion:
Title: Re: Internal commands
Post by: FIQ on August 19, 2012, 08:15:22 AM
The only reason of him fixing the glitch is if he also creates a new command with the only purpose of running internal scripts, "internal(N)", or something like that. Otherwise, removing it wouldn't make any sense.

That would make the level incompatible with 2.0, and a number of lines would be a little bit inconvenient, because if you have a lot of internal commands, you have to count all the lines. Something like putting all internal commands between [] would be very useful, or even an advanced mode. In that case, putting all internal commands between [] would be a perfect solution, because some people may be too lazy to write 'squeak(x) text(x,x,x,x) Bla bla bla position(x,x) speak_active' again and again, so it would look something like this:

Code: [Select]
say
You will teleport now.
flash
[
changeplayercolour(teleporter)
]
sad
reply
Wait, what? No!
[
flash(5)
playef(10)
hideplayer()
delay(15)
fadeout()
untilfade()
]
etc.

Note, {} would be more perfect, but then you will have to put it between ö and Á :P.
True.

Also, I don't believe 2.0 compatibility is a problem once 2.1 is a stable version that also work with OSX. :P

Also, say() with lines >5 already breaks 2.0 compatibility :P

Also, "internal_start()" and "internal_end()" commands would be even better than [] I think.

[] is only one character, so you can easily recognize them compared to other commands. internal_start() and internal_end() are approximately the same length as the other commands, so it is harder to see what is internal scripting and what is not.

EDIT: 11 pages, 150 posts! This will become 1st one day :vermillion:
The reason that I prefer internal_start()/internal_end() is that it maintains the usual VVVVVVscript style instead of creating a new scary syntax :P
Title: Re: Internal commands
Post by: blue626 on August 19, 2012, 12:20:29 PM
I think he doesn't care, though. He could have erased locked this topic weeks ago. You may test internal scripting and use it in levels. I'm sure those levels won't get featured in Terry's blog, though.

When was the last featured level? Does Terry still feature levels?

The last featured level was "Deja Verdigris" by Ciolf, featured in Nov. 2011, but created in Sep. 2011 (Terry waited for Ciolf to update the level, but he/she didn't update).
He did feature a level with internal scripting: "Rescuing Violet" by stalefish. He already did say "Don't: exploit glitches" on "How to get a level featured", but I believe that's the only level with int. scripting that got and will get featured ever.
For some reason the best levels were the first and the amount of levels finished per month (or week or any time) became smaller. That's why there isn't a featured level for 10 months.

Terry may even remove the glitch in 2.1 (stable).

I don't think he would remove it, because the only thing you will gain from it is that some really nice levels will be broken. I understand why the say(6) # say(5) # [internal x4] exploit was fixed, because the say command had to support more than 5 lines, so that it doesn't glitch if you use more. I don't see why the say(-1) would need to be removed. It's just not logical.

I think he doesn't care, though. He could have erased locked this topic weeks ago. You may test internal scripting and use it in levels. I'm sure those levels won't get featured in Terry's blog, though.

When was the last featured level? Does Terry still feature levels?
Also, Terry did like your "Dimension Of Secrets" which, obviously, featured internal scripting. :P

The only reason of him fixing the glitch is if he also creates a new command with the only purpose of running internal scripts, "internal(N)", or something like that. Otherwise, removing it wouldn't make any sense.

He could have liked the level, without considering the internal scripting. Perhaps he could have featured the level if it didn't have any of it, but I don't know, he said he would only feature the best of the best.

I think that advanced scripting was planned for 2.2. Perhaps it would be the same as internal scripting. If creating a command like that wasn't easy, then he (or who is working on 2.1.) would probably not do it and would not erase the glitch, then.

EDIT: I suggest, in the int. command list, coloring green the safe commands, and in black the ones you don't know how to color.
I don't understand what change tile() does.
Title: Re: Internal commands
Post by: FIQ on August 19, 2012, 12:33:19 PM
I think he doesn't care, though. He could have erased locked this topic weeks ago. You may test internal scripting and use it in levels. I'm sure those levels won't get featured in Terry's blog, though.

When was the last featured level? Does Terry still feature levels?

The last featured level was "Deja Verdigris" by Ciolf, featured in Nov. 2011, but created in Sep. 2011 (Terry waited for Ciolf to update the level, but he/she didn't update).
He did feature a level with internal scripting: "Rescuing Violet" by stalefish. He already did say "Don't: exploit glitches" on "How to get a level featured", but I believe that's the only level with int. scripting that got and will get featured ever.
For some reason the best levels were the first and the amount of levels finished per month (or week or any time) became smaller. That's why there isn't a featured level for 10 months.

Terry may even remove the glitch in 2.1 (stable).

I don't think he would remove it, because the only thing you will gain from it is that some really nice levels will be broken. I understand why the say(6) # say(5) # [internal x4] exploit was fixed, because the say command had to support more than 5 lines, so that it doesn't glitch if you use more. I don't see why the say(-1) would need to be removed. It's just not logical.

I think he doesn't care, though. He could have erased locked this topic weeks ago. You may test internal scripting and use it in levels. I'm sure those levels won't get featured in Terry's blog, though.

When was the last featured level? Does Terry still feature levels?
Also, Terry did like your "Dimension Of Secrets" which, obviously, featured internal scripting. :P

The only reason of him fixing the glitch is if he also creates a new command with the only purpose of running internal scripts, "internal(N)", or something like that. Otherwise, removing it wouldn't make any sense.

He could have liked the level, without considering the internal scripting. Perhaps he could have featured the level if it didn't have any of it, but I don't know, he said he would only feature the best of the best.

I think that advanced scripting was planned for 2.2. Perhaps it would be the same as internal scripting. If creating a command like that wasn't easy, then he (or who is working on 2.1.) would probably not do it and would not erase the glitch, then.
I guess that he would simply allow more internal commands to be progressed to the simple scripting parser, perhaps making some of the more "techy" internal commands as dumbed-down simpler simple commands. Things like he already did with the simplified flash() (flash(5)|playef(9)|shake(20))

EDIT: Also, I believe Stalefish' level was featured because he did something new - exploited the script parser. At least, that's what he said on his blog. :P
Title: Re: Internal commands
Post by: Dav999 on August 19, 2012, 02:18:12 PM
The last featured level was "Deja Verdigris" by Ciolf, featured in Nov. 2011, but created in Sep. 2011 (Terry waited for Ciolf to update the level, but he/she didn't update).
He did feature a level with internal scripting: "Rescuing Violet" by stalefish. He already did say "Don't: exploit glitches" on "How to get a level featured", but I believe that's the only level with int. scripting that got and will get featured ever.
For some reason the best levels were the first and the amount of levels finished per month (or week or any time) became smaller. That's why there isn't a featured level for 10 months.
He could have liked the level, without considering the internal scripting. Perhaps he could have featured the level if it didn't have any of it, but I don't know, he said he would only feature the best of the best.

I think that advanced scripting was planned for 2.2. Perhaps it would be the same as internal scripting. If creating a command like that wasn't easy, then he (or who is working on 2.1.) would probably not do it and would not erase the glitch, then.

In the thread about the level Rescuing Violet, Terry said that he wouldn't like more people to use this say(6) exploit, because he knew this would be broken in the next patch. I don't think he cares anymore about it now, because he won't fix something that doesn't need to be fixed. People needed say(5+) for more text, so that glitch had to be removed. But why would say(-1) need to be fixed? So people can write their text above the say command instead of below? Also, I don't think Terry features levels anymore. VVVVVV is a bit old now, and now he's more focused on the newer games.

Quote from: blue626 link=topic=1089.msg9249#msg9249 date=1345404029
I don't understand what change tile() does.

changetile(colour) changes the sprite of a crewmate to another sprite from sprites.png. You can change it to things like yes men, stop heads, terminals and checkpoints, while keeping the colour. For some reason, the sprites are different if the face direction was different, or if the crewmates were flipped.
Title: Re: Internal commands
Post by: blue626 on August 20, 2012, 03:43:02 AM
Also, I don't think Terry features levels anymore. VVVVVV is a bit old now, and now he's more focused on the newer games.

Why? He still reads this forum sometimes. So, he still plays some levels and see which are good enough to feature. The important reasons the aren't featured levels are these:
For some reason the best levels were the first and the amount of levels finished per month (or week or any time) became smaller.

The reason for the first levels being the best is that featured levels are normally original and lots of ideas have been used.
Yes, Terry is probably is working on Super Hexagon, now, and that's why I wrote this:

If creating a command like that wasn't easy, then he (or who is working on 2.1.) would probably not do it and would not erase the glitch, then.

I don't understand what change tile() does.

changetile(colour) changes the sprite of a crewmate to another sprite from sprites.png. You can change it to things like yes men, stop heads, terminals and checkpoints, while keeping the colour. For some reason, the sprites are different if the face direction was different, or if the crewmates were flipped.

So, another unused command?

EDIT: Did you know that your post was the 4000th in this board?
Title: Re: Internal commands
Post by: FIQ on August 20, 2012, 04:18:49 AM
The last featured level was "Deja Verdigris" by Ciolf, featured in Nov. 2011, but created in Sep. 2011 (Terry waited for Ciolf to update the level, but he/she didn't update).
He did feature a level with internal scripting: "Rescuing Violet" by stalefish. He already did say "Don't: exploit glitches" on "How to get a level featured", but I believe that's the only level with int. scripting that got and will get featured ever.
For some reason the best levels were the first and the amount of levels finished per month (or week or any time) became smaller. That's why there isn't a featured level for 10 months.
He could have liked the level, without considering the internal scripting. Perhaps he could have featured the level if it didn't have any of it, but I don't know, he said he would only feature the best of the best.

I think that advanced scripting was planned for 2.2. Perhaps it would be the same as internal scripting. If creating a command like that wasn't easy, then he (or who is working on 2.1.) would probably not do it and would not erase the glitch, then.

In the thread about the level Rescuing Violet, Terry said that he wouldn't like more people to use this say(6) exploit, because he knew this would be broken in the next patch. I don't think he cares anymore about it now, because he won't fix something that doesn't need to be fixed. People needed say(5+) for more text, so that glitch had to be removed. But why would say(-1) need to be fixed? So people can write their text above the say command instead of below? Also, I don't think Terry features levels anymore. VVVVVV is a bit old now, and now he's more focused on the newer games.

I don't understand what change tile() does.

changetile(colour) changes the sprite of a crewmate to another sprite from sprites.png. You can change it to things like yes men, stop heads, terminals and checkpoints, while keeping the colour. For some reason, the sprites are different if the face direction was different, or if the crewmates were flipped.
changemood() isn't realible if the crewmate is flipped as it chooses the wrong sprite. changetile() is used as substitute for changemood() for Victoria (as she's flipped in the trinket room).
Title: Re: Internal commands
Post by: Dav999 on August 20, 2012, 04:37:39 AM
Also, I don't think Terry features levels anymore. VVVVVV is a bit old now, and now he's more focused on the newer games.

Why? He still reads this forum sometimes. So, he still plays some levels and see which are good enough to feature. The important reasons the aren't featured levels are these:
For some reason the best levels were the first and the amount of levels finished per month (or week or any time) became smaller.

The reason for the first levels being the best is that featured levels are normally original and lots of ideas have been used.
Yes, Terry is probably is working on Super Hexagon, now, and that's why I wrote this:

If creating a command like that wasn't easy, then he (or who is working on 2.1.) would probably not do it and would not erase the glitch, then.

I often look at Who's Online, and when Terry is online, he's always viewing the board index for some reason.

I don't understand what change tile() does.

changetile(colour) changes the sprite of a crewmate to another sprite from sprites.png. You can change it to things like yes men, stop heads, terminals and checkpoints, while keeping the colour. For some reason, the sprites are different if the face direction was different, or if the crewmates were flipped.

So, another unused command?

I don't know if it was unused, maybe it was used in some occasions to make crewmates sad if changemood() didn't work (when they are flipped, for example)

EDIT: Did you know that your post was the 4000th in this board?

We have something to celebrate today, because this post is the 8530th 8531st post in the forum!

Warning - while you were typing a new reply has been posted. You may wish to review your post. >:( Dammit!
Title: Re: Internal commands
Post by: ToasterApocalypse on August 20, 2012, 05:31:44 AM
Warning - while you were typing a new reply has been posted. You may wish to review your post.

I wonder why that happens.

ON TOPIC: Does the second metadata of ID25 change the colour of certain trophies?

Title: Re: Internal commands
Post by: FIQ on August 20, 2012, 07:14:09 AM
Warning - while you were typing a new reply has been posted. You may wish to review your post.

I wonder why that happens.

ON TOPIC: Does the second metadata of ID25 change the colour of certain trophies?
25 uses the following
meta 1: sprite (0 or 1 is the relevant ones in proper usage)
meta 2: the exact trophy, note that it will only show up if you've actually collected the trophy.
Title: Re: Internal commands
Post by: blue626 on August 20, 2012, 07:58:40 AM
We have something to celebrate today, because this post is the 8530th 8531st post in the forum!

 ??? That number isn't important... is that a joke or something? It doesn't seem one.

Warning - while you were typing a new reply has been posted. You may wish to review your post.

I wonder why that happens.

Isn't it obvious? The new post could affect your post, for example: you mint want to reply to that post, or that post ight have info that you wrote, thus, you would want to erase it.
Warning - while you were typing a new reply has been posted. You may wish to review your post. >:( Dammit!

It isn't THAT annoying (well, at least for me). Besides, it's a sign that this thread is active, isn't it?
Title: Re: Internal commands
Post by: ToasterApocalypse on August 20, 2012, 08:24:26 AM
We have something to celebrate today, because this post is the 8530th 8531st post in the forum!

 ??? That number isn't important... is that a joke or something? It doesn't seem one.

Warning - while you were typing a new reply has been posted. You may wish to review your post.

I wonder why that happens.

Isn't it obvious? The new post could affect your post, for example: you mint want to reply to that post, or that post ight have info that you wrote, thus, you would want to erase it.
Warning - while you were typing a new reply has been posted. You may wish to review your post. >:( Dammit!

It isn't THAT annoying (well, at least for me). Besides, it's a sign that this thread is active, isn't it?

I guess.
Title: Re: Internal commands
Post by: Dav999 on August 20, 2012, 08:29:58 AM
Warning - while you were typing a new reply has been posted. You may wish to review your post.

I wonder why that happens.

It is because you just wrote a post, and are ready to send it... And someone else posted something before you, so you can go change you post again. And once you changed it, someone else has already posted something so your post gets old. It is especially annoying when I go to this forum on my iPod, because if I type here for some time, the browser crashes. :victoria: So I have to click quote, copy everything over to notes, make my post there, copy everything over to the forum, and preview. And that when I get that message.

Warning - while you were typing a new reply has been posted. You may wish to review your post. How fitting. And it is nice to see this forum is active, but you shouldn't constantly have to change your post. I didn't change this post, though.
Title: Re: Internal commands
Post by: Dav999 on August 20, 2012, 11:52:20 AM
On topic:

I'm thinking about making an internal scripting tutorial! Anyone interested in learning how to use internal scripting?
Title: Re: Internal commands
Post by: ToasterApocalypse on August 20, 2012, 12:06:23 PM
On topic:

I'm thinking about making an internal scripting tutorial! Anyone interested in learning how to use internal scripting?

I already know how, but learning tilecol can actually 'improve' polar dimensions
Title: Re: Internal commands
Post by: Dav999 on August 20, 2012, 12:12:29 PM
On topic:

I'm thinking about making an internal scripting tutorial! Anyone interested in learning how to use internal scripting?

I already know how, but learning tilecol can actually 'improve' polar dimensions

tilecol(x) - doesn't exists
Title: Re: Internal commands
Post by: ToasterApocalypse on August 20, 2012, 12:14:58 PM
On topic:

I'm thinking about making an internal scripting tutorial! Anyone interested in learning how to use internal scripting?

I already know how, but learning tilecol can actually 'improve' polar dimensions

tilecol(x) - doesn't exists

DARN IT  :violet:
Title: Re: Internal commands
Post by: Dav999 on August 20, 2012, 12:32:30 PM
On topic:

I'm thinking about making an internal scripting tutorial! Anyone interested in learning how to use internal scripting?

I already know how, but learning tilecol can actually 'improve' polar dimensions

tilecol(x) - doesn't exists

DARN IT  :violet:

Search the forum for tilecol, I found something about a tilecol for each room apart, and that tilecol=6 is the gray tileset from the intermission or something. Or did you want the colour to change every few seconds? Well... Let me think... :-\
Title: Re: Internal commands
Post by: ToasterApocalypse on August 20, 2012, 01:34:05 PM
On topic:

I'm thinking about making an internal scripting tutorial! Anyone interested in learning how to use internal scripting?

I already know how, but learning tilecol can actually 'improve' polar dimensions

tilecol(x) - doesn't exists

DARN IT  :violet:

Search the forum for tilecol, I found something about a tilecol for each room apart, and that tilecol=6 is the gray tileset from the intermission or something. Or did you want the colour to change every few seconds? Well... Let me think... :-\

I wanted the gray background otherwise all polar dimension backgrounds of mine are...

BLUE.
Title: Re: Internal commands
Post by: Dav999 on August 20, 2012, 01:48:49 PM
It would not be convenient to change the colour of a room with an internal command, as you first have to wait for the cutscene bars. And can't you use direct mode for this?

Or did you just quote something? ???
Title: Re: Internal commands
Post by: FIQ on August 20, 2012, 04:41:54 PM
It would not be convenient to change the colour of a room with an internal command, as you first have to wait for the cutscene bars. And can't you use direct mode for this?

Or did you just quote something? ???
Toaster refused to modify the .vvvvvv file manually when I told him how, and just sticked with the tilecol that the level editor offers. Which leads to 3 missing features:

polar dimension color+warp background (tileset="4", tilecol="6")
color-changing lab background (tileset="3", tilecol="6").
changing platform speed

Please note that it's possible that I've mixed the numbers @ tileset up - 4 is supposed to be warp zone, 3 is lab. Don't remember if numbers start with 0 or 1 here, and I can't check atm.
Title: Re: Internal commands
Post by: ToasterApocalypse on August 25, 2012, 04:35:18 AM
Ok. well lets discuss musicfadein()

How do we use that? Do we do:
Code: [Select]
play(X)
musicfadein()

or...

Code: [Select]
musicfadein(X)
Title: Re: Internal commands
Post by: FIQ on August 25, 2012, 11:13:41 AM
Ok. well lets discuss musicfadein()

How do we use that? Do we do:
Code: [Select]
play(X)
musicfadein()

or...

Code: [Select]
musicfadein(X)
Not sure. The only instance it's used is in Vitellary's "I found a trinket!" scene after finding a trinket (Victoria's foundtrinket scene use "runtrinketscript" instead). Does anyone know if the music works properly there? Because when trying to replicate that script part, it fails and doesn't resume any music. Maybe it only works in the main game?

EDIT: Also, musicfadein() doesn't take any parameter, it's "musicfadein" (or "musicfadein()" if you prefer that)
Title: Re: Internal commands
Post by: Dav999 on August 25, 2012, 12:48:07 PM
Not sure. The only instance it's used is in Vitellary's "I found a trinket!" scene after finding a trinket (Victoria's foundtrinket scene use "runtrinketscript" instead). Does anyone know if the music works properly there? Because when trying to replicate that script part, it fails and doesn't resume any music. Maybe it only works in the main game?

I tested it, and the music starts at the beginning. Even if you used the jukebox to change to song, it will always change back to Passion For Exploring. Maybe it is used to circumvent the bug in which the music doesn't resume if it was playing earlier?
Title: Re: Internal commands
Post by: Hilbert on August 30, 2012, 07:40:59 AM
I'd like an IS tutorial.
Title: Re: Internal commands
Post by: Bearboy on August 30, 2012, 08:05:07 AM
I'd like an IS tutorial.
Who knows? They might be making one right this minute.

But it would freaking kill your brain.

Just the concepts of FLAGS confused me.

 :verdigris:
Title: Re: Internal commands
Post by: Dav999 on August 30, 2012, 08:46:41 AM
I'd like an IS tutorial.
Who knows? They might be making one right this minute.

But it would freaking kill your brain.

Actually, I'm working on it, and I'm making a category select screen, in which you can choose from different categories: coloured text, crewmates, sound and effects, the map and rooms teleporting, flags and trinkets, miscellaneous, 2.1-only commands, and the most important one: how to make this work. Because why would we be talking about internal scripting if you couldn't use it in custom levels? :D I will even make trophies for each completed category.

Just the concepts of FLAGS confused me.

 :verdigris:

That's not so hard! You can turn it on and off, and check if it's on or off! What's hard about that?
Title: Re: Internal commands
Post by: Bearboy on August 30, 2012, 09:34:21 AM
That's not so hard! You can turn it on and off, and check if it's on or off! What's hard about that?

That was when i was beginning making levels.

Title: Re: Internal commands
Post by: blue626 on August 30, 2012, 02:16:19 PM
I'd like an IS tutorial.
Who knows? They might be making one right this minute.

But it would freaking kill your brain.

Actually, I'm working on it, and I'm making a category select screen, in which you can choose from different categories: coloured text, crewmates, sound and effects, the map and rooms teleporting, flags and trinkets, miscellaneous, 2.1-only commands, and the most important one: how to make this work. Because why would we be talking about internal scripting if you couldn't use it in custom levels? :D I will even make trophies for each completed category.

Do you mean you making a tutorial level like PJ did? It's a good idea to put the "How to use Internal scripting" part first, then put the category selection (or make it so the others are unlocked only after completing that part). Which commands can only be used in 2.1.beta? I only saw costumposition(x). How can you make trophies? Are the trophies going to be trinkets?
EDIT: I read this thread again, and I discovered that changecostummood(colour,0/1) is usable only in 2.1.beta. too. END EDIT.

Just the concepts of FLAGS confused me.

 :verdigris:

That's not so hard! You can turn it on and off, and check if it's on or off! What's hard about that?

You can't check directly if it's off. Though, you can check that indirectly with various if flag commands...

I'd like an IS tutorial.

Do you mean IS=Internal Scripting? Some people might not know that's an abbreviation. Use Int. scr. or something.
Title: Re: Internal commands
Post by: ToasterApocalypse on September 02, 2012, 08:21:29 AM
Ok. Now lets discuss.... erm...  :-\

Position(X,X)?

As in how do I use that?
Title: Re: Internal commands
Post by: Bearboy on September 02, 2012, 08:36:50 AM
I'm distracted by how many pages of posts there are.

And the fact that its just 3-6 people

 :vitellary:
Title: Re: Internal commands
Post by: Dav999 on September 02, 2012, 09:07:35 AM
Ok. Now lets discuss.... erm...  :-\

Position(X,X)?

As in how do I use that?

That is part of a text(x,x,x,x) command. Let me show what happens with this:

Code: [Select]
squeak(player)
text(cyan,0,0,1)
This is text.
position(player,above)
speak_active
endtext

squeak(player)   / Play :viridian:'s squeak sound
text(cyan,0,0,1)   Sets the color to cyan, sets coordinates to 0,0, and sets the number of lines that have to be stored to 1
This is text.   / This line is stored in memory, to be used later
position(player,above)   / This sets the coordinates to make the box appear above the player (note that the coordinates have been set to 0,0 earlier, but you can't do text(cyan,player,above,1) or something like that
speak_active   / Remove all text boxes, and show the text box
endtext   / Removes all text boxes

So, it sets the coordinates of the text box if you don't want to use exact coordinates. You can't put it above the text(cyan,0,0,1) command, because then it gets overwritten by 0,0 again.

I'm distracted by how many pages of posts there are.

And the fact that its just 3-6 people

 :vitellary:

For me, this thread has 4 pages, because I have set the maximum number of posts per page (50) :)
Title: Re: Internal commands
Post by: blue626 on September 02, 2012, 03:17:43 PM
I'm distracted by how many pages of posts there are.

And the fact that its just 3-6 people

 :vitellary:

For me, this thread has 4 pages, because I have set the maximum number of posts per page (50) :)

Maybe I should set the posts per page to 50 too, because then I would have to change page less times!
Title: Re: Internal commands
Post by: Dav999 on September 02, 2012, 03:54:58 PM
I'm distracted by how many pages of posts there are.

And the fact that its just 3-6 people

 :vitellary:

For me, this thread has 4 pages, because I have set the maximum number of posts per page (50) :)

Maybe I should set the posts per page to 50 too, because then I would have to change page less times!

Especially on a small screen, where you have to zoom in very far to be able to click the button... I already added two persons to my buddy list by accident, when I actually wanted to change to the next page. I wonder if these persons got mail notifications of that (I don't use the buddy/ignore lists)
Title: Re: Internal commands
Post by: blue626 on September 06, 2012, 12:39:23 PM
I'm distracted by how many pages of posts there are.

And the fact that its just 3-6 people

 :vitellary:

For me, this thread has 4 pages, because I have set the maximum number of posts per page (50) :)

Maybe I should set the posts per page to 50 too, because then I would have to change page less times!

Especially on a small screen, where you have to zoom in very far to be able to click the button... I already added two persons to my buddy list by accident, when I actually wanted to change to the next page. I wonder if these persons got mail notifications of that (I don't use the buddy/ignore lists)

Well, I, most of the times, check the threads when on my computer, but I still changed the # of replies/page to 50. It isn't very important to change the page less times for me, but I still like it better this way.
Also, how did you add 2 persons to your buddy list when you wanted to change the page? There's no button to directly add the person to your buddy list when reading a thread. There is one when viewing someone's profile, but even if you started viewing someone's profile by accident, the "Add to Buddy List" button is far form the "distraction ware forums" button or form your undo button. So, how?
Title: Re: Internal commands
Post by: Dav999 on September 06, 2012, 01:13:10 PM
I didn't want to zoom in, and I wanted to change the page at the top of the page, and I accidentally clicked on the name of someone. While the page was loading, I tried to correct it by trying to press the page number again so it would load the next page instead, but I was too late and it acted as if I pressed the buddy list button, or something like that. Also, I thought one of the times was when I wanted to view someone's posts, and pressed the buddy list button instead. :verdigris: On a small screen, 2 buttons can be 0.5 cm apart from each other, and if you have a finger of 1 cm, it has to guess which button you want to press.
Title: Re: Internal commands
Post by: FIQ on September 06, 2012, 01:45:28 PM
http://distractionware.com/forum/index.php?topic=1129.0

Hacker3443 successfully managed to use say() commands without triggering the cutscenebars. How?
Title: Re: Internal commands
Post by: blue626 on September 07, 2012, 05:26:55 AM
http://distractionware.com/forum/index.php?topic=1129.0

Hacker3443 successfully managed to use say() commands without triggering the cutscenebars. How?

Perhaps it's something related to endcutscene()... I'm not sure.

EDIT:

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


If you talk to :violet: twice after you rescued her and haven't rescued anybody else, on the 2nd time, she will say something which I don't remember and then she will say "Here, have a lollipop!". Maybe that's related.
text(color,0,0,0)? ??? That, without special line(x) (I don't know what it does, but it might affect the text command), would create a text box with that color, wth the coordinates in position() (or in 0,0 if there aren't any) with 0 lines! Weird...
Title: Re: Internal commands
Post by: MoogiGMD on September 07, 2012, 07:39:45 AM
I messed up my map D:< but it was a glitch!
Title: Re: Internal commands
Post by: MoogiGMD on September 07, 2012, 07:44:35 AM
http://distractionware.com/forum/index.php?topic=1129.0

Hacker3443 successfully managed to use say() commands without triggering the cutscenebars. How?

Perhaps it's something related to endcutscene()... I'm not sure.

EDIT:

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


If you talk to :violet: twice after you rescued her and haven't rescued anybody else, on the 2nd time, she will say something which I don't remember and then she will say "Here, have a lollipop!". Maybe that's related.
text(color,0,0,0)? ??? That, without special line(x) (I don't know what it does, but it might affect the text command), would create a text box with that color, wth the coordinates in position() (or in 0,0 if there aren't any) with 0 lines! Weird...

What? I Didn't know what caused it >:D
Title: Re: Internal commands
Post by: blue626 on September 08, 2012, 05:19:56 AM
Why reply to the same post twice? ??? If one your 1st post you were replying to FIQ and haven't read my post yet, why reply before reading all of the posts? And, why double-posts, even when the 2nd post was posted 5 minutes after the 1st one?

So, it was a glitch, then.
Title: Re: Internal commands
Post by: ToasterApocalypse on September 08, 2012, 06:18:29 AM
Well, just to be off topic (which is bad), we should get top thread by october

because YYYYYY is inactive
Title: Re: Internal commands
Post by: MoogiGMD on September 09, 2012, 12:27:11 PM
i used the final level code and i got to the gravitron...my save isn't corrupted :)
Title: Re: Internal commands
Post by: Dav999 on September 09, 2012, 12:40:51 PM
In that case, isn't finalmode(x,y) just meant to teleport to areas outside of (20,20)? I changed the coordinates my save to the final level once, and I ended up in (20,20).
Title: Re: Internal commands
Post by: FIQ on September 09, 2012, 04:24:01 PM
In that case, isn't finalmode(x,y) just meant to teleport to areas outside of (20,20)? I changed the coordinates my save to the final level once, and I ended up in (20,20).
No, they're different dimensions. Try finalmode(5,5).
Title: Re: Internal commands
Post by: blue626 on September 10, 2012, 10:41:34 AM
In that case, isn't finalmode(x,y) just meant to teleport to areas outside of (20,20)? I changed the coordinates my save to the final level once, and I ended up in (20,20).
No, they're different dimensions. Try finalmode(5,5).

Isn't the polar dimension infinitely large? I once tried, after flipping in "V", not moving to the room to the right or to the room to the left, not clikcing action and waiting for collision error to happen. After 150 rooms, it didn't happen. Perhaps I accidentaly moved to the room to the right at the start... or the dimension is 200 rooms tall, for example.

In that case, isn't finalmode(x,y) just meant to teleport to areas outside of (20,20)? I changed the coordinates my save to the final level once, and I ended up in (20,20).

That reminds me of a glitch I reported: Warp Room TT Glitch (http://distractionware.com/forum/index.php?topic=999.0)

Well, just to be off topic (which is bad), we should get top thread by october

because YYYYYY is inactive

Inactive for more than a year!
The thread started as a WIP (work in progress) project thread of the game YYYYYY, with the dev. adding features and releasing new versions, and the others reporting bugs and commenting the game as it was being made. The thread ended up having 228 replies. This thread has 195 replies!
Title: Re: Internal commands
Post by: Hilbert on September 10, 2012, 01:56:35 PM
or the dimension is 200 rooms tall, for example.

Actually, most likely, it has warp lines.
Title: Re: Internal commands
Post by: Dav999 on September 10, 2012, 02:07:03 PM
or the dimension is 200 rooms tall, for example.

Actually, most likely, it has warp lines.

Huh? That was blue626's text, not mine! ???
Title: Re: Internal commands
Post by: Hilbert on September 10, 2012, 02:10:34 PM
Oh, WHOOPS! Sorry, there were so many quotes when I quoted that...
Title: Re: Internal commands
Post by: Dav999 on September 10, 2012, 02:16:35 PM
:viridian:

And on topic: warplanes warp lines (auto correct) is the most likely. After that comes wrapping around the map.
Title: Re: Internal commands
Post by: FIQ on September 10, 2012, 02:20:17 PM
The polar dimension is only limited in the sense that computers cannot store infinitely large numbers.
Title: Re: Internal commands
Post by: blue626 on September 11, 2012, 08:09:47 AM
or the dimension is 200 rooms tall, for example.

Actually, most likely, it has warp lines.

:viridian:

And on topic: warplanes warp lines (auto correct) is the most likely. After that comes wrapping around the map.

Read this thread: Outer Space (http://distractionware.com/forum/index.php?topic=965.0)
It's understandable that both of you didn't read it. I created it before any of you registered.
What do you mean by wrapping around the map? Doing that would result in a collision error, as you have to hit the rooms "V", "VV", etc. sometime. Like I said, it could be 200 rooms tall, but, according to FIQ (see below), it's much larger!

The polar dimension is only limited in the sense that computers cannot store infinitely large numbers.

I guess you mean that its width and height is the biggest number VVVVVV can calculate, right? If so, then it's something like 264. That's 1,845x1019. :o To calculate the # of rooms I have to calculate (264)2, which is 2128, which is 3,403x1038. So many rooms! :o
Title: Re: Internal commands
Post by: Dav999 on September 11, 2012, 08:18:17 AM
Then the map wrapping is disabled for that coordinate, that means, if you go to the top, you don't pop out from the bottom. Or there are 4 outer space rooms, which act like one wrapping room (go to the edge of the right room and pop out in the left room, without having two halves of :viridian: on the screen). At least, that would explain this:

However, if you go to the edge of the room and stay there, you don't see part of Viridian on one side  and the other part on the other side;

Of course, this would have to be hardcoded.
Title: Re: Internal commands
Post by: Hilbert on September 11, 2012, 01:08:37 PM
or the dimension is 200 rooms tall, for example.

Actually, most likely, it has warp lines.

:viridian:


And on topic: warplanes warp lines (auto correct) is the most likely. After that comes wrapping around the map.

Read this thread: Outer Space (http://distractionware.com/forum/index.php?topic=965.0)
It's understandable that both of you didn't read it. I created it before any of you registered.
What do you mean by wrapping around the map? Doing that would result in a collision error, as you have to hit the rooms "V", "VV", etc. sometime. Like I said, it could be 200 rooms tall, but, according to FIQ (see below), it's much larger!

The polar dimension is only limited in the sense that computers cannot store infinitely large numbers.

I guess you mean that its width and height is the biggest number VVVVVV can calculate, right? If so, then it's something like 264. That's 1,845x1019. :o To calculate the # of rooms I have to calculate (264)2, which is 2128, which is 3,403x1038. So many rooms! :o
I read that thread before I registered.
Title: Re: Internal commands
Post by: blue626 on September 12, 2012, 11:55:44 AM
Then the map wrapping is disabled for that coordinate, that means, if you go to the top, you don't pop out from the bottom. Or there are 4 outer space rooms, which act like one wrapping room (go to the edge of the right room and pop out in the left room, without having two halves of :viridian: on the screen). At least, that would explain this:

However, if you go to the edge of the room and stay there, you don't see part of Viridian on one side  and the other part on the other side;

Of course, this would have to be hardcoded.

I should have thought a bit better:

Consider that each byte has 64 bits and that each empty "Outer Space" room has 1 bit (not byte) of info. The whole polar dim. would have 3,403x1038 bits, or 5,317x1036 bytes. :o It would be impossible to fit that into my computer. :D It's very likely that each room, even if empty, has more than 1 bit. Perhaps 1 bit per pixel? If I'm right now, then your suggestion is the most likely.
However, if empty rooms don't have even a bit, then my suggestion might be right.

I read that thread before I registered.

Then why did you think that it's more likely to have warp lines? Did you forget about that thread when you wrote that?

EDIT: 204 replies! Maybe this will be in 1st after some time, after all!
Title: Re: Internal commands
Post by: Dav999 on September 12, 2012, 12:18:15 PM
EDIT: 204 replies! Maybe this will be in 1st after some time, after all!

Mark my words. It will become first.

Then the map wrapping is disabled for that coordinate, that means, if you go to the top, you don't pop out from the bottom. Or there are 4 outer space rooms, which act like one wrapping room (go to the edge of the right room and pop out in the left room, without having two halves of :viridian: on the screen). At least, that would explain this:

However, if you go to the edge of the room and stay there, you don't see part of Viridian on one side  and the other part on the other side;

Of course, this would have to be hardcoded.

I should have thought a bit better:

Consider that each byte has 64 bits and that each empty "Outer Space" room has 1 bit (not byte) of info. The whole polar dim. would have 3,403x1038 bits, or 5,317x1036 bytes. :o It would be impossible to fit that into my computer. :D It's very likely that each room, even if empty, has more than 1 bit. Perhaps 1 bit per pixel? If I'm right now, then your suggestion is the most likely.
However, if empty rooms don't have even a bit, then my suggestion might be right.

You know, I think Outer Space is just one room. Why? Remember: Terry didn't have the limitations of the level editor we have. Outer Space could just be programmed to be a wrapping room, but not to show two halves of :viridian: on the screen. Or it might just act as if you can go to the rooms on the left or the right, but if you go there, it will always go back to the same room. And it's a thing you can try if you really have an extreme whole awful lot of time: just wait until that memory overflows. And see what happens.



Only Terry knows this. Please give us the answer so we can get some sleep again! (http://www.derekyu.com/images/art/pixel/fu-tired.gif)                  .                       .                        .                   :D
Title: Re: Internal commands
Post by: blue626 on September 13, 2012, 04:18:00 AM
Then the map wrapping is disabled for that coordinate, that means, if you go to the top, you don't pop out from the bottom. Or there are 4 outer space rooms, which act like one wrapping room (go to the edge of the right room and pop out in the left room, without having two halves of :viridian: on the screen). At least, that would explain this:

However, if you go to the edge of the room and stay there, you don't see part of Viridian on one side  and the other part on the other side;

Of course, this would have to be hardcoded.

I should have thought a bit better:

Consider that each byte has 64 bits and that each empty "Outer Space" room has 1 bit (not byte) of info. The whole polar dim. would have 3,403x1038 bits, or 5,317x1036 bytes. :o It would be impossible to fit that into my computer. :D It's very likely that each room, even if empty, has more than 1 bit. Perhaps 1 bit per pixel? If I'm right now, then your suggestion is the most likely.
However, if empty rooms don't have even a bit, then my suggestion might be right.

You know, I think Outer Space is just one room. Why? Remember: Terry didn't have the limitations of the level editor we have. Outer Space could just be programmed to be a wrapping room, but not to show two halves of :viridian: on the screen. Or it might just act as if you can go to the rooms on the left or the right, but if you go there, it will always go back to the same room. And it's a thing you can try if you really have an extreme whole awful lot of time: just wait until that memory overflows. And see what happens.

Well, which of the 2 3 options is easier to code? Terry probably chose the easiest. IIRC (it means "if I remember correctly", right?), the background is reset when :viridian: reaches the edge of the room, so if the 2nd or 3rd option is the one, then the background would have to be hardcoded too. I actually don't know the definition of "hardcoding", but, with experience form this thread I can guess it means something like coding without the regular functions, scripting, objects, etc. to produce an irregular action.

EDIT:
Only Terry knows this. Please give us the answer so we can get some sleep again! :victoria:                  .                       .                        .                   :D

Comparing my time zone to yours and reading the time you wrote that in my time zone, I calculate that you wrote that at 9:18 PM on your time zone. You probably don't sleep at that time... so... :D
Title: Re: Internal commands
Post by: Dav999 on September 13, 2012, 07:17:24 AM
Well, which of the 2 3 options is easier to code? Terry probably chose the easiest.

I think that making :viridian: show two halves at the edges of the screen is harder to program than the other way around.

I actually don't know the definition of "hardcoding", but, with experience form this thread I can guess it means something like coding without the regular functions, scripting, objects, etc. to produce an irregular action.

Yes:

Quote from: Wikipedia
Hard coding (also, hard-coding or hardcoding) refers to the software development practice of embedding what may, perhaps only in retrospect, be regarded as input or configuration data directly into the source code of a program or other executable object, or fixed formatting of the data, instead of obtaining that data from external sources or generating data or formatting in the program itself with the given input.

EDIT:
Only Terry knows this. Please give us the answer so we can get some sleep again! :victoria:                  .                       .                        .                   :D

Comparing my time zone to yours and reading the time you wrote that in my time zone, I calculate that you wrote that at 9:18 PM on your time zone. You probably don't sleep at that time... so... :D

Wow, did you think I literally couldn't sleep because of this question? And yes, 21:18 is correct.
Title: Re: Internal commands
Post by: blue626 on September 13, 2012, 08:12:10 AM
Well, which of the 2 3 options is easier to code? Terry probably chose the easiest.

I think that making :viridian: show two halves at the edges of the screen is harder to program than the other way around.

With 3 options I meant these:


What I asked is which one of the 3 (2?) options above is the easiest. Only Terry knows, probably.
Well, I thought this way: It's regular in the game to show the 2 halves of :viridian: when :viridian: is on the edge of a warping room, so you have to hardcode. Hardcoding is probably harder than doing it the normal way...

Quote from: Wikipedia
Hard coding (also, hard-coding or hardcoding) refers to the software development practice of embedding what may, perhaps only in retrospect, be regarded as input or configuration data directly into the source code of a program or other executable object, or fixed formatting of the data, instead of obtaining that data from external sources or generating data or formatting in the program itself with the given input.

Also, thanks for showing how to write the source of the quote when you create it with the "quote" button from the toolbar. I might get a use for it...
That seems harder to understand than what I wrote...

EDIT:
Only Terry knows this. Please give us the answer so we can get some sleep again! :victoria:                  .                       .                        .                   :D

Comparing my time zone to yours and reading the time you wrote that in my time zone, I calculate that you wrote that at 9:18 PM on your time zone. You probably don't sleep at that time... so... :D

Wow, did you think I literally couldn't sleep because of this question? And yes, 21:18 is correct.

I thought it was some kind of joke (that's why I put a laughing face), and that without the laughing face in your post, I would think that you meant that.
Title: Re: Internal commands
Post by: MoogiGMD on September 14, 2012, 01:26:02 PM
is it possible to make the level flash colours like the final level? im thinking of a custom map with it... gamestate?
Title: Re: Internal commands
Post by: ToasterApocalypse on September 14, 2012, 01:29:20 PM
is it possible to make the level flash colours like the final level? im thinking of a custom map with it... gamestate?

gamestate(200)

But the colors don't flash at all :(
Title: Re: Internal commands
Post by: Dav999 on September 14, 2012, 01:45:07 PM
So the answer is: No.

Nobody noticed I changed a smiley in one of my posts... ;) <- this may just be the first time I use this smiley? I also haven't used :-* yet.

EDIT: I used ;) in my third post.

Back to on-topicness!
Title: Re: Internal commands
Post by: MoogiGMD on September 15, 2012, 01:53:09 AM
but what about the tower?
Title: Re: Internal commands
Post by: Dav999 on September 15, 2012, 02:26:53 AM
but what about the tower?

FIQ said he really tried, but he couldn't get the tower working in custom levels. So no, that isn't possible.
Title: Re: Internal commands
Post by: MoogiGMD on September 15, 2012, 02:33:45 AM
well it can work with the finalmode command but if we work into more detail (or terry starts working on 40,40)
we could look at the tower :)
Title: Re: Internal commands
Post by: FIQ on September 15, 2012, 07:42:04 AM
well it can work with the finalmode command but if we work into more detail (or terry starts working on 40,40)
we could look at the tower :)
Panic Room and The Final Challenge works fine in the level editor, if that's what you're asking.

finalmode() is useless in the level editor as there's no "de-finalmode" command.

I'm still hoping for VVVVVV to be open sourced a day. :3
Title: Re: Internal commands
Post by: Dav999 on September 26, 2012, 04:16:56 AM
Bump! Which command will we discuss next? createentity(x,x,x,x,x)?
Title: Re: Internal commands
Post by: Hilbert on September 26, 2012, 05:58:50 AM
Bump! Which command will we discuss next? createentity(x,x,x,x,x)?
discuss it NOW! I NEED TO KNOW HOW TO USE IT >:D
Title: Re: Internal commands
Post by: Dav999 on September 26, 2012, 08:38:34 AM
Bump! Which command will we discuss next? createentity(x,x,x,x,x)?
discuss it NOW! I NEED TO KNOW HOW TO USE IT >:D

You can create things! It works like this:

createentity(x,y,z,a,b)

x,y=coordinates, obviously
z=the number of the entity:

1=enemy
2=platform
3=disappearing platform
4=1x1 fast quicksand
5= :viridian: (acts as gravity line and disappears)
6=nothing?
7=nothing?
8=coin
9=collectable :shiny:
10=??? Looks like a CD, size of a :shiny:, not collectable
11=horizontal gravity line
12=vertical gravity line
13=warp token
14=big teleporter (WARNING: DON'T LET :viridian: TOUCH IT!)
15= :verdigris:, non rescuable
16= :vitellary:, non rescuable
17= :victoria:, non rescuable
18= (http://d2bm3ljpacyxu8.cloudfront.net/width/20/crop/0,0,20x19/afbeeldinge.webs.com/gray_1.png), (!) non rescuable
19= :vermillion:, non rescuable
20=??? sort of disc, if you touch it, it is activated or something???
21=??? same as above, but you can't activate it
or
21=terminal???
22=should be :shiny:, but only shows up if you collect one in that room without leaving that room.
23=enemy
24= (http://d2bm3ljpacyxu8.cloudfront.net/width/20/crop/0,0,20x19/afbeeldinge.webs.com/gray_1.png), follows player
25=a can be:
   0=top cup holder
   1=bottom cup holder
   2=cup
   3=flipped cup
   4=smile cup
   5=flipped smile cup
   6=cry cup
   7=flipped cry cup
   8=trinket cup
   9=flipped trinket cup
   10=nothing
   11=nothing
   12=square
   13=disappearing platform (1)
   14=disappearing platform (2)
   15=disappearing platform (3)
   16=another square
   17=another square
   18=another square (last time it was a V???)
   19=square
   20=square

26=gigantic warp token
27=WTH? :o It's :viridian: at the top of the screen, and if you walk left, it moves to the left, more to the left means it moves faster
28=same as above
29=same as above
30=same as above
31=same as above
32=same as above
33=same as above
34=same as above
35=same as above
36=same as above
37=same as above
40=same as above
45=same as above
50=same as above
51=nothing
52=nothing
53=nothing
54=nothing
55=rescuable crewmate, b can be:
   0= :viridian:
   1= :violet:
   2= :vitellary:
   3= :vermillion:
   4= :verdigris:
   5= :victoria:
   6= :viridian:
   7= :viridian:
   8= :viridian:
   9= :viridian: …
56=enemy
57=same as 27, but disappears when you warp (or not???)
58=same as above
59=same as above

I haven't tested further than this, but there might be more.

As you can see, I'm not sure about some of the things, because the exact same command gave different results in different levels! Sooo... :vitellary:

a,b=metadata, some of the entities need this to change things, like 25 and 55. Otherwise, they can be anything, but I'm not sure. (Just use 0,0 or 18,0)
Title: Re: Internal commands
Post by: MoogiGMD on September 26, 2012, 10:01:29 AM
there might be a command to make The Tower appear in levels

i said The Tower in caps cause its a name :P
Title: Re: Internal commands
Post by: Dav999 on September 26, 2012, 10:28:04 AM
there might be a command to make The Tower appear in levels

i said The Tower in caps cause its a name :P

Sadly, there isn't one. :(
Title: Re: Internal commands
Post by: MoogiGMD on September 26, 2012, 10:51:32 AM
hey

happy(c/n)
C is colour
n is name
Sad(C/n)
you know that this is usefull :)
Title: Re: Internal commands
Post by: Dav999 on September 26, 2012, 11:04:08 AM
hey

happy(c/n)
C is colour
n is name
Sad(C/n)
you know that this is usefull :)

Those aren't internal commands, just commands from 2.1. The internal command for this is:

changemood(color,0/1)

Color can be: cyan, blue, red, yellow, green, and purple (not pink, and no names)
0 for happy, 1 for sad.
Title: Re: Internal commands
Post by: FIQ on September 27, 2012, 10:34:40 AM
Bump! Which command will we discuss next? createentity(x,x,x,x,x)?
discuss it NOW! I NEED TO KNOW HOW TO USE IT >:D

You can create things! It works like this:

createentity(x,y,z,a,b)

x,y=coordinates, obviously
z=the number of the entity:

1=enemy
2=platform
3=disappearing platform
4=1x1 fast quicksand
5= :viridian: (acts as gravity line and disappears)
6=nothing?
7=nothing?
8=coin
9=collectable :shiny:
10=??? Looks like a CD, size of a :shiny:, not collectable
11=horizontal gravity line
12=vertical gravity line
13=warp token
14=big teleporter (WARNING: DON'T LET :viridian: TOUCH IT!)
15= :verdigris:, non rescuable
16= :vitellary:, non rescuable
17= :victoria:, non rescuable
18= (http://d2bm3ljpacyxu8.cloudfront.net/width/20/crop/0,0,20x19/afbeeldinge.webs.com/gray_1.png), (!) non rescuable
19= :vermillion:, non rescuable
20=??? sort of disc, if you touch it, it is activated or something???
21=??? same as above, but you can't activate it
or
21=terminal???
22=should be :shiny:, but only shows up if you collect one in that room without leaving that room.
23=enemy
24= (http://d2bm3ljpacyxu8.cloudfront.net/width/20/crop/0,0,20x19/afbeeldinge.webs.com/gray_1.png), follows player
25=a can be:
   0=top cup holder
   1=bottom cup holder
   2=cup
   3=flipped cup
   4=smile cup
   5=flipped smile cup
   6=cry cup
   7=flipped cry cup
   8=trinket cup
   9=flipped trinket cup
   10=nothing
   11=nothing
   12=square
   13=disappearing platform (1)
   14=disappearing platform (2)
   15=disappearing platform (3)
   16=another square
   17=another square
   18=another square (last time it was a V???)
   19=square
   20=square

26=gigantic warp token
27=WTH? :o It's :viridian: at the top of the screen, and if you walk left, it moves to the left, more to the left means it moves faster
28=same as above
29=same as above
30=same as above
31=same as above
32=same as above
33=same as above
34=same as above
35=same as above
36=same as above
37=same as above
40=same as above
45=same as above
50=same as above
51=nothing
52=nothing
53=nothing
54=nothing
55=rescuable crewmate, b can be:
   0= :viridian:
   1= :violet:
   2= :vitellary:
   3= :vermillion:
   4= :verdigris:
   5= :victoria:
   6= :viridian:
   7= :viridian:
   8= :viridian:
   9= :viridian: …
56=enemy
57=same as 27, but disappears when you warp (or not???)
58=same as above
59=same as above

I haven't tested further than this, but there might be more.

As you can see, I'm not sure about some of the things, because the exact same command gave different results in different levels! Sooo... :vitellary:

a,b=metadata, some of the entities need this to change things, like 25 and 55. Otherwise, they can be anything, but I'm not sure. (Just use 0,0 or 18,0)
0 =  :viridian: (The player, will interact with the environment in many ways that the player do).
Title: Re: Internal commands
Post by: ToasterApocalypse on September 27, 2012, 11:41:05 AM
5 more replies until this becomes #1 topic!

 :viridian:

EDIT: 4 now because of this
Title: Re: Internal commands
Post by: Dav999 on September 27, 2012, 11:46:15 AM
And no 'post' 'post' 'post'-ing! >:D
Title: Re: Internal commands
Post by: ToasterApocalypse on September 27, 2012, 01:09:46 PM
And no 'post' 'post' 'post'-ing! >:D

LETS DISCUSS ALTSTATES

OH NO A FREAKING AUTISTIC COMPUTER HERE
(http://25.media.tumblr.com/tumblr_matldym2KP1rvyxoko1_500.png)

DUDUDUDUDUDUD IM DEAD
Title: Re: Internal commands
Post by: Dav999 on September 27, 2012, 01:18:17 PM
altstate(0):
Normal trinket room
Open secret lab entrance

altstate(1):
Exploded trinket room
Completely closed secret lab entrance

altstate(2)
I don't know about the trinket room here, my guess is that it's the same as altstate 1
One of the walls is destroyed by VVVVVV man
Title: Re: Internal commands
Post by: MoogiGMD on September 28, 2012, 02:54:35 AM
i am getting this
Title: Re: Internal commands
Post by: MoogiGMD on September 28, 2012, 02:54:57 AM
#1 TOPIC :D
Title: Re: Internal commands
Post by: Dav999 on September 28, 2012, 09:23:34 AM
I told ya! :)
Title: Re: Internal commands
Post by: blue626 on September 28, 2012, 10:25:59 AM
Why did you want this topic to be the one with most replies so much, anyway?

i am getting this

#1 TOPIC :D

You could have edited the other post, but instead saying "this topic is #1, tied with "YYYYYY"", or something. Would that change something?

On-topic:

Shouldn't the definition of final mode(x,y) be changed? Or, do you mean it only works with final mode(46,54)? I guess it should work with other values, and that 46,54 is the room FIQ said to work, probably leading to Panic Room...
Title: Re: Internal commands
Post by: Dav999 on September 28, 2012, 03:09:28 PM
On-topic:

Shouldn't the definition of final mode(x,y) be changed? Or, do you mean it only works with final mode(46,54)? I guess it should work with other values, and that 46,54 is the room FIQ said to work, probably leading to Panic Room...

I've never tried finalmode, so I don't know what will happen if you use other coordinates.
Title: Re: Internal commands
Post by: Hilbert on September 28, 2012, 04:06:34 PM
Pretty sure it will take you to other spots in polar dimension.
46,54 are the coordinates for the start position.
Title: Re: Internal commands
Post by: Hilbert on September 29, 2012, 04:38:06 AM
Uh, guys... We aren't exactly #1 thread. In a minecraft forum I've seen a thread with 20 posts per page and it had... Uh... 55 pages :o
Title: Re: Internal commands
Post by: Dav999 on September 29, 2012, 04:43:21 AM
#1 thread in this forum! :D I have seem forums with threads of THOUSANDS (!!!) of pages long! :o
Title: Re: Internal commands
Post by: N on September 29, 2012, 05:07:36 AM
#1 thread in this forum!

AGREED.
Title: Re: Internal commands
Post by: FIQ on September 29, 2012, 06:19:27 AM
finalmode(46,54) takes you to Temporary Fault. Yes, changing the parameters change which room you end up in. It's basically a polar dimension version of gotoroom().
Title: Re: Internal commands
Post by: Hilbert on September 29, 2012, 05:54:53 PM
#1 thread in this forum! :D I have seem forums with threads of THOUSANDS (!!!) of pages long! :o
:o :o :o :o :o :o :o :o :o :o :o :o :o :o *faints*
Title: -SUBJECT GOES HERE-
Post by: N on September 29, 2012, 06:09:32 PM
(http://d2bm3ljpacyxu8.cloudfront.net/width/368/crop/0,0,368x47/afbeeldinge.webs.com/off%20topicness-1.png)

We are for some reason talking about forums and the number 1
Title: Kirby y u change titles fart
Post by: ToasterApocalypse on September 30, 2012, 10:05:07 AM
(http://d2bm3ljpacyxu8.cloudfront.net/width/368/crop/0,0,368x47/afbeeldinge.webs.com/off%20topicness-1.png)

We are for some reason talking about forums and the number 1

FART

anyway, DISCUSS...

DISCUSS CREATE CREWWOMAN
Title: Re: Kirby y u change titles fart
Post by: Dav999 on September 30, 2012, 10:25:24 AM
(http://d2bm3ljpacyxu8.cloudfront.net/width/368/crop/0,0,368x47/afbeeldinge.webs.com/off%20topicness-1.png)

We are for some reason talking about forums and the number 1

FART

anyway, DISCUSS...

DISCUSS CREATE CREWWOMAN

Oh, I forgot that command. Thanks for pointing it out. :) You can do some very interesting things with it. Just experiment with it, and try to find out what it does.

Because I won't tell it yet 8)
Title: Re: Kirby y u change titles fart
Post by: N on September 30, 2012, 10:42:15 AM
^^^^^^^^^^^^^^^^^^^^^^^^^^^

Just noticed what you did with the subject.
Title: Re: Internal commands
Post by: Hilbert on September 30, 2012, 11:18:13 AM
Awright, stop changing the title in my thread :-X
Title: Re: Internal commands
Post by: blue626 on September 30, 2012, 11:26:39 AM
Uh, guys... We aren't exactly #1 thread. In a minecraft forum I've seen a thread with 20 posts per page and it had... Uh... 55 pages :o

You thought this was the thread with most replies everywhere?!?! Anyway, I wonder where Dav saw a thread with thousands of pages... I saw a thread in the SMF community with 8788 replies or 440 pages, but thousands!?!?

^^^^^^^^^^^^^^^^^^^^^^^^^^^

Just noticed what you did with the subject.

You change thread titles a lot (well, you and Toaster)! You also like to say the author of a quote ina strange/funny way sometimes.

On-topic:

(http://d2bm3ljpacyxu8.cloudfront.net/width/368/crop/0,0,368x47/afbeeldinge.webs.com/off%20topicness-1.png)

We are for some reason talking about forums and the number 1

FART

anyway, DISCUSS...

DISCUSS CREATE CREWWOMAN

Funny. :D It's createcrewman, right?

EDIT: It's explained on the 1st reply (2nd post):

createcrewman(x,y,colour,mood,direction) - creates a crewmate (not rescuable)

EDIt 2: Mood is probably this, like it's on other commands: 0=happy, 1=sad.
Title: Re: Internal commands
Post by: Dav999 on September 30, 2012, 11:34:12 AM
Uh, guys... We aren't exactly #1 thread. In a minecraft forum I've seen a thread with 20 posts per page and it had... Uh... 55 pages :o

You thought this was the thread with most replies everywhere?!?! Anyway, I wonder where Dav saw a thread with thousands of pages... I saw a thread in the SMF community with 8788 replies or 440 pages, but thousands!?!?

Well, I can't find one with thousands of pages for now, but I'm sure I saw one. But for now, the record is 1127 pages, 20 posts per page! (http://www.hard-light.net/forums/index.php?topic=53623.22520)

On-topic:

(http://d2bm3ljpacyxu8.cloudfront.net/width/368/crop/0,0,368x47/afbeeldinge.webs.com/off%20topicness-1.png)

We are for some reason talking about forums and the number 1

FART

anyway, DISCUSS...

DISCUSS CREATE CREWWOMAN

Funny. :D It's createcrewman, right?

It does do something! Being there, taking up space. :D
Title: the number 6 v times
Post by: N on September 30, 2012, 12:56:33 PM
Awright, stop changing the title in my thread :-X

NEVER
Title: Re: Internal commands
Post by: Hilbert on September 30, 2012, 03:14:31 PM
 :-X X 100 000 000 000 000 000 000 000 000
Title: Re: Internal commands
Post by: Hilbert on September 30, 2012, 03:28:07 PM
Quote
createcrewwoman
WHAT DOES IT DO
Title: Re: Internal commands
Post by: N on September 30, 2012, 03:29:45 PM
:-X X 100 000 000 000 000 000 000 000 000

 :D Trololololololololol
Title: Re: Internal commands
Post by: Dav999 on September 30, 2012, 10:16:21 PM
Quote
createcrewwoman
WHAT DOES IT DO

It takes up space!
Title: Re: Internal commands
Post by: Hilbert on October 01, 2012, 04:42:13 AM
Quote
createcrewwoman
WHAT DOES IT DO

It takes up space!
Really.  :-X
Title: Re: Internal commands
Post by: Dav999 on October 01, 2012, 07:32:33 AM
You kinda overuse that smiley. You already used it more than 100 septillion times! :D
Title: im ghost
Post by: N on October 02, 2012, 02:15:51 PM
You kinda overuse that smiley. You already used it more than 100 septillion times! :D

I use it more.
DON'T LOOK AT MY AVATAR, OR YOU WILL MEET A TERRIBLE FATE!

offtopicness
Title: Re: im ghost
Post by: Dav999 on October 02, 2012, 02:21:03 PM
You kinda overuse that smiley. You already used it more than 100 septillion times! :D

I use it more.
DON'T LOOK AT MY AVATAR, OR YOU WILL MEET A TERRIBLE FATE!

offtopicness

Roskilla really used it more than 100 septillion times. Didn't you see that post?
Title: Re: Internal commands
Post by: Hilbert on October 02, 2012, 02:38:10 PM
YA. :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X
Title: Re: Internal commands
Post by: N on October 02, 2012, 02:38:43 PM
ive used it more than xtramegaman trillion times which is
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

 :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X :-X
Title: Re: Internal commands
Post by: Hilbert on October 02, 2012, 02:39:37 PM
LIAR.jpeg
Title: Re: Internal commands
Post by: N on October 02, 2012, 02:41:22 PM
I have no idea whats going on right now
so lets all enjoy looking at toasters avatar

(http://24.media.tumblr.com/tumblr_m556xm2Lji1rvj3z3o1_250.gif)
Title: Re: Internal commands
Post by: Dav999 on October 03, 2012, 03:38:41 AM
:verdigris:
Title: Re: Internal commands
Post by: RibShark on October 03, 2012, 09:51:34 AM
Getting back on topic, does anyone have the full entity list? I kinda need it...
Title: Re: Internal commands
Post by: Dav999 on October 03, 2012, 09:58:19 AM
Getting back on topic, does anyone have the full entity list? I kinda need it...

Bump! Which command will we discuss next? createentity(x,x,x,x,x)?
discuss it NOW! I NEED TO KNOW HOW TO USE IT >:D

You can create things! It works like this:

createentity(x,y,z,a,b)

x,y=coordinates, obviously
z=the number of the entity:

1=enemy
2=platform
3=disappearing platform
4=1x1 fast quicksand
5= :viridian: (acts as gravity line and disappears)
6=nothing?
7=nothing?
8=coin
9=collectable :shiny:
10=??? Looks like a CD, size of a :shiny:, not collectable
11=horizontal gravity line
12=vertical gravity line
13=warp token
14=big teleporter (WARNING: DON'T LET :viridian: TOUCH IT!)
15= :verdigris:, non rescuable
16= :vitellary:, non rescuable
17= :victoria:, non rescuable
18= (http://d2bm3ljpacyxu8.cloudfront.net/width/20/crop/0,0,20x19/afbeeldinge.webs.com/gray_1.png), (!) non rescuable
19= :vermillion:, non rescuable
20=??? sort of disc, if you touch it, it is activated or something???
21=??? same as above, but you can't activate it
or
21=terminal???
22=should be :shiny:, but only shows up if you collect one in that room without leaving that room.
23=enemy
24= (http://d2bm3ljpacyxu8.cloudfront.net/width/20/crop/0,0,20x19/afbeeldinge.webs.com/gray_1.png), follows player
25=a can be:
   0=top cup holder
   1=bottom cup holder
   2=cup
   3=flipped cup
   4=smile cup
   5=flipped smile cup
   6=cry cup
   7=flipped cry cup
   8=trinket cup
   9=flipped trinket cup
   10=nothing
   11=nothing
   12=square
   13=disappearing platform (1)
   14=disappearing platform (2)
   15=disappearing platform (3)
   16=another square
   17=another square
   18=another square (last time it was a V???)
   19=square
   20=square

26=gigantic warp token
27=WTH? :o It's :viridian: at the top of the screen, and if you walk left, it moves to the left, more to the left means it moves faster
28=same as above
29=same as above
30=same as above
31=same as above
32=same as above
33=same as above
34=same as above
35=same as above
36=same as above
37=same as above
40=same as above
45=same as above
50=same as above
51=nothing
52=nothing
53=nothing
54=nothing
55=rescuable crewmate, b can be:
   0= :viridian:
   1= :violet:
   2= :vitellary:
   3= :vermillion:
   4= :verdigris:
   5= :victoria:
   6= :viridian:
   7= :viridian:
   8= :viridian:
   9= :viridian: …
56=enemy
57=same as 27, but disappears when you warp (or not???)
58=same as above
59=same as above

I haven't tested further than this, but there might be more.

As you can see, I'm not sure about some of the things, because the exact same command gave different results in different levels! Sooo... :vitellary:

a,b=metadata, some of the entities need this to change things, like 25 and 55. Otherwise, they can be anything, but I'm not sure. (Just use 0,0 or 18,0)
Title: Re: Internal commands
Post by: RibShark on October 03, 2012, 11:09:37 AM
OK, does anyone know the number for a non-collectable trinket (like the ones in  :victoria:'s room in the ship)?
Title: Re: Internal commands
Post by: Dav999 on October 03, 2012, 11:16:30 AM
OK, does anyone know the number for a non-collectable trinket (like the ones in  :victoria:'s room in the ship)?

The only way to do that is with number 22, but the trinket only shows up if you collected a trinket in that room without leaving that room.
Title: Re: Internal commands
Post by: RibShark on October 03, 2012, 11:30:13 AM
OK, does anyone know the number for a non-collectable trinket (like the ones in  :victoria:'s room in the ship)?

The only way to do that is with number 22, but the trinket only shows up if you collected a trinket in that room without leaving that room.

Strange... only works for me after I collect a trinket (not necessarily in the same room) and then go into the room.

EDIT: Turns out that you can edit the metadata (argument a), to a higher number, to make it only appear once you have collected the equivalent trinket in the level, (IE, like in the actual game). Also, any way of using internal commands without those annoying black bars? I guess that there isn't  :'(, but sometimes it is worth asking.
Title: Re: Internal commands
Post by: Dav999 on October 03, 2012, 12:55:06 PM
OK, does anyone know the number for a non-collectable trinket (like the ones in  :victoria:'s room in the ship)?

The only way to do that is with number 22, but the trinket only shows up if you collected a trinket in that room without leaving that room.

Strange... only works for me after I collect a trinket (not necessarily in the same room) and then go into the room.

EDIT: Turns out that you can edit the metadata (argument a), to a higher number, to make it only appear once you have collected the equivalent trinket in the level, (IE, like in the actual game). Also, any way of using internal commands without those annoying black bars? I guess that there isn't  :'(, but sometimes it is worth asking.

There MAY be a way to do it without cutscene bars, but nobody knows how. I thought I found out how, because someone here made a level with a script which showed NO cutscene bars, because the commands started with a capital letter! I tried that in a test level and it worked! But when I tried to use that same method to prevent cutscene bars from appearing when using internal scripting, it didn't work :( It may work, if I just didn't test enough. But for now, the only way to prevent a wait period before the script is to use the lab tileset, have a high floor and a low ceiling, and don't use endcutscene() in an internal script before that. It will not wait for cutscene bars if they're already there! Just experiment with commands written in capital letters, and it may just work! :viridian: Also writing commands like tHIS or ThIs may even work, but I didn't test that.
Title: Re: Internal commands
Post by: N on October 03, 2012, 01:36:01 PM
:verdigris:
I have no idea whats going on right now
so lets all enjoy looking at toasters avatar

(http://24.media.tumblr.com/tumblr_m556xm2Lji1rvj3z3o1_250.gif)
Title: Re: Internal commands
Post by: Dav999 on October 03, 2012, 01:58:38 PM
We were on topic! :victoria:
Title: Re: Internal commands
Post by: allison on October 03, 2012, 03:54:08 PM
Getting back on topic, does anyone have the full entity list? I kinda need it...

Bump! Which command will we discuss next? createentity(x,x,x,x,x)?
discuss it NOW! I NEED TO KNOW HOW TO USE IT >:D
(entity list)

Horizontal Gravity Lines can have their width controlled with a. Presumably, Vertical ones did this too, although I have not tested this.  :verdigris:
Title: Re: Internal commands
Post by: N on October 03, 2012, 04:28:07 PM
We were on topic! :victoria:

I don't like being on topic!
 :D
Title: Re: Internal commands
Post by: RibShark on October 03, 2012, 11:18:27 PM
because someone here made a level with a script which showed NO cutscene bars, because the commands started with a capital letter!

Which level? I. MUST. KNOW!
Title: Re: Internal commands
Post by: FIQ on October 04, 2012, 01:58:50 AM
because someone here made a level with a script which showed NO cutscene bars, because the commands started with a capital letter!

Which level? I. MUST. KNOW!
You can reproduce what he did with this (case sensitive):

Say
Hi. Bla bla. Bla

Reply
No cutscenebars!
Title: Re: Internal commands
Post by: Dav999 on October 04, 2012, 06:40:22 AM
because someone here made a level with a script which showed NO cutscene bars, because the commands started with a capital letter!

Which level? I. MUST. KNOW!
You can reproduce what he did with this (case sensitive):

Say
Hi. Bla bla. Bla

Reply
No cutscenebars!

It was Adventures Of Viridian (http://distractionware.com/forum/index.php?topic=1129.msg9622#msg9622)!
Title: Re: Internal commands
Post by: RibShark on October 05, 2012, 10:56:17 AM
Did anyone know that you can get a grey character with the createcrewman() command if you specify an invalid colour? Anyone got a name beginning with V?

Also, what should you put for the direction argument for the same command?
Title: Re: Internal commands
Post by: Dav999 on October 05, 2012, 11:42:01 AM
Also, what should you put for the direction argument for the same command?

faceleft or faceright.
Title: Re: Internal commands
Post by: RibShark on October 05, 2012, 11:56:46 AM
faceleft or faceright.
So there's no way to make it flipped or not flipped?
Title: Re: Internal commands
Post by: Dav999 on October 05, 2012, 12:12:22 PM
faceleft or faceright.
So there's no way to make it flipped or not flipped?

Not that I know of. You can use the flipgravity command right after that, though.
Title: Re: Internal commands
Post by: blue626 on October 05, 2012, 12:24:43 PM
Maybe you should sort the commands by name and/or category so that they're easier to find.
Also, you still haven't changed the finalmode(x,y) definition, it doesn't seem right for me.

I suspect that there was supposed to be a use for the grey cremate, but I'm not sure.

I'm going to start testing internal scripting to discover some things...

Off-topic: That was your 666th post, Dav999!!
Title: Re: Internal commands
Post by: allison on October 05, 2012, 03:35:52 PM
Did anyone know that you can get a grey character with the createcrewman() command if you specify an invalid colour? Anyone got a name beginning with V?

Closest I could get was Vanilla, which is more of an off-white than grey.
Title: Re: Internal commands
Post by: Hilbert on October 05, 2012, 04:02:22 PM
That was already used for the white guy in the secret lab.
Title: Re: Internal commands
Post by: RibShark on October 06, 2012, 01:43:04 AM
 ??? When was it used, what white guy? I can't find a white guy in the secret lab?

Also, I just thought of vapid (http://en.wiktionary.org/wiki/vapid), which means dull or lifeless.
Title: Re: Internal commands
Post by: Dav999 on October 06, 2012, 01:54:42 AM
Go to the trinket room in the ship and talk to :victoria: (only works when you have 20 trinkets)
Title: Re: Internal commands
Post by: RibShark on October 06, 2012, 03:59:43 AM
Go to the trinket room in the ship and talk to :victoria: (only works when you have 20 trinkets)

Yeah, I know, I have unlocked the secret lab. But where's the white guy?
Title: Re: Internal commands
Post by: Dav999 on October 06, 2012, 04:02:06 AM
Talk to :victoria: again, and see what happens!
Title: Re: Internal commands
Post by: blue626 on October 06, 2012, 04:03:37 AM
Go to the trinket room in the ship and talk to :victoria: (only works when you have 20 trinkets)

Yeah, I know, I have unlocked the secret lab. But where's the white guy?

It's written here (spoiler): It appeared in the cutscene when you discovered the secret lab. It's the 6 crewmembers merged, and thus, it was much bigger than any individual crewmate. It destroyed the walls to enter the secret lab.
Title: Re: Internal commands
Post by: RibShark on October 06, 2012, 04:06:46 AM
Isn't that VVVVVVMan?

Since when was it called "Vanilla".
Title: Re: Internal commands
Post by: blue626 on October 06, 2012, 04:11:04 AM
Isn't that VVVVVVMan?

Since when was it called "Vanilla".

On old post, it was called like that, but as a joke. I don't know why carzyal02 called it like that. It should be called VVVVVVMan, since it's called like that on internal scripting.
Title: Re: Internal commands
Post by: allison on October 06, 2012, 09:04:53 AM
Isn't that VVVVVVMan?

Since when was it called "Vanilla".

On old post, it was called like that, but as a joke. I don't know why carzyal02 called it like that. It should be called VVVVVVMan, since it's called like that on internal scripting.

Actually, I was trying (and failing) to come up with a name for (http://d2bm3ljpacyxu8.cloudfront.net/width/20/crop/0,0,20x19/afbeeldinge.webs.com/gray_1.png).
Title: Re: Internal commands
Post by: Dav999 on October 06, 2012, 09:34:25 AM
VVVVVVman! Of course! That name starts with a V! (http://imageshack.us/a/img507/9130/veridian.png) (http://imageshack.us/a/img207/1571/victoriaws.png) (http://imageshack.us/a/img99/8155/vermillion.png) (http://imageshack.us/a/img32/9154/vitellary.png) (http://imageshack.us/a/img72/5756/verdigris.png) (http://imageshack.us/a/img832/763/violetjd.png) (http://d2bm3ljpacyxu8.cloudfront.net/width/20/crop/0,0,20x19/afbeeldinge.webs.com/gray_1.png)

(http://imageshack.us/a/img507/9130/veridian.png) (http://imageshack.us/a/img207/1571/victoriaws.png) (http://imageshack.us/a/img99/8155/vermillion.png) (http://imageshack.us/a/img32/9154/vitellary.png) (http://imageshack.us/a/img72/5756/verdigris.png) (http://imageshack.us/a/img832/763/violetjd.png) (http://d2bm3ljpacyxu8.cloudfront.net/width/20/crop/0,0,20x19/afbeeldinge.webs.com/gray_1.png)
 V    V    V    V    V    V   Man?
Title: Re: Internal commands
Post by: N on October 06, 2012, 11:54:41 AM
WHO IS THAT DARK VIRIDIAN
maybe is baridin
Title: Re: Internal commands
Post by: Dav999 on October 06, 2012, 12:22:02 PM
createcrewman(100,100,gray,0,faceright) to find out!
Title: Re: Internal commands
Post by: ToasterApocalypse on October 06, 2012, 12:35:08 PM
createcrewman(100,100,gray,0,faceright) to find out!

I first discovered the gray crewmate by accident. I thought  :violet:'s color code was 'pink' where it was purple. 'Pink' spawns a gray crewmate, like gray or any other color that isn't cyan, bue, red, yellow, green or purple.

I don't really know who made the first level with him in it. I think it was me, in my crappy-ass internal test Computer Crisis, where I dubbed him 'Vertigo'.

We can all come up with crafty names for him, like Crash Landing's engineer 'Verisix'.

Title: Re: Internal commands
Post by: blue626 on October 13, 2012, 01:20:40 PM
I've been testing internal scripting in a differnt way, to see if it worked:

say(-x)
internal x times

I found a glitch, I'll tell details later.
Title: Re: Internal commands
Post by: N on October 13, 2012, 06:23:04 PM
ATTENTION
DO NOT USE THIS COMMAND:

create(derp,701)

IT WILL BLOW UP THE LEVEL
























Title: Re: Internal commands
Post by: Dav999 on October 13, 2012, 11:45:08 PM
ATTENTION
DO NOT USE THIS COMMAND:

create(derp,701)

IT WILL BLOW UP THE LEVEL

I can't resist trying it just in case :D
Title: Re: Internal commands
Post by: N on October 14, 2012, 05:56:38 AM
TERRY CARNAVORE TRIED IT AND THE WORLD ENDED
I said...
t s ake
Title: Re: Internal commands
Post by: Dav999 on October 14, 2012, 06:43:38 AM
I tried it. The result is on Youtube (http://www.youtube.com/watch?v=zsTRxXvQY0s). (http://www.derekyu.com/images/art/pixel/fu-surprise.gif)
NOTHING HAPPENED AT ALL! Lol.
Title: Re: Internal commands
Post by: Hilbert on October 14, 2012, 06:46:03 AM
DERP ALERT
Title: Re: Internal commands
Post by: N on October 14, 2012, 07:04:22 AM
I tried it. The result is on Youtube (http://www.youtube.com/watch?v=zsTRxXvQY0s). (http://www.derekyu.com/images/art/pixel/fu-surprise.gif)
NOTHING HAPPENED AT ALL! Lol.

If I watched this at was at 3:00 AM, I would've woken someone up from ROFLMAOing.
Title: Re: Internal commands
Post by: Damn It AL to Hell on October 14, 2012, 08:04:55 AM
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
(http://d2bm3ljpacyxu8.cloudfront.net/width/30/crop/0,0,30x35/afbeeldinge.webs.com/terminal.jpg) = 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.

Holy crap, bro. This is very useful.  :)
Title: Re: Internal commands
Post by: allison on October 14, 2012, 08:11:34 AM
ATTENTION
DO NOT USE THIS COMMAND:

create(derp,701)

IT WILL BLOW UP THE LEVEL
























  • me needs to be serious
  • this no be real

http://www.youtube.com/watch?v=Wd7KcCk5Ct0 (http://www.youtube.com/watch?v=Wd7KcCk5Ct0)


I kind of wish it actually worked.
Title: Re: Internal commands
Post by: Dav999 on October 14, 2012, 08:20:18 AM
ATTENTION
DO NOT USE THIS COMMAND:

create(derp,701)

IT WILL BLOW UP THE LEVEL
























  • me needs to be serious
  • this no be real

http://www.youtube.com/watch?v=Wd7KcCk5Ct0 (http://www.youtube.com/watch?v=Wd7KcCk5Ct0)


I kind of wish it actually worked.

Why do you put a space between say and the number? Ah well.
Title: Re: Internal commands
Post by: N on October 14, 2012, 09:21:05 AM
ATTENTION
DO NOT USE THIS COMMAND:

create(derp,701)

IT WILL BLOW UP THE LEVEL
























  • me needs to be serious
  • this no be real

http://www.youtube.com/watch?v=Wd7KcCk5Ct0 (http://www.youtube.com/watch?v=Wd7KcCk5Ct0)


I kind of wish it actually worked.

Liked and favorited!
Title: Re: Internal commands
Post by: N on October 14, 2012, 09:22:14 AM
AND I TOLD YOU NOT TO USE IT
Title: Re: Internal commands
Post by: Dav999 on October 14, 2012, 12:13:52 PM
AND I TOLD YOU NOT TO USE IT

That only makes us more curious :D

But I already knew nothing was going to happen. 8)
Title: Re: Internal commands
Post by: allison on October 14, 2012, 04:15:51 PM
AND I TOLD YOU NOT TO USE IT

That only makes us more curious :D

But I already knew nothing was going to happen. 8)

I figured that internal commands were so bizarre and unstable that something might actually happen :P
Title: Re: Internal commands
Post by: RibShark on October 15, 2012, 08:26:39 AM
I've been testing internal scripting in a differnt way, to see if it worked:

say(-x)
internal x times

I found a glitch, I'll tell details later.

You have piqued my interest... How far away is later?
Title: Re: Internal commands
Post by: avengah on October 15, 2012, 08:53:49 AM
It only detects one internal command, but you see an empty text box as well.
Title: Re: Internal commands
Post by: FIQ on October 15, 2012, 09:57:16 AM
I'm trying to find a way to get rid of the cutscenebars while doing internal stuff.

So far I've only managed to get 1 line of internal script to execute *before* the cutscenebars, but not managed to get rid of them. Progress! I hope...

EDIT: Managed to get rid of cutscenebars and force 1 line of script to appear. As a bonus, I didn't have to force stop the script by loadscript(stop) (How did that happen?)

Script: test
A)Say
alarmon

Will trigger the alarm. No terminal sound. No cutscenebars. No dialog rubbish after the script. Let's see if I can get this to work with more than 1 line...

EDIT2: Any value will do, not just -1. Still don't know if you can expand on it though.

EDIT3: Putting this *anywhere* in a script containing simplified scripting without say/reply scripts will make the internal script go first. Always. Even if you placed it last. Also, inserting ANY kind of "normal" say/reply commands after the above will make the internal script ignored completly. If you put it before, the internal script will still go first, but cutscenebars will also appear as normal (but also work normally in general, i.e. turning off as expected when the script is done etc)

EDIT4: You can work-around only being able to use 1 internal script this way by utilizing external scripts and call them with iftrinkets(0,script). However, this will make you limited to 1 internal script line per script. So if you want to do something with 20 lines... well, you get the idea. Still, short segments of internal code in an otherwise big script that doesn't want cutscenebars can benefit from it. And cutscenebars is a *good* thing in dialogs and generally in bigger scripts.

This works in both 2.0 and 2.1 It's basically a new way to trick the parser -- if the "traditional" method would be fixed, even though I can't see it be done, this will still work and vice versa. At least that's what I think. This can be used in custom levels to experiment with new ideas -- internal entities come to mind.
Title: Re: Internal commands
Post by: Dav999 on October 15, 2012, 10:23:28 AM
Script: test
A)Say
alarmon

It doesn't work :-\
Title: Re: Internal commands
Post by: FIQ on October 15, 2012, 10:25:43 AM
Script: test
A)Say
alarmon

It doesn't work :-\
Hmm. Weird, it does for me!
I'll check for typos/etc, brb

EDIT: ...lol
I found out why. (I played around with my dedicated test level and didn't realize that I actually loaded another script)

Try this instead:

Script: test
flag(90,on)
ifflag(90,test2)

Script: test2
A)Say
alarmon

If it still doesn't work, try the level below to see my exact environment. Might explain why then.
Title: Re: Internal commands
Post by: Dav999 on October 15, 2012, 10:33:31 AM
Script: test
A)Say
alarmon

It doesn't work :-\
Hmm. Weird, it does for me!
I'll check for typos/etc, brb

EDIT: ...lol
I found out why. (I played around with my dedicated test level and didn't realize that I actually loaded another script)

Try this instead:

Script: test
flag(90,on)
ifflag(90,test2)

Script: test2
A)Say
alarmon

If it still doesn't work, try the level below to see my exact environment. Might explain why then.

Did you put anything in the zip? It's empty ???

EDIT: It started with a dot, so it showed up as hidden for me. :P Will try it out.

By the way, I'm also testing it with specialline(x) now.
Title: Re: Internal commands
Post by: FIQ on October 15, 2012, 10:36:49 AM
Script: test
A)Say
alarmon

It doesn't work :-\
Hmm. Weird, it does for me!
I'll check for typos/etc, brb

EDIT: ...lol
I found out why. (I played around with my dedicated test level and didn't realize that I actually loaded another script)

Try this instead:

Script: test
flag(90,on)
ifflag(90,test2)

Script: test2
A)Say
alarmon

If it still doesn't work, try the level below to see my exact environment. Might explain why then.

Did you put anything in the zip? It's empty ???

EDIT: It started with a dot, so it showed up as hidden for me. :P Will try it out.

By the way, I'm also testing it with specialline(x) now.
I also found out this: Sometimes (often) if you have something below that ^, the script will just not execute at all. Don't know why exactly, but since it doesn't matter, you can place it last in a script, it will go first anyway :P

If even that environment doesn't work (for you), I have no idea really. Linux exclusive glitch ???
Title: Re: Internal commands
Post by: Dav999 on October 15, 2012, 10:46:40 AM
Script: test
A)Say
alarmon

It doesn't work :-\
Hmm. Weird, it does for me!
I'll check for typos/etc, brb

EDIT: ...lol
I found out why. (I played around with my dedicated test level and didn't realize that I actually loaded another script)

Try this instead:

Script: test
flag(90,on)
ifflag(90,test2)

Script: test2
A)Say
alarmon

If it still doesn't work, try the level below to see my exact environment. Might explain why then.

Did you put anything in the zip? It's empty ???

EDIT: It started with a dot, so it showed up as hidden for me. :P Will try it out.

By the way, I'm also testing it with specialline(x) now.
I also found out this: Sometimes (often) if you have something below that ^, the script will just not execute at all. Don't know why exactly, but since it doesn't matter, you can place it last in a script, it will go first anyway :P

If even that environment doesn't work (for you), I have no idea really. Linux exclusive glitch ???

That level worked, and I found out how to make it work (although I have no idea why it works :P)

Code: [Select]
A)Say
alarmon
This doesn't work.

Code: [Select]
delay(0)
A)Say
alarmon
This does work!

So, a delay makes it work. I've also tried
Code: [Select]
#
A)Say
alarmon
but that didn't work. Now I tried it again and it did work??? ???

Anyway: putting a delay(0) or # in front of it makes it work. (And of course ifflagging from another script)

It's also handy for gotoroom!
Title: Re: Internal commands
Post by: FIQ on October 15, 2012, 10:48:39 AM
Script: test
A)Say
alarmon

It doesn't work :-\
Hmm. Weird, it does for me!
I'll check for typos/etc, brb

EDIT: ...lol
I found out why. (I played around with my dedicated test level and didn't realize that I actually loaded another script)

Try this instead:

Script: test
flag(90,on)
ifflag(90,test2)

Script: test2
A)Say
alarmon

If it still doesn't work, try the level below to see my exact environment. Might explain why then.

Did you put anything in the zip? It's empty ???

EDIT: It started with a dot, so it showed up as hidden for me. :P Will try it out.

By the way, I'm also testing it with specialline(x) now.
I also found out this: Sometimes (often) if you have something below that ^, the script will just not execute at all. Don't know why exactly, but since it doesn't matter, you can place it last in a script, it will go first anyway :P

If even that environment doesn't work (for you), I have no idea really. Linux exclusive glitch ???

That level worked, and I found out how to make it work (although I have no idea why it works :P)

Code: [Select]
A)Say
alarmon
This doesn't work.

Code: [Select]
delay(0)
A)Say
alarmon
This does work!

So, a delay makes it work. I've also tried
Code: [Select]
#
A)Say
alarmon
but that didn't work. Now I tried it again and it did work??? ???

Anyway: putting a delay(0) or # in front of it makes it work. (And of course ifflagging from another script)

It's also handy for gotoroom!
Ohh, so you don't *have* to run it externally, just run something before? Good to know!

Wonder how quickly scripts do run? Was thinking of doing a trinket room in my level, like in the original game. :3
Title: Re: Internal commands
Post by: Dav999 on October 15, 2012, 11:00:35 AM
Script: test
A)Say
alarmon

It doesn't work :-\
Hmm. Weird, it does for me!
I'll check for typos/etc, brb

EDIT: ...lol
I found out why. (I played around with my dedicated test level and didn't realize that I actually loaded another script)

Try this instead:

Script: test
flag(90,on)
ifflag(90,test2)

Script: test2
A)Say
alarmon

If it still doesn't work, try the level below to see my exact environment. Might explain why then.

Did you put anything in the zip? It's empty ???

EDIT: It started with a dot, so it showed up as hidden for me. :P Will try it out.

By the way, I'm also testing it with specialline(x) now.
I also found out this: Sometimes (often) if you have something below that ^, the script will just not execute at all. Don't know why exactly, but since it doesn't matter, you can place it last in a script, it will go first anyway :P

If even that environment doesn't work (for you), I have no idea really. Linux exclusive glitch ???

That level worked, and I found out how to make it work (although I have no idea why it works :P)

Code: [Select]
A)Say
alarmon
This doesn't work.

Code: [Select]
delay(0)
A)Say
alarmon
This does work!

So, a delay makes it work. I've also tried
Code: [Select]
#
A)Say
alarmon
but that didn't work. Now I tried it again and it did work??? ???

Anyway: putting a delay(0) or # in front of it makes it work. (And of course ifflagging from another script)

It's also handy for gotoroom!
Ohh, so you don't *have* to run it externally, just run something before? Good to know!

Wonder how quickly scripts do run? Was thinking of doing a trinket room in my level, like in the original game. :3

Well, I think it runs quick enough to do that. If you make :viridian: walk into another room with walk(x,x), and if you time it correctly, you can create an entity fast enough to make it look like it was there before you entered the room.
Title: Re: Internal commands
Post by: FIQ on October 15, 2012, 11:06:02 AM
Script: test
A)Say
alarmon

It doesn't work :-\
Hmm. Weird, it does for me!
I'll check for typos/etc, brb

EDIT: ...lol
I found out why. (I played around with my dedicated test level and didn't realize that I actually loaded another script)

Try this instead:

Script: test
flag(90,on)
ifflag(90,test2)

Script: test2
A)Say
alarmon

If it still doesn't work, try the level below to see my exact environment. Might explain why then.

Did you put anything in the zip? It's empty ???

EDIT: It started with a dot, so it showed up as hidden for me. :P Will try it out.

By the way, I'm also testing it with specialline(x) now.
I also found out this: Sometimes (often) if you have something below that ^, the script will just not execute at all. Don't know why exactly, but since it doesn't matter, you can place it last in a script, it will go first anyway :P

If even that environment doesn't work (for you), I have no idea really. Linux exclusive glitch ???

That level worked, and I found out how to make it work (although I have no idea why it works :P)

Code: [Select]
A)Say
alarmon
This doesn't work.

Code: [Select]
delay(0)
A)Say
alarmon
This does work!

So, a delay makes it work. I've also tried
Code: [Select]
#
A)Say
alarmon
but that didn't work. Now I tried it again and it did work??? ???

Anyway: putting a delay(0) or # in front of it makes it work. (And of course ifflagging from another script)

It's also handy for gotoroom!
Ohh, so you don't *have* to run it externally, just run something before? Good to know!

Wonder how quickly scripts do run? Was thinking of doing a trinket room in my level, like in the original game. :3

Well, I think it runs quick enough to do that. If you make :viridian: walk into another room with walk(x,x), and if you time it correctly, you can create an entity fast enough to make it look like it was there before you entered the room.
Yeah, but I hoped to not have to bother with walk() to do it. :P
Title: Re: Internal commands
Post by: Dav999 on October 15, 2012, 11:25:32 AM
Well, this script runs quick enough, doesn't it? You can run it multiple times.
Title: Re: Internal commands
Post by: RibShark on October 15, 2012, 11:28:37 AM
Anyway: putting a delay(0) or # in front of it makes it work. (And of course ifflagging from another script)

I've been trying this out, and for whatever reason only the ifflag method works for me... strange  :-\.

Anyways, Imma try make it work with multiple commands, but great job guys!
Title: Re: Internal commands
Post by: FIQ on October 15, 2012, 11:36:49 AM
Well, this script runs quick enough, doesn't it? You can run it multiple times.
Definitely.
The updated version of my level will feature working trinkets room :P
Title: Re: Internal commands
Post by: Dav999 on October 15, 2012, 11:47:40 AM
Why doesn't it work here?

<script>script1:|flag(90,on)|ifflag(90,script2)|script2:|delay(0)|A)Say|alarmon||</script>

???

EDIT: Oh right, it does work if I remove one enter at the end:

<script>script1:|flag(90,on)|ifflag(90,script2)|script2:|delay(0)|A)Say|alarmon|</script>

Why does that matter? ???
Title: Re: Internal commands
Post by: FIQ on October 15, 2012, 12:07:59 PM
Why doesn't it work here?

<script>script1:|flag(90,on)|ifflag(90,script2)|script2:|delay(0)|A)Say|alarmon||</script>

???

EDIT: Oh right, it does work if I remove one enter at the end:

<script>script1:|flag(90,on)|ifflag(90,script2)|script2:|delay(0)|A)Say|alarmon|</script>

Why does that matter? ???
As I said, if you have anything below the script, it will not work as it shouuld, if at all. "Anything" includes empty lines. :P (You must have exactly one empty line after the script. If you also remove this one, VVVVVV will remove the line before that, because of how it parses stuff)
Title: Re: Internal commands
Post by: Dav999 on October 15, 2012, 12:31:08 PM
Why doesn't it work here?

<script>script1:|flag(90,on)|ifflag(90,script2)|script2:|delay(0)|A)Say|alarmon||</script>

???

EDIT: Oh right, it does work if I remove one enter at the end:

<script>script1:|flag(90,on)|ifflag(90,script2)|script2:|delay(0)|A)Say|alarmon|</script>

Why does that matter? ???
As I said, if you have anything below the script, it will not work as it shouuld, if at all. "Anything" includes empty lines. :P (You must have exactly one empty line after the script. If you also remove this one, VVVVVV will remove the line before that, because of how it parses stuff)

It still feels kinda contradictory that you have to write scripts backwards now. If you want to use three internal lines without cutscene bars or sound or whatever, you have to use this:

script0:
flag(90,on)
ifflag(90,script1)

script1:
ifflag(90,script2)
A)Say
[internal]

script2:
ifflag(90,script3)
A)Say
[internal]

script3:
#
A)Say
[internal]

You would think it first runs the ifflag command, which lets you never run the A)Say command.

Does B)Say and C)Say also work?
Title: Re: Internal commands
Post by: FIQ on October 15, 2012, 12:32:33 PM
Why doesn't it work here?

<script>script1:|flag(90,on)|ifflag(90,script2)|script2:|delay(0)|A)Say|alarmon||</script>

???

EDIT: Oh right, it does work if I remove one enter at the end:

<script>script1:|flag(90,on)|ifflag(90,script2)|script2:|delay(0)|A)Say|alarmon|</script>

Why does that matter? ???
As I said, if you have anything below the script, it will not work as it shouuld, if at all. "Anything" includes empty lines. :P (You must have exactly one empty line after the script. If you also remove this one, VVVVVV will remove the line before that, because of how it parses stuff)

It still feels kinda contradictory that you have to write scripts backwards now. If you want to use three internal lines without cutscene bars or sound or whatever, you have to use this:

script0:
flag(90,on)
ifflag(90,script1)

script1:
ifflag(90,script2)
A)Say
[internal]

script2:
ifflag(90,script3)
A)Say
[internal]

script3:
#
A)Say
[internal]

You would think it first runs the ifflag command, which lets you never run the A)Say command.

Does B)Say and C)Say also work?
Anything should work, really.
And yeah, the behaviour is quite buggy and way more "instable" than the traditional metod, it's just a nice way to run stuff without leaving "markings". I will actually switch to this method in some places that requires "critical" timing in my own level (mostly related to checkpointing and The Gravitron), as it works better than the old method *for purposes like that*. :P
Title: Re: Internal commands
Post by: Dav999 on October 15, 2012, 12:43:54 PM
I also know some purposes for it in my new level! (That may be released soon! :viridian:)
Title: Re: Internal commands
Post by: avengah on October 15, 2012, 01:12:42 PM
Instead of wasting a flag (not that it really matters), you could use iftrinkets(0,script2) etc. Of course, you could set the flag at the start of the level and leave it set, but that would cause problems when testing specific rooms.
Title: Re: Internal commands
Post by: FIQ on October 15, 2012, 01:24:28 PM
Instead of wasting a flag (not that it really matters), you could use iftrinkets(0,script2) etc. Of course, you could set the flag at the start of the level and leave it set, but that would cause problems when testing specific rooms.
Yeah, of course.
Title: Re: Internal commands
Post by: Dav999 on October 16, 2012, 02:46:46 AM
I only realize now that there is a misunderstanding. Yes, you have to put something before the A)Say, but you also do have to link from another script. I showed what the actual script looked like when it worked for me, but when I said it was linked, I said it in such a way that you thought I meant you don't have to link from another script.
Title: Re: Internal commands
Post by: FIQ on October 16, 2012, 10:30:25 AM
I only realize now that there is a misunderstanding. Yes, you have to put something before the A)Say, but you also do have to link from another script. I showed what the actual script looked like when it worked for me, but when I said it was linked, I said it in such a way that you thought I meant you don't have to link from another script.

My trinket scripts looks like this:

showtrinket1:
iftrinkets(0,showtrinkets2)
A)Say
createentity(136,80,22,1,0)

showtrinket2:
iftrinkets(0,showtrinkets3)
A)Say
createentity(112,80,22,2,0)

(...)

showtrinket20:
A)Say
createentity(136,176,22,0,0)

And it works perfectly. Note that I don't have anything before the internal part in #20

(Never mind my interesting lack of order, that wasn't my point)
Title: Re: Internal commands
Post by: Dav999 on October 16, 2012, 10:51:41 AM
Well, I will try it out. ???
Title: Re: Internal commands
Post by: blue626 on October 16, 2012, 12:06:59 PM
I've been testing internal scripting in a differnt way, to see if it worked:

say(-x)
internal x times

I found a glitch, I'll tell details later.

You have piqued my interest... How far away is later?

Sorry, I've been busy. But it's almost what avengah said:

It only detects one internal command, but you see an empty text box as well.

Here's what I did:

I played a level, the last script being executed made :viridian: sad and created a grey centered text box saying "Here's your cake" or something similar. I quitted without saving (because I had no way out, including suiciding).

After that, I created a level just for testing internal scripting. I created 3 scripts. One called script1 had this:

say(-1)
alarmon
(empty line)

Another called script2 had something like this:

say(-2)
playef(9)
(something I don't remember)
(empty line)


The last one, called script3 had someting like this:

say(-4)
flash(5)
gotoposition(1,1)
playef(10)
(empty line)

Here's what happened when I triggered script1 (I triggered every script in the editor):

:viridian: turned sad, a centered grey text box with "Here's your cake" appeared and the alarm turned on.

When I triggered script2:

:viridian: turned sad, a centered grey text box with "Here's your cake" appeared and a flash sound was played with neither the white screen nor shaking. If script1 was triggered earlier the alarm didn't turn off.

When I triggered script3:

:viridian: turned sad, a centered grey text box with "Here's your cake" appeared and a flash with neither sound effect nor shaking and normal duration appeared. If script1 was triggered earlier the alarm didn't turn off.

I changed script3 slightly. I also changed script2 slightly but I don't remember how. Here's the new script3:

say(-4)
gotoposition(1,1)
flash(5)
playef(10)
(empty line)

Here's what happened when I triggered it:

:viridian: turned sad, a centered grey text box with "Here's your cake" appeared and :viridian: immediately disappeared form the place he/she was and appeared near the top left of the screen. If script1 was triggered earlier the alarm didn't turn off.

Then, I realized this: only the 1st line was executed. The same behavior happened with the new script2, IIRC.

It's likely that the reason to why an empty box appeared when avengah tested it is because avengah tested it immediately after he/she opened VVVVVV.

The fact that you need to play a level before testing to make a text box appear is similar to a glitch I've reported that isn't related to internal scripting. (http://distractionware.com/forum/index.php?topic=1101.msg9081#msg9081) You need to make a mistake in scripting to reproduce this, though.

The fact that it only executes the 1st line might (or should) have been discovered before by FIQ (since he's the one who discovered the say(-1) glitch to execute int. scripting). Did anyone discover this before?

EDIT: This thread already has 330 replies! :o :o :o
Title: Re: Internal commands
Post by: FIQ on October 16, 2012, 12:11:59 PM
I've been testing internal scripting in a differnt way, to see if it worked:

say(-x)
internal x times

I found a glitch, I'll tell details later.

You have piqued my interest... How far away is later?

Sorry, I've been busy. But it's almost what avengah said:

It only detects one internal command, but you see an empty text box as well.

Here's what I did:

I played a level, the last script being executed made :viridian: sad and created a grey centered text box saying "Here's your cake" or something similar. I quitted without saving (because I had no way out, including suiciding).

After that, I created a level just for testing internal scripting. I created 3 scripts. One called script1 had this:

say(-1)
alarmon
(empty line)

Another called script2 had something like this:

say(-2)
playef(9)
(something I don't remember)
(empty line)


The last one, called script3 had someting like this:

say(-4)
flash(5)
gotoposition(1,1)
playef(10)
(empty line)

Here's what happened when I triggered script1 (I triggered every script in the editor):

:viridian: turned sad, a centered grey text box with "Here's your cake" appeared and the alarm turned on.

When I triggered script2:

:viridian: turned sad, a centered grey text box with "Here's your cake" appeared and a flash sound was played with neither the white screen nor shaking. If script1 was triggered earlier the alarm didn't turn off.

When I triggered script3:

:viridian: turned sad, a centered grey text box with "Here's your cake" appeared and a flash with neither sound effect nor shaking and normal duration appeared. If script1 was triggered earlier the alarm didn't turn off.

I changed script3 slightly. I also changed script2 slightly but I don't remember how. Here's the new script3:

say(-4)
gotoposition(1,1)
flash(5)
playef(10)
(empty line)

Here's what happened when I triggered it:

:viridian: turned sad, a centered grey text box with "Here's your cake" appeared and :viridian: immediately disappeared form the place he/she was and appeared near the top left of the screen. If script1 was triggered earlier the alarm didn't turn off.

Then, I realized this: only the 1st line was executed. The same behavior happened with the new script2, IIRC.

It's likely that the reason to why an empty box appeared when avengah tested it is because avengah tested it immediately after he/she opened VVVVVV.

The fact that you need to play a level before testing to make a text box appear is similar to a glitch I've reported that isn't related to internal scripting. (http://distractionware.com/forum/index.php?topic=1101.msg9081#msg9081) You need to make a mistake in scripting to reproduce this, though.

The fact that it only executes the 1st line might (or should) have been discovered before by FIQ (since he's the one who discovered the say(-1) glitch to execute int. scripting). Did anyone discover this before?

EDIT: This thread already has 330 replies! :o :o :o
Which I also did, that's why you use text(1,0,0,4) to make it able to use more than 1 line. :)

As I also said before, it doesn't matter if you have say(-1), say(-2) or say(-49251). It will only do 1 line anyway.
Title: Re: Internal commands
Post by: blue626 on October 16, 2012, 12:45:24 PM
Do you mean this post?

I noticed somethiing: why do you need to write the following text before the internal commands?

say(-1)
text(1,0,0,4)
say(5)

Couldn't you use the following?

say(-4)
say(5)

Or even this last text?

say(-5)

And, why is the text command used above has a number instead of a color (like when you create text boxes with internal scripting)?
say(-4), say(-2403), say(-1), every of them works fine.

Since you said they worked fine, I thought that you meant that say(-1) execute 1 line of int. scripting, say(-4) executes 4 lines of it, say(-2403) executes 2403 lines, etc. If I thought you said that the only the first line is executed, regardless of the value of say (as long it's negative), I wouldn't ask the same question again after that post. Was that a mistake? ???


Title: Re: Internal commands
Post by: avengah on October 16, 2012, 01:19:03 PM
Have you tried just say(-)? Or even say(-0)? Or even simply say(0)?
Title: Re: Internal commands
Post by: FIQ on October 16, 2012, 01:45:32 PM
Have you tried just say(-)? Or even say(-0)? Or even simply say(0)?
I never got it to work with other stuff than negative numbers, but I didn't test everything either :P
Title: Re: Internal commands
Post by: blue626 on October 18, 2012, 09:47:51 AM
I found a weird glitch:
gotoroom(x,y) acts differently in different ways of executing internal scripting! :o Consider methods A, B, and C.
Method A is this:

say(-1)
gotoroom(x,y)

Method B is this, which is not recommended to use:

say(-1)
text(1,0,0,4)
say
gotoroom(x,y)

Method C is the one mentioned in the 2nd post (or something similar...):

say(-1)
text(1,0,0,4)
say(5)
gotoroom(x,y)
endtext
endcutscene
untilbars
loadscript(stop)

Here's what happens when triggering the script with method A:

 :viridian: goes to position x,y and falls upwards... but his/her feet are pointing down! Before you can move a centered grey text box with either the last script triggered in a level outside the editor or a line with costumposition(center) (the last only happens and always happens if you trigger the script with method B first) appears. When he/she touches a ceiling his/her feet suddenly point upwards... and he/she can't flip! I'm sure this is a glitch!

When triggering the script with method B:

 :viridian: goes to position x,y, falls downwards and his/her feet are pointing down. Before you can move a centered grey text box with 4 lines of internal scripting appears. The 1st line was last line was a text command with weird values for x and y. When you can move and touch a floor, you can flip.

When triggering the script with method C:

 :viridian: goes to position x,y, falls downwards and his/her feet are pointing down. No text box appears, you can flip. In other words, it works well.

 :o ???

However, in methods A and C you can't move until ≈1/2 second later. I thought it was because of the sound, but changed say(-1) to reply(-1) (in method C) and it didn't change anything. I realized later that it's because of the cutscene bars... I'm thinking about endcutscene and untilbars...

After discovering that only method C works well, I tested the x value of gotoposition, seeing exactely where :viridian: went using backing. Here's how it works:

gotoroom(0,y) teleports :viridian: so that he's centered in the 2nd tile's column, counting from left to right. Raising 1 in the value will result in 1 pixel to the right. Ex: gotoposition(4,y) will teleport Viridian 4 pixels to the right of being centered on the 2nd tile's column (as well as to the defined y position). I don't know what value is the right edge nor if it's possible to use negative values to get o the far left, for example, since I only tested with x=0-5. I don't know how to test y with precision since :viridian: falls fast.
Title: Re: Internal commands
Post by: FIQ on October 19, 2012, 12:03:06 AM
I found a weird glitch:
gotoroom(x,y) acts differently in different ways of executing internal scripting! :o Consider methods A, B, and C.
Method A is this:

say(-1)
gotoroom(x,y)

Method B is this, which is not recommended to use:

say(-1)
text(1,0,0,4)
say
gotoroom(x,y)

Method C is the one mentioned in the 2nd post (or something similar...):

say(-1)
text(1,0,0,4)
say(5)
gotoroom(x,y)
endtext
endcutscene
untilbars
loadscript(stop)

Here's what happens when triggering the script with method A:

 :viridian: goes to position x,y and falls upwards... but his/her feet are pointing down! Before you can move a centered grey text box with either the last script triggered in a level outside the editor or a line with costumposition(center) (the last only happens and always happens if you trigger the script with method B first) appears. When he/she touches a ceiling his/her feet suddenly point upwards... and he/she can't flip! I'm sure this is a glitch!

When triggering the script with method B:

 :viridian: goes to position x,y, falls downwards and his/her feet are pointing down. Before you can move a centered grey text box with 4 lines of internal scripting appears. The 1st line was last line was a text command with weird values for x and y. When you can move and touch a floor, you can flip.

When triggering the script with method C:

 :viridian: goes to position x,y, falls downwards and his/her feet are pointing down. No text box appears, you can flip. In other words, it works well.

 :o ???

However, in methods A and C you can't move until ≈1/2 second later. I thought it was because of the sound, but changed say(-1) to reply(-1) (in method C) and it didn't change anything. I realized later that it's because of the cutscene bars... I'm thinking about endcutscene and untilbars...

After discovering that only method C works well, I tested the x value of gotoposition, seeing exactely where :viridian: went using backing. Here's how it works:

gotoroom(0,y) teleports :viridian: so that he's centered in the 2nd tile's column, counting from left to right. Raising 1 in the value will result in 1 pixel to the right. Ex: gotoposition(4,y) will teleport Viridian 4 pixels to the right of being centered on the 2nd tile's column (as well as to the defined y position). I don't know what value is the right edge nor if it's possible to use negative values to get o the far left, for example, since I only tested with x=0-5. I don't know how to test y with precision since :viridian: falls fast.
Remember that R (force respawn) freezes Viridian in place.
Title: Re: Internal commands
Post by: blue626 on October 19, 2012, 09:19:03 AM
I probably can't press R exactly at the same time :viridian: is teleported. I if could, then that would be precise enough.
EDIT: Wait, people probably only need precision in tiles (not pixels), as :viridian: falling for ≈3 pixels isn't a problem (I think?). So if I press R ≈0,1 sec. after :viridian: is teleported, then it woud be precise enough. Thanks!

Off-topic: It's better to erase the other part of the quote when you're just replying to part of the post. I've seen you quote the whole post when you're actually just replying to part of it several times. You should do this mainly when the post mentioned is large.
Title: Re: Internal commands
Post by: avengah on October 19, 2012, 05:34:07 PM
Don't forget the other way of executing internal commands; using say(12+). At least that way you don't need to keep putting extra say and text commands in. V2.1 only, of course, but I'm sure most of us are using that now.
Title: Re: Internal commands
Post by: N on October 19, 2012, 06:19:59 PM
I think this is the Number 1 Thread on the site!
Title: Re: Internal commands
Post by: FIQ on October 19, 2012, 06:21:48 PM
Don't forget the other way of executing internal commands; using say(12+). At least that way you don't need to keep putting extra say and text commands in. V2.1 only, of course, but I'm sure most of us are using that now.
How about Mac users? Are you just going to ignore them in case you do a level with internal commands?

Dav999 will be very happy when he hears about it ;)
Title: Re: Internal commands
Post by: RibShark on October 20, 2012, 02:36:52 AM
How about Mac users? Are you just going to ignore them in case you do a level with internal commands?

Dav999 will be very happy when he hears about it ;)

You ever heard of WINE (http://www.winehq.org/)? Well, VVVVVV 2.1 runs fine on it.
Title: Re: Internal commands
Post by: Dav999 on October 20, 2012, 03:23:56 AM
How about Mac users? Are you just going to ignore them in case you do a level with internal commands?

Dav999 will be very happy when he hears about it ;)

You ever heard of WINE (http://www.winehq.org/)? Well, VVVVVV 2.1 runs fine on it.

I know... I have Wine on my computer.
Title: Re: Internal commands
Post by: N on October 20, 2012, 05:46:10 AM
How about Mac users? Are you just going to ignore them in case you do a level with internal commands?

Dav999 will be very happy when he hears about it ;)

You ever heard of WINE (http://www.winehq.org/)? Well, VVVVVV 2.1 runs fine on it.

I know... I have Wine on my computer.

That is the best program name ever
Title: Re: Internal commands
Post by: allison on October 20, 2012, 07:43:12 AM
How about Mac users? Are you just going to ignore them in case you do a level with internal commands?

Dav999 will be very happy when he hears about it ;)

You ever heard of WINE (http://www.winehq.org/)? Well, VVVVVV 2.1 runs fine on it.

So, WINE supports converting Windows patches into Mac ones? Or is there some other way to run VVVVVV 2.1 without the 2.0 or whatever .exe or .app?
Title: Re: Internal commands
Post by: Dav999 on October 20, 2012, 10:01:46 AM
How about Mac users? Are you just going to ignore them in case you do a level with internal commands?

Dav999 will be very happy when he hears about it ;)

You ever heard of WINE (http://www.winehq.org/)? Well, VVVVVV 2.1 runs fine on it.

So, WINE supports converting Windows patches into Mac ones? Or is there some other way to run VVVVVV 2.1 without the 2.0 or whatever .exe or .app?

No, it runs Windows programs, so it runs the .exe. It doesn't convert it into a .app, or to a patch of a .app.
Title: Re: Internal commands
Post by: FIQ on October 20, 2012, 03:05:59 PM
How about Mac users? Are you just going to ignore them in case you do a level with internal commands?

Dav999 will be very happy when he hears about it ;)

You ever heard of WINE (http://www.winehq.org/)? Well, VVVVVV 2.1 runs fine on it.
I use Wine myself (on Linux) and told Dav999 about it. He didn't want to use it to run vvvvvv2.1, and it would feel very wrong to do personally just to get some extra features..
Title: Re: Internal commands
Post by: allison on October 20, 2012, 07:48:26 PM
How about Mac users? Are you just going to ignore them in case you do a level with internal commands?

Dav999 will be very happy when he hears about it ;)

You ever heard of WINE (http://www.winehq.org/)? Well, VVVVVV 2.1 runs fine on it.

So, WINE supports converting Windows patches into Mac ones? Or is there some other way to run VVVVVV 2.1 without the 2.0 or whatever .exe or .app?

No, it runs Windows programs, so it runs the .exe. It doesn't convert it into a .app, or to a patch of a .app.

My point is, unless I'm missing something big, the 2.1 update is a patch that won't run by itself, so I would need some way to run it, as there is (as many have complained about, including me) no Mac patch.
Title: Re: Internal commands
Post by: RibShark on October 21, 2012, 01:15:40 AM
My point is, unless I'm missing something big, the 2.1 update is a patch that won't run by itself, so I would need some way to run it, as there is (as many have complained about, including me) no Mac patch.

1) Install Wine
2) Install VVVVVV 2.0 using Wine.
3) Find the directory Wine places the C:\ drive (I don't know where it is on a mac).
4) Place the patch files in that directory.
5) ...
6) Profit!
Title: Re: Internal commands
Post by: allison on October 21, 2012, 07:17:19 AM
My point is, unless I'm missing something big, the 2.1 update is a patch that won't run by itself, so I would need some way to run it, as there is (as many have complained about, including me) no Mac patch.

1) Install Wine
2) Install VVVVVV 2.0 using Wine.
3) Find the directory Wine places the C:\ drive (I don't know where it is on a mac).
4) Place the patch files in that directory.
5) ...
6) Profit!

Oops I should have been more clear. It seems that I would have to re-buy VVVVVV to get 2.0...

Hmm...  :verdigris:
Title: Re: Internal commands
Post by: FIQ on October 21, 2012, 07:44:24 AM
My point is, unless I'm missing something big, the 2.1 update is a patch that won't run by itself, so I would need some way to run it, as there is (as many have complained about, including me) no Mac patch.

1) Install Wine
2) Install VVVVVV 2.0 using Wine.
3) Find the directory Wine places the C:\ drive (I don't know where it is on a mac).
4) Place the patch files in that directory.
5) ...
6) Profit!

Oops I should have been more clear. It seems that I would have to re-buy VVVVVV to get 2.0...

Hmm...  :verdigris:
Where did you buy it?

If you don't have access to the Windows build, Terry is probably happy to help.

The "patch" is just an .exe, replace the VVVVVV 2.0 .exe that you get and you have 2.1 installed.
Title: Re: Internal commands
Post by: allison on October 21, 2012, 05:09:55 PM
My point is, unless I'm missing something big, the 2.1 update is a patch that won't run by itself, so I would need some way to run it, as there is (as many have complained about, including me) no Mac patch.

1) Install Wine
2) Install VVVVVV 2.0 using Wine.
3) Find the directory Wine places the C:\ drive (I don't know where it is on a mac).
4) Place the patch files in that directory.
5) ...
6) Profit!

Oops I should have been more clear. It seems that I would have to re-buy VVVVVV to get 2.0...

Hmm...  :verdigris:
Where did you buy it?

If you don't have access to the Windows build, Terry is probably happy to help.

The "patch" is just an .exe, replace the VVVVVV 2.0 .exe that you get and you have 2.1 installed.

So wait, the solution has been under my nose the whole time and I can just download the 2.1 .exe and run it under Wine?  :-[
Title: Re: Internal commands
Post by: FIQ on October 21, 2012, 05:39:41 PM
My point is, unless I'm missing something big, the 2.1 update is a patch that won't run by itself, so I would need some way to run it, as there is (as many have complained about, including me) no Mac patch.

1) Install Wine
2) Install VVVVVV 2.0 using Wine.
3) Find the directory Wine places the C:\ drive (I don't know where it is on a mac).
4) Place the patch files in that directory.
5) ...
6) Profit!

Oops I should have been more clear. It seems that I would have to re-buy VVVVVV to get 2.0...

Hmm...  :verdigris:
Where did you buy it?

If you don't have access to the Windows build, Terry is probably happy to help.

The "patch" is just an .exe, replace the VVVVVV 2.0 .exe that you get and you have 2.1 installed.

So wait, the solution has been under my nose the whole time and I can just download the 2.1 .exe and run it under Wine?  :-[
As long as you have a 2.0 windows install.
Title: Re: Internal commands
Post by: allison on October 23, 2012, 05:33:34 AM
My point is, unless I'm missing something big, the 2.1 update is a patch that won't run by itself, so I would need some way to run it, as there is (as many have complained about, including me) no Mac patch.

1) Install Wine
2) Install VVVVVV 2.0 using Wine.
3) Find the directory Wine places the C:\ drive (I don't know where it is on a mac).
4) Place the patch files in that directory.
5) ...
6) Profit!

Oops I should have been more clear. It seems that I would have to re-buy VVVVVV to get 2.0...

Hmm...  :verdigris:
Where did you buy it?

If you don't have access to the Windows build, Terry is probably happy to help.

The "patch" is just an .exe, replace the VVVVVV 2.0 .exe that you get and you have 2.1 installed.

So wait, the solution has been under my nose the whole time and I can just download the 2.1 .exe and run it under Wine?  :-[
As long as you have a 2.0 windows install.

And so, we have my problem. I only have the Mac install, not the Windows install.
Title: Re: Internal commands
Post by: FIQ on October 23, 2012, 08:22:51 AM
My point is, unless I'm missing something big, the 2.1 update is a patch that won't run by itself, so I would need some way to run it, as there is (as many have complained about, including me) no Mac patch.

1) Install Wine
2) Install VVVVVV 2.0 using Wine.
3) Find the directory Wine places the C:\ drive (I don't know where it is on a mac).
4) Place the patch files in that directory.
5) ...
6) Profit!

Oops I should have been more clear. It seems that I would have to re-buy VVVVVV to get 2.0...

Hmm...  :verdigris:
Where did you buy it?

If you don't have access to the Windows build, Terry is probably happy to help.

The "patch" is just an .exe, replace the VVVVVV 2.0 .exe that you get and you have 2.1 installed.

So wait, the solution has been under my nose the whole time and I can just download the 2.1 .exe and run it under Wine?  :-[
As long as you have a 2.0 windows install.

And so, we have my problem. I only have the Mac install, not the Windows install.
You can do it with a Mac install too, as you have the data directory (the only unavailable thing here).

VVVVVV need some libraries to work, all publicly accessible on the web (the data files however aren't, obviously).

You should need these:
Code: [Select]
[632][fiq@fiq /win_drive/Program_x86/Steam/steamapps/common/vvvvvv]$ ls
data/          libpng12-0.dll*   libvorbisfile-3.dll*  readme.txt*  SDL_image.dll*  stdout.txt*  zlib1.dll*
libogg-0.dll*  libvorbis-0.dll*  mikmod.dll*           SDL.dll*     SDL_mixer.dll*  VVVVVV.exe*

Create a directory, name it whatever you want, "vvvvvv" or something.
Copy (or move, if you want to get rid of your mac install - not recommended...) your data directory inside the newly created folder like this: vvvvvv/data

Download the DLL files in the list above, should be easy to find by googling on them.

Place the VVVVVV 2.1 .exe in the folder

Run the game.

EDIT: The Windows version of VVVVVV is only available in 32-bit IIRC. Therefore, make sure you have the 32-bit version of the libraries.

Windows version of VVVVVV store levels and saves in the user's "my documents" folder like this:
<My Documents>/VVVVVV/(levelname)
<My Documents>/VVVVVV/Saves/(levelname/tsave/qsave/unlock).vvv

So if you want to move your levels and saves, place them in this format. In linux, they're stored the "opposite" way, a .vvvvvv directory with saves, and a directory inside named "levels" where the levels go. I don't know how they're stored in Mac, but make sure that you swap directory structure if necessary.

You might also run into an issue regarding a white screen when VVVVVV start up (screen is white, but game is responsive). If you stumble upon this, refer to the topic in the "Tech Support" forum for my solution.

If you find this way too complicated, just mail Terry and he'll help you for sure (if you have bought the game, obviously :P)
Title: Re: Internal commands
Post by: Dav999 on October 23, 2012, 09:04:37 AM
Uuhm... Isn't that a handy post for pirates? :o
Title: Re: Internal commands
Post by: FIQ on October 23, 2012, 02:05:43 PM
Uuhm... Isn't that a handy post for pirates? :o
Not at all.
The only thing they have to do really is to download the datafiles. Heck, the Pandora version of VVVVVV ships with game binaries AND libs, and asks for the same -- the data directory.

If Terry feels different, feel free to delete my post.


Anyway...

If you play around with scripts and especially iftrinkets(0,script), and it somehow makes the script not run AT ALL -- please note this:

Code: [Select]
Name: script
iftrinkets(0,do0)

Name: do0
ifflag(1,do1)
ifflag(2,do2)
iftrinkets(0,do3)

Name: do1
say
1

Name: do2
say
2

Name: do3
say
3

will do *NOTHING*. Not the expected -- output 3 (assuming flag 1 isn't set and flag 2 isn't set.

This can be worked around (for some weird reason) by modifying do0 into this:

Code: [Select]
Name: do0
ifflag(1,do1)
ifflag(2,do2)
iftrinkets(0,do3)
ifflag(work,around)

(What ifflag() contains is irrelevant, it will never trigger, but will for some reason "fix" the bug. Any ideas why?)
Title: Re: Internal commands
Post by: Dav999 on October 23, 2012, 02:13:07 PM
Oh, I also got that problem with redirecting to other scripts, when they were too long. iftrinkets(0,script) didn't work when it was at the end, and after a long time, I fixed it by placing a say command after that, saying an error has occurred (only if it won't redirect for some reason)

Oh, and I don't think you -need- readme.txt :P
Title: Re: Internal commands
Post by: FIQ on October 24, 2012, 06:33:01 AM
Oh, I also got that problem with redirecting to other scripts, when they were too long. iftrinkets(0,script) didn't work when it was at the end, and after a long time, I fixed it by placing a say command after that, saying an error has occurred (only if it won't redirect for some reason)

Oh, and I don't think you -need- readme.txt :P
I said download the .dll files specified, I didn't even mention the text files. :P
Title: Re: Internal commands
Post by: Dav999 on October 24, 2012, 06:56:13 AM
You should need these:
Code: [Select]
[632][fiq@fiq /win_drive/Program_x86/Steam/steamapps/common/vvvvvv]$ ls
data/          libpng12-0.dll*   libvorbisfile-3.dll*  readme.txt*  SDL_image.dll*  stdout.txt*  zlib1.dll*
libogg-0.dll*  libvorbis-0.dll*  mikmod.dll*           SDL.dll*     SDL_mixer.dll*  VVVVVV.exe*

readme.txt*.
Title: Re: Internal commands
Post by: ToasterApocalypse on November 01, 2012, 10:07:08 AM
Err... Ok. I still check this thread for commands and stuff. I think we've discussed all of them.

Lets discuss changetile again.
Title: Re: Internal commands
Post by: blue626 on November 02, 2012, 11:00:32 AM
There's no reason to discuss the same thing twice... unless you give more info. Let's discuss gotoposition, as I've been testing that.

VVVVVV's "screen" is 320x240, counting the amplified pixels (because the default is running with 2x resolution). With what I described before andn the fact that :viridian: is 10 pixels wide, you can calculate the values for x for teleeporting :viridian: to the right or left edge of the screen (both showing all of :viridian:). x=-7 for left edge and x=303 for right edge. Higher/lower values either show part of  :viridian: on the edge of the screen, or teleport :viridian: to the screen to the right/left. That's right. ;) However, if the screen has horizontal warping or the level has only 1 column, then :viridian: will always be teleported to the same screen. Example: gotoposition(320,y) will teleport :viridian: to the left edge of the screen while gotoposition(-20,y) will teleport :viridian: to the right edge of the screen.
This doesn't work with warp lines. In fact, there's a glitch related to it and the warp line glitch (if don't want to read about it, skip to the bold text below). Create a level with 1 line of rooms and more than 1 room. Put warp lines on the right side of the room in which the command is triggered. Do not put warp line on the room to the left. Create a script with the necessary commands and the main command, which is gotoposition(-10,0). :viridian: Will stay in the same room, appearing on the left only showing part of his body. When he touches the lower edge of the screen, he will appear (on the top) on the right edge of the room to the left, showing only part of his body.
This means you don't need the gotoroom command, unless you think that counting the distance in rooms b between the 2 rooms, multiplying it by 320 and add or subtract something to set :viridian:'s position in the room is too hard.

I still haven't tested y and z (don't forget about z, which makes :viridian: flipped or not, according to Toaster).

EDIT: Oh, and is it a good idea to talk about int. scr. in the wiki? Of course I'll mention that it's a glitch and it's use wasn't intended.
Title: Re: Internal commands
Post by: ToasterApocalypse on November 06, 2012, 11:12:22 AM
:verdigris: REQUESTING HELP   :verdigris:

Here's a script I've got.

Code: [Select]
say(4)
fadeout
delay(30)
gotoroom(3,0)
text(1,0,0,4)
say(2)
delay(10)
text(1,0,0,4)
say(5)
createcrewman(250,100,yellow,0,faceleft)
gotoposition(175,100)
delay(10)
walk(right,1)
text(1,0,0,4)
say(3)
delay(20)
fadein
text(1,0,0,4)

INTENDED:
Screen fades out
Go to room 4,1 (Looks like Violet's room)
Vitellary created where Viridian stands at the start
Viridian on the floor at 175,100
Viridian faces vitellary
Screen fades in

WHAT HAPPENS:
Screen fades out
Go to room 4,1 (Looks like Violet's room)
Vitellary created where Viridian stands at the start
Viridian on the CEILING at 175,100, cannot flip.
Viridian faces vitellary
Screen fades in



What's happening?
Title: Re: Internal commands
Post by: Hilbert on November 06, 2012, 12:41:02 PM
If you were flipped when the script starts, then there you go!
Title: Re: Internal commands
Post by: blue626 on November 06, 2012, 12:43:52 PM
Try to rise the ceiling to see if :viridian: looks like he/she's falling down instead of up when he/she's falling up. If it really does do that. Then it's the same glitch as this:

I found a weird glitch:
gotoroom(x,y) acts differently in different ways of executing internal scripting! :o Consider methods A, B, and C.
Method A is this:

say(-1)
gotoroom(x,y)

(other text)

Here's what happens when triggering the script with method A:

 :viridian: goes to position x,y and falls upwards... but his/her feet are pointing down! Before you can move a centered grey text box with either the last script triggered in a level outside the editor or a line with costumposition(center) (the last only happens and always happens if you trigger the script with method B first) appears. When he/she touches a ceiling his/her feet suddenly point upwards... and he/she can't flip! I'm sure this is a glitch!

When I tested with the right method it worked fine! ???

I found a weird glitch:
gotoroom(x,y) acts differently in different ways of executing internal scripting! :o Consider methods A, B, and C.

(other text)

Method C is the one mentioned in the 2nd post (or something similar...):

say(-1)
text(1,0,0,4)
say(5)
gotoroom(x,y)
endtext
endcutscene
untilbars
loadscript(stop)

(other text)

When triggering the script with method C:

 :viridian: goes to position x,y, falls downwards and his/her feet are pointing down. No text box appears, you can flip. In other words, it works well.

Maybe it's related to the fact that it isn't the 1st command in your script? I don't know.

New reply?!
Maybe Roskilla is right, but try to do what I said. If the glitch doesn't happen and you trigger the script while you're flipped, then Roskilla is right. Use the z value to put :viridian: on the ground.
Title: Re: Internal commands
Post by: Dav999 on November 06, 2012, 01:04:17 PM
Try gotoposition(175,100,0).
Title: Re: Internal commands
Post by: FIQ on November 06, 2012, 01:09:15 PM
gotoposition() occasionally doesn't work properly unless it's right after a gotoroom() command. At least that's my experience of using it.
Title: Re: Internal commands
Post by: blue626 on November 09, 2012, 10:59:04 AM
gotoposition() occasionally doesn't work properly unless it's right after a gotoroom() command. At least that's my experience of using it.

At my experience it does work. That's how I've been testing it! Look at my last posts here.
Title: Re: Internal commands
Post by: Dav999 on November 09, 2012, 12:30:17 PM
I finally wanted to check what the second argument in playef(x,x) does. Apparently it doesn't do anything. If it doesn't do anything, then why is it used everywhere in the main game (it's 10 everywhere)? ???
Title: Re: Internal commands
Post by: ToasterApocalypse on November 09, 2012, 02:44:53 PM
Try gotoposition(175,100,0).

That fixed it. Thanks!  :viridian:
Title: Re: Internal commands
Post by: FIQ on November 09, 2012, 04:45:52 PM
Just a FYI -- if you ever need to emulate untilbars() in simplified commands, the delay from full cutscenebars to empty (or vice versa) is ~13 ticks. So delay(13) does the trick.
Title: Re: Internal commands
Post by: FIQ on November 09, 2012, 04:56:53 PM
Dav999, can you please edit this list into the first post (and fix any mistakes in case I did some. Probably remove 15 from the list too, as 2.1 final seems to not get released at all)

Internal playlist
0 - Path Complete
1 - Pushing Onwards
2 - Positive Force
3 - Potential For Anything
4 - Passion For Exploring
5 - Pause
6 - Presenting VVVVVV
7 - Plenary
8 - Predestined Fate
9 - ecroF evitisoP
10 - Popular Potpurri
11 - Pipe Dream
12 - Pressure Cooker
13 - Paced Energy
14 - Piercing The Sky
(15 - Predestined Fate Remixed)
Title: Re: Internal commands
Post by: Dav999 on November 10, 2012, 12:08:57 AM
Dav999, can you please edit this list into the first post (and fix any mistakes in case I did some. Probably remove 15 from the list too, as 2.1 final seems to not get released at all)

Done. :) There are a few more lists, I think, but some of them are too long. Why doesn't the forum have spoiler tags which you can expand and shrink?
Title: Re: Internal commands
Post by: allison on November 10, 2012, 06:41:30 AM
Dav999, can you please edit this list into the first post (and fix any mistakes in case I did some. Probably remove 15 from the list too, as 2.1 final seems to not get released at all)

Done. :) There are a few more lists, I think, but some of them are too long. Why doesn't the forum have spoiler tags which you can expand and shrink?

Code blocks never go above a certain length; if they go beyond the length, this happens:

Code: [Select]
vvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvVvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvVvv

If it gets to long, there's a mini scroll bar.
Title: Re: Internal commands
Post by: ToasterApocalypse on November 13, 2012, 11:06:20 AM
Lets talk about tilecol, platv and everything else found in the level file that you can't edit in VVVVVV.

Ok guys?

I'll start: List all the tilesets you can't get without Direct Mode, like tilecol=6 with warpzone tileset.
Title: Re: Internal commands
Post by: blue626 on November 13, 2012, 11:31:59 AM
Lets talk about tilecol, platv and everything else found in the level file that you can't edit in VVVVVV.

Ok guys?

I'll start: List all the tilesets you can't get without Direct Mode, like tilecol=6 with warpzone tileset.

That isn't internal scripting, is it? Create a new thread for it... or use this (http://distractionware.com/forum/index.php?topic=1233.0) thread.

I don't know if this is the right place for this or not, but FIQ discovered that the number of trinkets collected is a 32-bit number and it wraps around back to 0 after giving a trinket while having 232-1=1111...1111 (32 1's) in binary. This means that having -1 trinkets (you can set that by editing the .vvvvvv file) is the same as having 232-1 trinkets! That makes the word "lots" make more sense, but the wrapping is weird.
Title: Re: Internal commands
Post by: ToasterApocalypse on November 13, 2012, 12:47:13 PM
Lets talk about tilecol, platv and everything else found in the level file that you can't edit in VVVVVV.

Ok guys?

I'll start: List all the tilesets you can't get without Direct Mode, like tilecol=6 with warpzone tileset.

That isn't internal scripting, is it? Create a new thread for it... or use this (http://distractionware.com/forum/index.php?topic=1233.0) thread.

I don't know if this is the right place for this or not, but FIQ discovered that the number of trinkets collected is a 32-bit number and it wraps around back to 0 after giving a trinket while having 232-1=1111...1111 (32 1's) in binary. This means that having -1 trinkets (you can set that by editing the .vvvvvv file) is the same as having 232-1 trinkets! That makes the word "lots" make more sense, but the wrapping is weird.

Ok, I'll do that.

 :verdigris: MORE HELP REQUESTED  :verdigris:

I have these scripts.

Code: [Select]
ifflag(33,IDY)
ifflag(34,IDN)

IDN:
Code: [Select]
say(-1)
text(1,0,0,4)
[ INTERNAL GIBBERISH ]

And there is no IDY at the moment.

What's supposed to happen is:
I enter the room (flag34 on beforehand)
Activate script 1.
Script 1 activates IDN.
Internal stuff plays.

WHAT ACTUALLY HAPPENS:
I enter the room (flag34 beforehand)
Activate script 1.
NO dialogue, just cutscene bars.
Viridian can move.

WHAT DO I DO

EDIT: I think I know.

I think it's because of the capitals.
Title: Re: Internal commands
Post by: Dav999 on November 13, 2012, 01:12:30 PM
Yes, using capital letters is the problem. (if you knew that, why did you post it here? ???)

EDIT: Oh, now I see, that was an edit. ::)
Title: Re: Internal commands
Post by: ToasterApocalypse on November 13, 2012, 01:14:22 PM
Yes, using capital letters is the problem. (if you knew that, why did you post it here? ???)

Because I figured it out after it was posted. It was +1 post for me! I can't delete my own post!

oh and
I'm getting near my 500th aren't I

OT: The reason I'm posting this stuff is for a reason. Here's a hint: 2
Title: Re: Internal commands
Post by: Dav999 on November 13, 2012, 01:16:46 PM
That was four seconds after I saved my edit! :o
Title: Re: Internal commands
Post by: Pyrite on November 13, 2012, 01:17:13 PM
Dav why are you posting. Stop. This thread has 26 pages.
Title: Re: Internal commands
Post by: Dav999 on November 13, 2012, 01:29:08 PM
Dav why are you posting. Stop. This thread has 26 pages.

I'm not the only one posting here. And it's not like somebody will have to carry this topic in the form of a heavy book, with one post on each page. :D
Title: Re: Internal commands
Post by: ToasterApocalypse on November 13, 2012, 01:43:47 PM
Dav why are you posting. Stop. This thread has 26 pages.

I'm not the only one posting here. And it's not like somebody will have to carry this topic in the form of a heavy book, with one post on each page. :D

SORRY DAV I COULDN'T HEAR YOU

I WAS JUST CARRYING THIS BIG BOOK OF INTERNAL COMMANDS. IT HAS LIKE 300 PAGES.
Title: Re: Internal commands
Post by: allison on November 13, 2012, 03:14:39 PM
I think it would be more convenient if the lists (play commands, gamestates, entities, etc.) were in the first post so that people can find them.
Title: Re: Internal commands
Post by: Dav999 on November 15, 2012, 11:08:04 AM
I wanted to use moveplayer(x,y), but it doesn't seem to work when I use A)Say :( A level I want to make really depends on it working that way, I just can't do it in the say(-1) way. :victoria:
Title: Re: Internal commands
Post by: ToasterApocalypse on November 15, 2012, 12:37:45 PM
I wanted to use moveplayer(x,y), but it doesn't seem to work when I use A)Say :( A level I want to make really depends on it working that way, I just can't do it in the say(-1) way. :victoria:

Use walk(x,y) I always do.
Title: Re: Internal commands
Post by: blue626 on November 15, 2012, 12:54:43 PM
I wanted to use moveplayer(x,y), but it doesn't seem to work when I use A)Say :( A level I want to make really depends on it working that way, I just can't do it in the say(-1) way. :victoria:

Use walk(x,y) I always do.

In case you don't know, walk makes :viridian: walk a certain amount of pixels while move teleports :viridian: a certain amount of pixels relative to its position. It's different.
Title: Re: Internal commands
Post by: ToasterApocalypse on November 15, 2012, 12:59:08 PM
I wanted to use moveplayer(x,y), but it doesn't seem to work when I use A)Say :( A level I want to make really depends on it working that way, I just can't do it in the say(-1) way. :victoria:

Use walk(x,y) I always do.

In case you don't know, walk makes :viridian: walk a certain amount of pixels while move teleports :viridian: a certain amount of pixels relative to its position. It's different.

Oh. I thought it was the same thing.
Title: Re: Internal commands
Post by: FIQ on November 15, 2012, 02:25:07 PM
I wanted to use moveplayer(x,y), but it doesn't seem to work when I use A)Say :( A level I want to make really depends on it working that way, I just can't do it in the say(-1) way. :victoria:
Sounds really odd. I'm speechless to be honest, but I knew there was a possibility of something like this as the fact that the weird method of doing internal scripting works at all is odd. I can try to look how moveplayer() really works (internally) for any clue, but have you considered using gotoposition() instead?
Title: Re: Internal commands
Post by: ToasterApocalypse on November 15, 2012, 02:27:42 PM
I wanted to use moveplayer(x,y), but it doesn't seem to work when I use A)Say :( A level I want to make really depends on it working that way, I just can't do it in the say(-1) way. :victoria:
Sounds really odd. I'm speechless to be honest, but I knew there was a possibility of something like this as the fact that the weird method of doing internal scripting works at all is odd. I can try to look how moveplayer() really works (internally) for any clue, but have you considered using gotoposition() instead?

Quote from: FIQ
gotoposition() occasionally doesn't work properly unless it's right after a gotoroom() command.

  ???
Title: Re: Internal commands
Post by: FIQ on November 15, 2012, 02:30:46 PM
I wanted to use moveplayer(x,y), but it doesn't seem to work when I use A)Say :( A level I want to make really depends on it working that way, I just can't do it in the say(-1) way. :victoria:
Sounds really odd. I'm speechless to be honest, but I knew there was a possibility of something like this as the fact that the weird method of doing internal scripting works at all is odd. I can try to look how moveplayer() really works (internally) for any clue, but have you considered using gotoposition() instead?

Quote from: FIQ
gotoposition() occasionally doesn't work properly unless it's right after a gotoroom() command.

  ???
Unless you use the third parameter. Dav999 told this but I was slow to realize :p
Title: Re: Internal commands
Post by: Dav999 on November 15, 2012, 03:05:06 PM
I wanted to use moveplayer(x,y), but it doesn't seem to work when I use A)Say :( A level I want to make really depends on it working that way, I just can't do it in the say(-1) way. :victoria:
Sounds really odd. I'm speechless to be honest, but I knew there was a possibility of something like this as the fact that the weird method of doing internal scripting works at all is odd. I can try to look how moveplayer() really works (internally) for any clue, but have you considered using gotoposition() instead?

I can't do that, I really need to move :viridian: relative to his current position, I can't just fill every single room with an awful lot of scripts (separate scripts for each possible combination of x-coordinates and y-coordinates. In nearly 400 rooms.)

I'm trying to make a tower level, and I figured it would work if I teleport :viridian: 320 pixels to the right and some pixels down to go to the next room each time, where the walls are always lowered one block. If I do that, I don't need many scripts (I can just reuse the script in every room, and another script for moving to the next row). Gotoroom isn't an option, because :viridian: would get stuck in walls, and even if I used gotoposition, I would still need separate scripts for each combination of x-coordinates and y-coordinates, in nearly 400 rooms, and it would lag as hell. It already lags if I use the traditional say(-1) method, so I really need to do it the A)Say way.
Title: Re: Internal commands
Post by: blue626 on November 16, 2012, 10:32:26 AM
I've been testing using methods A and C mentioned earlier (http://distractionware.com/forum/index.php?topic=1089.msg11113#msg11113) and also the new method, though I first tested without delay(0) (I forgot about it). I also tested move player to see if it had similar glitches to gotoposition.

I used move player(10,0) with method A.
Result: A grey centered text box with "costumposition..." appeared. I forgot to check if it worked or not. :-X Why did the text box appear?

I used it with method C
Result: It worked normally, no text box, :viridian: was teleported to the right (probably 10 pixels).

I wrote this:

script1:
iftrinkets(0,script1a)

script1a:
A)Say
gotoposition(0,0)
(empty line)

Result: The glitch that happened when I used gotoposition with method A happened. I noticed that when :viridian: touches a vertical grav. line, neither his/her image nor the gravity direction doesn't change and when he/she touches the 2nd time, his/her behavior turns back to normal (his/her feet pointing down when gravity is down and vice-versa and he/she can flip).

I wrote this:

script1:
iftrinkets(0,script1a)

script1a:
A)Say
moveplayer(10,0)
(empty line)

Result: Nothing happened!

I later wrote delay(0) in the line before A)Say and tested both of the previous 2 scripts. They both worked the same as without delay(0)!


FIQ, why did you try "A)Say" instead of (for example) "ASay"?

I wrote this:

script1:
iftrinkets(0,script1a)

script1a:
delay(0)
ASay
changeplayercolour(red)
(empty line)

Result: Worked normally, :viridian: turned into :vermillion: immediately and it could move, flip, etc. (though I didn't test dying, he should turn back to :viridian: then).

I replaced changeplayercolour(red) with play(13)

Result: It worked normally. Pacing Energy started playing immediately.

I replaced ASay with A)Say and then tested both of the previous 2 scripts.

Result: They both worked the same way as with ASay.

So, "ASay" works fine.
Title: Re: Internal commands
Post by: FIQ on November 16, 2012, 01:26:46 PM
So basically the ")" is useless and the only thing needed here is something before "Say"? Interesting! Does "Say" work too without anything before it or doesn't it? (Can't try it by myself atm)
Title: Re: Internal commands
Post by: ToasterApocalypse on November 19, 2012, 07:52:11 AM
Try this.

say(-1,crewmatename)

Hides the terminal sound and squeaks a crewmate. I didn't really know I could until recently. Pretty good if text is the first command.
Title: Re: Internal commands
Post by: Dav999 on November 19, 2012, 10:00:37 AM
Try this.

say(-1,crewmatename)

Hides the terminal sound and squeaks a crewmate. I didn't really know I could until recently. Pretty good if text is the first command.

Yeah, but that's 2.1 only.
Title: Re: Internal commands
Post by: ToasterApocalypse on November 19, 2012, 10:32:58 AM
Try this.

say(-1,crewmatename)

Hides the terminal sound and squeaks a crewmate. I didn't really know I could until recently. Pretty good if text is the first command.

Yeah, but that's 2.1 only.

It still activates the internal scripting code, right?
Title: Re: Internal commands
Post by: Dav999 on November 19, 2012, 10:44:12 AM
Try this.

say(-1,crewmatename)

Hides the terminal sound and squeaks a crewmate. I didn't really know I could until recently. Pretty good if text is the first command.

Yeah, but that's 2.1 only.

It still activates the internal scripting code, right?

Yes, I thought so. But 2.0 users will still hear a terminal.
Title: Re: Internal commands
Post by: ToasterApocalypse on November 19, 2012, 11:04:20 AM
Try this.

say(-1,crewmatename)

Hides the terminal sound and squeaks a crewmate. I didn't really know I could until recently. Pretty good if text is the first command.

Yeah, but that's 2.1 only.

It still activates the internal scripting code, right?

Yes, I thought so. But 2.0 users will still hear a terminal.

Ok, that's good.
Title: Re: Internal commands
Post by: blue626 on November 20, 2012, 11:44:35 AM
I wanted to use moveplayer(x,y), but it doesn't seem to work when I use A)Say :( A level I want to make really depends on it working that way, I just can't do it in the say(-1) way. :victoria:
Sounds really odd. I'm speechless to be honest, but I knew there was a possibility of something like this as the fact that the weird method of doing internal scripting works at all is odd. I can try to look how moveplayer() really works (internally) for any clue, but have you considered using gotoposition() instead?

Quote from: FIQ
gotoposition() occasionally doesn't work properly unless it's right after a gotoroom() command.

  ???
Unless you use the third parameter. Dav999 told this but I was slow to realize :p

 ??? When I tested it (tests mentioned in reply 334 (http://distractionware.com/forum/index.php?topic=1089.330)) without the 3rd parameter it worked fine (referring to method C)!

EDIT: When I triggered the script :viridian: wasn't flipped and after being teleported he/she wasn't flipped. I didn't try triggering the script when flipped, though.
Title: Re: Internal commands
Post by: ToasterApocalypse on November 20, 2012, 01:31:50 PM
I wanted to use moveplayer(x,y), but it doesn't seem to work when I use A)Say :( A level I want to make really depends on it working that way, I just can't do it in the say(-1) way. :victoria:
Sounds really odd. I'm speechless to be honest, but I knew there was a possibility of something like this as the fact that the weird method of doing internal scripting works at all is odd. I can try to look how moveplayer() really works (internally) for any clue, but have you considered using gotoposition() instead?

Quote from: FIQ
gotoposition() occasionally doesn't work properly unless it's right after a gotoroom() command.

  ???
Unless you use the third parameter. Dav999 told this but I was slow to realize :p

 ??? When I tested it (tests mentioned in reply 334 (http://distractionware.com/forum/index.php?topic=1089.330)) without the 3rd parameter it worked fine (referring to method C)!

EDIT: When I triggered the script :viridian: wasn't flipped and after being teleported he/she wasn't flipped. I didn't try triggering the script when flipped, though.

So, if gotoposition works I can make portals?

If I can...


AWWWWWWWWWWWWWWWWWWYEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
Title: Re: Internal commands
Post by: Dav999 on November 20, 2012, 01:43:19 PM
I'd actually recommend to use the internal commands the way they were meant to work, that means using the third argument too. I've never really had any problem with gotoposition(x,x), but in the scripts of the main game, the third argument is always used. Same with playef(x,10). I still haven't figured out what the second argument is for. :-\
Title: Re: Internal commands
Post by: FIQ on November 20, 2012, 01:58:30 PM
I'd actually recommend to use the internal commands the way they were meant to work, that means using the third argument too. I've never really had any problem with gotoposition(x,x), but in the scripts of the main game, the third argument is always used. Same with playef(x,10). I still haven't figured out what the second argument is for. :-\
Ask Terry and hope he answers. :p

Toaster: gotoposition() w/o 3rd parameter behaves incorrectly in some cases.
Title: Re: Internal commands
Post by: ToasterApocalypse on November 21, 2012, 07:02:58 AM
I got bored and destroyed my telesave by creating a teleporter at co-ordinates: (10,20)
I got stuck in a wall at the end of the tower  :viridian:

Toaster: gotoposition() w/o 3rd parameter behaves incorrectly in some cases.

But with the third parameter? Does it work then?
Title: Re: Internal commands
Post by: FIQ on November 21, 2012, 07:39:23 AM
I got bored and destroyed my telesave by creating a teleporter at co-ordinates: (10,20)
I got stuck in a wall at the end of the tower  :viridian:

Toaster: gotoposition() w/o 3rd parameter behaves incorrectly in some cases.

But with the third parameter? Does it work then?
It should behave correctly then.
Title: Re: Internal commands
Post by: FIQ on November 21, 2012, 07:59:22 AM
I played around to find a way to get the information of what the parser translate strings too, to confirm the list I gave earlier. Basically, what I did was the "opposite" way of doing an internal script -- instead of tricking the parser that I'm going to say something and allow execution of code in say(), I instead tricked the parser that the following simplified script will be executed while in fact being part of a say command

The code looks like this:

say(-1)
text(1,0,0,N+5)
(Simplified command to test)
say(5)
speak_active
endtext
endcutscene
untilbars
loadscript(stop)

N here is the amount of lines the translated string from simplified to internal scripting. flash, for example, is 3 lines (flash(5)|shake(20)|playef(9,10)), and thus N should be 3, and 3+5 is 8, so the line should be text(1,0,0,8).
Do note that you cannot test say() and reply() properly as the commands work with lines below. Also, I bet squeak(on|off) can't be tested also, as that's functionality that doesn't exist internally, but is executed from the parser itself.

This can be used to see what the parser does when it get bogus stuff (it *should* ignore it, but obviously doesn't always do it -- the internal-scripting-without-cutscenes method shows this).

This shows, for example, that the 2.1 squeak() command, which seems to be parsed differently from most other stuff, *ignores* unknown parameters and remove the command completely, instead of, like music(), sends the parameter to play() as-is.
Title: Re: Internal commands
Post by: ToasterApocalypse on November 21, 2012, 08:23:37 AM
I got bored and destroyed my telesave by creating a teleporter at co-ordinates: (10,20)
I got stuck in a wall at the end of the tower  :viridian:

Toaster: gotoposition() w/o 3rd parameter behaves incorrectly in some cases.

But with the third parameter? Does it work then?
It should behave correctly then.

Awesome! +1 level mechanic for me!
Title: Re: Internal commands
Post by: Pyrite on December 02, 2012, 08:39:45 AM
gotoroom() doesn't work for me. Also how do I internal commands.
Title: Re: Internal commands
Post by: FIQ on December 02, 2012, 09:07:46 AM
gotoroom() doesn't work for me. Also how do I internal commands.
say(-1)
text(1,0,0,4)
say(4)
gotoroom(3,3)
endcutscene()
untilbars()
loadscript(stop)
Title: Re: Internal commands
Post by: Dav999 on December 02, 2012, 09:15:49 AM
Or:

iftrinkets(0,gotoroom)

Then make a new script called gotoroom, and delete the terminal/script box you created it with. In that script, write:

#
A)Say
gotoroom(x,y)

This makes sure there's no terminal sound, and no cutscene bars.

Also, there's something very important about gotoroom which shouldn't be forgotten: the coordinates start at 0, instead of 1 like you see in the editor. So, if you want to go to room (4,9), you'll have to type gotoroom(3,8).
Title: Re: Internal commands
Post by: Hilbert on December 08, 2012, 07:38:09 AM
How many commands can you use in an A)Say?
Title: Re: Internal commands
Post by: allison on December 08, 2012, 07:48:58 AM
How many commands can you use in an A)Say?

Because of the way they work, you can use one simplified command and one internal command.
Title: Re: Internal commands
Post by: Dav999 on December 08, 2012, 08:11:40 AM
How many commands can you use in an A)Say?

Because of the way they work, you can use one simplified command and one internal command.

Actually, you can use multiple simplified commands, and on the last two lines you write 'A)Say' and the internal command you want to use. Strangely enough, the internal command will always run first, then the simplified commands. You have to run the script from another script (with iftrinkets(0,asayscript)), and there should be exactly one empty line at the end of the script, not 0, because your internal command will be deleted, and also not 2, because then it doesn't work for some reason. If you don't want to use simplified commands, you can write # on the first line, or something similar. I'm not sure if it works with A)Say on the first line.
Title: Re: Internal commands
Post by: FIQ on December 08, 2012, 09:13:34 AM
How many commands can you use in an A)Say?

Because of the way they work, you can use one simplified command and one internal command.

Actually, you can use multiple simplified commands, and on the last two lines you write 'A)Say' and the internal command you want to use. Strangely enough, the internal command will always run first, then the simplified commands. You have to run the script from another script (with iftrinkets(0,asayscript)), and there should be exactly one empty line at the end of the script, not 0, because your internal command will be deleted, and also not 2, because then it doesn't work for some reason. If you don't want to use simplified commands, you can write # on the first line, or something similar. I'm not sure if it works with A)Say on the first line.
It does work without a simplified command at first line, but only sometimes, is my experience. Also, once when I did "#" to run no simplified command at all, it failed for some reason. I changed so it ran ifflag(glitch) (which essentially does nothing), and then it worked.

Keep in mind that you CAN run multiple internal commands with the method, but you're limited to one line per script. An example from my own level:

Code: [Select]
showtrinkets:
iftrinkets(0,showtrinkets1)

showtrinkets1:
iftrinkets(1,showtrinkets2)
A)Say
createentity(136,80,22,1,0)

showtrinkets2:
iftrinkets(1,showtrinkets3)
A)Say
createentity(112,80,22,2,0)

(...)
Title: Re: Internal commands
Post by: avengah on December 09, 2012, 07:30:35 AM
Are you absolutely sure about the squeak command? Try testing it with colours/crewmates and sad. See what happens then.

Accepted arguments are 1-6, colours, crewmate names, player, sad, on, off.
Title: Re: Internal commands
Post by: Dav999 on December 09, 2012, 07:52:45 AM
Are you absolutely sure about the squeak command? Try testing it with colours/crewmates and sad. See what happens then.

Accepted arguments are 1-6, colours, crewmate names, player, sad, on, off.

I think you're talking about the simplified squeak. The internal squeak is different. (And this topic is about internal commands)
Title: Re: Internal commands
Post by: avengah on December 09, 2012, 08:57:54 AM
I was replying to FIQ's post above about translating simplified scripting into internal scripting.
Title: Re: Internal commands
Post by: FIQ on December 09, 2012, 10:06:07 AM
I was replying to FIQ's post above about translating simplified scripting into internal scripting.

squeak(crewmate/color) --> squeak(color)

UNLESS you use squeak(on) or squeak(off). This is not converted to any internal command at all, but is instead removed, and a variable is set that makes (simplified) dialogs quiet. Don't use squeak(on|off) with internal commands unless you know this -- as it will require a work-around due to the fact that it makes 2.1 need text(1,0,0,3) while 2.0 still needs text(1,0,0,4). See page 4 for a more elaborate post on this topic.
Title: Re: Internal commands
Post by: avengah on December 09, 2012, 10:20:28 AM
I see... what about squeak(sad)?
Title: Re: Internal commands
Post by: Dav999 on December 09, 2012, 10:27:42 AM
I see... what about squeak(sad)?

squeak(cry).
Title: Re: Internal commands
Post by: avengah on December 10, 2012, 05:56:36 AM
Really? That's the internal version of squeak(sad)? Seems a bit strange. I thought it would be converted to a playef command or something.
Title: Re: Internal commands
Post by: FIQ on December 10, 2012, 07:22:09 AM
Really? That's the internal version of squeak(sad)? Seems a bit strange. I thought it would be converted to a playef command or something.

It is possible to do with playef(), Terry did squeak() as an alias to not have to bother with numbers in playef() I suppose, as it's a bit more readable. Just like you can create a crewman with createentity() but making it with an own command simplifies stuff.

Also, "sad" is just an alias to cry I guess (didn't know it existed), just like vitellary is to yellow.
Title: Re: Internal commands
Post by: Dav999 on December 10, 2012, 07:37:45 AM
Really? That's the internal version of squeak(sad)? Seems a bit strange. I thought it would be converted to a playef command or something.

It's only strange if squeak(cry) doesn't work as a simplified command. I can't check atm.
Title: Re: Internal commands
Post by: avengah on December 10, 2012, 08:23:15 AM
Well, it works as a simplified command, I never knew you could put squeak(cry)! I bet numerical arguments for say, happy, sad and squeak etc. are converted internally to colours too, even though technically the numerical arguments are the briefest since they use fewer characters.

Now, I wonder if happy(all) and sad(all) is converted differently depending on how many crew members are on screen / in the level and which colours they are... does anyone know how they are converted? Thanks, this is quite interesting.

EDIT: I tried it, and it seems the parser takes the happy(all) command and does something different with it, so you can't use this method to test it. Everyone became happy and I just got a text box containing the usual rubbish no matter what value I used for N. Unless I'm doing something wrong?
Title: Re: Internal commands
Post by: FIQ on December 10, 2012, 09:04:25 AM
Well, it works as a simplified command, I never knew you could put squeak(cry)! I bet numerical arguments for say, happy, sad and squeak etc. are converted internally to colours too, even though technically the numerical arguments are the briefest since they use fewer characters.

Now, I wonder if happy(all) and sad(all) is converted differently depending on how many crew members are on screen / in the level and which colours they are... does anyone know how they are converted? Thanks, this is quite interesting.

EDIT: I tried it, and it seems the parser takes the happy(all) command and does something different with it, so you can't use this method to test it. Everyone became happy and I just got a text box containing the usual rubbish no matter what value I used for N. Unless I'm doing something wrong?
happy(all)/sad(all) seems to be too long to be able to expose.

happy(viridian) converts to this according to the exposing method I told earlier, in bold:

customposition(center)
speak_active
endtext
changecustommood(customcyan,1)
squeak(player)

squeak(terminal)
text(gray,0,114,1)

I guess happy(all) does something similar as line 1 but for all the other crewmates. I'm not sure on this though as I cannot expose it.
Title: Re: Internal commands
Post by: FIQ on December 10, 2012, 09:40:05 AM
I just realized something.

You might not be aware of it, but it's an incredibly annoying glitch related to chain loading scripts that might make the script after the first one refuse to load.

Well.. I might have found out why. It's related to the internal scripting w/o cutscenes method.

For example, this (usually) fail:

a:
iftrinkets(0,b)

b:
flash
iftrinkets(0,c)

c:
say(1)
Test

The solution is to make a third line in b, with whatever content you like (I usually use ifflag(work,around)).

Now, try to replace iftrinkets(0,c) with alarmon. This triggers the ship alarm!

So it seems that (something)Say is completely unneeded - but it's generally a quirk in script loading! It seems like it's loading the last line as an internal scripting command for some weird reason.

Now, the first thing I thought when doing this is that then the script should be possible to load using the internal command for iftrinkets() -- customiftrinkets(). Well, I tried, but it didn't do anything. Possibly the same thing that stops move() to work properly for this method?
Title: Re: Internal commands
Post by: Dav999 on December 10, 2012, 01:41:03 PM
I just realized something.

You might not be aware of it, but it's an incredibly annoying glitch related to chain loading scripts that might make the script after the first one refuse to load.

Well.. I might have found out why. It's related to the internal scripting w/o cutscenes method.

For example, this (usually) fail:

a:
iftrinkets(0,b)

b:
flash
iftrinkets(0,c)

c:
say(1)
Test

The solution is to make a third line in b, with whatever content you like (I usually use ifflag(work,around)).

Now, try to replace iftrinkets(0,c) with alarmon. This triggers the ship alarm!

So it seems that (something)Say is completely unneeded - but it's generally a quirk in script loading! It seems like it's loading the last line as an internal scripting command for some weird reason.

Now, the first thing I thought when doing this is that then the script should be possible to load using the internal command for iftrinkets() -- customiftrinkets(). Well, I tried, but it didn't do anything. Possibly the same thing that stops move() to work properly for this method?

Really? So the last line is always loaded as an internal command? Will it also be the first line that's executed in every script? It may be unnoticed because most of the time, the last line is text which belongs to a text box, or it's destroy(x), which works the same as an internal command. The only conflicting command which would be used at the end of a script is iftrinkets(0,x). I always fixed it by placing a text box at the end, which says an error occurred, just like you use iftrinkets(work,around).
Title: Re: Internal commands
Post by: FIQ on December 10, 2012, 02:22:05 PM
I just realized something.

You might not be aware of it, but it's an incredibly annoying glitch related to chain loading scripts that might make the script after the first one refuse to load.

Well.. I might have found out why. It's related to the internal scripting w/o cutscenes method.

For example, this (usually) fail:

a:
iftrinkets(0,b)

b:
flash
iftrinkets(0,c)

c:
say(1)
Test

The solution is to make a third line in b, with whatever content you like (I usually use ifflag(work,around)).

Now, try to replace iftrinkets(0,c) with alarmon. This triggers the ship alarm!

So it seems that (something)Say is completely unneeded - but it's generally a quirk in script loading! It seems like it's loading the last line as an internal scripting command for some weird reason.

Now, the first thing I thought when doing this is that then the script should be possible to load using the internal command for iftrinkets() -- customiftrinkets(). Well, I tried, but it didn't do anything. Possibly the same thing that stops move() to work properly for this method?

Really? So the last line is always loaded as an internal command? Will it also be the first line that's executed in every script? It may be unnoticed because most of the time, the last line is text which belongs to a text box, or it's destroy(x), which works the same as an internal command. The only conflicting command which would be used at the end of a script is iftrinkets(0,x). I always fixed it by placing a text box at the end, which says an error occurred, just like you use iftrinkets(work,around).
I don't know if it's always the case, but it's possible. And yeah, it's not weird that it has gone unnoticed.
Title: Re: Internal commands
Post by: ToasterApocalypse on December 13, 2012, 08:41:54 AM
aaaa, I need more help.

SCRIPT:
Code: [Select]
flash(5)
playef(10)
gotoroom(19,8)
createentity(70,80,26,0,0)
text(1,0,0,4)
say(2)
walk(left,10)
text(1,0,0,4)
say(5)
flipme()
flash(5)
playef(10)
hideplayer()
text(1,0,0,4)

WHAT IS SUPPOSED TO HAPPEN:
Flashes
Go to room 20,9
Giant warptoken is there
Go to the warptoken
Flip into it (hideplayer, playef(10))
Player hides.

WHAT ACTUALLY HAPPENS:
Flash
Goes to room 20,9)
Giant warp is there
go to warp
script abruptly stops

What is happening?
Title: Re: Internal commands
Post by: Dav999 on December 13, 2012, 09:55:25 AM
flipme() and tofloor() don't always work, unfortuanately. :victoria: I also don't know if there's a way to make sure it always runs, I also ran into that problem. Maybe FIQ knows of a fix for this?
Title: Re: Internal commands
Post by: ToasterApocalypse on December 13, 2012, 10:24:26 AM
flipme() and tofloor() don't always work, unfortuanately. :victoria: I also don't know if there's a way to make sure it always runs, I also ran into that problem. Maybe FIQ knows of a fix for this?

Well, tofloor worked previously.
That's not the problem though, the problem is the script stopping abruptly after the walk() command
Title: Re: Internal commands
Post by: FIQ on December 13, 2012, 10:44:22 AM
flipme() and tofloor() don't always work, unfortuanately. :victoria: I also don't know if there's a way to make sure it always runs, I also ran into that problem. Maybe FIQ knows of a fix for this?

Well, tofloor worked previously.
That's not the problem though, the problem is the script stopping abruptly after the walk() command
Try flip(player). You can also work-around it by using gotoposition(x,y,1) where x,y is coordinates. Assuming they're always the same, that is -- it seems like you're not specifying them.
Title: Re: Internal commands
Post by: ToasterApocalypse on December 14, 2012, 05:41:49 AM
Guys, lets discuss backgroundtext. I don't get that one.  :victoria:
Title: Re: Internal commands
Post by: FIQ on December 14, 2012, 06:52:13 AM
Guys, lets discuss backgroundtext. I don't get that one.  :victoria:
Backgroundtext can be used to make several textboxes appear on the screen at the same time. For example, terminals with a headline and a textbox.

It's used like this (in case you wonder, -1 in text(...) means "at the center"):

text(gray,-1,50,1)
Test
backgroundtext
speak
text(gray,-1,70,1)
More testing!
speak
endtext
Title: Re: Internal commands
Post by: ToasterApocalypse on December 14, 2012, 06:57:20 AM
Guys, lets discuss backgroundtext. I don't get that one.  :victoria:
Backgroundtext can be used to make several textboxes appear on the screen at the same time. For example, terminals with a headline and a textbox.

It's used like this (in case you wonder, -1 in text(...) means "at the center"):

text(gray,-1,50,1)
Test
backgroundtext
speak
text(gray,-1,70,1)
More testing!
speak
endtext

How would that fit in a say(5) thing then?
Title: Re: Internal commands
Post by: FIQ on December 14, 2012, 07:03:13 AM
:o
You know the "internal scripting without cutscene" thingy? Well, I found something interesting.

As already known, the script executes first. And, to my surprise, one of the commands that work (as discussed earlier, not all commands seem to work) is the text() command.
Now, what is the use of this?

Well... the internal script executes first, in the case above the text() command. text() is used with say(-1) to allow for several internal commands to run using say(N) at once by simply making the internal executer ignore some lines below it, including the converted say() command. See where I'm going?

But say(N) will make cutscenebars appear and a terminal sound playing!
It wont! By overwriting the commands that trigger them with the command text() as the internal command to run w/o cutscenes, it will not appear! text() triggers first, etc.

endcutscene and untilbars is missing from your example...
They aren't needed, as there are no cutscenebars. loadscript(stop) (or anything that isn't an internal script) is still needed, obviously.

Try this:

test:
iftrinkets(0,test2)

test2:
say(3)
alarmon
playef(10,10)
loadscript(stop)
text(1,0,0,4)
Title: Re: Internal commands
Post by: FIQ on December 14, 2012, 07:05:59 AM
Guys, lets discuss backgroundtext. I don't get that one.  :victoria:
Backgroundtext can be used to make several textboxes appear on the screen at the same time. For example, terminals with a headline and a textbox.

It's used like this (in case you wonder, -1 in text(...) means "at the center"):

text(gray,-1,50,1)
Test
backgroundtext
speak
text(gray,-1,70,1)
More testing!
speak
endtext

How would that fit in a say(5) thing then?
Well, by adjusting the script to place the needed things together and split otherwise.

say(-1)
text(1,0,0,4)
say(5)
text(gray,-1,50,1)
Test
backgroundtext
speak
text(1,0,0,4)
say(5)
text(gray,-1,70,1)
More testing!
speak
endtext
text(1,0,0,4)
say(3)
endcutscene
untilbars
loadscript(stop)

And no, you can't background dialogs with several lines (more than 1), unless you like to break compatibility with 2.0 (please don't).
Title: Re: Internal commands
Post by: ToasterApocalypse on December 14, 2012, 07:07:10 AM
Guys, lets discuss backgroundtext. I don't get that one.  :victoria:
Backgroundtext can be used to make several textboxes appear on the screen at the same time. For example, terminals with a headline and a textbox.

It's used like this (in case you wonder, -1 in text(...) means "at the center"):

text(gray,-1,50,1)
Test
backgroundtext
speak
text(gray,-1,70,1)
More testing!
speak
endtext

How would that fit in a say(5) thing then?
Well, by adjusting the script to place the needed things together and split otherwise.

say(-1)
text(1,0,0,4)
say(5)
text(gray,-1,50,1)
Test
backgroundtext
speak
text(1,0,0,4)
say(5)
text(gray,-1,70,1)
More testing!
speak
endtext
text(1,0,0,4)
say(3)
endcutscene
untilbars
loadscript(stop)

And no, you can't background dialogs with several lines (more than 1), unless you like to break compatibility with 2.0 (please don't).

I won't.

Also, it's pretty neat that -1 is the center.
Title: Re: Internal commands
Post by: FIQ on December 14, 2012, 07:09:04 AM
Guys, lets discuss backgroundtext. I don't get that one.  :victoria:
Backgroundtext can be used to make several textboxes appear on the screen at the same time. For example, terminals with a headline and a textbox.

It's used like this (in case you wonder, -1 in text(...) means "at the center"):

text(gray,-1,50,1)
Test
backgroundtext
speak
text(gray,-1,70,1)
More testing!
speak
endtext

How would that fit in a say(5) thing then?
Well, by adjusting the script to place the needed things together and split otherwise.

say(-1)
text(1,0,0,4)
say(5)
text(gray,-1,50,1)
Test
backgroundtext
speak
text(1,0,0,4)
say(5)
text(gray,-1,70,1)
More testing!
speak
endtext
text(1,0,0,4)
say(3)
endcutscene
untilbars
loadscript(stop)

And no, you can't background dialogs with several lines (more than 1), unless you like to break compatibility with 2.0 (please don't).

I won't.

Also, it's pretty neat that -1 is the center.
Only works in the X axis though, you cannot mimic position(center) w/o using it by using text(C,-1,-1,N). You can only mimic position(centerx) w/o using it (with the example above).
Title: Re: Internal commands
Post by: ToasterApocalypse on December 14, 2012, 07:38:14 AM
Guys, lets discuss backgroundtext. I don't get that one.  :victoria:
Backgroundtext can be used to make several textboxes appear on the screen at the same time. For example, terminals with a headline and a textbox.

It's used like this (in case you wonder, -1 in text(...) means "at the center"):

text(gray,-1,50,1)
Test
backgroundtext
speak
text(gray,-1,70,1)
More testing!
speak
endtext

How would that fit in a say(5) thing then?
Well, by adjusting the script to place the needed things together and split otherwise.

say(-1)
text(1,0,0,4)
say(5)
text(gray,-1,50,1)
Test
backgroundtext
speak
text(1,0,0,4)
say(5)
text(gray,-1,70,1)
More testing!
speak
endtext
text(1,0,0,4)
say(3)
endcutscene
untilbars
loadscript(stop)

And no, you can't background dialogs with several lines (more than 1), unless you like to break compatibility with 2.0 (please don't).

I won't.

Also, it's pretty neat that -1 is the center.
Only works in the X axis though, you cannot mimic position(center) w/o using it by using text(C,-1,-1,N). You can only mimic position(centerx) w/o using it (with the example above).

Speaking of the example, with the Y co-ordinate you used, the two text boxes touch each-other.
Title: Re: Internal commands
Post by: Dav999 on December 14, 2012, 07:41:15 AM
:o
You know the "internal scripting without cutscene" thingy? Well, I found something interesting.

As already known, the script executes first. And, to my surprise, one of the commands that work (as discussed earlier, not all commands seem to work) is the text() command.
Now, what is the use of this?

Well... the internal script executes first, in the case above the text() command. text() is used with say(-1) to allow for several internal commands to run using say(N) at once by simply making the internal executer ignore some lines below it, including the converted say() command. See where I'm going?

But say(N) will make cutscenebars appear and a terminal sound playing!
It wont! By overwriting the commands that trigger them with the command text() as the internal command to run w/o cutscenes, it will not appear! text() triggers first, etc.

endcutscene and untilbars is missing from your example...
They aren't needed, as there are no cutscenebars. loadscript(stop) (or anything that isn't an internal script) is still needed, obviously.

Try this:

test:
iftrinkets(0,test2)

test2:
say(3)
alarmon
playef(10,10)
loadscript(stop)
text(1,0,0,4)

Will this work?

Code: [Select]
This is a text box!
It has two lines...
text(red,-1,50,2)
Title: Re: Internal commands
Post by: Dav999 on December 14, 2012, 07:52:09 AM
'backgroundtext' can be better described as something which makes sure that the game doesn't wait for the player to press action at speak or speak_active. For example:

Code: [Select]
speakMakes a text box appear without removing old text boxes, wait for keypress

Code: [Select]
backgroundtext
speak
Makes a text box appear without removing old text boxes, don't wait for keypress

If you remove the 'backgroundtext's from FIQ's example, you'd have to press space after every text box.
Title: Re: Internal commands
Post by: blue626 on December 14, 2012, 08:29:43 AM
Now, I wonder if happy(all) and sad(all) is converted differently depending on how many crew members are on screen / in the level and which colours they are... does anyone know how they are converted? Thanks, this is quite interesting.

EDIT: I tried it, and it seems the parser takes the happy(all) command and does something different with it, so you can't use this method to test it. Everyone became happy and I just got a text box containing the usual rubbish no matter what value I used for N. Unless I'm doing something wrong?

Try sad(all/everyone/everybody). It may be converted to everybodysad().

Title: Re: Internal commands
Post by: FIQ on December 14, 2012, 08:42:40 AM
:o
You know the "internal scripting without cutscene" thingy? Well, I found something interesting.

As already known, the script executes first. And, to my surprise, one of the commands that work (as discussed earlier, not all commands seem to work) is the text() command.
Now, what is the use of this?

Well... the internal script executes first, in the case above the text() command. text() is used with say(-1) to allow for several internal commands to run using say(N) at once by simply making the internal executer ignore some lines below it, including the converted say() command. See where I'm going?

But say(N) will make cutscenebars appear and a terminal sound playing!
It wont! By overwriting the commands that trigger them with the command text() as the internal command to run w/o cutscenes, it will not appear! text() triggers first, etc.

endcutscene and untilbars is missing from your example...
They aren't needed, as there are no cutscenebars. loadscript(stop) (or anything that isn't an internal script) is still needed, obviously.

Try this:

test:
iftrinkets(0,test2)

test2:
say(3)
alarmon
playef(10,10)
loadscript(stop)
text(1,0,0,4)

Will this work?

Code: [Select]
This is a text box!
It has two lines...
text(red,-1,50,2)
No, it wont, the parser will remove the text lines as it doesn't understand what to do with it.

The point with what I showed was that it allowed execution of infinite (well, apart from some limitations regarding dialogs) amount of scripts w/o cutscenebars OR making a new script per line.
Title: Re: Internal commands
Post by: blue626 on December 14, 2012, 08:54:12 AM
The point with what I showed was that it allowed execution of infinite (well, apart from some limitations regarding dialogs) amount of scripts w/o cutscenebars OR making a new script per line.

Did you mean, instead of the bold part, "AND you don't need to make a new script per line (like in the ASay method)."?

EDIT: Conclusion to facts related to int. scr. that were discovered and posted here: The script parser* has various glitches.

*I suppose that the parser is what transform simple. scr. into int. scr. and executes it?
Title: Re: Internal commands
Post by: FIQ on December 14, 2012, 10:12:05 AM
The point with what I showed was that it allowed execution of infinite (well, apart from some limitations regarding dialogs) amount of scripts w/o cutscenebars OR making a new script per line.

Did you mean, instead of the bold part, "AND you don't need to make a new script per line (like in the ASay method)."?

EDIT: Conclusion to facts related to int. scr. that were discovered and posted here: The script parser* has various glitches.

*I suppose that the parser is what transform simple. scr. into int. scr. and executes it?
Yes, basically I combined the methods together to get more than one line of internal scripting w/o spawning cutscenebars or sound. I.e. full access to the internal scripting engine w/o drawbacks in 2.1, and full access except limitation on the amount of dialog lines in 2.0.

And yes, when I say "script parser", I mean the piece of code that takes the simplified scripting and converts it to internal scripting.
Title: Re: Internal commands
Post by: Rapidgame on December 16, 2012, 10:25:47 AM
Can someone explain me some things?
1) The VVVVVV Man doesn't clip perfectly. Why?
2) How I can do this without the cutscene bars?
3) I have used:

say(-1)
text(1,0,0,4)
say(3)
createcrewman(50,0,red,0,right)
changeai(red,followplayer)
text(1,0,0,4)
say(3)
endcutscene()
untilbars()
loadscript(stop)


This makes a crewman that cannot be rescued.
I have did a terminal using this code. If I actívate it, a crewman will spawn.
If I die, the crewman becomes sad, until I spawn.
He follows me always.
But there is a problem.
Why he doesn't clip with spikes and moving platforms (and conveyors)?

Well, that's all for now.
Sorry if you see "gramatical errors" because I'm learning english.  :)
Title: Re: Internal commands
Post by: ToasterApocalypse on December 16, 2012, 10:41:39 AM
Can someone explain me some things?
1) The VVVVVV Man doesn't clip perfectly. Why?
2) How I can do this without the cutscene bars?
3) I have used:

say(-1)
text(1,0,0,4)
say(3)
createcrewman(50,0,red,0,right)
changeai(red,followplayer)
text(1,0,0,4)
say(3)
endcutscene()
untilbars()
loadscript(stop)


This makes a crewman that cannot be rescued.
I have did a terminal using this code. If I actívate it, a crewman will spawn.
If I die, the crewman becomes sad, until I spawn.
He follows me always.
But there is a problem.
Why he doesn't clip with spikes and moving platforms (and conveyors)?

Well, that's all for now.
Sorry if you see "gramatical errors" because I'm learning english.  :)

Don't know the first answer.

Second: Simple.

SCRIPT 1:
Code: [Select]
iftrinkets(0,script2)
SCRIPT 2:
Code: [Select]
#
A)Say
[internal command]
Title: Re: Internal commands
Post by: FIQ on December 16, 2012, 11:04:19 AM
Can someone explain me some things?
1) The VVVVVV Man doesn't clip perfectly. Why?
2) How I can do this without the cutscene bars?
3) I have used:

say(-1)
text(1,0,0,4)
say(3)
createcrewman(50,0,red,0,right)
changeai(red,followplayer)
text(1,0,0,4)
say(3)
endcutscene()
untilbars()
loadscript(stop)


This makes a crewman that cannot be rescued.
I have did a terminal using this code. If I actívate it, a crewman will spawn.
If I die, the crewman becomes sad, until I spawn.
He follows me always.
But there is a problem.
Why he doesn't clip with spikes and moving platforms (and conveyors)?

Well, that's all for now.
Sorry if you see "gramatical errors" because I'm learning english.  :)

Don't know the first answer.

Second: Simple.

SCRIPT 1:
Code: [Select]
iftrinkets(0,script2)
SCRIPT 2:
Code: [Select]
#
A)Say
[internal command]

I recommend this (similar) method instead, to enable full scripting w/o cutscenebars

Code: [Select]
script1:
iftrinkets(0,script2)

script2:
say(3)
createcrewman(50,0,red,0,right)
changeai(red,followplayer)
loadscript(stop)
text(1,0,0,4)
Title: Re: Internal commands
Post by: ToasterApocalypse on December 16, 2012, 11:42:59 AM
Can someone explain me some things?
1) The VVVVVV Man doesn't clip perfectly. Why?
2) How I can do this without the cutscene bars?
3) I have used:

say(-1)
text(1,0,0,4)
say(3)
createcrewman(50,0,red,0,right)
changeai(red,followplayer)
text(1,0,0,4)
say(3)
endcutscene()
untilbars()
loadscript(stop)


This makes a crewman that cannot be rescued.
I have did a terminal using this code. If I actívate it, a crewman will spawn.
If I die, the crewman becomes sad, until I spawn.
He follows me always.
But there is a problem.
Why he doesn't clip with spikes and moving platforms (and conveyors)?

Well, that's all for now.
Sorry if you see "gramatical errors" because I'm learning english.  :)

Don't know the first answer.

Second: Simple.

SCRIPT 1:
Code: [Select]
iftrinkets(0,script2)
SCRIPT 2:
Code: [Select]
#
A)Say
[internal command]

I recommend this (similar) method instead, to enable full scripting w/o cutscenebars

Code: [Select]
script1:
iftrinkets(0,script2)

script2:
say(3)
createcrewman(50,0,red,0,right)
changeai(red,followplayer)
loadscript(stop)
text(1,0,0,4)

Wait, what? I'll check that.
Title: Re: Internal commands
Post by: FIQ on December 16, 2012, 01:20:37 PM
Wait, what? I'll check that.
I tried to make people aware with an earlier post that I found out how to execute unlimited internal commands w/o cutscenebars, but noone cared. :P
Title: Re: Internal commands
Post by: ToasterApocalypse on December 16, 2012, 01:28:02 PM
Wait, what? I'll check that.
I tried to make people aware with an earlier post that I found out how to execute unlimited internal commands w/o cutscenebars, but noone cared. :P

Oh.

I got bored with backgroundtext and added delays.

It's like VVVVVV.
Title: Re: Internal commands
Post by: FIQ on December 16, 2012, 01:32:04 PM
Wait, what? I'll check that.
I tried to make people aware with an earlier post that I found out how to execute unlimited internal commands w/o cutscenebars, but noone cared. :P

Oh.

I got bored with backgroundtext and added delays.

It's like VVVVVV.
You mean procedural text showing up? I did that too, but only managed to get it to work good in 2.1 where you could turn off squeaking (this was before i found out about the thing mentioned above)
Title: Re: Internal commands
Post by: ToasterApocalypse on December 16, 2012, 01:34:02 PM
Wait, what? I'll check that.
I tried to make people aware with an earlier post that I found out how to execute unlimited internal commands w/o cutscenebars, but noone cared. :P

Oh.

I got bored with backgroundtext and added delays.

It's like VVVVVV.
You mean procedural text showing up? I did that too, but only managed to get it to work good in 2.1 where you could turn off squeaking (this was before i found out about the thing mentioned above)

How did it work in 2.0?
Title: Re: Internal commands
Post by: FIQ on December 16, 2012, 01:43:51 PM
Wait, what? I'll check that.
I tried to make people aware with an earlier post that I found out how to execute unlimited internal commands w/o cutscenebars, but noone cared. :P

Oh.

I got bored with backgroundtext and added delays.

It's like VVVVVV.
You mean procedural text showing up? I did that too, but only managed to get it to work good in 2.1 where you could turn off squeaking (this was before i found out about the thing mentioned above)

How did it work in 2.0?
Well, with what I did earlier, it worked just fine, but with a terminal sound each line of dialogs.
That's because of how i created the dialog though, and now that i know about how to fix internal commands w/o cutscenebars properly, i can do it w/o the sounds. How did you do it?
Title: Re: Internal commands
Post by: ToasterApocalypse on December 17, 2012, 04:55:09 AM
Wait, what? I'll check that.
I tried to make people aware with an earlier post that I found out how to execute unlimited internal commands w/o cutscenebars, but noone cared. :P

Oh.

I got bored with backgroundtext and added delays.

It's like VVVVVV.
You mean procedural text showing up? I did that too, but only managed to get it to work good in 2.1 where you could turn off squeaking (this was before i found out about the thing mentioned above)

How did it work in 2.0?
Well, with what I did earlier, it worked just fine, but with a terminal sound each line of dialogs.
That's because of how i created the dialog though, and now that i know about how to fix internal commands w/o cutscenebars properly, i can do it w/o the sounds. How did you do it?

Code: [Select]
delay(60)
play(0) [color=beige]as pretty juch everyone knows this is Level Complete[/color]
text(cyan,-1,50,1) [color=beige]thanks for teaching me that trick thing[/color]
TEXTS
backgroundtext
speak
delay(50)
text
delay(50)
text
delay(70)
text(cyan,-1,170,1)
Press action to continue
speak
endtext

Yeah. I discovered it accidentally and I don't know if it works in 2.0
Title: Re: Internal commands
Post by: FIQ on December 17, 2012, 07:07:18 AM
Wait, what? I'll check that.
I tried to make people aware with an earlier post that I found out how to execute unlimited internal commands w/o cutscenebars, but noone cared. :P

Oh.

I got bored with backgroundtext and added delays.

It's like VVVVVV.
You mean procedural text showing up? I did that too, but only managed to get it to work good in 2.1 where you could turn off squeaking (this was before i found out about the thing mentioned above)

How did it work in 2.0?
Well, with what I did earlier, it worked just fine, but with a terminal sound each line of dialogs.
That's because of how i created the dialog though, and now that i know about how to fix internal commands w/o cutscenebars properly, i can do it w/o the sounds. How did you do it?

Code: [Select]
delay(60)
play(0) [color=beige]as pretty juch everyone knows this is Level Complete[/color]
text(cyan,-1,50,1) [color=beige]thanks for teaching me that trick thing[/color]
TEXTS
backgroundtext
speak
delay(50)
text
delay(50)
text
delay(70)
text(cyan,-1,170,1)
Press action to continue
speak
endtext

Yeah. I discovered it accidentally and I don't know if it works in 2.0

Yeah, that's approx what I did too, but I didn't realize delay() makes the text force-appear when backgrounded, so I instead called a new script (which also makes the text force-appear even if backgrounded). That's what I meant with "a sound plays every row of text".

Also, you should be able to call a gamestate and then switch back to gamestate 0 (default), if you want the "Level complete!" part of the dialog with big text as in the maingame. That's how I did to make the "Game complete!" dialog in Back to VVVVVV.

Try this:

Code: [Select]
test2:
say(5)
delay(10)
play(0)
gamestate(3006)
delay(1)
text(1,0,0,4)
say(3)
gamestate(0)
delay(50)
text(1,0,0,4)
say(5)
text(gray,-1,100,1)
You did it!
backgroundtext
speak
text(1,0,0,4)
say(2)
delay(70)
text(1,0,0,4)
say(5)
text(cyan,-1,170,1)
 Press ACTION to continue
speak
endtext
loadscript(stop)
text(1,0,0,4)
Title: Re: Internal commands
Post by: allison on December 17, 2012, 05:10:51 PM
An answer the the clipping problem with VVVVVV Man:

He was never meant to be playable. All that VVVVVV Man actually does in-game is walk around, and the exploding walls are hardcoded in.
Title: Re: Internal commands
Post by: blue626 on December 18, 2012, 09:38:48 AM
(deleted some quotes)

Oh.

I got bored with backgroundtext and added delays.

It's like VVVVVV.
You mean procedural text showing up? I did that too, but only managed to get it to work good in 2.1 where you could turn off squeaking (this was before i found out about the thing mentioned above)

How did it work in 2.0?
Well, with what I did earlier, it worked just fine, but with a terminal sound each line of dialogs.
That's because of how i created the dialog though, and now that i know about how to fix internal commands w/o cutscenebars properly, i can do it w/o the sounds. How did you do it?

Code: [Select]
delay(60)
play(0) [color=beige]as pretty juch everyone knows this is Level Complete[/color]
text(cyan,-1,50,1) [color=beige]thanks for teaching me that trick thing[/color]
TEXTS
backgroundtext
speak
delay(50)
text
delay(50)
text
delay(70)
text(cyan,-1,170,1)
Press action to continue
speak
endtext

Yeah. I discovered it accidentally and I don't know if it works in 2.0

What are those "text"s in the middle of the code? Couldn't you just use delay(170) (between speak and text(cyan,-1,170,1))?

Wait, what? I'll check that.
I tried to make people aware with an earlier post that I found out how to execute unlimited internal commands w/o cutscenebars, but noone cared. :P

Well, I cared, I read almost very post*. Yet, I'm never going to use it in a non-test level. :P

*The exceptions are some long posts in "VVVVVV Levels" about levels I didn't play yet when I read them.

An answer the the clipping problem with VVVVVV Man:

He was never meant to be playable. All that VVVVVV Man actually does in-game is walk around, and the exploding walls are hardcoded in.

I read somewhere that its hotbox is the lower edge and an equivalent to normal Viridian in the top left. Being only that, it can easily go through walls.
When I exploited a glitch that lets explore Dim. VVVVVV as VVVVVVMan, I eventually reached the Super Gravitron room (by going through walls). In there, VVVVVVman was invisible. Why? ???

EDIT. Off-topic: This has more than 2x the # of replies in "YYYYYY".
Title: Re: Internal commands
Post by: Rapidgame on December 21, 2012, 08:15:39 AM
Erm...
Can someone tell me how to make my red friend to clip against  the spikes?
Title: Re: Internal commands
Post by: ToasterApocalypse on December 21, 2012, 08:31:38 AM
Erm...
Can someone tell me how to make my red friend to clip against  the spikes?

As far as I know, it's impossible to do that.
Title: Re: Internal commands
Post by: Rapidgame on December 21, 2012, 09:29:03 AM
Where I can get the entity list for createentity(?)?
And... the effects list?
And all these commands that needs a list?

Because I have to test every number on the universe (for the entities) and I finished adding unnecesary Viridians!
Title: Re: Internal commands
Post by: FIQ on December 21, 2012, 09:47:41 AM
Where I can get the entity list for createentity(?)?
And... the effects list?
And all these commands that needs a list?

Because I have to test every number on the universe (for the entities) and I finished adding unnecesary Viridians!
0-27, 55 and 56 are the ones that do anything at all.

There's a list posted earlier, i'll post it in this post shortly.

All commands that need a list is posted in the second post except gamestates (which is posted shortly after and extended by me @same page), and entities (posted in a page in the topic).

Entities is posted below. "Metadata" shows one, possibly two (which should be used in the specified order then) extra setting you can use. All are numbers, but you'll have to experiment what different numbers do. Modified by earlier list posted by ToasterApocalypse
Code: [Select]
0 - The player

1 - Enemy
Metadata: movement type, movement speed
Due to lacking needed data, you will only ever get a purple enemy box, unless you're in the VVVVVV polar dimension while doing the command

2 - Moving platform
Metadata: movement type, movement speed
Note that conveyors is implemented as moving platforms, see movement type 8 and 9.

3 - A disappearing platform

4 - A 1x1 quicker quicksand block

5 - A flipped Viridian, you will flip gravity when touched

6 - Weird red flashy thingy that disappears quickly

7 - Same as above, but doesn't flash and is coloured cyan

8 - A coin from the prototype
Metadata: Coin ID

9 - Trinket
Metadata: Trinket ID
Note that trinket ID start at 0, and everything above 19 will not be saved in the savefile once you restart the level

10 - Checkpoint
Metadata: Checkpoint state (0=flipped, 1=normal), Checkpoint ID (checks if the checkpoint is active or not)

11 - Horisontal gravity line
Metadata: Length in pixels

12 - Vertical gravity line
Metadata: Length in pixels

13 - Warp token
Metadata: Destination in tiles X axis, destination in tiles Y axis

14 - The round teleporter
Metadata: Checkpoint ID(?)

15 - Verdigris
Metadata: AI state

16 - Vitellary (flipped)
Metadata: AI state

17 - Victoria
Metadata: AI state

18 - Crewmate
Metadata: Colour (using raw color list, not the crewmate colors), mood

19 - Vermilion
Metadata: AI state

20 - Terminal
Metadata: Sprite, Script ID(?)

21 - Same as above but when touched the terminal doesn't light up
Metadata: Sprite, Script ID(?)

22 - Collected trinket
Metadata: Trinket ID

23 - Gravitron square
Metadata: Direction
If you input negative X coordinate (or too high), an arrow shows instead, just like in the real Gravitron

24 - Intermission 1 crewmate
Metadata: Raw color, mood
Doesn't seem to be affected by hazards, but should be. I'll have to look into this one

25 - Trophy
Metadata: Challenge identifier, sprite
If the challenge is completed, the base sprite ID (what you get if you use sprite=0) will change. Only use 0 or 1 if you want predictable results (0=normal, 1=flipped)

26: The warp token to the Secret Lab
Keep in mind that the warp is just implemented as a nice looking sprite. You'll have to script the functionality for yourself

55 - Rescueable crewmate
Metadata: Crewmate color. Color >6 will always show a *happy* Viridian

56 - Custom level enemy
Metadata: Movement type, movement speed
Keep in mind that if there's no enemies in the room, the enemy sprite data isn't updated correctly and it will just show what enemy you saw last time, or a square enemy

Undefined entities (27-50, 57+) give glitchy Viridians.
Title: Re: Internal commands
Post by: blue626 on December 21, 2012, 10:23:17 AM
Where I can get the entity list for createentity(?)?
And... the effects list?
And all these commands that needs a list?

Because I have to test every number on the universe (for the entities) and I finished adding unnecesary Viridians!
0-27, 55 and 56 are the ones that do anything at all.

There's a list posted earlier, i'll post it in this post shortly.

All commands that need a list is posted in the second post except gamestates (which is posted shortly after and extended by me @same page), and entities (posted in a page in the topic).

Like Dav999 said in the quote, 28-50 and 57-59 (and perhaps >59) create the same thing as 27.

And... the effects list?

Do you mean the list for playef(x)? I don't know, and there isn't a list anywhere in this topic, but I'd like to know too.
EDIT: In the 2nd posts, Dav999 said he has a list, but I don't remember it being posted anywhere (and considering that this topic has >450 replies, I'm not going to search everything).

EDIT 2: Removed create entity list as FIQ posted one with more info on his post.
Title: Re: Internal commands
Post by: Rapidgame on December 21, 2012, 12:36:11 PM
Thanks for thee entity info, now I'll wait for the effect list.  ;D
Title: Re: Internal commands
Post by: FIQ on December 21, 2012, 02:15:13 PM
Thanks for thee entity info, now I'll wait for the effect list.  ;D
Code: [Select]
0 - Flip to ceiling
1 - Flip back to floor
2 - Cry
3 - Trinket collected
4 - Coin collected
5 - Checkpoint touched
6 - Quicker quicksand block touched
7 - Normal quicksand block touched
8 - Gravity line touched
9 - Flash
10 - Warp
11 - Viridian squeak
12 - Verdigris squeak
13 - Victoria squeak
14 - Vitellary squeak
15 - Violet squeak
16 - Vermilion squeak
17 - Terminal touched
18 - Teleporter touched
19 - Alarm
20 - Terminal squeak
21 - Time trial countdown "3", "2", "1"
22 - Time trial countdown "Go!"
23 - VVVVVV Man breaking walls
24 - Crewmates (de)combining into VVVVVV Man
25 - New record in Super Gravitron
26 - New trophy in Super Gravitron
27 - Rescued crewmate (in custom levels)

28+ segfaults
Title: Re: Internal commands
Post by: FIQ on December 23, 2012, 01:49:00 PM
Hi.

Just wanted to say that I just realized how Dav999 got "Press ENTER to explode" with createactivityzone(). It simply has to do with createactivityzone() with anything else than crewmates give undefined behaviour, and rely on other commands fiddling around with the same points in memory.

This script:

b:
say(1)
createactivityzone(bogusdata)
text(1,0,0,4)

gives "Press ENTER to activate terminal" (which give "?SYNTAX ERROR").

This script:

b:
say(2)
face(player,red)
createactivityzone(bogusdata)
text(1,0,0,4)

gives "Press ENTER to explode" (which starts the initial cutscene).

To get full access to the activity zones, you can do something like this (activity zone ID will be N+1, where N>=1):

script:
say(-1)
text(1,0,0,4)
say(5)
do(N)
createcrewman(50,50,yellow,0,faceleft)
loop
everybodysad()
text(1,0,0,4)
say(4)
createactivityzone(a)
endcutscene()
untilbars()
loadscript(stop)

The main point of why this works is everybodysad(). everybodysad() will start a counter and increase for every crewmate on screen (including you). This same point is then used with createactivityzone() to get any ID you want besides 0 (can be gotten by face() as shown at the first example), 1 (can be gotten simply by createactivityzone(red)). 1-5 are crewmates, so these are unnecessary, you can just use the "proper" way of dealing with createactivityzone().

EDIT: I found something interesting with this -- you can actually access your own scripts' activityzone. ID 33 is ecrof evitisoP, but 34 seems to be your own script (possibly latest called script?).
Title: Re: Internal commands
Post by: Rapidgame on December 23, 2012, 02:15:47 PM
Thanks for thee entity info, now I'll wait for the effect list.  ;D
Code: [Select]
0 - Flip to ceiling
1 - Flip back to floor
2 - Cry
3 - Trinket collected
4 - Coin collected
5 - Checkpoint touched
6 - Quicker quicksand block touched
7 - Normal quicksand block touched
8 - Gravity line touched
9 - Flash
10 - Warp
11 - Viridian squeak
12 - Verdigris squeak
13 - Victoria squeak
14 - Vitellary squeak
15 - Violet squeak
16 - Vermilion squeak
17 - Terminal touched
18 - Teleporter touched
19 - Alarm
20 - Terminal squeak
21 - Time trial countdown "3", "2", "1"
22 - Time trial countdown "Go!"
23 - VVVVVV Man breaking walls
24 - Crewmates (de)combining into VVVVVV Man
25 - New record in Super Gravitron
26 - New trophy in Super Gravitron
27 - Rescued crewmate (in custom levels)

28+ segfaults

Thanks!
Title: Re: Internal commands
Post by: ToasterApocalypse on December 23, 2012, 08:02:28 AM
OFF TOPIC:
(http://25.media.tumblr.com/82960e91d2e8c7d2db0c11355a92a9e5/tumblr_mfiamjYIud1rvyxoko1_500.png)

wtf distractionware
Title: Re: Internal commands
Post by: Rapidgame on December 23, 2012, 03:19:36 PM
OFF TOPIC:
(http://25.media.tumblr.com/82960e91d2e8c7d2db0c11355a92a9e5/tumblr_mfiamjYIud1rvyxoko1_500.png)

wtf distractionware

I'm on that photo! I'm there! On that... photo! Well, screenshot!
Title: Re: Internal commands
Post by: Hilbert on December 23, 2012, 03:36:28 PM
OFF TOPIC:
(http://25.media.tumblr.com/82960e91d2e8c7d2db0c11355a92a9e5/tumblr_mfiamjYIud1rvyxoko1_500.png)

wtf distractionware
TIME ZONES



i think
Title: Re: Internal commands
Post by: Rapidgame on December 23, 2012, 03:38:22 PM
How I can see what are the room coordinates?
I say, I want a coin over a spike/wall. Not at 0,0 (Room's left-up corner).
Title: Re: Internal commands
Post by: FIQ on December 23, 2012, 08:15:52 AM
How I can see what are the room coordinates?
I say, I want a coin over a spike/wall. Not at 0,0 (Room's left-up corner).
You'll have to test around.

Keep in mind that every 8th pixel equals to 1 tile.
Title: Re: Internal commands
Post by: blue626 on December 25, 2012, 12:52:24 PM
How I can see what are the room coordinates?
I say, I want a coin over a spike/wall. Not at 0,0 (Room's left-up corner).
You'll have to test around.

Keep in mind that every 8th pixel equals to 1 tile.

Are createentity coordinates the same as gotopostion ones? If so, then 0,0 isn't exactly the top left corner.
Also note that 1 = 1 pixel and VVVVVV's resolution is 320x240.
Title: Re: Internal commands
Post by: RibShark on December 28, 2012, 05:32:52 AM
Am I the only one who can't get the new way of internal commands to work (the one where you can do infinite commands with no cutscenebars)? It either freezes the game or makes  :viridian: walk non-stop. If anyone could provide an example level using the new method it would be very helpful.
Title: Re: Internal commands
Post by: Dav999 on December 28, 2012, 05:51:15 AM
It either freezes the game or makes  :viridian: walk non-stop.

That may happen with the old method too. If it happens, the only way to fix it is restarting VVVVVV. If it still doesn't work, you should redirect to the script from another script. That means: make :viridian: walk through a script box with the command iftrinkets(0,scriptname) (the script name can be anything you want, but don't use CAPITALS or $ymbols. (you can use numbers)) Then, make a script with the same name as you use in iftrinkets, containing the actual script using the new method.
Title: Re: Internal commands
Post by: RibShark on December 28, 2012, 06:18:50 AM
It either freezes the game or makes  :viridian: walk non-stop.
That means: make :viridian: walk through a script box with the command iftrinkets(0,scriptname) (the script name can be anything you want, but don't use CAPITALS or $ymbols. (you can use numbers)) Then, make a script with the same name as you use in iftrinkets, containing the actual script using the new method.

That's what I'm doing...
Title: Re: Internal commands
Post by: FIQ on December 28, 2012, 06:24:09 AM
I don't know why that happens but I believe it happens when you make VVVVVV try unknown commands (which can only happen when playing with internal scripts, as they are simply removed otherwise).

After you've restarted. make sure the script format is like this:


script1:
iftrinkets(0,script2)

script2:
say(5)
internal
internal
internal
internal
text(1,0,0,4)
say(3)
internal
internal
etc...
text(1,0,0,4)

Do NOT have anything below the last text(1,0,0,4) except for exactly ONE blank row (if you don't, the last line gets removed).

If you still can't get it to work, upload the level so I/anyone else can tell you what you're doing wrong.
Title: Re: Internal commands
Post by: RibShark on December 28, 2012, 06:30:11 AM
Strange, it's working now... thanks anyway.
Title: Re: Internal commands
Post by: Dav999 on December 28, 2012, 08:27:35 AM
I don't know why that happens but I believe it happens when you make VVVVVV try unknown commands (which can only happen when playing with internal scripts, as they are simply removed otherwise).

I think it happens if you press esc while executing the script. Sometimes it happens to me, then I save and restart, and when I load and test the level it doesn't happen, without changing the script.
Title: Re: Internal commands
Post by: Hennal on January 03, 2013, 12:20:03 PM
How do you activate internals on there own without cutscene bars?
Plz help!  :victoria:
Title: Re: Internal commands
Post by: Hennal on January 03, 2013, 12:27:51 PM
All I seem to get is a quick pause.
I use:

say(-1)
text(1,0,0,4)
say(4)
[Internal]
endcutscene
untilbars
loadscript(stop)
Title: Re: Internal commands
Post by: ToasterApocalypse on January 03, 2013, 12:33:01 PM
All I seem to get is a quick pause.
I use:

say(-1)
text(1,0,0,4)
say(4)
[Internal]
endcutscene
untilbars
loadscript(stop)

Use this instead.
Code: (script1) [Select]
iftrinkets(0,script2)
Code: (script2) [Select]
say(2)
[internal]
loadscript(stop)
text(1,0,0,4)

or something like that.
Title: Re: Internal commands
Post by: Dav999 on January 03, 2013, 01:04:02 PM
All I seem to get is a quick pause.
I use:

say(-1)
text(1,0,0,4)
say(4)
[Internal]
endcutscene
untilbars
loadscript(stop)

Use this instead.
Code: (script1) [Select]
iftrinkets(0,script2)
Code: (script2) [Select]
say(2)
[internal]
loadscript(stop)
text(1,0,0,4)

or something like that.

You can also use more internal commands at once, like this for example:

Code: [Select]
say(5)
<internal>
<internal>
<internal>
<internal>
text(1,0,0,4)
say(5)
<internal>
<internal>
<internal>
<internal>
text(1,0,0,4)
say(4)
<internal>
<internal>
<internal>
loadscript(stop)

As long as you redirect to the script with iftrinkets(0,script_name)

OT: @ToasterApocalypse: I didn't know about that [code=text] trick!
Title: Re: Internal commands
Post by: ToasterApocalypse on January 03, 2013, 01:17:21 PM
OT: @ToasterApocalypse: I didn't know about that [code=text] trick!

I was just experimenting with something, and it seemed to work.
Title: Re: Internal commands
Post by: Hennal on January 04, 2013, 02:48:58 AM
I used iftrinkets and ifflag and it didn't work; I just walked straight through the script.
Title: Re: Internal commands
Post by: Hennal on January 04, 2013, 02:52:50 AM
I used iftrinkets and ifflag and it didn't work; I just walked straight through the script.
or executed the internal code in a text.
Title: Re: Internal commands
Post by: Hennal on January 04, 2013, 02:56:34 AM
And I know you can use internal code in chunks and also use internal and simple in one like this:

say(1,red)
Hi!
reply
Hi!
say(-1)
text(1,0,0,4)
say(4)
[Internal]
endcutscene
untilbars
loadscript(stop)

And it worked fine.
Title: Re: Internal commands
Post by: Hennal on January 04, 2013, 03:06:03 AM
YES! Used

Code: [Select]
#
A)Say
[Internal]
Title: Re: Internal commands
Post by: Hennal on January 04, 2013, 03:14:36 AM
What the...
I got it once but not when I NEED IT?!  >:(
God.
 :violet:
This is dumb.
Title: Re: Internal commands
Post by: Dav999 on January 04, 2013, 04:29:36 AM
Quintuple posts? There's a modify button... ::)

Anyway, I'm going to make an example level, so you can see what's supposed to happen.

EDIT: Ok, I made an example level, so you can see it for yourself. We forgot to say that you need to have exactly one empty line after the text(1,0,0,4) at the end, otherwise it doesn't work.
Title: Re: Internal commands
Post by: Hennal on January 04, 2013, 05:28:36 AM
Quintuple posts? There's a modify button... ::)

Anyway, I'm going to make an example level, so you can see what's supposed to happen.

EDIT: Ok, I made an example level, so you can see it for yourself. We forgot to say that you need to have exactly one empty line after the text(1,0,0,4) at the end, otherwise it doesn't work.
Ok I get it.
Title: Re: Internal commands
Post by: Hennal on January 04, 2013, 05:36:12 AM
So it's like this:

script1:
iftrinkets(0,script2)

script2:
say(4)
[Internal]
loadscript(stop)
text(1,0,0,4)

Like that, right? I looked at the example in the level you sent and it worked fine. BUT, if I like go
into the script it just appears as the internal code in text and doesn't work when you go into
test.
Title: Re: Internal commands
Post by: Hennal on January 04, 2013, 05:41:59 AM
Anyway, if you look into this level here then you can see the small pause that the game inserts:

Title: Re: Internal commands
Post by: Dav999 on January 04, 2013, 06:09:20 AM
Anyway, if you look into this level here then you can see the small pause that the game inserts:

So, are we talking about summittele and summittele2? You don't need to use iftrinkets(0,summittele2) if you use the say(-1) method. The say(-1) method creates cutscene bars though, and if you want to have that script without cutscene bars, you do need the iftrinkets(0,summittele2), and you have to remove the 'flash', 'say(-1)' and 'text(1,0,0,4)' at the beginning of summittele2 and insert 'text(1,0,0,4)' at the end, making sure that there is exactly one line after the last text(1,0,0,4). The flash can just be put in summittele, before iftrinkets(0,summittele2).

So this:

Code: (summittele) [Select]
iftrinkets(0,summittele2)
Code: (summittele2) [Select]
flash
say(-1)
text(1,0,0,4)
say(4)
gotoroom(3,15)
endcutscene
untilbars
loadscript(stop)


becomes this:

Code: (summittele) [Select]
flash
iftrinkets(0,summittele2)
Code: (summittele2) [Select]
say(4)
gotoroom(3,15)
endcutscene
untilbars
loadscript(stop)
text(1,0,0,4)

However, in summittele2, the endcutscene and untilbars can be removed now, because no cutscene bars were created in the first place (and say(4) has to be changed into say(2)):

Code: (summittele2) [Select]
say(2)
gotoroom(3,15)
loadscript(stop)
text(1,0,0,4)

And that can also be:

Code: (summittele2) [Select]
#
A)Say
gotoroom(3,15)

because you only want to use one command, namely gotoroom(3,15). So the end result is this:

Code: (summittele) [Select]
flash
iftrinkets(0,summittele2)
Code: (summittele2) [Select]
#
A)Say
gotoroom(3,15)
Title: Re: Internal commands
Post by: Hennal on January 04, 2013, 06:12:32 AM
Anyway, if you look into this level here then you can see the small pause that the game inserts:

So, are we talking about summittele and summittele2? You don't need to use iftrinkets(0,summittele2) if you use the say(-1) method. The say(-1) method creates cutscene bars though, and if you want to have that script without cutscene bars, you do need the iftrinkets(0,summittele2), and you have to remove the 'flash', 'say(-1)' and 'text(1,0,0,4)' at the beginning of summittele2 and insert 'text(1,0,0,4)' at the end, making sure that there is exactly one line after the last text(1,0,0,4). The flash can just be put in summittele, before iftrinkets(0,summittele2).

So this:

Code: (summittele) [Select]
iftrinkets(0,summittele2)
Code: (summittele2) [Select]
flash
say(-1)
text(1,0,0,4)
say(4)
gotoroom(3,15)
endcutscene
untilbars
loadscript(stop)


becomes this:

Code: (summittele) [Select]
flash
iftrinkets(0,summittele2)
Code: (summittele2) [Select]
say(4)
gotoroom(3,15)
endcutscene
untilbars
loadscript(stop)
text(1,0,0,4)

However, in summittele2, the endcutscene and untilbars can be removed now, because no cutscene bars were created in the first place (and say(4) has to be changed into say(2)):

Code: (summittele2) [Select]
say(2)
gotoroom(3,15)
loadscript(stop)
text(1,0,0,4)

And that can also be:

Code: (summittele2) [Select]
#
A)Say
gotoroom(3,15)

because you only want to use one command, namely gotoroom(3,15). So the end result is this:

Code: (summittele) [Select]
flash
iftrinkets(0,summittele2)
Code: (summittele2) [Select]
#
A)Say
gotoroom(3,15)

Awesome.
Title: Re: Internal commands
Post by: Hennal on January 04, 2013, 07:02:02 AM
Anyway, if you look into this level here then you can see the small pause that the game inserts:

So, are we talking about summittele and summittele2? You don't need to use iftrinkets(0,summittele2) if you use the say(-1) method. The say(-1) method creates cutscene bars though, and if you want to have that script without cutscene bars, you do need the iftrinkets(0,summittele2), and you have to remove the 'flash', 'say(-1)' and 'text(1,0,0,4)' at the beginning of summittele2 and insert 'text(1,0,0,4)' at the end, making sure that there is exactly one line after the last text(1,0,0,4). The flash can just be put in summittele, before iftrinkets(0,summittele2).

So this:

Code: (summittele) [Select]
iftrinkets(0,summittele2)
Code: (summittele2) [Select]
flash
say(-1)
text(1,0,0,4)
say(4)
gotoroom(3,15)
endcutscene
untilbars
loadscript(stop)


becomes this:

Code: (summittele) [Select]
flash
iftrinkets(0,summittele2)
Code: (summittele2) [Select]
say(4)
gotoroom(3,15)
endcutscene
untilbars
loadscript(stop)
text(1,0,0,4)

However, in summittele2, the endcutscene and untilbars can be removed now, because no cutscene bars were created in the first place (and say(4) has to be changed into say(2)):

Code: (summittele2) [Select]
say(2)
gotoroom(3,15)
loadscript(stop)
text(1,0,0,4)

And that can also be:

Code: (summittele2) [Select]
#
A)Say
gotoroom(3,15)

because you only want to use one command, namely gotoroom(3,15). So the end result is this:

Code: (summittele) [Select]
flash
iftrinkets(0,summittele2)
Code: (summittele2) [Select]
#
A)Say
gotoroom(3,15)

You are my hero. (Works)
Title: Re: Internal commands
Post by: Hennal on January 04, 2013, 07:11:29 AM
This worked perfect:

Code: (example1) [Select]
iftrinkets(0,example2)
Code: (example2) [Select]
#
A)Say
[Internal]
Title: Re: Internal commands
Post by: Dav999 on January 07, 2013, 10:43:51 AM
I put the method without cutscene bars in the first post, and I also made a vvvvvv level with those two methods, so people can see it in the editor.

And that post is REALLY long now. ::)
Title: Re: Internal commands
Post by: FIQ on January 07, 2013, 07:08:13 PM
You should make gamemode() blue. gamemode(teleporter) shows the map but it just shows the maingame map instead of the map custom levels get.
Title: Re: Internal commands
Post by: Hennal on January 08, 2013, 09:33:09 AM
You should make gamemode() blue. gamemode(teleporter) shows the map but it just shows the maingame map instead of the map custom levels get.

Yeah, I've noticed that as well. I even used it in my level, The Colour Spiral, if you go down the
shaft at the Divot once you've got 3 trinkets you can activate the terminal which activates
room coords that were not used in the actual level for some reason. (room 10,10)
 
Title: Re: Internal commands
Post by: Dav999 on January 08, 2013, 11:49:31 AM
You should make gamemode() blue. gamemode(teleporter) shows the map but it just shows the maingame map instead of the map custom levels get.

Done :)

Wow, 500 replies in this topic! :o
Title: Re: Internal commands
Post by: Hennal on January 13, 2013, 02:45:53 AM
createentity() teleporters are safe to touch as long as you put activateteleporter() straight
after.
Title: Re: Internal commands
Post by: Hilbert on January 13, 2013, 02:15:44 PM
You should make gamemode() blue. gamemode(teleporter) shows the map but it just shows the maingame map instead of the map custom levels get.

Done :)

Wow, 500 replies in this topic! :o
Wait, I thought a bunch of people posted after this? Seems like they all got deleted.
Title: Re: Internal commands
Post by: Dav999 on January 13, 2013, 02:59:12 PM
You should make gamemode() blue. gamemode(teleporter) shows the map but it just shows the maingame map instead of the map custom levels get.

Done :)

Wow, 500 replies in this topic! :o
Wait, I thought a bunch of people posted after this? Seems like they all got deleted.

You're right! From what I recall, there were two rather useless posts (the first one was VVHAT VVHAT VVHAT and the second one was just a quote).

Anyway, back on topic. That activateteleporter() can also be placed in a script next to the teleporter, so you can walk to the teleporter and make it look like you activated the teleporter by touching, just like in the main game. There's still one disadvantage: it looks like you're about to teleport. Teleporters have three states: gray/untouched, white/touched/game saved, and teleporting. activateteleporter() goes straight to teleporting.
Title: Re: Internal commands
Post by: FIQ on January 13, 2013, 03:32:19 PM
I tried, by utilizing game states, trick the game to turn off the autosaving behaviour by activating time trial mode. If you made this, you would be able to replicate the main game even more by having the real teleport system in place. However it didn't do what I want.
Title: Re: Internal commands
Post by: Dav999 on January 13, 2013, 03:44:14 PM
I tried, by utilizing game states, trick the game to turn off the autosaving behaviour by activating time trial mode. If you made this, you would be able to replicate the main game even more by having the real teleport system in place. However it didn't do what I want.

What's the behavior of teleporters in time trial mode? Time trials stop before reaching the final teleporter in a level, and the mid-level one in the lab is gone. So, is there anything else which can stop the game from saving? (Like corrupting something somewhere in the level which the game detects so it triggers a 'could not save' sort of thing? I guess not. :D)
Title: Re: Internal commands
Post by: FIQ on January 13, 2013, 03:54:09 PM
I tried, by utilizing game states, trick the game to turn off the autosaving behaviour by activating time trial mode. If you made this, you would be able to replicate the main game even more by having the real teleport system in place. However it didn't do what I want.

What's the behavior of teleporters in time trial mode? Time trials stop before reaching the final teleporter in a level, and the mid-level one in the lab is gone. So, is there anything else which can stop the game from saving? (Like corrupting something somewhere in the level which the game detects so it triggers a 'could not save' sort of thing? I guess not. :D)
Now that you mention it, Time Trial maybe doesn't really stop saving. I however know that level replay and no death DO stop saving. However, none of these are accessible within the scripting language (even the internal one).
Title: Re: Internal commands
Post by: Chillius on January 17, 2013, 10:52:52 AM
On-topic:

Shouldn't the definition of final mode(x,y) be changed? Or, do you mean it only works with final mode(46,54)? I guess it should work with other values, and that 46,54 is the room FIQ said to work, probably leading to Panic Room...

I've never tried finalmode, so I don't know what will happen if you use other coordinates.

it just takes you to the normal map
Title: Re: Internal commands
Post by: FIQ on January 17, 2013, 12:18:10 PM
finalmode() is just an equavilent of gotoroom() but takes you to the polar dimension.
Title: Re: Internal commands
Post by: Dav999 on January 20, 2013, 12:16:24 PM
Okay, flipme and tofloor don't always work, but I discovered that you can just use 'flip' to flip either way, that always works. Why didn't anyone discover that earlier?
Title: Re: Internal commands
Post by: FIQ on January 20, 2013, 12:39:13 PM
Okay, flipme and tofloor don't always work, but I discovered that you can just use 'flip' to flip either way, that always works. Why didn't anyone discover that earlier?
I knew there was something that did work as I found it earlier, then I forgot that command ._.

Anyway, there's a flaw with the command -- you can't detect flip state properly, so you can't make Viridian always be on the floor.
Title: Re: Internal commands
Post by: Dav999 on January 20, 2013, 12:45:02 PM
Okay, flipme and tofloor don't always work, but I discovered that you can just use 'flip' to flip either way, that always works. Why didn't anyone discover that earlier?
I knew there was something that did work as I found it earlier, then I forgot that command ._.

Anyway, there's a flaw with the command -- you can't detect flip state properly, so you can't make Viridian always be on the floor.

You can also place the flip script on the ceiling, and the normal script on the floor.
Title: Re: Internal commands
Post by: FIQ on January 20, 2013, 01:27:04 PM
Okay, flipme and tofloor don't always work, but I discovered that you can just use 'flip' to flip either way, that always works. Why didn't anyone discover that earlier?
I knew there was something that did work as I found it earlier, then I forgot that command ._.

Anyway, there's a flaw with the command -- you can't detect flip state properly, so you can't make Viridian always be on the floor.

You can also place the flip script on the ceiling, and the normal script on the floor.
Sure? What if the user approach the floor script while flipped, by flipping right before?
Title: Re: Internal commands
Post by: Dav999 on January 20, 2013, 01:37:52 PM
Okay, flipme and tofloor don't always work, but I discovered that you can just use 'flip' to flip either way, that always works. Why didn't anyone discover that earlier?
I knew there was something that did work as I found it earlier, then I forgot that command ._.

Anyway, there's a flaw with the command -- you can't detect flip state properly, so you can't make Viridian always be on the floor.

You can also place the flip script on the ceiling, and the normal script on the floor.
Sure? What if the user approach the floor script while flipped, by flipping right before?

Yes, you still have to place the scripts in such a way so that isn't possible.
Title: Re: Internal commands
Post by: Chillius on January 21, 2013, 02:13:17 AM
flipme is actually used in the real game. but i don't think it works. it doesn't for me.

 
Title: Re: Internal commands
Post by: Dav999 on January 21, 2013, 05:46:30 AM
flipme is actually used in the real game. but i don't think it works. it doesn't for me.

Yes, all three ('flipme', 'tofloor' and 'flip') are used apparently. Only 'flip' can be used reliably. When I tried to test flip, it always worked, and it worked either way. I also tried flipme and tofloor, flipme didn't work, tofloor did.

Is there also a way to make crewmates flip to the floor? I know you can flip them to the ceiling, but to the floor?
Title: Re: Internal commands
Post by: Dav999 on January 24, 2013, 01:54:49 AM
Okay, I looked in the binary again, and I don't think 'flipme' has anything to do with flipping :viridian:. It's in between 'backgroundtext' and 'speak' in a script of a terminal, and you don't flip there. ??? Does it have something to do with text boxes?

Also, endtext_fast was wrong, it should be endtextfast.
Title: Re: Internal commands
Post by: blue626 on January 25, 2013, 11:38:55 AM
I just realized something.

You might not be aware of it, but it's an incredibly annoying glitch related to chain loading scripts that might make the script after the first one refuse to load.

Well.. I might have found out why. It's related to the internal scripting w/o cutscenes method.

For example, this (usually) fail:

a:
iftrinkets(0,b)

b:
flash
iftrinkets(0,c)

c:
say(1)
Test

The solution is to make a third line in b, with whatever content you like (I usually use ifflag(work,around)).

Now, try to replace iftrinkets(0,c) with alarmon. This triggers the ship alarm!

So it seems that (something)Say is completely unneeded - but it's generally a quirk in script loading! It seems like it's loading the last line as an internal scripting command for some weird reason.

Now, the first thing I thought when doing this is that then the script should be possible to load using the internal command for iftrinkets() -- customiftrinkets(). Well, I tried, but it didn't do anything. Possibly the same thing that stops move() to work properly for this method?

Really? So the last line is always loaded as an internal command? Will it also be the first line that's executed in every script? It may be unnoticed because most of the time, the last line is text which belongs to a text box, or it's destroy(x), which works the same as an internal command. The only conflicting command which would be used at the end of a script is iftrinkets(0,x). I always fixed it by placing a text box at the end, which says an error occurred, just like you use iftrinkets(work,around).
I don't know if it's always the case, but it's possible. And yeah, it's not weird that it has gone unnoticed.

Let me just understand this. Are you saying that sometimes iftrinkets(x,script) doesn't work when it's at the end of the script even if that script (or the one inside iftrinkets) hasn't got internal scripting?!? Wouldn't flash and ifflag confict too (becuase if converts to costumifflag)?
I once executed this script:

script1:
iftrinkets(0,script2)

script2:
flash

Of course both have an empty line at the end. It worked although I only tried it once.

Is this off-topic?
Title: Re: Internal commands
Post by: Dav999 on January 25, 2013, 12:19:58 PM
I just realized something.

You might not be aware of it, but it's an incredibly annoying glitch related to chain loading scripts that might make the script after the first one refuse to load.

Well.. I might have found out why. It's related to the internal scripting w/o cutscenes method.

For example, this (usually) fail:

a:
iftrinkets(0,b)

b:
flash
iftrinkets(0,c)

c:
say(1)
Test

The solution is to make a third line in b, with whatever content you like (I usually use ifflag(work,around)).

Now, try to replace iftrinkets(0,c) with alarmon. This triggers the ship alarm!

So it seems that (something)Say is completely unneeded - but it's generally a quirk in script loading! It seems like it's loading the last line as an internal scripting command for some weird reason.

Now, the first thing I thought when doing this is that then the script should be possible to load using the internal command for iftrinkets() -- customiftrinkets(). Well, I tried, but it didn't do anything. Possibly the same thing that stops move() to work properly for this method?

Really? So the last line is always loaded as an internal command? Will it also be the first line that's executed in every script? It may be unnoticed because most of the time, the last line is text which belongs to a text box, or it's destroy(x), which works the same as an internal command. The only conflicting command which would be used at the end of a script is iftrinkets(0,x). I always fixed it by placing a text box at the end, which says an error occurred, just like you use iftrinkets(work,around).
I don't know if it's always the case, but it's possible. And yeah, it's not weird that it has gone unnoticed.

Let me just understand this. Are you saying that sometimes iftrinkets(x,script) doesn't work when it's at the end of the script even if that script (or the one inside iftrinkets) hasn't got internal scripting?!? Wouldn't flash and ifflag confict too (becuase if converts to costumifflag)?
I once executed this script:

script1:
iftrinkets(0,script2)

script2:
flash

Of course both have an empty line at the end. It worked although I only tried it once.

Is this off-topic?

What happens if you replace the flash by alarmon? Maybe the last line is first loaded as an internal command, and then the script runs normally and runs the last line again at the end, but as a simplified command this time?

(And no, this is not off-topic, it's about internal commands anyway)
Title: Re: Internal commands
Post by: FIQ on January 25, 2013, 02:15:19 PM
Try to have 2 lines in script2, having the latest line being the command you want to test. Make sure to have no more than 1 empty line below the last line in script2.
Title: Re: Internal commands
Post by: ToasterApocalypse on February 02, 2013, 02:20:48 PM
Lets do this:

changetile(x) sprite IDs.
Title: Re: Internal commands
Post by: FIQ on February 02, 2013, 04:50:23 PM
Lets do this:

changetile(x) sprite IDs.
View in the data directory for VVVVVV, sprites.png. From left to right, up to down
Title: Re: Internal commands
Post by: Dav999 on February 03, 2013, 12:58:15 PM
Lets do this:

changetile(x) sprite IDs.
View in the data directory for VVVVVV, sprites.png. From left to right, up to down

And some sprites are bigger than the others, those actually consist of multiple pieces so you might also get the top left part of the bus or a teleporter, for example...
Title: Re: Internal commands
Post by: FIQ on February 04, 2013, 04:13:36 AM
I was creating an user interface abusing backgroundtext heavily showing various dialogs at screen. I found out the hard way that VVVVVV seems to have a hard limit on the amount of dialogs shown before things must reset. What reset means is something I don't know, but having 11 dialogs which reload themselves (even after "endtext") crashes VVVVVV after 3 runs (and glitches after 2). I believe the hard limit is 20.

You can work around this by using endtextfast (NOT endtext) and a delay of at least 3. However, dialogs doesn't become as seamless then.

Point is: don't abuse backgroundtext too much, unless you're fine with a work-around that may make things not look too nice.
Title: Re: Internal commands
Post by: Dav999 on February 04, 2013, 06:20:56 AM
I was creating an user interface abusing backgroundtext heavily showing various dialogs at screen. I found out the hard way that VVVVVV seems to have a hard limit on the amount of dialogs shown before things must reset. What reset means is something I don't know, but having 11 dialogs which reload themselves (even after "endtext") crashes VVVVVV after 3 runs (and glitches after 2). I believe the hard limit is 20.

You can work around this by using endtextfast (NOT endtext) and a delay of at least 3. However, dialogs doesn't become as seamless then.

Point is: don't abuse backgroundtext too much, unless you're fine with a work-around that may make things not look too nice.

I wonder how you can create a user interface with only one button and barely any conditional things...

Oh, and maybe textboxactive can help. It's clears all dialogs on the screen except for the last one created. So if you create 3 text boxes to be displayed at the same time, when you use endtext or endtextfast, all three will be cleared at once, but if you use textboxactive, only the first two are cleared, and the last one remains on the screen!
Title: Re: Internal commands
Post by: FIQ on February 04, 2013, 06:23:57 AM
I was creating an user interface abusing backgroundtext heavily showing various dialogs at screen. I found out the hard way that VVVVVV seems to have a hard limit on the amount of dialogs shown before things must reset. What reset means is something I don't know, but having 11 dialogs which reload themselves (even after "endtext") crashes VVVVVV after 3 runs (and glitches after 2). I believe the hard limit is 20.

You can work around this by using endtextfast (NOT endtext) and a delay of at least 3. However, dialogs doesn't become as seamless then.

Point is: don't abuse backgroundtext too much, unless you're fine with a work-around that may make things not look too nice.

I wonder how you can create a user interface with only one button and barely any conditional things...

Oh, and maybe textboxactive can help. It's clears all dialogs on the screen except for the last one created. So if you create 3 text boxes to be displayed at the same time, when you use endtext or endtextfast, all three will be cleared at once, but if you use textboxactive, only the first two are cleared, and the last one remains on the screen!
You have 3 buttons actually.
Look at my screenshot in Back to VVVVVV :P
Regarding textboxactive -- problem is that you have to clear *all* dialogs and wait some minimal time for them to get away from screen to "reset" the hard limit dialog amount. Also, sure you don't mean speak_active?

This hard limit, I believe it's what causes textboxes to be completely empty after a very long dialog, an issue even outside internal scripting.

And, the lack of real conditionals doesn't make it impossible, just a bit more complex :P

The total amount of scripts in my user interface ended up being 35 and it used 8 flags. In that state, everything was working properly without issues.
Title: Re: Internal commands
Post by: Dav999 on February 04, 2013, 06:36:40 AM
I was creating an user interface abusing backgroundtext heavily showing various dialogs at screen. I found out the hard way that VVVVVV seems to have a hard limit on the amount of dialogs shown before things must reset. What reset means is something I don't know, but having 11 dialogs which reload themselves (even after "endtext") crashes VVVVVV after 3 runs (and glitches after 2). I believe the hard limit is 20.

You can work around this by using endtextfast (NOT endtext) and a delay of at least 3. However, dialogs doesn't become as seamless then.

Point is: don't abuse backgroundtext too much, unless you're fine with a work-around that may make things not look too nice.

I wonder how you can create a user interface with only one button and barely any conditional things...

Oh, and maybe textboxactive can help. It's clears all dialogs on the screen except for the last one created. So if you create 3 text boxes to be displayed at the same time, when you use endtext or endtextfast, all three will be cleared at once, but if you use textboxactive, only the first two are cleared, and the last one remains on the screen!
You have 3 buttons actually.
Look at my screenshot in Back to VVVVVV :P
Regarding textboxactive -- problem is that you have to clear *all* dialogs and wait some minimal time for them to get away from screen to "reset" the hard limit dialog amount. Also, sure you don't mean speak_active?

No, I meant textboxactive. Still, it might be handy if you have one dialog with the menu.

This hard limit, I believe it's what causes textboxes to be completely empty after a very long dialog, an issue even outside internal scripting.

So, does it appear at the 20th text box?
Title: Re: Internal commands
Post by: FIQ on February 04, 2013, 06:43:16 AM
I was creating an user interface abusing backgroundtext heavily showing various dialogs at screen. I found out the hard way that VVVVVV seems to have a hard limit on the amount of dialogs shown before things must reset. What reset means is something I don't know, but having 11 dialogs which reload themselves (even after "endtext") crashes VVVVVV after 3 runs (and glitches after 2). I believe the hard limit is 20.

You can work around this by using endtextfast (NOT endtext) and a delay of at least 3. However, dialogs doesn't become as seamless then.

Point is: don't abuse backgroundtext too much, unless you're fine with a work-around that may make things not look too nice.

I wonder how you can create a user interface with only one button and barely any conditional things...

Oh, and maybe textboxactive can help. It's clears all dialogs on the screen except for the last one created. So if you create 3 text boxes to be displayed at the same time, when you use endtext or endtextfast, all three will be cleared at once, but if you use textboxactive, only the first two are cleared, and the last one remains on the screen!
You have 3 buttons actually.
Look at my screenshot in Back to VVVVVV :P
Regarding textboxactive -- problem is that you have to clear *all* dialogs and wait some minimal time for them to get away from screen to "reset" the hard limit dialog amount. Also, sure you don't mean speak_active?

No, I meant textboxactive. Still, it might be handy if you have one dialog with the menu.

This hard limit, I believe it's what causes textboxes to be completely empty after a very long dialog, an issue even outside internal scripting.

So, does it appear at the 20th text box?
I made an isolated test case with the following script

Code: (test) [Select]
say
1
say
2
say
3
say
4
(...)
say
42
say
43

The 21th textbox fails to appear. Then, dialogs appeared again until the 42nd one. This confirms what I said earlier.

If you proceed to insert a delay(10) like this:

Code: (test) [Select]
say
20
delay(10)
say
21
the 21th dialog appears normally. Though, it will not look too nice compared to the other transistions between dialogs, but it's the only way I know of to avoid this issue.
Title: Re: Internal commands
Post by: Dav999 on February 04, 2013, 09:18:21 AM
I was creating an user interface abusing backgroundtext heavily showing various dialogs at screen. I found out the hard way that VVVVVV seems to have a hard limit on the amount of dialogs shown before things must reset. What reset means is something I don't know, but having 11 dialogs which reload themselves (even after "endtext") crashes VVVVVV after 3 runs (and glitches after 2). I believe the hard limit is 20.

You can work around this by using endtextfast (NOT endtext) and a delay of at least 3. However, dialogs doesn't become as seamless then.

Point is: don't abuse backgroundtext too much, unless you're fine with a work-around that may make things not look too nice.

I wonder how you can create a user interface with only one button and barely any conditional things...

Oh, and maybe textboxactive can help. It's clears all dialogs on the screen except for the last one created. So if you create 3 text boxes to be displayed at the same time, when you use endtext or endtextfast, all three will be cleared at once, but if you use textboxactive, only the first two are cleared, and the last one remains on the screen!
You have 3 buttons actually.
Look at my screenshot in Back to VVVVVV :P
Regarding textboxactive -- problem is that you have to clear *all* dialogs and wait some minimal time for them to get away from screen to "reset" the hard limit dialog amount. Also, sure you don't mean speak_active?

No, I meant textboxactive. Still, it might be handy if you have one dialog with the menu.

This hard limit, I believe it's what causes textboxes to be completely empty after a very long dialog, an issue even outside internal scripting.

So, does it appear at the 20th text box?
I made an isolated test case with the following script

Code: (test) [Select]
say
1
say
2
say
3
say
4
(...)
say
42
say
43

The 21th textbox fails to appear. Then, dialogs appeared again until the 42nd one. This confirms what I said earlier.

If you proceed to insert a delay(10) like this:

Code: (test) [Select]
say
20
delay(10)
say
21
the 21th dialog appears normally. Though, it will not look too nice compared to the other transistions between dialogs, but it's the only way I know of to avoid this issue.

So only the 21st, 42nd, etc. don't appear? If you make each text box appear twice, all boxes should show up! One of them eventually becomes the 21st dialog, but the other one still appears.
Title: Re: Internal commands
Post by: FIQ on February 04, 2013, 09:42:24 AM
I was creating an user interface abusing backgroundtext heavily showing various dialogs at screen. I found out the hard way that VVVVVV seems to have a hard limit on the amount of dialogs shown before things must reset. What reset means is something I don't know, but having 11 dialogs which reload themselves (even after "endtext") crashes VVVVVV after 3 runs (and glitches after 2). I believe the hard limit is 20.

You can work around this by using endtextfast (NOT endtext) and a delay of at least 3. However, dialogs doesn't become as seamless then.

Point is: don't abuse backgroundtext too much, unless you're fine with a work-around that may make things not look too nice.

I wonder how you can create a user interface with only one button and barely any conditional things...

Oh, and maybe textboxactive can help. It's clears all dialogs on the screen except for the last one created. So if you create 3 text boxes to be displayed at the same time, when you use endtext or endtextfast, all three will be cleared at once, but if you use textboxactive, only the first two are cleared, and the last one remains on the screen!
You have 3 buttons actually.
Look at my screenshot in Back to VVVVVV :P
Regarding textboxactive -- problem is that you have to clear *all* dialogs and wait some minimal time for them to get away from screen to "reset" the hard limit dialog amount. Also, sure you don't mean speak_active?

No, I meant textboxactive. Still, it might be handy if you have one dialog with the menu.

This hard limit, I believe it's what causes textboxes to be completely empty after a very long dialog, an issue even outside internal scripting.

So, does it appear at the 20th text box?
I made an isolated test case with the following script

Code: (test) [Select]
say
1
say
2
say
3
say
4
(...)
say
42
say
43

The 21th textbox fails to appear. Then, dialogs appeared again until the 42nd one. This confirms what I said earlier.

If you proceed to insert a delay(10) like this:

Code: (test) [Select]
say
20
delay(10)
say
21
the 21th dialog appears normally. Though, it will not look too nice compared to the other transistions between dialogs, but it's the only way I know of to avoid this issue.

So only the 21st, 42nd, etc. don't appear? If you make each text box appear twice, all boxes should show up! One of them eventually becomes the 21st dialog, but the other one still appears.
What do you mean with making every textbox appear twice? Once a textbox doesn't appear, no further textbox will appear unless you let go of all textboxes (which can only be done properly without user action manually with a delay)
Title: Re: Internal commands
Post by: Dav999 on February 04, 2013, 10:38:22 AM
I was creating an user interface abusing backgroundtext heavily showing various dialogs at screen. I found out the hard way that VVVVVV seems to have a hard limit on the amount of dialogs shown before things must reset. What reset means is something I don't know, but having 11 dialogs which reload themselves (even after "endtext") crashes VVVVVV after 3 runs (and glitches after 2). I believe the hard limit is 20.

You can work around this by using endtextfast (NOT endtext) and a delay of at least 3. However, dialogs doesn't become as seamless then.

Point is: don't abuse backgroundtext too much, unless you're fine with a work-around that may make things not look too nice.

I wonder how you can create a user interface with only one button and barely any conditional things...

Oh, and maybe textboxactive can help. It's clears all dialogs on the screen except for the last one created. So if you create 3 text boxes to be displayed at the same time, when you use endtext or endtextfast, all three will be cleared at once, but if you use textboxactive, only the first two are cleared, and the last one remains on the screen!
You have 3 buttons actually.
Look at my screenshot in Back to VVVVVV :P
Regarding textboxactive -- problem is that you have to clear *all* dialogs and wait some minimal time for them to get away from screen to "reset" the hard limit dialog amount. Also, sure you don't mean speak_active?

No, I meant textboxactive. Still, it might be handy if you have one dialog with the menu.

This hard limit, I believe it's what causes textboxes to be completely empty after a very long dialog, an issue even outside internal scripting.

So, does it appear at the 20th text box?
I made an isolated test case with the following script

Code: (test) [Select]
say
1
say
2
say
3
say
4
(...)
say
42
say
43

The 21th textbox fails to appear. Then, dialogs appeared again until the 42nd one. This confirms what I said earlier.

If you proceed to insert a delay(10) like this:

Code: (test) [Select]
say
20
delay(10)
say
21
the 21th dialog appears normally. Though, it will not look too nice compared to the other transistions between dialogs, but it's the only way I know of to avoid this issue.

So only the 21st, 42nd, etc. don't appear? If you make each text box appear twice, all boxes should show up! One of them eventually becomes the 21st dialog, but the other one still appears.
What do you mean with making every textbox appear twice? Once a textbox doesn't appear, no further textbox will appear unless you let go of all textboxes (which can only be done properly without user action manually with a delay)

Oh, I forgot that you have to clear all text boxes (because if you use say, it automatically uses speak_active, and I forgot about that)
Title: Re: Internal commands
Post by: ToasterApocalypse on February 04, 2013, 11:20:14 AM
Is there a way to make  :viridian: move during a script?
Title: Re: Internal commands
Post by: Dav999 on February 04, 2013, 11:27:17 AM
Is there a way to make  :viridian: move during a script?

walk(left/right,tiles)
Title: Re: Internal commands
Post by: ToasterApocalypse on February 04, 2013, 11:30:14 AM
Is there a way to make  :viridian: move during a script?

walk(left/right,tiles)

Be controlled*
Title: Re: Internal commands
Post by: Dav999 on February 04, 2013, 11:53:52 AM
Is there a way to make  :viridian: move during a script?

walk(left/right,tiles)

Be controlled*

Oh, so that you can control him while running a script?

Unfortunately not. :(
Title: Re: Internal commands
Post by: FIQ on February 04, 2013, 12:15:25 PM
You can emulate the behaviour though. There was a member earlier who posted a seizure-prone level that switched colors (a bit like the final level did). By abusing flags you can make a script run in "background" by executing some stuff, turn on a flag, then gotoroom(<the room you are in currently>). This will trigger the script again, and so on. Keep in mind that you cannot have moving stuff in the room (enemies, platforms, conveyors, etc) and you can't make the script take up the whole room as it will prevent you from going to another room. This is the closest you can come to fully emulate VVVVVV gamestate behaviour with just scripting. However, this is very cumbersome to script and not really worth it, usually. Also, some things which may look very simple to emulate (like the dialog in the background in Comms Relay in the main game) will take a very large amount of flags and hundreds (maybe even thousends, depending on how fast VVVVVVscript really is) of scripts. What are you trying to achieve?

EDIT: Here's a proof of concept of what I mean, below. Go to the bottom right to see it in action.

The script re-runs once per tick, and has 11 "sub scripts". What happens is that a text box appears and disappears continuosly while maintaining player control. Flag preserving isn't optimal (in fact only 4 flags would be needed), but I just made this rather quickly.
Title: Re: Internal commands
Post by: Hilbert on February 05, 2013, 04:35:51 AM
Also, some things which may look very simple to emulate (like the dialog in the background in Comms Relay in the main game) will take a very large amount of flags and hundreds (maybe even thousends, depending on how fast VVVVVVscript really is) of scripts.
That's a hardcode. It's gamestate()ed.
Title: Re: Internal commands
Post by: FIQ on February 05, 2013, 07:41:02 AM
Also, some things which may look very simple to emulate (like the dialog in the background in Comms Relay in the main game) will take a very large amount of flags and hundreds (maybe even thousends, depending on how fast VVVVVVscript really is) of scripts.
That's a hardcode. It's gamestate()ed.
That was the point. Gamestates is basically scripts (at least most of them are) but they run in the background. Many of the states are dialogs, and prevent you to move by themselves, though. The only way to emulate this part of gamestate behaviour is as I described above.
Title: Re: Internal commands
Post by: blue626 on February 05, 2013, 01:13:20 PM
I was creating an user interface abusing backgroundtext heavily showing various dialogs at screen. (...)

I wonder how you can create a user interface with only one button and barely any conditional things...

Oh, and maybe textboxactive can help. It's clears all dialogs on the screen except for the last one created. So if you create 3 text boxes to be displayed at the same time, when you use endtext or endtextfast, all three will be cleared at once, but if you use textboxactive, only the first two are cleared, and the last one remains on the screen!
You have 3 buttons actually.
Look at my screenshot in Back to VVVVVV :P
(...)

And, the lack of real conditionals doesn't make it impossible, just a bit more complex :P

The total amount of scripts in my user interface ended up being 35 and it used 8 flags. In that state, everything was working properly without issues.

 :vitellary: ???
How can you make it so that the arrow keys affect a script (I guess those are the other 2 buttons)?
Didn't see any command that does that in the 2nd post.
Not that I'm going to use it in a level but... :o

You can emulate the behaviour though. There was a member earlier who posted a seizure-prone level that switched colors (a bit like the final level did). By abusing flags you can make a script run in "background" by executing some stuff, turn on a flag, then gotoroom(<the room you are in currently>). This will trigger the script again, and so on. Keep in mind that you cannot have moving stuff in the room (enemies, platforms, conveyors, etc) and you can't make the script take up the whole room as it will prevent you from going to another room.

Note: I didn't play that level (although I did read that post and saw the attachment).
Why do you need to turn a flag on? ???
If I'm understanding this well, you coulddo it in another way, without gotoroom... Try to find out for yourself. :P There's actually even another way without gotoroom, which is how I thought the level worked, although this one only works for a limited number of times.

EDIT: Wait, how do you switch colors with what you described? I guess I misunderstood and what I rote above isn't correct. :victoria: Still, it works for doing things repeatedly... which is what gotoroom(current room) does... :-\

EDIT 2: I'm going to play that level later to see if I understand this...
Title: Re: Internal commands
Post by: Dav999 on February 05, 2013, 01:41:56 PM
I was creating an user interface abusing backgroundtext heavily showing various dialogs at screen. (...)

I wonder how you can create a user interface with only one button and barely any conditional things...

Oh, and maybe textboxactive can help. It's clears all dialogs on the screen except for the last one created. So if you create 3 text boxes to be displayed at the same time, when you use endtext or endtextfast, all three will be cleared at once, but if you use textboxactive, only the first two are cleared, and the last one remains on the screen!
You have 3 buttons actually.
Look at my screenshot in Back to VVVVVV :P
(...)

And, the lack of real conditionals doesn't make it impossible, just a bit more complex :P

The total amount of scripts in my user interface ended up being 35 and it used 8 flags. In that state, everything was working properly without issues.

 :vitellary: ???
How can you make it so that the arrow keys affect a script (I guess those are the other 2 buttons)?
Didn't see any command that does that in the 2nd post.
Not that I'm going to use it in a level but... :o

I figured it out myself: you can put :viridian: in a specific spot with one script box to the left and one script box to the right, and another one above him. If you walk to either side, you trigger the script where the dialogs are displayed on screen, flags are changed, and :viridian: is teleported back to the original spot. I first thought the flipping part wouldn't work, because not using endtext after a script with normal dialogs meant that the dialog would not dissappear, and :viridian: wouldn't be able to flip while the text box is on the screen. However, this only applies to text boxes without backgroundtext.

I also made two examples of a level with a sort of interface, the first one has the 20-dialogs-cap-bug, which only occurs if you repeatedly move back and forth between the buttons more than 8 times. The second one doesn't, because you select in a different way (you just press left or right to directly 'click' a button, without first highlighting it and pressing action).

As always, please ignore the __MACOSX folder in the zip it's a hidden folder I can't change that etc etc.
Also ignore the typing error in the script (saing instead of saying)
Title: Re: Internal commands
Post by: blue626 on February 05, 2013, 02:42:28 PM
I did think of something like that... should have thought deeper.
Didn't play that level yet, but I'll play it and check the scripts.
This might be hard to do, but I believe it's possible: hold an arrow key for a short time, short enough so that :viridian: doesn't touch the script box. It's unavoidable, although it's unlikely to happen.
Why would you have a script box above :viridian:?
Perhaps making :viridian: invisible would be a good idea (or did you already do that?).
According to my calculations, I don't see why FIQ would need 35 scripts and 8 flags (considering his screenshot from Back to VVVVVV)...

Is there a way to make  :viridian: move during a script?

walk(left/right,tiles)

Be controlled*

Oh, so that you can control him while running a script?

Unfortunately not. :(

I thought you could do that with the No-cutscene-bars method? ???
Title: Re: Internal commands
Post by: Dav999 on February 05, 2013, 03:19:18 PM
I did think of something like that... should have thought deeper.
Didn't play that level yet, but I'll play it and check the scripts.
The script names are still a bit misleading, but these are from things I tried before having a yes/no dialog (first I had an easy/hard dialog, but I didn't change the name of the scripts. Also you might find some things which haven't been used yet (like centering a text box with -500,-500 as coordinates)

This might be hard to do, but I believe it's possible: hold an arrow key for a short time, short enough so that :viridian: doesn't touch the script box. It's unavoidable, although it's unlikely to happen.
That may also happen in other programs/applications/games, and it's not a big problem (it would be the user's fault if they deliberately press the button for a really short time, and it doesn't cause glitches at all.)

Why would you have a script box above :viridian:?
To check whether you pressed action/space (/up/down/z/v) to select something or not.

Perhaps making :viridian: invisible would be a good idea (or did you already do that?).
I used fadeout(), but you can also use blackout(), it freezes the screen instead of making it black. If the screen is frozen, you don't see :viridian: moving, but you have to cover up the background because otherwise you notice that the stars also stop moving. And text boxes won't be cleared correctly while 'blacked out', they will have faded a little bit, but they won't disappear.

Is there a way to make  :viridian: move during a script?

walk(left/right,tiles)

Be controlled*

Oh, so that you can control him while running a script?

Unfortunately not. :(

I thought you could do that with the No-cutscene-bars method? ???
That's something else. It can be used to simulate it, but it doesn't make you able to control :viridian: while the script is still running.
Title: Re: Internal commands
Post by: allison on February 05, 2013, 03:20:07 PM
Is there a way to make  :viridian: move during a script?

walk(left/right,tiles)

Be controlled*

Oh, so that you can control him while running a script?

Unfortunately not. :(

I thought you could do that with the No-cutscene-bars method? ???

The No-cutscene-bars method still locks the controls, but it's usually for a short enough time that it's not noticeable. However, longer scripts will noticeably lock the controls.
Title: Re: Internal commands
Post by: Dav999 on February 05, 2013, 03:30:29 PM
Is there a way to make  :viridian: move during a script?

walk(left/right,tiles)

Be controlled*

Oh, so that you can control him while running a script?

Unfortunately not. :(

I thought you could do that with the No-cutscene-bars method? ???

The No-cutscene-bars method still locks the controls, but it's usually for a short enough time that it's not noticeable. However, longer scripts will noticeably lock the controls.

If you only use things like gotoroom(x,y), gotoposition(x,y,f), playef(x), customiftrinkets(n,s), customifflag(n,s), etc, then you won't notice any interruption with the no-cutscene-bars method, if you use text boxes without backgroundtext, delay(t), or an enormously large amount of commands, then you will. Still, the scripts run faster than you think: I once made a script where 15 text boxes were displayed on top of each other at the same time using backgroundtext (with the number of the text box as the text), and the last one still appeared instantly, and the first 14 were completely unnoticeable.
Title: Re: Internal commands
Post by: FIQ on February 06, 2013, 02:03:28 AM
Indeed the level select menu I created works by having you move left/right or flip.
Title: Re: Internal commands
Post by: FIQ on February 06, 2013, 07:03:28 AM
I was creating an user interface abusing backgroundtext heavily showing various dialogs at screen. (...)

I wonder how you can create a user interface with only one button and barely any conditional things...

Oh, and maybe textboxactive can help. It's clears all dialogs on the screen except for the last one created. So if you create 3 text boxes to be displayed at the same time, when you use endtext or endtextfast, all three will be cleared at once, but if you use textboxactive, only the first two are cleared, and the last one remains on the screen!
You have 3 buttons actually.
Look at my screenshot in Back to VVVVVV :P
(...)

And, the lack of real conditionals doesn't make it impossible, just a bit more complex :P

The total amount of scripts in my user interface ended up being 35 and it used 8 flags. In that state, everything was working properly without issues.

 :vitellary: ???
How can you make it so that the arrow keys affect a script (I guess those are the other 2 buttons)?
Didn't see any command that does that in the 2nd post.
Not that I'm going to use it in a level but... :o

I figured it out myself: you can put :viridian: in a specific spot with one script box to the left and one script box to the right, and another one above him. If you walk to either side, you trigger the script where the dialogs are displayed on screen, flags are changed, and :viridian: is teleported back to the original spot. I first thought the flipping part wouldn't work, because not using endtext after a script with normal dialogs meant that the dialog would not dissappear, and :viridian: wouldn't be able to flip while the text box is on the screen. However, this only applies to text boxes without backgroundtext.

I also made two examples of a level with a sort of interface, the first one has the 20-dialogs-cap-bug, which only occurs if you repeatedly move back and forth between the buttons more than 8 times. The second one doesn't, because you select in a different way (you just press left or right to directly 'click' a button, without first highlighting it and pressing action).

As always, please ignore the __MACOSX folder in the zip it's a hidden folder I can't change that etc etc.
Also ignore the typing error in the script (saing instead of saying)
While that it cool, keep in mind that it's very easy to accidentally quit the game with enter or escape by mistake in the UI. A work-around is to fadeout, then use blackout, then fadein again (it will not visibly fade in UNLESS you have roomtext inside (strangely the [Press ENTER to return to editor] text in the editor also visibly fade in)). This also gives the benefit of a more seamless textbox reload, as they don't disappear completely when "reloading" them to avoid the 20 textboxes limit. However, this is at the same time an issue as you have to make the dialogs output the exact same content (or at least the exact same length) to avoid having old dialogs still on screen.

Interestingly, 2.1's blackon/blackout has several bugs not present in 2.0, including:
* The transistion between the game screen and ESC screen is a bit glitchy
* Same goes for enter screen
* Pause text doesn't get stuck in 2.0 as in 2.1 (as 2.0 doesn't show it).
Title: Re: Internal commands
Post by: FIQ on February 07, 2013, 02:25:34 PM
Just a FYI, but if you for some reason want to leave internal mode and continue with simplified scripting without either a text dialog which isn't 5 lines or appearing over Viridian's head or the center, or loading a new script, you can substitute loadscript(stop) by text(1,0,0,3). This will override the necessary commands, i.e:
(2.0: position(center) or position(player,above) | 2.1: customposition(center) or customposition(player,above))
speak_active
endtext
Title: Re: Internal commands
Post by: Hilbert on February 07, 2013, 04:12:49 PM
I'm having trouble Internal Scripting. It just doesn't work. I attached the script so you could figure it out.

Code: [Select]
<script>start:|iftrinkets(0,startreal)||startreal:|say(3)|hideplayer()|fadeout()|untilfade()|flash|delay(20)|flash|reply(1)|Wait-|flash|flash|flash|reply|What? NO! NO!|reply|NOOOOOOOO!!|flash|delay(10)|flash|delay(10)|flash|delay(10)|flash|delay(10)|flash|delay(100)|</script>
I used the second method in the second post.
Title: Re: Internal commands
Post by: Hilbert on February 07, 2013, 04:19:17 PM
I'm having trouble Internal Scripting. It just doesn't work. I attached the script so you could figure it out.

Code: [Select]
<script>start:|iftrinkets(0,startreal)||startreal:|say(3)|hideplayer()|fadeout()|untilfade()|flash|delay(20)|flash|reply(1)|Wait-|flash|flash|flash|reply|What? NO! NO!|reply|NOOOOOOOO!!|flash|delay(10)|flash|delay(10)|flash|delay(10)|flash|delay(10)|flash|delay(100)|</script>
I used the second method in the second post.
NVM i fixed it but i get a text box with customposition center and shtuff. also it takes a long time to start
Title: Re: Internal commands
Post by: Dav999 on February 07, 2013, 04:30:44 PM
I'm having trouble Internal Scripting. It just doesn't work. I attached the script so you could figure it out.

Code: [Select]
<script>start:|iftrinkets(0,startreal)||startreal:|say(3)|hideplayer()|fadeout()|untilfade()|flash|delay(20)|flash|reply(1)|Wait-|flash|flash|flash|reply|What? NO! NO!|reply|NOOOOOOOO!!|flash|delay(10)|flash|delay(10)|flash|delay(10)|flash|delay(10)|flash|delay(100)|</script>
I used the second method in the second post.

You forgot text(1,0,0,4) at the end. Also check FIQ's post above yours about the change from internal to simplified (so change say(3) into say(4) for a line underneath untilfade() with text(1,0,0,3). Also change 'Wait-' into 'TURN YOUR VOLUME DOWN!' ;)
Title: Re: Internal commands
Post by: Hejmstel on February 08, 2013, 11:22:07 PM
I was trying to use the changecolor/changeplayercolor commands and they wouldn't work, but then I found out it was 'colour' in the commands, not color. British English ???
Title: Re: Internal commands
Post by: Hilbert on February 09, 2013, 04:59:02 AM
I was trying to use the changecolor/changeplayercolor commands and they wouldn't work, but then I found out it was 'colour' in the commands, not color. British English ???
I always thought it was wierd since they mainly use that spelling in Canada, but Terry uses it for the game and I think he made it in Ireland? ???
Title: Re: Internal commands
Post by: FIQ on February 09, 2013, 07:09:18 AM
I was trying to use the changecolor/changeplayercolor commands and they wouldn't work, but then I found out it was 'colour' in the commands, not color. British English ???
I always thought it was wierd since they mainly use that spelling in Canada, but Terry uses it for the game and I think he made it in Ireland? ???
Well, Terry lives in ireland, and then the british english used makes sense. After all the scripting language was never supposed to be used by end users, which probably would be more comfortable with US english as that's what most things on the internet use :P

Personally I don't care, as long as I know what it is.
Title: Re: Internal commands
Post by: Chillius on February 09, 2013, 07:43:43 AM
yes.

colour is the British

and color is worldwide or something.
Title: Re: Internal commands
Post by: Hilbert on February 09, 2013, 08:26:42 AM
yes.

colour is the British and Canadian

and color is worldwide or something.
Title: Re: Internal commands
Post by: blue626 on February 09, 2013, 08:56:43 AM
Try to have 2 lines in script2, having the latest line being the command you want to test. Make sure to have no more than 1 empty line below the last line in script2.

Okay, I recently tried this (test1 is the script inside the script box, obviously):

test1:
iftrinkets(0,test2)
(empty line)

test2:
(empty line)
flash
(empty line)

It worked. Then I replaced flash with play(1). It worked too.
Why would this not work, then?
For example, this (usually) fail:

a:
iftrinkets(0,b)

b:
flash
iftrinkets(0,c)

c:
say(1)
Test

The solution is to make a third line in b, with whatever content you like (I usually use ifflag(work,around)).
You had 1 empty line in the end of all scripts, right?

Dav999: In the previous test, with play(1), :viridian: didn't stop or became slower when the script was triggered. So, I guess that it shoiuld belong to this list:

If you only use things like gotoroom(x,y), gotoposition(x,y,f), playef(x), customiftrinkets(n,s), customifflag(n,s), etc, then you won't notice any interruption with the no-cutscene-bars method, (...)

and color is worldwide or something.

Color is american english (and perhaps australian?).
Why is american english more popular (if it is)? Maybe i's because the population of the USA is very large... there are various reasons.
Apparently, Terry thought of that and, in 2.1. beta, when he added the commands for coloured text boxes, he added "gray" and "grey" (as well as "terminal") to change back to gray text boxes. However, none of the 3 words work, but that isn't related to this.
I personally like british english more (see my profile...)...
When I wrote "coloured" above it autocorrected to "colored" and after adding the "u", underlined the word red...

EDIT: This thread has more posts than the ones I have ever posted.

EDIT 2: I think I set British English as the language used (in my profile). Why doesn't it show? Going to set it again...
EDIT 3: I think it already showed before and I didn't notice.
EDIT 4: I forgot that test1 also has an empty line at the end.
Title: Re: Internal commands
Post by: Dav999 on February 09, 2013, 09:42:00 AM
Try to have 2 lines in script2, having the latest line being the command you want to test. Make sure to have no more than 1 empty line below the last line in script2.

Okay, I recently tried this (test1 is the script inside the script box, obviously):

test1:
iftrinkets(0,test2)

test2:
(empty line)
flash
(empty line)

It worked. Then I replaced flash with play(1). It worked too.
Why would this not work, then?
For example, this (usually) fail:

a:
iftrinkets(0,b)

b:
flash
iftrinkets(0,c)

c:
say(1)
Test

The solution is to make a third line in b, with whatever content you like (I usually use ifflag(work,around)).
You had 1 empty line in the end of all scripts, right?

I think that is because 'iftrinkets(0,c)' in script b is executed first, and as an internal command, and there's no built-in script called 'c'. The solution would be to add another line at the end of b.

Dav999: In the previous test, with play(1), :viridian: didn't stop or became slower when the script was triggered. So, I guess that it shoiuld belong to this list:

If you only use things like gotoroom(x,y), gotoposition(x,y,f), playef(x), customiftrinkets(n,s), customifflag(n,s), etc, then you won't notice any interruption with the no-cutscene-bars method, (...)

Yeah, but I'm not going to make a full list of all commands which don't stop or slow down :viridian: when giving a few examples is enough...
Title: Re: Internal commands
Post by: FIQ on February 11, 2013, 10:15:44 AM
Do anyone know if you can get the auto-refacing behaviour in custom levels with internal crewmates? I.e. have internal crewmates automatically change face direction depending on how you stand. At the moment, I emulate it by having 2 background scripts running at either side of the crewmate in question which runs face(red,player), but is there a better way to do it?
Title: Re: Internal commands
Post by: Dav999 on February 11, 2013, 10:29:04 AM
Do anyone know if you can get the auto-refacing behaviour in custom levels with internal crewmates? I.e. have internal crewmates automatically change face direction depending on how you stand. At the moment, I emulate it by having 2 background scripts running at either side of the crewmate in question which runs face(red,player), but is there a better way to do it?

createcrewman(x,y,c,m,faceplayer) :viridian:
Title: Re: Internal commands
Post by: FIQ on February 14, 2013, 12:16:20 AM
Just wanted to say a critical thing.
Personally, when I branch to new scripts and want to avoid the line at the bottom being read as an internal script, I use ifflag(work,around). This does not work correctly in the Windows version of VVVVVV. I don't know about the Mac version, but the Linux version doesn't have this issue. For some reason, after chain execution of some scripts, the Windows 2.1 version somehow gets the "correct" behaviour and triggers the command correctly as a simplified script, branching to the script "around". I'll test this further, but if this means what I think it does, it might mean that the "no cutscene method" isn't realible in Windows. The issue I'm having is easy to work around, but if this would happen to a text(1,0,0,4) intended to avoid cutscenes while doing an internal script...
Title: Re: Internal commands
Post by: Dav999 on February 14, 2013, 12:40:06 AM
Just wanted to say a critical thing.
Personally, when I branch to new scripts and want to avoid the line at the bottom being read as an internal script, I use ifflag(work,around). This does not work correctly in the Windows version of VVVVVV. I don't know about the Mac version, but the Linux version doesn't have this issue. For some reason, after chain execution of some scripts, the Windows 2.1 version somehow gets the "correct" behaviour and triggers the command correctly as a simplified script, branching to the script "around". I'll test this further, but if this means what I think it does, it might mean that the "no cutscene method" isn't realible in Windows. The issue I'm having is easy to work around, but if this would happen to a text(1,0,0,4) intended to avoid cutscenes while doing an internal script...

Why don't you use an unrecognized command like # instead of ifflag(work,around)? If I use # it works just fine.

EDIT: Oh, you already said that it was easy to work around. So it only happens if you chain a lot of scripts?
Title: Re: Internal commands
Post by: FIQ on February 14, 2013, 12:47:51 AM
Just wanted to say a critical thing.
Personally, when I branch to new scripts and want to avoid the line at the bottom being read as an internal script, I use ifflag(work,around). This does not work correctly in the Windows version of VVVVVV. I don't know about the Mac version, but the Linux version doesn't have this issue. For some reason, after chain execution of some scripts, the Windows 2.1 version somehow gets the "correct" behaviour and triggers the command correctly as a simplified script, branching to the script "around". I'll test this further, but if this means what I think it does, it might mean that the "no cutscene method" isn't realible in Windows. The issue I'm having is easy to work around, but if this would happen to a text(1,0,0,4) intended to avoid cutscenes while doing an internal script...

Why don't you use an unrecognized command like # instead of ifflag(work,around)? If I use # it works just fine.

EDIT: Oh, you already said that it was easy to work around. So it only happens if you chain a lot of scripts?
That's what I saw. I'll test further and see exactly how many scripts this was, and if it applies to text(1,0,0,4) as well.

Keep in mind "a lot of scripts" was around 20+ in my case, so it shouldn't be that big of a problem.
Title: Re: Internal commands
Post by: Dav999 on February 14, 2013, 01:12:43 AM
Keep in mind "a lot of scripts" was around 20+ in my case, so it shouldn't be that big of a problem.

More than 20 scripts chained in a row? I think we should expect something huge now ::) :P

Maybe it's the same kind of limit as the 20 text boxes on the screen limit. Maybe there is a connection?
Title: Re: Internal commands
Post by: FIQ on February 14, 2013, 04:24:42 AM
Keep in mind "a lot of scripts" was around 20+ in my case, so it shouldn't be that big of a problem.

More than 20 scripts chained in a row? I think we should expect something huge now ::) :P
I use 20 scripts (in fact I use 32, but things broke in the middle) for keeping a history of the 4 latest teleporter destinations that you set (or try to set!) in Back to VVVVVV, which is used in my cheat system. Nothing too special. Reason that I need that many scripts is due to VVVVVV's very limited scripting capabilities.


Maybe it's the same kind of limit as the 20 text boxes on the screen limit. Maybe there is a connection?
I don't think there's a direct connection between them (especially not as the Linux version of VVVVVV doesn't have this issue, while it has the textbox issue), but there might be a similar reason.
Title: Re: Internal commands
Post by: FIQ on February 14, 2013, 05:11:54 AM
This is just confusing...

The issue does NOT seem related to the amount of scripts that is ran, but it seems to rely on something else. I tried the following:

* Make 40 scripts: test, test2, test3, ..., test40 with following content:

Code: [Select]
test:
iftrinkets(0,test2)

test2:
iftrinkets(0,test2)
ifflag(work,around)

...

test39:
iftrinkets(0,test39)
ifflag(work,around)

test40:
say
Worked?

This worked without issues (it went happily to test40).
I then tried to set the flags that I set during execution in my own level for which this screwed up (flag 1-16, 42-45, 91-93 and 95) and made a script named "around" with the following content:

Code: [Select]
around:
say
!!! ERROR !!!

Things still worked as expected.

I then proceed to check if I had run into a critical hard limit for scripts in total which would have been boring. I did this by copying the necessary scripts to trigger the bug from my level (and nothing else) into this test level. The bug was still there, so this wasn't the problem.

I'll test further and try to isolate why this is happening.

EDIT: It's not caused by internal commands usage other than ifflag(work,around). The exact way the bug happens is very weird too...

EDIT2: OK, I've managed to only include the scripts which are in use that triggers the bug. Run "testfail" twice to see it. This doesn't happen in the Linux version, but it DOES happen in the windows one. I cannot test the mac version...

EDIT3: It happens in the 2.1 beta 2 and 2.0 (all windows). I guess I can test it on 2.1 beta 1 too, but it's not really relevant...

EDIT4: I think I've managed to find something. No matter what you do, updatehistory6_2 never seems to work properly -- branching to it as the first script gives instant fail. I'll try to check exactly why this happens.

EDIT5: flag(6,on) causes problems. Somehow, this fail after the first execution (for which it somehow works):

Code: [Select]
test:
iftrinkets(0,test2)

test2:
flag(6,on)
iftrinkets(0,test3)
ifflag(work,around)

test3:
say
!! WORKS !!
ifflag(work,around)

around:
say
!! ERROR !!

I cannot find a reason for why this shouldn't work. Anyone else?

EDIT6: flag(7,on) works without issues. That's editing nothing but the flag number.
Title: Re: Internal commands
Post by: Dav999 on February 14, 2013, 06:02:39 AM
This is just confusing...

The issue does NOT seem related to the amount of scripts that is ran, but it seems to rely on something else. I tried the following:

* Make 40 scripts: test, test2, test3, ..., test40 with following content:

Code: [Select]
test:
iftrinkets(0,test2)

test2:
iftrinkets(0,test2)
ifflag(work,around)

...

test39:
iftrinkets(0,test39)
ifflag(work,around)

test40:
say
Worked?

This worked without issues (it went happily to test40).
I then tried to set the flags that I set during execution in my own level for which this screwed up (flag 1-16, 42-45, 91-93 and 95) and made a script named "around" with the following content:

Code: [Select]
around:
say
!!! ERROR !!!

Things still worked as expected.

I then proceed to check if I had run into a critical hard limit for scripts in total which would have been boring. I did this by copying the necessary scripts to trigger the bug from my level (and nothing else) into this test level. The bug was still there, so this wasn't the problem.

I'll test further and try to isolate why this is happening.

EDIT: It's not caused by internal commands usage other than ifflag(work,around). The exact way the bug happens is very weird too...

EDIT2: OK, I've managed to only include the scripts which are in use that triggers the bug. Run "testfail" twice to see it. This doesn't happen in the Linux version, but it DOES happen in the windows one. I cannot test the mac version...

EDIT3: It happens in the 2.1 beta 2 and 2.0 (all windows). I guess I can test it on 2.1 beta 1 too, but it's not really relevant...

EDIT4: I think I've managed to find something. No matter what you do, updatehistory6_2 never seems to work properly -- branching to it as the first script gives instant fail. I'll try to check exactly why this happens.

EDIT5: flag(6,on) causes problems. Somehow, this fail after the first execution (for which it somehow works):

Code: [Select]
test:
iftrinkets(0,test2)

test2:
flag(6,on)
iftrinkets(0,test3)
ifflag(work,around)

test3:
say
!! WORKS !!
ifflag(work,around)

around:
say
!! ERROR !!

I cannot find a reason for why this shouldn't work. Anyone else?

So it only fails when you use flag 6? That's strange... What does flag 6 do in the main game?
Title: Re: Internal commands
Post by: FIQ on February 14, 2013, 06:09:25 AM
This is just confusing...

The issue does NOT seem related to the amount of scripts that is ran, but it seems to rely on something else. I tried the following:

* Make 40 scripts: test, test2, test3, ..., test40 with following content:

Code: [Select]
test:
iftrinkets(0,test2)

test2:
iftrinkets(0,test2)
ifflag(work,around)

...

test39:
iftrinkets(0,test39)
ifflag(work,around)

test40:
say
Worked?

This worked without issues (it went happily to test40).
I then tried to set the flags that I set during execution in my own level for which this screwed up (flag 1-16, 42-45, 91-93 and 95) and made a script named "around" with the following content:

Code: [Select]
around:
say
!!! ERROR !!!

Things still worked as expected.

I then proceed to check if I had run into a critical hard limit for scripts in total which would have been boring. I did this by copying the necessary scripts to trigger the bug from my level (and nothing else) into this test level. The bug was still there, so this wasn't the problem.

I'll test further and try to isolate why this is happening.

EDIT: It's not caused by internal commands usage other than ifflag(work,around). The exact way the bug happens is very weird too...

EDIT2: OK, I've managed to only include the scripts which are in use that triggers the bug. Run "testfail" twice to see it. This doesn't happen in the Linux version, but it DOES happen in the windows one. I cannot test the mac version...

EDIT3: It happens in the 2.1 beta 2 and 2.0 (all windows). I guess I can test it on 2.1 beta 1 too, but it's not really relevant...

EDIT4: I think I've managed to find something. No matter what you do, updatehistory6_2 never seems to work properly -- branching to it as the first script gives instant fail. I'll try to check exactly why this happens.

EDIT5: flag(6,on) causes problems. Somehow, this fail after the first execution (for which it somehow works):

Code: [Select]
test:
iftrinkets(0,test2)

test2:
flag(6,on)
iftrinkets(0,test3)
ifflag(work,around)

test3:
say
!! WORKS !!
ifflag(work,around)

around:
say
!! ERROR !!

I cannot find a reason for why this shouldn't work. Anyone else?

So it only fails when you use flag 6? That's strange... What does flag 6 do in the main game?
Yep.
Flag 6 is used for 2 things: telling that you can't pass before crewmate X is over to the next screen (in intermission 1), and at comms relay. It's never used in internal scripts.

EDIT: I found the first issue - ifflag(work,around) - "work" (or any other non-number) is somehow controlled by flag 6 internally (don't ask me why, lol), not flag 1, or what would make even more sense, flag 0. This explains the flag 6 issue. However, there was also a second issue I was having with internal scripts being ignored (as seen as the script branched to the CUSTOM script "around" when it shouldn't even have been able to). I bet this will be harder to test...

EDIT2: Found the issue!

An important thing with the internal scripting without cutscenebars method is that the last line isn't moved to the top and executes internally, it's copied.

Try this and you'll understand what I mean.

Code: [Select]
test:
iftrinkets(0,test2)

test2:
delay(30)
flash(1)

As most commands doesn't have a custom counterpart, this is hardly ever seen, but needs to be taken into account. Thus, there are no real limits unless you know this:

* Flag 6 turned on makes work-arounds like ifflag(work,around) at the bottom fail. Use delay(0) instead.
* Flag 12 is the internal counterpart to flag 6 (i.e. makes customifflag(work,around) branch to around).
* The bottom line of scripts called by ifflag, iftrinkets, etc isn't moved but copied. Take this into account and stop the script too early if there's a custom counterpart that you don't want to trigger

The two first issues can both be solved by not using ifflag() with bogus content.
Title: Re: Internal commands
Post by: FIQ on February 14, 2013, 08:33:44 AM
You cannot have more than 500 scripts in a level. Just saying.
Title: Re: Internal commands
Post by: Dav999 on February 14, 2013, 08:39:25 AM
You cannot have more than 500 scripts in a level. Just saying.

What happens if you make more?
Title: Re: Internal commands
Post by: FIQ on February 14, 2013, 08:43:51 AM
You cannot have more than 500 scripts in a level. Just saying.

What happens if you make more?
If you try to make a 501st script, VVVVVV crashes. If you try to load a level with 501+ scripts (i.e. by inserting them manually in the file), VVVVVV level editor crashes on load. In addition, VVVVVV also crashes if you load it from the "play level" menu. In other words, it's impossible to have more than 500 scripts. While this is kind of boring, it should be very hard to reach the limit in question.. after all I seem to have been the first that stumbled upon it, lol.

In addition, the limit on the amount of script lines is 198. So the theoretical maximun on the amount of script lines is 198*500=99000 lines. If every script you use is internal, and you maintain 2.0 compatibility, you get around 70k lines of code max in theory (however, most scripts will be smaller than 198 lines, of course).
Title: Re: Internal commands
Post by: FIQ on February 15, 2013, 05:27:40 PM
I just found out that you can do something like this:

Code: [Select]
testmemplayer:
say
a
ifflag(101,stop)
say
stop failed, set flag 101 now!
flag(101,on)
say
flag set!

Then, as you quit the level and replay it from scratch, the flag has been saved even though it should be reset (in fact, it SHOULD not do anything at all with a flag outside the range). No, this cannot be used for autosaving purposes, as flag is reset when you quit VVVVVV completely, but that's not the point. The point is that if this functions like I think it does, it would allow you to manipulate VVVVVV's memory while it's running, just like what stuff like Cheat Engine do. Now, while this most likely *does* have uses, figuring out exactly what you're doing is pretty much impossible. It's just a cool thing that can be explored with, but expect to not find anything interesting.
Title: Re: Internal commands
Post by: Dav999 on February 18, 2013, 08:49:04 AM
@crazyal02, I think you accidentally posted your quote for Derpfish's tutorial...
Title: Re: Internal commands
Post by: allison on February 19, 2013, 07:51:27 AM
@crazyal02, I think you accidentally posted your quote for Derpfish's tutorial...

Oh, oops. Deleted now.
Title: Re: Internal commands
Post by: ToasterApocalypse on February 22, 2013, 11:13:13 AM
After researching slightly, you can do this:

createentity(x,y,18,17,0)

for an ORANGE crewmate. Alternatively, you can use

createentity(x,y,24,17,0)

for an orange crewmate that behaves like the crewmate in Intermission 1 (But it still doesn't connect with spikes)
Title: Re: Internal commands
Post by: Chillius on February 23, 2013, 05:26:23 AM
Vatelin?
Title: Re: Internal commands
Post by: Hacker4334 on February 23, 2013, 05:28:17 AM
Just like my icon?
Title: Re: Internal commands
Post by: Hejmstel on February 23, 2013, 08:43:55 PM
I found out something. Since blackout doesn't work, you can use this instead:
Code: [Select]
say(-1)
text(1,0,0,4)
say(5)
do(100)
fadein
delay(1)
loop
text(1,0,0,4)
say(2)
befadein
text(1,0,0,4)
say(4)
endtext
endcutscene
untilbars
loadscript(stop)
And the the screen will be black for ~100 ticks (Or whatever you put in do() ). Could be useful for something!
Title: Re: Internal commands
Post by: allison on February 23, 2013, 08:53:23 PM
 :verdigris: Isn't there another command that works (like "fadeout" or something)?
Title: Re: Internal commands
Post by: Hejmstel on February 23, 2013, 09:07:43 PM
:verdigris: Isn't there another command that works (like "fadeout" or something)?

Yes, but it doesn't just black out the screen, it takes a bit to fade out.
Title: Re: Internal commands
Post by: FIQ on February 24, 2013, 10:28:30 AM
backgroundtext does not have to be below the text(C,X,Y,N) command, in fact it can be above it. Using it above the text box instead of below it gives 2 additional possibilities:
* Having a backgrounded text dialog be 2 lines instead of 1
* Using the "flipme" command as it was intended to -- alter text box Y coordinate if flip mode is active (This is used in the main game to correct headers being below the main text box in the main game. I have no idea why this correction was made, but it's there). Keep in mind that flipme does have to be below the textbox.
Title: Re: Internal commands
Post by: blue626 on March 08, 2013, 12:32:23 PM
After researching slightly, you can do this:

createentity(x,y,18,17,0)

for an ORANGE crewmate. Alternatively, you can use

createentity(x,y,24,17,0)

for an orange crewmate that behaves like the crewmate in Intermission 1 (But it still doesn't connect with spikes)

Interesting, but did you try with other values for the 4th parameter? Maybe that would give you other colors! (http://vvvccc.comxa.com/img/vitellary.png) Interesting...
Title: Re: Internal commands
Post by: ToasterApocalypse on March 08, 2013, 12:56:30 PM
After researching slightly, you can do this:

createentity(x,y,18,17,0)

for an ORANGE crewmate. Alternatively, you can use

createentity(x,y,24,17,0)

for an orange crewmate that behaves like the crewmate in Intermission 1 (But it still doesn't connect with spikes)

Interesting, but did you try with other values for the 4th parameter? Maybe that would give you other colors! (http://vvvccc.comxa.com/img/vitellary.png) Interesting...
It does.

ID 69: white

lol 69
Title: Re: Internal commands
Post by: blue626 on March 08, 2013, 01:11:32 PM
After researching slightly, you can do this:

createentity(x,y,18,17,0)

for an ORANGE crewmate. Alternatively, you can use

createentity(x,y,24,17,0)

for an orange crewmate that behaves like the crewmate in Intermission 1 (But it still doesn't connect with spikes)

Interesting, but did you try with other values for the 4th parameter? Maybe that would give you other colors! (http://vvvccc.comxa.com/img/vitellary.png) Interesting...
It does.

ID 69: white

lol 69

What about all the other values? I might as well find that myself, this is interesting.
And after anyone finds all the colors (or at least the sequence of them... there surely is one is the parameter can be as high as 69) that could be mentioned in the 2nd post!

EDIT: This thread has more than 10 000 views!
Title: Re: Internal commands
Post by: FIQ on March 08, 2013, 02:33:34 PM
White is a default colour, kind of. If there's no defined colour for the ID, you get it. Real colors are up to 50ish (don't remember exactly). Also 100-103.
Title: Re: Internal commands
Post by: Hejmstel on March 08, 2013, 03:48:45 PM
List of colors for createentity() crewmates:
Code: [Select]
0: Cyan
1: Flashy red (used for death)
2: Dark orange
3: Trinket color
4: Gray
5: Flashy white
6: Red (tiny bit darker than Vermilion)
7: Lime green (ala Viel)
8: Hot pink (ala Vaelyn)
9: Brilliant yellow
10: Flashy white
11: Bright cyan
12: Blue, same as Victoria
13: Green, same as Verdigris
14: Yellow, same as Vitellary
15: Red, same as Vermilion
16: Blue, same as Victoria
17: Lighter orange
18: Gray
19: Darker gray
20: Pink, same as Violet
21: Lighter gray
22: White
23: Flashy white
24-29: White
30: Gray
31: Dark, slightly purplish gray?
32: Dark cyan/green (ala Valso)
33: Dark blue
34: Dark green
35: Dark red
36: Dull orange
37: Flashy gray
38: Gray
39: Darker cyan/green
40: Flashier gray
41-99: White
100: Dark gray
101: Flashy white
102: Teleporter color
103 and onwards: White
Title: Re: Internal commands
Post by: ToasterApocalypse on March 09, 2013, 06:00:04 AM
List of colors for createentity() crewmates:
Code: [Select]
0: Cyan
1: Flashy red (used for death)
2: Dark orange
3: Trinket color
4: Gray
5: Flashy white
6: Red (tiny bit darker than Vermilion)
7: Lime green (ala Viel)
8: Hot pink (ala Vaelyn)
9: Brilliant yellow
10: Flashy white
11: Bright cyan
12: Blue, same as Victoria
13: Green, same as Verdigris
14: Yellow, same as Vitellary
15: Red, same as Vermilion
16: Blue, same as Victoria
17: Lighter orange
18: Gray
19: Darker gray
20: Pink, same as Violet
21: Lighter gray
22: White
23: Flashy white
24-29: White
30: Gray
31: Dark, slightly purplish gray?
32: Dark cyan/green (ala Valso)
33: Dark blue
34: Dark green
35: Dark red
36: Dull orange
37: Flashy gray
38: Gray
39: Darker cyan/green
40: Flashier gray
41-99: White
100: Dark gray
101: Flashy white
102: Teleporter color
103 and onwards: White

34 is more Valso than 32.

Also, 34 is a funny number, but 69 is funnier.
Title: Re: Internal commands
Post by: blue626 on March 09, 2013, 09:46:27 AM
List of colors for createentity() crewmates:
Code: [Select]
0: Cyan
1: Flashy red (used for death)
2: Dark orange
3: Trinket color
4: Gray
5: Flashy white
6: Red (tiny bit darker than Vermilion)
7: Lime green (ala Viel)
8: Hot pink (ala Vaelyn)
9: Brilliant yellow
10: Flashy white
11: Bright cyan
12: Blue, same as Victoria
13: Green, same as Verdigris
14: Yellow, same as Vitellary
15: Red, same as Vermilion
16: Blue, same as Victoria
17: Lighter orange
18: Gray
19: Darker gray
20: Pink, same as Violet
21: Lighter gray
22: White
23: Flashy white
24-29: White
30: Gray
31: Dark, slightly purplish gray?
32: Dark cyan/green (ala Valso)
33: Dark blue
34: Dark green
35: Dark red
36: Dull orange
37: Flashy gray
38: Gray
39: Darker cyan/green
40: Flashier gray
41-99: White
100: Dark gray
101: Flashy white
102: Teleporter color
103 and onwards: White

So, It seems  was wrong about the sequence! Is there any sequence in that? (http://vvvccc.comxa.com/img/vitellary_shock.png) (http://vvvccc.comxa.com/img/verdigris_shock.png) (http://vvvccc.comxa.com/img/viridian_shock.png)
I expected it to be something like this:

1 - White
2 - Very Light Cyan
3 - Light Cyan
4 - Light Cyan (darker than 3)
5 - Light Cyan (darker than 4)
6 - Viridian's color (cyan)
7 - Cyan mixed with dark blue (Victoria's color), but more cyan than dark blue
8 - Cyan mixed with dark blue (more blue than 7)
9 - Cyan mixed with dark blue (more blue than 8)
10 - Cyan mixed with dark blue (more blue than 9)
11 - Victoria's color
...
16 - Violet's color
...
21 - Vermillion's color
...
??? - Black

Why do some colors repeat (besides white)?
4, 18, 30 and 38 - Gray
5, 10, 23 and 101 - Flashy White
12 and 16 - Victoria's color

By teleporter color do you mean the color when Viridian is teleported or something else?
What do you mean by trinket color? Trinkets have various colors...

I have read that Terry used to plan adding a 7th level to the game, but didn't due to lack of time. What would be the color for the 7th crewmate (if there would be one)? I used to think it was grey because you get a grey crewmate when you put an invalid word in the color parameter in createcrewman (maybe I should have told about the 7th crewmate being grey before...). However orange appears so many times, either light or dark, so maybe it would be light/dark orange?
Title: Re: Internal commands
Post by: Hejmstel on March 09, 2013, 10:09:32 AM
By teleporter color do you mean the color when Viridian is teleported or something else?
What do you mean by trinket color? Trinkets have various colors...
Yes, that's what I meant by teleporter color.
By trinket color I meant how the trinket flashes. So the crewmate is a trinket crewmate.
Title: Re: Internal commands
Post by: blue626 on March 13, 2013, 11:03:51 AM
Some days ago, I was testing createentity(x,y,18,m1,m2) testing those values for m1 and some other things.

Using values 69, 79 and 24 (for m1), it doesn't make a white crew-member, it makes a cyan square (it isn't the same as Viridian's cyan)! ??? Is it because I'm using 2.0?
However, 22 does create a white crew-member!

I found the difference between 12 and 16: apparently those crew members' colors pulse a bit. So, maybe every internal crewmember pulses? Crewmember 12 starts form the bright color while 16 starts from the dark one (or reverse?) and 16 has a bigger difference between the bright and dark color than 12. After that I tried comparing them with createcrewman(x,y,blue,(...)). It was equal to 12. Then I tried comparing them with the level editor crew-member. I don't really know about that one... it either is equal to 12 or doesn't pulse, staying with a color that's between the bright and dark color of 12. Anyway, who knows why 16 exists...
Actually, I believe that every crew member besides 0, 1, 12-15, 20 and 102 are things that Terry just tried, but, in the end, they weren't used.
I also noticed Viridian pulses too: it was noticeable when in front of the said cyan square. Since the walls don't seem to pulse, by comparing them with the square you'll see that it doesn't pulse and comparing the square with Viridian, you'll notice that Viridian does pulse.

While using negative values I get the cyan square, but strangely, while using words (for example), I get Viridian. :vitellary:

All m2 seems to do, in this case, is defining if the crew member is happy or sad. 0 makes it happy, while >0 makes it sad. While not writing m2 at all, it makes it happy. I only tested these on crewmember 14 (Vitellary). Actually, not specifying m2 while m1=2 makes it sad... maybe what m2 makes is different in there (like 0 making it sad)?
Title: Re: Internal commands
Post by: Dav999 on March 13, 2013, 12:18:51 PM
Using values 69, 79 and 24 (for m1), it doesn't make a white crew-member, it makes a cyan square (it isn't the same as Viridian's cyan)! ??? Is it because I'm using 2.0?

Maybe! There was something similar in the Open Level, when I played a certain area where a createentity crewmate looked like a light blue box for me! I'm using 2.0, so maybe that's related (and I don't think it wasn't playtested by the one who made that script)

(http://img843.imageshack.us/img843/4334/likethisbox.png)

Actually, I believe that every crew member besides 0, 1, 12-15, 20 and 102 are things that Terry just tried, but, in the end, they weren't used.

Maybe there is just one universal list with internal colors, which is used for everything in the game, so crewmate colors, enemy colors, text colors, etc.
Title: Re: Internal commands
Post by: FIQ on March 13, 2013, 02:23:59 PM
Using values 69, 79 and 24 (for m1), it doesn't make a white crew-member, it makes a cyan square (it isn't the same as Viridian's cyan)! ??? Is it because I'm using 2.0?

Maybe! There was something similar in the Open Level, when I played a certain area where a createentity crewmate looked like a light blue box for me! I'm using 2.0, so maybe that's related (and I don't think it wasn't playtested by the one who made that script)

(http://img843.imageshack.us/img843/4334/likethisbox.png)

Actually, I believe that every crew member besides 0, 1, 12-15, 20 and 102 are things that Terry just tried, but, in the end, they weren't used.

Maybe there is just one universal list with internal colors, which is used for everything in the game, so crewmate colors, enemy colors, text colors, etc.
There is! This is why you get various colors not related to crewmates in some cirumstances, like trinkets, teleporter colors, trophy colors (the darker colors at the 30ish range), etc. The more "direct" colors of cyan, yellow, green, orange, etc, is for enemies, for example.
Title: Re: Internal commands
Post by: blue626 on March 15, 2013, 11:35:32 AM
(unrelated text)

Actually, I believe that every crew member besides 0, 1, 12-15, 20 and 102 are things that Terry just tried, but, in the end, they weren't used.

Maybe there is just one universal list with internal colors, which is used for everything in the game, so crewmate colors, enemy colors, text colors, etc.
There is! This is why you get various colors not related to crewmates in some cirumstances, like trinkets, teleporter colors, trophy colors (the darker colors at the 30ish range), etc. The more "direct" colors of cyan, yellow, green, orange, etc, is for enemies, for example.

So, are you saying that there is a numbered list with all the colors used in the game's entities? Does m1 determine which color, out of those in that list, is going to be used, with the value of m1 as its number? Or am I wrong?

I'm going to look for the best create entity list that's inside this topic (as there as various)... however this topic has 40 pages...

EDIT: There's a quote of it in page 18.
I had forgotten about that list, so I assumed 18 was the ID for creating a crewmate. It seems it creates a grey crewmate and there are other IDs for creating crewmates (except :violet:!). Is that what happens when you don't write neither m1 nor m2? Same in 24 (it creates a grey crewmate that follows the player and Toaster said that with 17 as m1 it creates an orange crewmate that folows the player)?
I wonder if m1 works the same for ID=1-4 and 23. It would make sense... maybe it works like that in other IDs?
Title: Re: Internal commands
Post by: Hejmstel on March 25, 2013, 08:32:29 PM
Bump

(http://i.imgur.com/XflPAIe.png)

(http://i.imgur.com/nFfVTEA.png)

Try to guess how I did it :D

(wait, is this the right topic for this?)
Title: Re: Internal commands
Post by: nicholashin on March 26, 2013, 02:37:56 AM
Bump

(http://i.imgur.com/XflPAIe.png)

(http://i.imgur.com/nFfVTEA.png)

Try to guess how I did it :D

(wait, is this the right topic for this?)
The script box makes it go to the same room but with different coordinates.
I think the script uses gotoposition internally :P
You can make a test like this in another topic :)
Title: Re: Internal commands
Post by: blue626 on March 26, 2013, 06:07:30 AM
I think he tried to say "Try to guess how I got the Tower tile set tiles!".

I don't know, but if it isn't related with internla scripting, then this isn't the right topic.
Also, I noticed this at the top: "Tile: 883". I guess it has to do with Direct Mode (but I don't know, since I use 2.0). Maybe he somehow did it with Direct Mode? (http://vvvccc.comxa.com/img/viridian_shock.png)
Also, why did you add vertical wrapping to the room, Doormat? ???
Title: Re: Internal commands
Post by: nicholashin on March 26, 2013, 08:28:44 AM
I doubt direct mode is related.
Wait...tower tileset is different? I thought it was something accessible by changing something like tileset of the room when editing the file by some kind of xml editor.....At least that's how you can do Polar dimension and changing lab background :P
Title: Re: Internal commands
Post by: ToasterApocalypse on March 26, 2013, 08:31:40 AM
Bump

(http://i.imgur.com/XflPAIe.png)

(http://i.imgur.com/nFfVTEA.png)

Try to guess how I did it :D

(wait, is this the right topic for this?)

But does it work in custom levels?

Also tell me how
Title: Re: Internal commands
Post by: FIQ on March 26, 2013, 08:37:33 AM
3 possibilities

1: You simply altered the tiles.png (or tiles2.png) and inserted graphics from tiles3.png from it

2: You successfully pinpointed tile IDs for tiles3. If this is the case, the tiles will be all transparent and segfault unless you use the Windows version of the game

3: You activated the tileset for real. I doubt this but would be really interested in how you did it otherwise. The fact that you make the room wrap in all directions to try to replicate the background makes this even less likely for me to assume.

 nicholashin: The Tower uses a third image for tiles, and is thus not accessible by direct mode or editing of tilecol. I believe setting tileset to 10 *is* supposed to acivate that tileset but it just glitches the level editor.
Title: Re: Internal commands
Post by: ToasterApocalypse on March 26, 2013, 08:40:13 AM
3 possibilities

1: You simply altered the tiles.png (or tiles2.png) and inserted graphics from tiles3.png from it

2: You successfully pinpointed tile IDs for tiles3. If this is the case, the tiles will be all transparent and segfault unless you use the Windows version of the game

3: You activated the tileset for real. I doubt this but would be really interested in how you did it otherwise.

 nicholashin: The Tower uses a third image for tiles, and is thus not accessible by direct mode or editing of tilecol. I believe setting tileset to 10 *is* supposed to acivate that tileset but it just glitches the level editor.

So, will tiles be transparent in the windows version?
Title: Re: Internal commands
Post by: Hejmstel on March 26, 2013, 09:54:05 AM
Indeed I inserted tiles from tiles3.png into tiles.png :P
I just like tricking people :D
(http://i.imgur.com/Hi9DTSl.png)
Also, @blue626: The vertical wrapping background is the closest thing to the background of the Tower.

Also, that scriptbox plays Positive Force.
Title: Re: Internal commands
Post by: nicholashin on March 27, 2013, 04:11:42 AM
LOL fail me :P
Also, isn't there some tiles accessible normally by direct mode look the same as those in the room? (Those arrows thing..)
Maybe you can't do it because of change of png?
Title: Re: Internal commands
Post by: Dav999 on March 27, 2013, 04:43:36 AM
This gave me an idea:

(http://img209.imageshack.us/img209/6117/tiles.png)

I made the lab and outside tilesets transparent! A real challenge would be to play the entire game with ALL walls completely invisible :P
Title: Re: Internal commands
Post by: Hejmstel on March 27, 2013, 12:03:59 PM
This gave me an idea:

(http://img209.imageshack.us/img209/6117/tiles.png)

I made the lab and outside tilesets transparent! A real challenge would be to play the entire game with ALL walls completely invisible :P
That. Looks. Killer. :o
Title: Re: Internal commands
Post by: Dav999 on March 27, 2013, 12:55:24 PM
I did something else:

(http://img28.imageshack.us/img28/81/schermafbeelding2013032z.png)

But we're off topic. Maybe Terry/a mod could split this topic after reply 591, but I don't know if they will read this...
Title: Re: Internal commands
Post by: blue626 on March 27, 2013, 01:26:05 PM
I can see why Doormat first thought this was better: It's also something you can't do normally, and by "normally" I mean without exploiting glitches or editing the files.

Try sending a PM to Terry...
Title: Re: Internal commands
Post by: Hejmstel on April 01, 2013, 11:43:17 PM
Bump, because this topic is too cool to be drowned.

What command shall we discuss next?
Title: Re: Internal commands
Post by: Chillius on April 02, 2013, 04:38:04 AM
It's a bump if no-one's posted in a month
Title: Re: Internal commands
Post by: Hejmstel on April 02, 2013, 12:12:44 PM
Uh no
It was on the second page
Title: Re: Internal commands
Post by: N on April 02, 2013, 06:41:36 PM
Uh no
It was on the second page
It wasn't a bump though. The last post was 3-27-13, only 6 days from that post. It has to be 28/30/31 days
Title: Re: Internal commands
Post by: Hejmstel on April 02, 2013, 07:01:16 PM
Whatever. ::)
Title: Re: Internal commands
Post by: N on April 02, 2013, 07:04:11 PM
Whatever. ::)
It's logic, dashie

Just like the study of wumbo
Title: Re: Internal commands
Post by: Hejmstel on April 05, 2013, 02:39:47 PM
I found something interesting.
In the Space Station tileset, tile 740 animates when finalstretch mode is on! (http://www.derekyu.com/images/art/pixel/fu-surprise.gif)
Title: Re: Internal commands
Post by: FIQ on April 05, 2013, 05:53:38 PM
I found something interesting.
In the Space Station tileset, tile 740 animates when finalstretch mode is on! (http://www.derekyu.com/images/art/pixel/fu-surprise.gif)
Probably happens with tile 740 in the other tileset too, only that the tile it alternates to (740, 780, 820, 860) is identical in tileset 2. This makes completely sense as the final parts of the game use 740 for its' "inner" walls instead of 219.

I guess this means that the tile alternation of the glitchy tiles in fact works in custom levels -- but the actual switching of color doesn't.
Title: Re: Internal commands
Post by: FIQ on May 04, 2013, 05:26:34 PM
Entity limit is 3000. Just saying.
At least, unlike the script limit, my level has only about half of that, so I'll not have any problems with THAT personally... :p
Title: Re: Internal commands
Post by: Piplup1122 on May 15, 2013, 02:39:51 PM
Anybody knows how to use createcrewman(x,y,colour,mood,direction)?
Please. I need your help  :victoria:
Title: Re: Internal commands
Post by: Dav999 on May 15, 2013, 03:40:28 PM
Anybody knows how to use createcrewman(x,y,colour,mood,direction)?
Please. I need your help  :victoria:

Assuming you know how to use internal scripting (I don't know if you do, but there's an explanation at the end of the second post in this thread):

x,y = position.
colour = cyan, red, yellow, green, blue or purple
mood = 0 for happy, 1 for sad
direction = faceleft or faceright (or faceplayer to automatically face Viridian, and you can even use followplayer to follow Viridian)

So for example:

createcrewman(50,60,red,0,faceright)
createcrewman(120,67,blue,1,faceplayer)

Hope that helps :viridian:
Title: Re: Internal commands
Post by: ToasterApocalypse on May 17, 2013, 04:49:10 AM
Anybody knows how to use createcrewman(x,y,colour,mood,direction)?
Please. I need your help  :victoria:

Assuming you know how to use internal scripting (I don't know if you do, but there's an explanation at the end of the second post in this thread):

x,y = position.
colour = cyan, red, yellow, green, blue or purple
mood = 0 for happy, 1 for sad
direction = faceleft or faceright (or faceplayer to automatically face Viridian, and you can even use followplayer to follow Viridian)

So for example:

createcrewman(50,60,red,0,faceright)
createcrewman(120,67,blue,1,faceplayer)

Hope that helps :viridian:
Anything that isn't cyan,red,purple,blue,yellow and green is gray
Title: Re: Internal commands
Post by: Samario on May 22, 2013, 01:00:12 PM
I have a bit of a bug with my internal scripting. I inserted the Gravitron into my level (it worked fine), but when it finished,  :viridian: started zipping around the screen. If I flipped, the script to remove the wraparound (gamestate 200 - finalmode) started and I started zipping from screen to screen at about 3 frames a screen. (I'm not entirely sure, but it looped round the entire 20x20 map ignoring walls (which also had corrupted fragments of Back to VVVVVV's map in it), so there wasn't anything I could do - I couldn't move since I was in a script.) Pressing enter took me to the level editor menu (I was in testing mode when I pressed enter (with the "Uh oh..." from  :viridian: still on the screen). When I went back into the level, all scripts (might only be internal, I have no idea since all my scripts contain proper internal commands) caused  :viridian: 's controls to lock in place - even going back out to the main menu didn't fix it.
I attached a copy if you want to see.
Title: Re: Internal commands
Post by: Dav999 on May 22, 2013, 01:24:21 PM
I have a bit of a bug with my internal scripting. I inserted the Gravitron into my level (it worked fine), but when it finished,  :viridian: started zipping around the screen.

Yeah, that's a known problem, it's called the Gravitron fling. I think it has something to do with the bottom gravity line of the Gravitron (you know, the way Viridian zips through a lot of rooms, that's supposed to happen to the bottom gravity line after 60 seconds (but much slower of course))
Title: Re: Internal commands
Post by: FIQ on May 23, 2013, 04:04:45 AM
You must place the bottom gravity line precisely, or VVVVVV will screw up once the gravitron runs out of time. Even if you do place it correctly, a few edge cases still causes flinging, which can be seen in some of the player levels with gravitrons which aren't inserted 100% correctly.
Title: Re: Internal commands
Post by: Chillius on May 23, 2013, 07:52:13 AM
8 Blocks in the Y Axis
Title: Re: Internal commands
Post by: Samario on May 23, 2013, 11:33:46 AM
8 Blocks in the Y Axis
Thanks for your help.

Also, is it possible to have the animated tiles seen in the second half of The Final Level in the editor?
(By "animated tiles", I mean make them animate via a script or whatever else is necessary (unless it's built into gamestate 200 and I'm doing it wrong...))
Title: Re: Internal commands
Post by: Dav999 on May 23, 2013, 12:02:20 PM
Also, is it possible to have the animated tiles seen in the second half of The Final Level in the editor?
(By "animated tiles", I mean make them animate via a script or whatever else is necessary (unless it's built into gamestate 200 and I'm doing it wrong...))

I think there is, you just need Direct Mode in 2.1 for it:

I found something interesting.
In the Space Station tileset, tile 740 animates when finalstretch mode is on! (http://www.derekyu.com/images/art/pixel/fu-surprise.gif)
Title: Re: Internal commands
Post by: Chillius on May 24, 2013, 09:35:53 AM
8 Blocks in the Y Axis
Thanks for your help.

Also, is it possible to have the animated tiles seen in the second half of The Final Level in the editor?
(By "animated tiles", I mean make them animate via a script or whatever else is necessary (unless it's built into gamestate 200 and I'm doing it wrong...))
Yes There is actaully.

Try looking at some tiles in Direct mode
Title: Re: Internal commands
Post by: blue626 on May 24, 2013, 11:01:57 AM
Yes There is actaully.

Try looking at some tiles in Direct mode

Why would you answer it again? ???

I think there is, you just need Direct Mode in 2.1 for it:

I found something interesting.
In the Space Station tileset, tile 740 animates when finalstretch mode is on! (http://www.derekyu.com/images/art/pixel/fu-surprise.gif)
Title: Re: Internal commands
Post by: FIQ on May 24, 2013, 12:26:03 PM
8 Blocks in the Y Axis
Thanks for your help.

Also, is it possible to have the animated tiles seen in the second half of The Final Level in the editor?
(By "animated tiles", I mean make them animate via a script or whatever else is necessary (unless it's built into gamestate 200 and I'm doing it wrong...))
No.
Well yes in theory, but not in practice. You cannot use gamestate 200 for it.
Title: Re: Internal commands
Post by: Samario on May 24, 2013, 02:49:28 PM
No.
Well yes in theory, but not in practice. You cannot use gamestate 200 for it.

So, how DO you do it?
Title: Re: Internal commands
Post by: blue626 on May 24, 2013, 03:27:58 PM
If you happen to have version 2.0., then you don't have direct mode and what Dav999 said doesn't help here. Can't help you more.

In fact, I'm confused...

Also, is it possible to have the animated tiles seen in the second half of The Final Level in the editor?
(By "animated tiles", I mean make them animate via a script or whatever else is necessary (unless it's built into gamestate 200 and I'm doing it wrong...))

I think there is, you just need Direct Mode in 2.1 for it:

I found something interesting.
In the Space Station tileset, tile 740 animates when finalstretch mode is on! (http://www.derekyu.com/images/art/pixel/fu-surprise.gif)

(...)

Also, is it possible to have the animated tiles seen in the second half of The Final Level in the editor?
(By "animated tiles", I mean make them animate via a script or whatever else is necessary (unless it's built into gamestate 200 and I'm doing it wrong...))
No.
Well yes in theory, but not in practice. You cannot use gamestate 200 for it.

 ???
Title: Re: Internal commands
Post by: Samario on May 25, 2013, 12:42:57 AM
If you happen to have version 2.0., then you don't have direct mode and what Dav999 said doesn't help here. Can't help you more.

In fact, I'm confused...
(insert quotes here)

 ???

I do have 2.1, but it still doesn't work (I'm fine with no changing colo(u)r, I just want the tiles to animate).

Off-topic a bit: Yeah, I'm sort of confused too - what Dav999 and FIQ said are completely different - who's right?  ???
Title: Re: Internal commands
Post by: allison on May 25, 2013, 12:23:42 PM
It might be possible to use gotoroom(x,y) with nearly identical rooms to make the tiles animate. If you had a WHOLE BUNCH OF ROOMS you could even emulate the color changing!
Title: Re: Internal commands
Post by: Samario on May 25, 2013, 12:29:24 PM
It might be possible to use gotoroom(x,y) with nearly identical rooms to make the tiles animate. If you had a WHOLE BUNCH OF ROOMS you could even emulate the color changing!
Unfortunately,
A) I don't WANT the colo(u)r changing,
B) that would take up too many rooms, and
C) gotoroom locks controls.

End of story.
Title: Re: Internal commands
Post by: Dav999 on May 25, 2013, 12:39:57 PM
It might be possible to use gotoroom(x,y) with nearly identical rooms to make the tiles animate. If you had a WHOLE BUNCH OF ROOMS you could even emulate the color changing!
Unfortunately,
A) I don't WANT the colo(u)r changing,
B) that would take up too many rooms, and
C) gotoroom locks controls.

End of story.

A) You can do it without the color changing
B) True, and too many scripts too because you have to make separate ones for each room (unless you use moveplayer(x,y) in a right way)
C) No, it doesn't if you execute it right; does anyone know where that test level is where you can move normally while gotoroom constantly changes the room?
Title: Re: Internal commands
Post by: FIQ on May 25, 2013, 12:58:59 PM
Let me rephrase.
You can do this. You cannot use gamestate 200 for it. You must use gotoroom() kinda like how you make scripts execute in the background. And an insame amount of rooms, even w/o color change (4 per room except for the green ones which require 16 IIRC). And an insame amount of scripts, which will hit the limit in no time unless you plan to do this for like 1 room.

That's what I meant with "not in practice".
Title: Re: Internal commands
Post by: Samario on May 25, 2013, 02:38:35 PM
Rather annoying, but I'll live with it.
Thanks for your help!

Also, let's discuss createmetroidprime() now.
Title: Re: Internal commands
Post by: Hejmstel on May 26, 2013, 08:43:04 AM
no let's disciss createsupermetroid() cause it's better
Title: Re: Internal commands
Post by: allison on May 26, 2013, 08:47:32 AM
C) No, it doesn't if you execute it right; does anyone know where that test level is where you can move normally while gotoroom constantly changes the room?

I don't remember where I posted it, but here it is again. By using the different tiles instead of different colors, you can get the animation. This would obviously have to be used sparingly.
Title: Re: Internal commands
Post by: Samario on May 26, 2013, 10:16:35 AM
no let's disciss createsupermetroid() cause it's better
Wasn't referring to the game, I was referring to the creature.
Title: Re: Internal commands
Post by: Samario on May 26, 2013, 11:05:59 AM
C) No, it doesn't if you execute it right; does anyone know where that test level is where you can move normally while gotoroom constantly changes the room?

I don't remember where I posted it, but here it is again. By using the different tiles instead of different colors, you can get the animation. This would obviously have to be used sparingly.

Yeah, but how do you make A DOORWAY with this? Also - proof-of-concept of all instability tiles cycled through coming soon.
Title: Re: Internal commands
Post by: FIQ on May 28, 2013, 05:33:17 AM
C) No, it doesn't if you execute it right; does anyone know where that test level is where you can move normally while gotoroom constantly changes the room?

I don't remember where I posted it, but here it is again. By using the different tiles instead of different colors, you can get the animation. This would obviously have to be used sparingly.
Yeah, but how do you make A DOORWAY with this? Also - proof-of-concept of all instability tiles cycled through coming soon.
Make 3 scripts. One script for the most part of the room, one part near the exit, and one on the opposite side of the exit. The script at the exit turns on a flag, the "main" script turns it off, and the script on the opposite side checks if the flag is on. If it is, perform a roomchange with gotoroom().

Not sure if it would work, I haven't tested it but it should be doable. Keep in mind this is just theoretically, it isn't really feasible to do an actual level with animating tiles, unless it's like 1 room :P
Title: Re: Internal commands
Post by: Samario on May 30, 2013, 10:00:17 AM
Again, not sure if this is the right thread (but it sounds like int. scripting would be used for this...), but is there a way to make a timer that runs in the background (i.e. the player can control  :viridian: while the timer's going), then run a script when it runs out (kind of like the Metroid escape sequence(s) except without the timer)? For example:

Code: [Select]
Fillerfillerfiller
Code goes here
Fillerfillerfiller

Code: [Select]
say
TIME HAS RUN OUT.
say(-1)
text(1,0,0,4)
say(15)
hideplayer()
flash(30)
fadeout()
text(1,-1,50,1)
GAME OVER.
backgroundtext
speak
text(1,-1,70,1)
TRY AGAIN?
backgroundtext
speak
text(1,-1,90,1)
[YES]     NO
speak
text(1,0,0,4)
say(4)
endtext
endcutscene()
untilbars()
loadscript(stop)

Title: Re: Internal commands
Post by: FIQ on May 30, 2013, 11:22:08 AM
Yes, you can!
But it's quite awkward and requires use of the script backgrounding technique. This in turn requires the room to have no kind of animations (enemies, platforms, conveyors) and the script can only run in that specific room, unless you use some complex tricks which makes everything even more awkward.
Title: Re: Internal commands
Post by: Samario on May 31, 2013, 01:11:19 AM
Yes, you can!
But it's quite awkward and requires use of the script backgrounding technique. This in turn requires the room to have no kind of animations (enemies, platforms, conveyors) and the script can only run in that specific room, unless you use some complex tricks which makes everything even more awkward.

Well? What's the code?
Title: Re: Internal commands
Post by: FIQ on May 31, 2013, 10:35:47 AM
Yes, you can!
But it's quite awkward and requires use of the script backgrounding technique. This in turn requires the room to have no kind of animations (enemies, platforms, conveyors) and the script can only run in that specific room, unless you use some complex tricks which makes everything even more awkward.

Well? What's the code?
Well, I said it was awkward, but you asked for it.

Background scripts executes one per tick. 30 tick is approximately 1s. Say you want it to execute for 10 seconds. I would do it like this:
Set away 5 flags to use as a binary counter before executing a full second, say flag 1-5 for the second ticker. I have 2 choices - a more complex script to make it truly 1s, or to make it 2 ticks slower. Depending on the use case, I probably do the latter.
For the actual seconds, I set away 4 flags as the second counter, say flag 6-9. I also set away a flag for noting that the counter has started, say flag 10. I also use a flag to stop the counter, say 11.
I then do scripts that execute gotoroom(X,Y) where X,Y is the room the script is in. This will make the same script trigger again immediately once it's done executing -- but it wont halt your movement. The actual script looks something like this:
(# TEXT for comments, those aren't included in the script, but it's for explaining what I'm doing)

The actual code is below. Keep in mind I haven't tested it, so there might be typos and I might have thought wrong at some points.

Code: [Select]
counter_load:
ifflag(11,stop)
iftrinkets(0,counter) # load internal script

counter:
say(5) # this is one of the few needed internal scripts
gotoroom(0,0) # allow "script backgrounding"
customifflag(5,counter5) # increase counter of flag 5
customifflag(10,counter_started) # check if it has started at all
flag(10,on) # it hasn't
text(1,0,0,4)
say(5) # text
text(gray,-1,30,1)
Counter
backgroundtext
speak
text(1,0,0,4)
say(5)
text(red,-1,90,1)
10
backgroundtext
speak
text(1,0,0,4)
say(5) # set the flags to their current time, making it output 9 once a full second pass
flag(6,on)
flag(7,off)
flag(8,off)
flag(9,on)
loadscript(stop)
text(1,0,0,4)

counter_started:
flag(5,on)
delay(0)

counter5:
flag(5,off) # Do the splitsecond counter
ifflag(4,counter4)
flag(4,on)
delay(0) # those are needed to prevent a bug in VVVVVV

counter4:
flag(4,off)
ifflag(3,counter3)
flag(3,on)
delay(0)

counter3:
flag(3,off)
ifflag(2,counter2)
flag(2,on)
delay(0)

counter2:
flag(2,off)
ifflag(2,counter1)
flag(1,on)
delay(0)

counter1:
flag(1,off)
ifflag(1,counter_full0000) # trigger a second, check at the very bottom
delay(0)

# The full counters, sorted by when they occur (in practice). The first part which doesn't exist for odd numbers are continuing branching to other seconds, simulating integers. The second part sets the flags applied for the incoming second. The third part is actual output. While I could merge part 1 and 2 under the same text(1,0,0,4) part in some cirumstances, I didn't, to make it more understandable.

counter_full1001:
say(2)
flag(9,off)
text(1,0,0,4)
say(5)
text(red,-1,90,1)
09
backgroundtext
speak
loadscript(stop)
text(1,0,0,4)

counter_full1000:
say(2)
customifflag(9,counter_full1001)
text(1,0,0,4)
say(5)
flag(6,off)
flag(7,on)
flag(8,on)
flag(9,on)
text(1,0,0,4)
say(5)
text(red,-1,90,1)
08
backgroundtext
speak
loadscript(stop)
text(1,0,0,4)

counter_full0111:
say(2)
flag(9,off)
text(1,0,0,4)
say(5)
text(red,-1,90,1)
07
backgroundtext
speak
loadscript(stop)
text(1,0,0,4)

counter_full0110:
say(3)
customifflag(9,counter_full0111)
text(1,0,0,4)
say(3)
flag(8,off)
flag(9,on)
text(1,0,0,4)
say(5)
text(red,-1,90,1)
06
backgroundtext
speak
loadscript(stop)
text(1,0,0,4)

counter_full0101:
say(2)
flag(9,off)
text(1,0,0,4)
say(5)
text(red,-1,90,1)
05
backgroundtext
speak
loadscript(stop)
text(1,0,0,4)

counter_full0100:
say(3)
customifflag(8,counter_full0110)
customifflag(9,counter_full0101)
text(1,0,0,4)
say(4)
flag(7,off)
flag(8,on)
flag(9,on)
text(1,0,0,4)
say(5)
text(red,-1,90,1)
04
backgroundtext
speak
loadscript(stop)
text(1,0,0,4)

counter_full0011:
say(2)
flag(9,off)
text(1,0,0,4)
say(5)
text(red,-1,90,1)
03
backgroundtext
speak
loadscript(stop)
text(1,0,0,4)

counter_full0010:
say(2)
customifflag(9,counter_full0011)
text(1,0,0,4)
say(3)
flag(8,off)
flag(9,on)
text(1,0,0,4)
say(5)
text(red,-1,90,1)
02
backgroundtext
speak
loadscript(stop)
text(1,0,0,4)

counter_full0001:
say(2)
flag(9,off)
text(1,0,0,4)
say(5)
text(red,-1,90,1)
01
backgroundtext
speak
loadscript(stop)
text(1,0,0,4)

counter_full0000:
say(5)
customifflag(6,counter_full1000) # those are different states of flags
customifflag(7,counter_full0100)
customifflag(8,counter_full0010)
customifflag(9,counter_full0001)
text(1,0,0,4)
say(5)
text(red,-1,90,1)
00
backgroundtext
speak
text(1,0,0,4)
say(2)
flag(11,on) # stop the script
loadscript(stop)
text(1,0,0,4)
Title: Re: Internal commands
Post by: Lollipop on April 10, 2016, 07:03:04 PM
Bump so that it'll appear on the front page (for a while)
Title: Re: Internal commands
Post by: Starspire on April 10, 2016, 07:05:13 PM
Stickehd
Title: Re: Internal commands
Post by: Lollipop on April 10, 2016, 07:21:41 PM
Stickehd

now i wont have to constantly bump this for ease of access
Title: Re: Internal commands
Post by: shiny k on April 11, 2016, 07:08:36 AM
fantastic
Title: Re: Internal commands
Post by: AllyTally ♡ on April 11, 2016, 12:27:11 PM
You know dav should do the same on tolp
Even though he didn't
And it would be useful
AND I FUCKING ASKED TWICE
*ahem*
I mean
This would be useful stickied on tolp
Title: Re: Internal commands
Post by: AllyTally ♡ on April 22, 2016, 05:52:34 PM
Bump so that it'll appear on the front page (for a while)
omggggg 3 year bumppppp
Title: Re: Internal commands
Post by: SteveGamer68 on May 30, 2016, 12:27:53 AM
createentity(x,y,n,meta,meta)
what is the meta is?  :victoria:
Title: Re: Internal commands
Post by: AllyTally ♡ on May 30, 2016, 04:16:10 AM
Scroll down to the post after that.
Title: Re: Internal commands
Post by: Dav999 on May 30, 2016, 05:30:48 AM
createentity(x,y,n,meta,meta)
what is the meta is?  :victoria:
It depends on the entity, it should be listed in the list of entities.
Title: Re: Internal commands
Post by: IanBoy141 on December 23, 2016, 03:20:35 PM
All songs for the music command:
music(x)
0 = Pending Silence (nothing)
1 = Pushing Onwards
2 = Positive Force
3 = Potential for Anything
4 = Passion for Exploring
5 = Presenting VVVVVV
6 = Predestined Fate
7 = Popular Potpourri
8 = Pipe Dream
9 = Pressure Cooker
10 = Paced Energy
11 = Piercing The Sky
15 = Predestined Fate 2.0 (not in the actual music list)
16 = Path Complete (not in the actual music list)
21 = Pause (not in the actual music list)
23 = Plenary (not in the actual music list)

For the lazy who don't want to read through all 44 pages  ;)
Title: Re: Internal commands
Post by: shiny k on December 23, 2016, 05:27:36 PM
http://distractionware.com/forum/index.php?topic=2458.0  :-X
Title: Re: Internal commands
Post by: IanBoy141 on December 24, 2016, 03:35:18 AM
http://distractionware.com/forum/index.php?topic=2458.0  :-X

But i featured some songs that weren't on the list at all  :-\
Title: Re: Internal commands
Post by: shiny k on December 24, 2016, 08:09:11 AM
http://distractionware.com/forum/index.php?topic=2458.0  :-X

But i featured some songs that weren't on the list at all  :-\
you gave the wrong codes
In reality, its (when you're using internal scripting, when you're using the "play()" command):

15 = Predestined Fate Remix
0 = Path Complete
5 = Pause
7 = Plenary
9 = ecroF evitisoP

When you AREN'T using internal scripting (when you're using the "music()" command:

15 = Predestined Fate Remix
0a = Path Complete
5a = Pause
7a = Plenary
9a = ecroF evitisoP
Title: Re: Internal commands
Post by: IanBoy141 on December 24, 2016, 09:53:01 AM
http://distractionware.com/forum/index.php?topic=2458.0  :-X

But i featured some songs that weren't on the list at all  :-\
you gave the wrong codes
In reality, its (when you're using internal scripting, when you're using the "play()" command):

15 = Predestined Fate Remix
0 = Path Complete
5 = Pause
7 = Plenary
9 = ecroF evitisoP

When you AREN'T using internal scripting (when you're using the "music()" command:

15 = Predestined Fate Remix
0a = Path Complete
5a = Pause
7a = Plenary
9a = ecroF evitisoP

fug
Title: Re: Internal commands
Post by: SteveGamer68 on January 30, 2017, 11:07:39 PM
Where's the sound effects list?
Title: you guys make me want to scream sometimes
Post by: shiny k on January 31, 2017, 07:05:50 AM
http://distractionware.com/forum/index.php?topic=2458.0  :-X
Title: Re: Internal commands
Post by: Gawne on February 01, 2017, 07:25:30 AM
is that why your tagline is "aaaAAAAAAH!" ?
Title: google "rh glee club"
Post by: shiny k on February 01, 2017, 03:40:53 PM
is that why your tagline is "aaaAAAAAAH!" ?
no
Title: Re: Internal commands
Post by: lol...ipops2 on February 21, 2017, 08:22:11 AM
text(colour,x,y,lines)
Can someone show me how that works?
Especially the "lines" part.
I know it's the diolauge but how do you enter it in?
Title: Re: Internal commands
Post by: Dav999 on February 21, 2017, 09:58:59 AM
The lines is just the amount of lines your text box has, so:
Code: [Select]
text(player,50,50,1)
This is some text!
speak_active
Code: [Select]
text(player,50,50,2)
This is some text, on
multiple lines!
speak_active

I made a guide earlier of everything related to text boxes in internal scripting, which can be found here (https://tolp2.nl/forum/index.php?topic=2955.msg54274#msg54274)
Title: Re: Internal commands
Post by: allison on February 21, 2017, 10:23:21 AM
I made a guide earlier of everything related to text boxes in internal scripting, which can be found here (https://tolp2.nl/forum/index.php?topic=2955.msg54274#msg54274)
Maybe you could add some quotes to your original post? It'd be nice to have all this disparate reference material in one place.
Title: Re: Internal commands
Post by: lol...ipops2 on February 21, 2017, 11:07:00 AM
is flash just flash in internal scripting? or is it something else?
Title: Re: Internal commands
Post by: QwertymanO07 on February 21, 2017, 11:43:01 AM
In IS, flash() is literally just the screen flashing white, with the argument being the duration.  You need to pair it with playef() and shake(), but I don't remember the exact values.  It's in the second post, though.
Title: Re: Internal commands
Post by: AllyTally ♡ on February 21, 2017, 12:40:53 PM
playef is 9 for ss flash sf, 10 is teleport
shake should be 20
flash should be 5
Title: Re: Internal commands
Post by: lol...ipops2 on March 22, 2017, 06:31:05 AM
is it position(centerxy) or position(centerxcoordinateycoordinate)
I mean that is it centerxy or i.e center13
Title: Re: Internal commands
Post by: AlexINF on March 22, 2017, 08:25:36 AM
is it position(centerxy) or position(centerxcoordinateycoordinate)
I mean that is it centerxy or i.e center13
centerxy, centerx and centery are only for centering in the screen. they don't accept numbers.
Title: Re: Internal commands
Post by: AllyTally ♡ on March 22, 2017, 06:44:08 PM
position(center) centres the screen
centerx centers it on the x
centery centers it on the y
position(centerx, 8) would work
Title: Re: Internal commands
Post by: lol...ipops2 on March 23, 2017, 08:52:12 AM
position(center) centres the screen
centerx centers it on the x
centery centers it on the y
position(centerx, 8) would work
Fixed
Title: Re: Internal commands
Post by: Snivypro on April 02, 2017, 12:17:15 PM
Could you give me an example of the "createcrewman" script?  :victoria:
Title: Re: Internal commands
Post by: weee50 on April 02, 2017, 12:50:06 PM
createcrewman(112,80,blue,0,faceplayer)

112 and 80 are the x and y positions respectively, if you're having trouble with them, use Ved, and the coordinates (I think) are where the top-left corner of the crewmate should go.

blue is just the color of the crewmate (red, yellow, green, cyan, blue or purple)

0 is the mood of the crewmate (0 is happy, 1 is sad, I think)

faceplayer is the AI of the crewmate, An AI can be one of these: followplayer, followpurple, followyellow, followred, followgreen, followblue, faceplayer, followposition (if you choose this one there has to be a sixth variable saying what x position), panic, faceleft, or faceright
Title: Re: Internal commands
Post by: lol...ipops2 on April 16, 2017, 10:25:35 AM
I'm making a level where you play as :vermillion: and I want to know how to make you stay as vermillion when you die.
Title: Re: Internal commands
Post by: Viridan on April 16, 2017, 02:49:21 PM
put the changeplayercolour command over your checkpoints
Title: Re: Internal commands
Post by: lol...ipops2 on April 16, 2017, 02:56:49 PM
put the changeplayercolour command over your checkpoints
But what if you die twice in the same room, that's what I want to fix
Title: Re: Internal commands
Post by: Dav999 on April 16, 2017, 03:28:20 PM
Then you have to use gotoroom to put the script box back, so for every room you can die twice in while not playing as Viridian you need a unique script with the coordinates for that room.
Title: Re: Internal commands
Post by: Duckman50001 on April 18, 2017, 01:58:51 AM
Then you have to use gotoroom to put the script box back, so for every room you can die twice in while not playing as Viridian you need a unique script with the coordinates for that room.

When I was messing with the "changeplayercolour(red)" script, I died and stayed red when I respawned
Title: Re: Internal commands
Post by: AllyTally ♡ on April 18, 2017, 03:44:10 AM
That's because you went out of the room the script was in and died, so the script reloaded
Title: Re: Internal commands
Post by: Duckman50001 on May 01, 2017, 02:33:22 AM
That's because you went out of the room the script was in and died, so the script reloaded

no, I stayed in the same room.

EDIT: o wait, its probably because I use make and play edition
Title: Re: Internal commands
Post by: DubstVne on November 11, 2017, 03:15:13 PM
--- METHOD 2 - WITHOUT CUTSCENE BARS---

If you want to use internal commands without cutscene bars, put this in the script box which Viridian walks through:

Code: (script1) [Select]
iftrinkets(0,script2)
Then make a new script. In this case the new script is called 'script2' (you can use any name using a-z or 0-9, note that A-Z and some special characters should not be used). Delete the script box, so that Viridian doesn't activate it directly. The script has to be activated by the script containing iftrinkets(0,script2).

The second script should look like this:

Code: (script2 first part) [Select]
say(5)
{internal command}
{internal command}
{internal command}
{internal command}
text(1,0,0,4)
say(5)
{internal command}
{internal command}
{internal command}
{internal command}
text(1,0,0,4)
say(5)
...

It has to end with:

Code: (script2 last part) [Select]
...
{internal command}
{internal command}
{internal command}
{internal command}
text(1,0,0,4)
say(2)
endtext
loadscript(stop)
text(1,0,0,4)

Note that in the last part of this script, there has to be one blank line after the last text(1,0,0,4). Not 0, because then things get deleted because of a bug in the script editor, and not more than 1, because then it won't work. 'text(1,0,0,4)' has to be the second last line, and the last line has to be empty.

Just like in the say(-1) method, 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: (script2) [Select]
say(4)
{internal command}
{internal command}
{internal command}
text(1,0,0,4)
say(5)
{internal command}
{internal command}
{internal command}
{internal command}
text(1,0,0,4)
say(2)
{internal command}
text(1,0,0,4)
say(2)
endtext
loadscript(stop)
text(1,0,0,4)


For some reason, whenever I test the script, it freezes the game and the only thing happening is the cutscene, but its not doing what I
Told it to do. here is my script:

say(2)
gamestate(10)

text(1,0,0,4)

endtext

loadscript(stop)


I spaced them out all one line. can you help me?

My face: :violet:

Title: Re: Internal commands
Post by: Viridan on November 11, 2017, 07:36:24 PM
you're not allowed to put multiple commands on the same line

correct:
say(5)
{internal command}
{internal command}
{internal command}
{internal command}
text(1,0,0,4)

incorrect:
say(2)
{internal command} {internal command} {internal command} {internal command}
text(1,0,0,4)
Title: Re: Internal commands
Post by: allison on November 11, 2017, 10:15:54 PM
it seems more like they put blank lines between each command... which isn't correct either. the only single blank line needed is at the very end of the script.
Title: Re: Internal commands
Post by: DubstVne on November 21, 2017, 02:35:48 PM
None of your methods work here. on the say(-1) method, it says text that was last said before the internal command. If you use your cutscene bar method, it will not work.

 
:victoria:
Title: Re: Internal commands
Post by: AllyTally ♡ on November 21, 2017, 05:06:04 PM
We can't help without your script.
Title: so yeah
Post by: shiny k on November 21, 2017, 05:31:54 PM
please post your script so we can help!  :)
Title: Re: Internal commands
Post by: DubstVne on November 26, 2017, 04:06:44 PM
heres some screenshots of the problems:

well, the say(-1) thing wont work (yes I added space at the end): https://imgur.com/a/wQ4p9

and look, it does nothing and softlocks ONLY THE LEVEL (that means that you can still quit the level, just viridian freezes): https://youtu.be/-4Ok-XhS7lA


and the cutscene bar method? here is the code I did: https://imgur.com/a/HMdTu

and yep, it did the same thing as say(-1).


Title: if anyone was wonderin
Post by: shiny k on November 26, 2017, 07:56:13 PM
^ problem has been resolved on the vvvvvv discord
Title: Re: Internal commands
Post by: AllyTally ♡ on November 27, 2017, 01:05:09 PM
you should join that
Title: Re: Internal commands
Post by: Valso22 on December 12, 2017, 08:32:19 PM
¿does the moveplayer command uses normal pixels? (pixels that are when you set a block or something on the level editor) or MINI pixels (1) pixels that are of textures, images etc.), (2) those little, small pixels that build all.)
Title: Re: Internal commands
Post by: Valso22 on December 12, 2017, 09:07:19 PM
i think companion() makes  :vermillion:  follow  :viridian:
Title: Re: Internal commands
Post by: AllyTally ♡ on December 13, 2017, 05:53:42 PM
1. no, it doesnt work with blocks
2. this is an old version of the list
Title: Re: Internal commands
Post by: Chorodo on December 23, 2017, 06:20:47 PM
Is there a way to get rid of the terminal sound when the script is activated, and still get cutscene bars?
:viridian:
:victoria:
:vermillion:
:vitellary:
:verdigris:
:violet:
Title: Re: Internal commands
Post by: uugr on December 23, 2017, 06:26:43 PM
The terminal sound doesn't happen if yo use the iftrinkets() method. You can add cutscene bars by using the "cutscene()" command, usually followed by "untilbars()" to pause the script until they come on.
Title: Re: Internal commands
Post by: Xdroid19 on December 24, 2017, 04:37:26 PM
I just used gamestate 9 and VVVVVV crashed
Title: Re: Internal commands
Post by: AllyTally ♡ on December 24, 2017, 05:12:15 PM
"crashed"?
Title: Re: Internal commands
Post by: SteveGamer68 on January 06, 2018, 06:15:40 AM
I just used gamestate 9 and VVVVVV crashed
For that, can you give the script for gamestate 9?
Title: Re: Internal commands
Post by: Chorodo on January 13, 2018, 10:09:57 AM
is there anyway to freeze the player without freezing the screen?
Title: Re: Internal commands
Post by: AllyTally ♡ on January 13, 2018, 10:32:50 AM
freeze:
gamestate(1000)
delay(1)
endcutscene
gamestate(0)

unfreeze:
gamestate(1003)
Title: Re: Internal commands
Post by: Chorodo on January 14, 2018, 04:07:20 PM
freeze:
gamestate(1000)
delay(1)
endcutscene
gamestate(0)

unfreeze:
gamestate(1003)
thnx
Title: Re: Internal commands
Post by: SteveGamer68 on March 18, 2018, 08:37:11 AM
Gamestate 9 is Super Gravitron.
I wonder why it "crashed". Maybe you used IS wrong?
(btw, 700th reply!)
Title: Re: Internal commands
Post by: Info Teddy on June 11, 2018, 03:39:07 PM
freeze:
gamestate(1000)
delay(1)
endcutscene
gamestate(0)

unfreeze:
gamestate(1003)
if you want to freeze the player but not freeze everything else, you can either use
Title: Re: Internal commands
Post by: Xandog01 on July 08, 2018, 09:29:25 AM
Dav999, When you put finalmode(x,y) in blue, I was suprised, because if you type finalmode(54,56) you can trigger the last cutscene  +  Credits, which can destroy save data, so if anything, it should be in orange, because it also worked for me.   ;)

Quote
finalmode(x,y)
Title: Re: Internal commands
Post by: Xandog01 on July 08, 2018, 10:11:01 AM
I just used gamestate 9 and VVVVVV crashed
If you want to use gamestate(9)
you have to type:
Quote
say(-1)
text(1,0,0,4)
say(2)
gamestate(9)
text(1,0,0,4)
say(2)
endtext
loadscript(stop)
text(1,0,0,4)
Keep in Mind that Exiting Super Gravitron will send you where the Secret Lab is in the Main Game (I think)

Adding on, Dav999, What do you mean by"Unused Command" Do you mean It's Unused in the main game?
Title: Re: Internal commands
Post by: Xandog01 on July 08, 2018, 10:26:50 AM
i think companion() makes  :vermillion:  follow  :viridian:
Quote from: FIQ
3000-3099 states:
3000-3005 - Level Complete! You've rescued the crewmate applied to companion(), defaults to Verdigris. 6=Verdigris, 7=Vitellary, 8=Victoria, 9=vermillion, 10=viridian (yes, really), 11=Violet (Gamestates: 3006-3011=Verdigris, 3020-3026=Vitellary, 3040-3046=Victoria, 3060-3066=Vermillion, 3080-3086=Viridian, 3050-3056=Violet)
It's Something to do with gamestates 3000-3099, as FIQ said before.

EDIT: I don't know how this site completely works, so I don't know how to make quotes from other pages of this forum.

Title: Re: Internal commands
Post by: shiny k on July 08, 2018, 01:53:33 PM
keep in mind valso22 isnt active anymore and the most recent internal scripting list is included in ved
Title: Re: Internal commands
Post by: Xandog01 on July 08, 2018, 02:40:02 PM
keep in mind valso22 isnt active anymore and the most recent internal scripting list is included in ved
Thanks for letting me know   :viridian:

And I downloaded Ved too. Its pretty cool.
Dav999 has good talent if he made an improved level editor.
Title: Re: Internal commands
Post by: Xandog01 on July 08, 2018, 02:50:11 PM
Also, I don't get The Crewmate/Captain/Professor thing. I mean, I know it's based off of the characters, but do you need a certain amount of posts?  :-\
Title: Re: Internal commands
Post by: Xandog01 on July 08, 2018, 03:05:20 PM
flipme - makes :viridian: flip/go to the ceiling (?) Doesn't have anything to do with flipping Viridian  It has something to do with text boxes in flip mode

I wonder why it's called flipme...
Title: Re: Internal commands
Post by: shiny k on July 08, 2018, 03:49:09 PM
do you need a certain amount of posts?
yeah but i forget what the amounts are
Title: Re: Internal commands
Post by: Xandog01 on July 08, 2018, 05:37:21 PM
Things in Black are safe, the worst thing possible is the game crashing
Things in Orange May Corrupt Save Data, even though there are none,  so ignore that.
Things inRed WILL Corrupt your save data
Things in Green are useless, an example being text on screen.


Here is the *complete* gamestate list if anyone wonders (Edited some of yours to detail exactly what happens) :p

Quote
0 - Break out from most gamestates
1 - Set gamestate to 0 (i.e. same as above in practice)
2 - "To do: write quick intro to story!"
4 - "Press arrow keys or WASD to move"
5 - Runs the script "returntohub" (i.e. fadeout, teleport to right before The Tower, fadein, play Passion for Exploring)
7 - Removes textboxes
8 - "Press enter to view map and quicksave"
9 - Super Gravitron
10 - Gravitron
11 - "When you're NOT standing on stop and wait for you" (Tries to access flipmode check to write "the ceiling" or "the floor", and check crewmate, but as this fails, the above prints instead)
12 - "You can't continue to the next room until he is safely accross."
13 - Removes textboxes quickly
14 - "When you're standing on the floor," (the same applies here as for 11)
15 - Makes Viridian happy
16 - Makes Viridian sad
17 - "If you prefer, you can press UP or DOWN instead of ACTION to flip."
11-17: Green
20 - If flag 1 is 0, set flag 1 to 1 and remove textboxes
21 - If flag 2 is 0, set flag 2 to 1 and remove textboxes
22 - "Press ACTION to flip"
30 - "I wonder why the ship teleported me here alone?" "I hope everyone else got out ok…"
31 - "Violet, is that you?" cutscene (as long as flag 6 is 0)
32 - If flag 7 is 0: "A teleporter!" "I can get back to the ship with this!"
33 - If flag 9 is 0: Victoria-cutscene
34 - If flag 10 is 0: Vitellary-cutscene
35 - If flag 11 is 0: Verdigris-cutscene
36 - If flag 8 is 0: Vermilion-cutscene
37 - Vitellary after gravitron
38 - Vermilion after gravitron
39 - Verdigris after gravitron
40 - Victoria after gravitron
41 - If flag 60 is 0: run the beginning of intermission 1 cutscene
42 - If flag 62 is 0: run the 3rd intermission 1 cutscene
43 - If flag 63 is 0: run the 4th intermission 1 cutscene
44 - If flag 64 is 0: run the 5th intermission 1 cutscene
45 - If flag 65 is 0: run the 6th intermission 1 cutscene
46 - If flag 66 is 0: run the 7th intermission 1 cutscene
22-46: Green
47 - If flag 69 is 0: "Ohh! I wonder what that is?" trinket cutscene
48 - If flag 70 is 0: "This seems like a good place to store anything I find out there…" (Victoria not found yet)
49 - If flag 71 is 0: Play Predestined Fate
50 - "Help! Can anyone hear this message?"
51 - "Verdigris? Are you out there? Are you ok?"
52 - "Please help us! We've crashed and need assistance!"
53 - "Hello? Anyone out there?"
54 - "This is Doctor Violet from the D.S.S. Souleye! Please respond!"
55 - "Please… Anyone…"
56 - "Please be alright, everyone…"
With gamestate 50-56, you can choose where to start, because everything will appear after each other (did anyone know that if you wait after "Help! Can anyone hear this message?", there will be more text?)
80 - If screen is black (and only if), continue to state 81 (My guess is that this is called when ESC is pressed, before the pause meny opens)
81 - Go back to the main menu
82 - Results of time trial (bugged)
83 - If screen is back, continue to state 84
84 - Results of time trial (I think 82 works better than 84)
85 - The Time Trial version of gamestate 200 (Flash, play Positive Force, turn on finalstretch mode)
States 90-95 are time trial related, but doesn't work properly in custom levels. The only real effects that happens in custom levels is a warp, and music change
90 - Space Station 1
91 - The Laboratory
92 - Warp Zone
93 - The Tower
94 - Space Station 2
95 - Final Level
96 - If the screen is black, continue to state 97
97 - Exit from Super Gravitron (teleport and play Pipe Dream)
100 - If flag 4 is 0: continue to state 101
101 - If you are flipped, flip back to floor, continue to state 102
The following states (102-112) tries to go to the current state + 1, like in 50-56 (but doesn't loop around), but may glitch as half of the states (103, 105, 107, 109, 111) doesn't exist.
102 - Verdigris: "Captain! I've been so worried!"
104 - "I'm glad you're ok!"
106 - "I've been trying to find a way out, but I keep going around in circles…"
108 - "Don't worry! I have a teleporter key!"
110 - "Follow me!"
112 - Removes textboxes
115 - Essentially nothing, continue to state 116
116 - Red dialog at the bottom of the screen saying "Sorry Eurogamers! Teleporting around the map doesn't work in this version!", continue to state 117, which doesn't exist, so things may fail
118 - Removes textboxes
State 120-128 works a bit like 102-112, i.e. in a series, but with less broken things
120 - If flag 5 is 0: continue to state 121
121 - If you're on the floor, flip.
122 - Vitellary: "Captain! You're ok!"
124 - Vitellary: "I've found a teleporter, but I can't get it to go anywhere…"
126 - "I can help with that!"
128 - "I have the teleporter codex for our ship!"
130 - "Yey! Let's go home!" (never heard of this cutscene before? Probably things Terry played with before coming up with the current story/etc /fiq)
132 - Removes textboxes
200 - Final mode
1000 - Turns on cutscenebars, freezes the game, continue to state 1001
1001 - You got a shiny trinket! dialog (but you didn't actually get any, this is just called each time you get one), continue to state 1003
1003 - Revert game to normal
1010 - You found a crewmate! in the same manner as for trinkets
2000 - Save the game
2500-2509 - Perform a teleport to some weird non-existent location, supposedly to The Laboratory I guess, continue to state 2510
2510 - Viridian: "Hello?", continue to state 2512
2512 - Viridian: "Is anybody there?", continue to state 2514
2514 - Removes textboxes, play Potential For Anything
3000-3099 states:
3000-3005 - Level Complete! You've rescued the crewmate applied to companion(), defaults to Verdigris. 6=Verdigris, 7=Vitellary, 8=Victoria, 9=vermilliridian (yes, really), 11=Violet (Gamestates: 3006-3011=Verdigris, 3020-3026=Vitellary, 3040-3046=Victoria, 3060-3066=Vermillion, 3080-3086=Viridian, 3050-3
3070-3072 - Perform postrescue things, usually return to ship
Red because it telesaves after doing so
4010 - Flash + Warp
Red because it telesaves after doing so.
4070 - The Final Level, but the game will crash when you reach timeslip! (Because of how the game gets entity information, which is broken in custom levels)
4080 - Captain teleported back to the ship: "Hello!" [C[C[C[C[Captain!] cutscene + credits
!!!The above will mess up your save data so don't do it unless you backed up!!!
4090 - Cutscene after you complete space station 1
Title: Re: Internal commands
Post by: AllyTally ♡ on July 09, 2018, 09:52:23 AM
edit your topic instead of posting multiple times in a row
most of your posts are off topic and this list is outdated anyway
Title: Re: Internal commands
Post by: shiny k on July 09, 2018, 10:16:13 AM
edit your topic instead of posting multiple times in a row
most of your posts are off topic and this list is outdated anyway
eh i'm not too bothered about the multiposting thing anymore because while it is slightly annoying it doesnt really hurt anyone
also i'd consider the "off topic" posts really just part of the natural flow of discussion
furthermore, they're new and we dont even have a rules topic iirc
Title: Re: Internal commands
Post by: Xandog01 on July 09, 2018, 11:06:54 AM
shiny k, congrats on your 1500th post, btw
Title: Re: Internal commands
Post by: Xandog01 on July 09, 2018, 11:07:52 AM
I only started yesterday.
Title: Re: Internal commands
Post by: shiny k on July 09, 2018, 11:50:20 AM
shiny k, congrats on your 1500th post, btw
oh snap i was gonna do something funny but i didnt even notice haha
oh well i'll save it for 2000 or somth :p
Title: Re: Internal commands
Post by: Dav999 on July 09, 2018, 12:40:50 PM
Adding on, Dav999, What do you mean by"Unused Command" Do you mean It's Unused in the main game?
Yes

EDIT: I don't know how this site completely works, so I don't know how to make quotes from other pages of this forum.
You can just quote in another topic and copy-paste the quote.

And I downloaded Ved too. Its pretty cool.
Dav999 has good talent if he made an improved level editor.
Thanks! :)

Now, a bit of leeway in topics is fine, but messages about post counts are a bit too random for this topic. Also please try to make one post at a time if possible, that is not a strictly enforced rule or anything but this isn't a live chat either ;)
Title: Re: Internal commands
Post by: Xandog01 on July 09, 2018, 03:12:49 PM
Now, a bit of leeway in topics is fine, but messages about post counts are a bit too random for this topic. Also please try to make one post at a time if possible, that is not a strictly enforced rule or anything but this isn't a live chat either ;)
Ok, I'll keep that in mind  :)
Title: Re: Internal commands
Post by: Xandog01 on July 09, 2018, 03:24:14 PM
And I downloaded Ved too. Its pretty cool.
Dav999 has good talent if he made an improved level editor.
Thanks! :)
No problem  ;)
Title: Re: Internal commands
Post by: Xandog01 on July 10, 2018, 03:30:00 PM
What would happen if you did finalmode(x,y) to get to the Room "Please Enjoy These Repeats" and put delay(60) after then did createentity 1? would you get grey yes men enemies?
Title: Re: Internal commands
Post by: Info Teddy on July 20, 2018, 12:06:25 PM
What would happen if you did finalmode(x,y) to get to the Room "Please Enjoy These Repeats" and put delay(60) after then did createentity 1? would you get grey yes men enemies?
please stop double/triple/quadruple/multiposting.

and no, the enemies would disappear due to the delay. if you removed the delay, also no, because it would be yellow. (http://distractionware.com/forum/index.php?topic=2881.msg35678#msg35678)
Title: Re: Internal commands
Post by: Xandog01 on August 04, 2018, 06:08:17 AM
I didn't know what multiposting meant! I'm sorry! but getting (kind of) back on topic, what does happen when you do final, delay, and createentity?
Title: Re: Internal commands
Post by: AllyTally ♡ on August 04, 2018, 06:26:58 AM
cool nvm
Title: simple as that
Post by: Info Teddy on August 04, 2018, 06:52:37 AM
I didn't know what multiposting meant! I'm sorry! but getting (kind of) back on topic, what does happen when you do final, delay, and createentity?
you would activate finalmode but the entity would quickly appear and disappear. if you removed the delay, the entity would appear.
Title: Re: Internal commands
Post by: AllyTally ♡ on August 04, 2018, 10:44:40 AM
oh, thats what he meant lol
Title: Re: Internal commands
Post by: Echogamer on November 06, 2018, 07:00:35 PM
Okay thanks that was helpful
Title: .-.
Post by: Valso22 on February 20, 2019, 05:43:49 PM
keep in mind valso22 isnt active anymore and the most recent internal scripting list is included in ved
.-.












































i didn't forget vvvvvv... yet.