A list of all the new features added to VVVVVV: Community Edition.
VVVVVV: Community Edition has accepted contributions from Misa, AllyTally, leo60228, FIQ, Stelpjo, mothbeanie, Allison Fleischer, and Dav999.
Version c1.0-pre2 (upcoming)
enablefog
/disablefog
are nowfog(enable/disable)
enableflip
/disableflip
are nowtoggleflip(enable/disable)
enableinfiniflip
/disableinfiniflip
are nowinfiniflip(enable/disable)
enablesuicide
/disablesuicide
are nowsuicide(enable/disable)
nointerrupt
/yesinterrupt
are nowsetinterrupt(on/off)
playmusicfile(file)
has been removedInstead of using
playmusicfile()
, simply useplayfile(file[,id])
. To get much of the additional functionality ofplaymusicfile()
, use the newly-added callbackon_custom_sfx_end
, which sets%path%
.Added optional third argument to
playfile()
for loop countunloadscriptimages
- unload images loaded bydrawimage
createdamage(x,y,w,h)
- makes a region that hurts the player like spikesFixed
changeplayercolor
alias ofchangeplayercolour
not workingAdded being able to use
tiles4.png
,tiles5.png
,tiles6.png
, etc. and using F9 to switch between them in the editor
Version c1.0-pre1
Removed having to use a load script to use internal scripting
Added automatic loading of custom assets - make a folder with the same name as your level file, and put the assets in there.
pdelay(n)
- adelay(n)
that doesn’t lock the player’s movementsetroomname()
- sets the roomname to the next linesettile(x,y,tile)
- place a tile temporarily in the roomYou can now use
text()
liketext(r,g,b,x,y,lines)
- r,g,b is 0-255 - if r,g,b is 0,0,0 only the text will show up and not the text boxreloadroom()
- reloads the current roomtoceil()
- invertedtofloor()
playfile(file[,id])
- play a file as either music or a sound effect. if you specify an id, the file loopsstopfile(id)
- stops playing a looping audio fileifnotflag(n,script)
- an inverted version ofifflag(n,script)
drawtext(x,y,r,g,b,center,type)
- draw text for one frame, the text you want to display should be on the next line - r,g,b is 0-255, center is0
/1
/true
/false
, type can be 0 for normal text, 1 for bordered text and 2 for big text; use an optional eighth argument for text scale (default is 2)drawrect(x,y,w,h,r,g,b[,a])
- draw a rectangle for one frame - r,g,b,a is 0-255drawimage(x,y,filename[,centered[,alpha[,background[,blend]]]])
- draw an image on the screen for one frame (alpha 0-255, backgroundtrue
/false
, blendnone
/blend
/add
/mod
)loadimage(filename)
- add the image to the cache without actually drawing itdrawimagepersist(x,y,filename[,centered[,alpha[,background[,blend]]]])
- same asdrawimage()
, but it stays on screen for more than a frame - it sets%return%
to its id, so you’re able to remove itremoveimage(id)
- remove a persistent imagedrawpixel(x,y,r,g,b)
- draw a pixel on the screen for one framefollowposition
now works for the playerThere’s now an option to disable only the music
The following limits have been removed:
- 500 scripts
- 500 script lines
- 200 entities in one room
- 100 roomtexts in one room
- 3000 placeable entities
destroy(crewmates)
- destroy non-rescuable crewmatesdestroy(customcrewmates)
- destroy rescuable crewmatesdestroy(platformsreal)
- A version ofdestroy(platforms)
that isn’t buggeddestroy()
any of the following:enemies
trinkets
warplines
checkpoints
all
conveyors
terminals
scriptboxes
disappearingplatforms
1x1quicksand
coins
gravitytokens
roomtext
teleporter
activityzones
killplayer()
customquicksave()
- quicksaves the levelniceplay()
- use this for better area music transitionsinf
- likedo(n)
, but an infinite amount of timesAdded a seventh argument to
createcrewman
, if it isflip
it spawns a flipped crewmatefatal_left()
- makes the left side of the screen deadlyfatal_right()
- makes the right side of the screen deadlyfatal_top()
- makes the top of the screen deadlyfatal_bottom()
- makes the bottom of the screen deadlyifrand(n,script)
- has a 1 in n chance to execute the scriptgotocheckpoint()
- teleports the player to their last checkpointAdded 6th argument to
createentity
that sets enemy typeAutomatically pause/unpause all audio on focus change
Instead of defaulting to gray, assume unknown colors in createcrewman/changecolor are internal ones
Added an argument to createcrewman to set a name (instead of pink/blue/etc.), useful in combination with the above or when having multiple crewmen of the same color
Added color aliases for all colour functions
Added optional parameter to
play
to set the fade-in time in ms (default 3000)markmap(x,y,tile)
to put a tile on any minimap coordinateunmarkmap(x,y)
to undomapimage(image.png)
to use any map imageautomapimage
to undoenablefog
/disablefog
to enable/disable hiding unexplored rooms (called fog in the code)All names (including
player
) now work with all functionsAdded the following enemy types:
- Hourglasses
- Yes Men
- Stop signs
- Linear Colliders
- Red pills
- Mannequins
- ZZT centipedes
- OBEY
- Edge Games
- Trench Warfare
- Tomb of Mad Carew
- Brass Sent Us Under The Top
- Wheel of Fortune
- TRUTH
- Skeletons
- Vertigo
Fixed enemies in Warp Zone gray not being gray
createroomtext(x,y)
- x,y in pixels, roomtext on next linecreatescriptbox(x,y,w,h,script)
- x,y,w,h in pixelsAllowed placed terminals to use any sprite they want
You can now place flipped terminals
markers(hide/show)
- disable/reenablemarkmap()
markerssetspeed(speed)
- set player speed, 3 by defaultsetvelocity(velocity)
- push the player (affected by inertia)pinf
- variant ofinf
to automaticallypdelay(1)
if no delay occurrednoautobars()
- to disable automatic cutscene bars from a scriptfinalstretch(on/off)
- toggle Final Level palette swapreloadscriptboxes()
- reload script boxes without affecting entitiespuntilbars()
-untilbars()
withpdelay()
puntilfade()
-untilfade()
withpdelay()
You can now use the Warp Zone gray tileset in the editor
disableflip
- disables flippingenableflip
- enables flippingenableinfiniflip
- enables flipping in mid-airdisableinfiniflip
- disables flipping in mid-airuntilmusic()
- wait until the current track has finished fading in or outpuntilmusic()
-untilmusic()
withpdelay()
Added a label and goto system - write down
.label
on a line, then to go to it, use.label
as a script name if you’re in the same script, or writescriptname.label
to jump to the label from another scriptifvce(script)
- detect if game is VVVVVV: Community Edition or notifmod(mod,script)
- checks for a mod - mod can bemmmmmm
(checks if MMMMMM is installed),mmmmmm_on
/mmmmmm_enabled
/mmmmmm_off
/mmmmmm_disabled
(checks if MMMMMM is installed AND enabled/disabled) orunifont
(checks if Unifont is installed)disablesuicide
- disable pressing Renablesuicide
- enable pressing Rcustomactivityzone(x,y,w,h,color,script)
ORcustomactivityzone(x,y,w,h,r,g,b,script)
- x,y,w,h in pixels, color isred
/orange
/yellow
/green
/cyan
/blue
/pink
/purple
(actually pink)/white
/gray
, if invalid it defaults to gray, r,g,b is 0-255, prompt goes on the next lineFixed the 2-frame delay to execute a script when entering a room
position(centerx,<line>)
- horizontally center the text box around the line x=<line>position(centery,<line>)
- vertically center the text box around the line y=<line>Added the Tower Hallway tileset
Added altstates - F6 to create, F7 to delete, press A to switch between
Added an “open level folder” option to the “player levels” screen
reloadcustomactivityzones()
- reload all non-terminal activity zonesreloadterminalactivityzones()
- reload all terminal activity zonesreloadactivityzones()
- reload all activity zones, regardless of what they arespeak_fast
- remove text box fade-inspeak_active_fast
- remove text box fade-in, while also removing all other text boxestextboxtimer(n)
- fades out the text box after n frames, use this after aspeak
,speak_active
,speak_fast
, orspeak_active_fast
befadeout()
- instantly make the screen blackcutscenefast()
- instantly appear cutscene barsendcutscenefast()
- instantly remove cutscene barssetvar(name[,contents])
- set a variable to a given argument, or to whatever is on the next lineaddvar(name[,value])
- add or subtract a number to a given variable, or concatenate a string to a given variable, using either a given argument or whatever is on the next lineVariable assignments (
var = contents
,var++
,var += 1
,var -= 1
,var--
)Built-in variables (
%deaths%
,%player_x%
,%player_y%
,%gravitycontrol%
,%room_x%
,%room_y%
,%player_onroof%
,%player_onground%
,%trinkets%
,%crewmates%
,%coins%
,%battery_level%
,%on_battery%
,%unix_time%
,%hhmmss_time%
)Upped the map size limit to 100 by 100
ifcrewmates(n,script)
- go to script if the player has rescued at least n crewmatesifcrewmatesless(n,script)
- go to script if the player has rescued less than n crewmatesifcoins(n,script)
- go to script if the player has collected at least n coinsifcoinsless(n,script)
- go to script if the player has collected less than n coinsCoins are now placeable in the editor using the ^2 tool (press Shift+2)
Coins display in the roomname if there’s any coins in the map
Coins and trinkets no longer share IDs
Selecting level music from the editor is no longer limited
ifvar(var,operator[,value],script)
- go to script if a variable equals/isn’t equal to/is greater than/is lesser than/is greater or equal to/is lesser or equal to value - if value not given, uses the next lineFlip tokens are now placeable in the editor using the ^1 tool (press Shift+1)
stop()
- stop the script and remove cutscene barsYou can place activity zones in the editor by holding down Z while placing a script box
You can change the speed of enemies you’re placing down by using Ctrl+Period/Comma. Speeds are 0-8, but since by default p2 is 0, the speeds are saved as -4 to 4
replacetiles(a,b)
- replace all instances of tile a with tile b in the roomAdded being able to use orange as a color in
text()
You can now use one unpatterned Space Station color in the editor
Enemies in the unpatterned Space Station color are now gray
Added sub-tile positioning of edentities
coincounter(hide/show)
Raised the number of flags to 1000, now they go from 0-999
Time trials now exist in custom levels! Your time trials stats are saved as
saves/<levelname>.vvvvvv.trial
, and you can add time trials to your level through the editor.iftrial([id,]script)
- go to script if you’re in a trial and trial’s id is id - if id not given, go to script if you’re in any trialendtrial()
- ends a time trial - this is functionally identical asgamestate(82)
.Added sub-tile dimensions of script boxes and activity zones
Added one-time script boxes - hold X when placing down a script box to make it run only once
Flip tokens now play the gravity line sound effect when touched in VCE levels
Flip tokens now respawn upon death in VCE levels
1x1 quicksand now respawn upon death in VCE levels
Terminals’ activity zones are aligned properly in VCE levels
nointerrupt()
- prevent interrupting a script when player moves into a script boxyesinterrupt()
- undoes the abovereturn()
- return to the previous script and line number if you jumped to a scriptload(script)
- load script without having to typeiftrinkets(0,script)
You can now use Minecraft-like relative tilde syntax in
gotoroom()
andgotoposition()
sayquiet()
andreplyquiet()
- same as normalsay()
andreply()
, but without a squeakAdded dimensions, so you can properly have more than one dimension in a custom level - they are rectangles of rooms that the game will keep you in and let you wrap around
gotodimension(n)
- go to dimension nifkey(key,script)
- if key is pressed, go to script -left
,right
,up
, anddown
count controllers and WASD, so to get ONLY the arrow keys, userleft
,rright
,rup
, andrdown
.ifflipmode(script)
- go to script if the game is in flip modedelchar(var,n)
- remove n chars from the end of the variable vargetvar(var1[,var2])
- set var1 to contents of var2, if var2 is not given it uses the next lineanalogue(on/off)
- toggle Analogue Mode screen filterTo go to script without adding a stack frame, prefix it with
@
Added callbacks -
on_death_start
,on_death_end
,on_input_flip
,on_input_flip_up
,on_input_flip_down
setcallback(callback,script)
- run script when callback is triggeredOne-way tiles are now automatically recolored to match the tileset
setblendmode(mode)
- set the blend mode used for drawing script images, mode isblend
/none
/add
/mod
,blend
is defaultcsay([lines[,crewmate]])
-say()
but it puts the dialogue abovecreatecrewman
crewmates insteadcsayquiet([lines[,crewmate]])
-sayquiet()
but it puts the dialogue abovecreatecrewman
crewmates insteadgamestatedelay(n)
- delay running a gamestate for n framesrandchoose(varname,options...)
- randomly set varname to any of the given arguments afterwards, with equal probability for eachrandrange(varname[,start],end)
- randomly set varname to the range between start and end excluding end, start defaults to 0moveplayersafe(x,y)
-moveplayer
without going through wallssupercrewmate(on/off)
- toggle whether the Intermission 1 crewmate collides with hazards or notsupercrewmateroom()
- set the progress of the super crewmate to the current roommoveplayer()
is instant in VCE levelsYou can place teleporters using the ^3 tool (press Shift+3)
Added towers - press F8 to toggle tower mode - use plus and minus to go up and down
setentitydata(id,attribute,value)
- set attribute of entity to value - id is slot number in array of entities andcreateentity()
will set%return%
to ID of newly-created entity, attribute is internal VVVVVV attribute namegetentitydata(id,attribute,varname)
- set varname to value of an entity’s attribute - id is slot number in array of entities andcreateentity()
will set%return%
to ID of newly-created entity, attribute is internal VVVVVV attribute name
Page last updated at 20:43 on 2021-02-05.
2020–2023 VSIX Community. This website is licensed under a Creative Commons Attribution 4.0 International License.