Start Scripting - Splashcard04/ReMapper-Tutorails Wiki

With your map setup now we get to the fun bit! Here I will be explaining what the template script does, how it does it, and how to add on to it yourself! First you will need to comment out all of the lines that you aren't using or you will get an error. To make a comment block - on the line above what you want to comment type /* and then the line below what you want to comment type */ With that finished lets move on to the first effect!

const env = new Environment("BTSEnvironment.[0]Environment", "Contains")
env.position = [0,-99999999, 0]
env.push();

this statement is very simple, it just takes the entirety of the default environment and moves it out of the player's sight. Not much else to go over here so let's move on!

Model Scenes Model Scene aka Blender Env are very cool parts of maps, our first model scene statement consists of BTS cubes, this is technically inferior to geometry but is much easier to understand, this will take your .rmmodel (more on that here) and make it into bts cubes with swifter magic (it's not through code).

const scene = new ModelScene(new Environment(ENV.BTS.PILLAR.ID,LOOKUP.REGEX), ENV.BTS.PILLAR.SCALE, ENV.BTS.PILLAR.ANCHOR)
scene.animate([
    ["Scene1", 0, 100],
]) 

For this statment (ENV.BTS.PILLAR.ID,LOOKUP.REGEX), ENV.BTS.PILLAR.SCALE, ENV.BTS.PILLAR.ANCHOR) is our environment id, scale and anchor (there are constants for bts lasers and cubes built in to ReMapper) you won't need to touch this. Inside the lower brackets ["Scene1", 0, 100], you have

[".rmmodel name __without__ extension", startbeat, endbeat]

NOTE: you will not need to put the .rmmodel extension in the quotes, just everything before the dot, all of these properties are the same for every other model scene in the script. Each modelscene can also be added to, to do multiple environments you can add models by adding another set of brackets, this works technichally infinitly until your load times get to like 24 hrs:

const scene = new ModelScene(new Environment(new Geometry())// defaults to black cube
scene.animate([
    ["Scene1", 0, 100],
    ["Scene2", 100, 200],
]) 

our second model scene is lasers:

const laserscene = new ModelScene(new Environment(ENV.BTS.SOLID_LASER.ID,LOOKUP.REGEX), ENV.BTS.SOLID_LASER.SCALE, ENV.BTS.SOLID_LASER.ANCHOR)
laserscene.animate([
    ["Scene1laser", 0, 100],
]) 

these will be a bit more tricky as you have to light them for them to really do anything, more on that here and now we have clouds:

const cloudscene = new ModelScene([800, 40, 800], ENV.BTS.LOW_CLOUDS.ANCHOR, "HighCloudsGenerator$", LOOKUP.REGEX);
cloudscene.animate([
  ["Scene1Cloud", 0, 100],
])

basically the exact same as BTS cubes but well, it's clouds. Remember that your exact scale, position and rotation will be copied in the game.

Now we have Geometry which is pretty cool, this statment will make a blue sphere:

new geometry("Sphere"{
   _shader: "Standard", //standard geometry shader
   _color: [0, 0, 1], //blue
   _track: "circle",
}).push();

You can change, position, rotation and geometry can also be used in model scenes, if you want (which you do :D ) Now we have the player motion statment, you shouldn't need to touch anything within the function, but where it says time, duration, startX, ect you will need to fill with your info. ``ts new CustomEvent(0).assignPlayerToTrack("move").push();

function AnimatePlayer(time: number, dur: number, startX: number, endX: number, startY: number, endY: number, startZ: number, endZ: number) { let event = new CustomEvent(time).animateTrack("move", dur); event.animate.position = [StartX, StartY, StartZ, 0]; event.animate.add(ANIM.POSITION = [EndX, EndY, EndZ, 1];

event.push();

}

AnimatePlayer(time, duration, StartX, EndX, StartY, EndY, StartZ, EndZ)

Basically what this does is assigns a player to a track then animates it using the numbers that you input in the function call by animating player position to your input variables.
Next up, we have the note wrapper or `notes between` statement, this will basically effect all of the notes between your start beat and end beat with whatever your data is ie color, position ect.
```ts
 notesBetween(start, end, (note) => {
  //put your info here
})

Next we have a basic environment statement using a constant to make a bloom light in bts, RM has a constant for this light so that's what I used

const glow = new Environment(ENV.BTS.BLOOM_LIGHT.ID "Regex");
glow.position = [0, 0, 0];
glow.lightid = 69420; 
glow.push();

This takes the bloom light at the beginning of the statement and duplicates it once then sets the position to [0, 0, 0] you can change this if you want. Then it sets the lightID to 69420, the light will either assign to this id or if the ID is already taken it will move the ID to the lowest available number, and then we push it to our map.

now we have map.save(); this just saves to our earlier specified output difficulty