RMB have some changes or a lot of special functions inside mod.js to make your mod more uniqe and stand out from others, it's not simple to make, and you need to learn some things, here you can search for something you need to save your time
Shake(power, time);
Shakes the whole screen on call
FadeOut(color, time, fadeIn?, callback);
Cover whole screen in the choosen colors and slowly removes it, but setting "fadeIn?" true, the fade out will play in reverse giving the fade in effect, the callback inside this function will be called when fade in animation stop playing
ChangeColorBG(color, time, boolean);
Change the background color - boolean is for if you want to keep the color forever
CleanColorBG();
Remove custom BG color (for example if you set it to stay forever)
CleanColorBG();
Remove custom BG color (for example if you set it to stay forever)
Bloom(power, time);
Fading out bloom effect for the whole screen
MakeConfetti(scale, spread, gravity, ticks, amount, element, image);
Add a nice looking confetti effect in the specific place you want, example:
MakeConfetti(3, 0.5, 0.5, 100, 100, "custom-cursor", "asset-v1/icon.png");
PlaySFX(file);
Play sound effect, every SFX is located in "asset-v/ogg/mod" folder
Zoom(zoomLevel, zoomInSmoothly, zoomOutSmoothly);
Zoom in or out the screen | Example Zoom(105, true, false) - will zoom in smoothly by 5
setCustomCursor(image);
Set custom cursor
QuickMessage(text, time);
show message at the bottom of the screen, can be used for lyrics
ChangeMenuTitle(text);
change the title on the menu (for example "Select version to start mixing")
boxDialog.open(text, title, button, boolean);
open dialog box with text, title, button text and boolean if you want to make it not closable
boxDialog.close();
close existing dialog box
onV1Polo0();
trigger effects when polo 1 is used | onV2Polo19() - will trigger when polo 20 is used in v2, and etc.
offV1Polo0();
trigger effects when polo 1 is removed from mix | onV3Polo5() - will trigger when polo 6 is removed from mix in v3, and etc.
onV1Bonus1Start();
trigger effects when bonus 1 is started | onV2Bonus2Start() - will trigger when bonus 2 is started in v2, and etc.
onV1Bonus1End()
trigger effects when bonus 1 ended | onV3Bonus3End() - will trigger when bonus 3 is ended in v3, and etc.
onV1Start();
trigger effects when version 1 is started | onV2Start() - will trigger when version 2 is started, and etc.
onAppStart();
trigger effects when game starts
onV1Mix();
trigger effects when you start mixing | onV2Mix() - will trigger when you start mixing in v2, and etc.
offV1Mix();
trigger effects when you stop mixing | offV8Mix() - will trigger when you stop mixing in v8, and etc.
onLockedIcon1();
trigger effects when you click on locked icon 1 | onLockedIcon2() - will trigger when you click on locked icon 2, and etc.
onLockedIcon();
trigger effects when you click on any locked icon
onKey(key, EFFECTS);
trigger effects when you press key | onKey("a", EFFECTS) - will trigger when you press "a" key, and etc.
onKeyHold(key, key, EFFECTS);
trigger effects when you hold key | onKeyHold("a", "b", EFFECTS) - will trigger when you hold "a" and "b" keys, and etc.
OnClick(element, EFFECTS);
trigger effects when you click on element with specific ID | OnClick("myElement", EFFECTS) - will trigger when you click on element with ID "myElement", and etc.
OnDelayIn(time, EFFECTS);
trigger function with delay
onBPM(bpm, EFFECTS);
trigger function on specific BPM
offBPM();
stop the bpm timer
onLoop(loop, EFFECTS);
trigger function on loop, for example "onLoop(2, ()=>{QuickMessage('2 loops passed')});"
offLoop();
turn off the loop function
setAchievement(RegisterMod, id, icon, name, description, type, maxProgress);
sets achievement | types = normal, progress, hidden (since 6.7.8 this function don't need to be called with delay to work), example:
setAchievement(RegisterMod, "ach_1", "ach_thanks.png", "Thanks!", "Read the credits", "normal");
addProgressAchievement(RegisterMod, id, amount);
add progress to achievement
unlockAchievement(RegisterMod, achievementId);
unlocks achievement
RemovePicto(pictoNumber);
removes icon from picto [MIGHT NOT WORK CORRECTLY]
AddPicto(pictoNumber, line);
add picto icon in specific line [MIGHT NOT WORK CORRECTLY]
Hide(version);
hide version in menu, example: Hide(2); - it will make v2 icon dissapear from selection
unHide(version);
unhide version in menu, example: Hide(3); - it will make v2 icon appear in selection (if exist)
unLock(version);
unlocks locked icon [POSSIBLE BUGS]
OnlyOnce(id, EFFECTS);
let you use function once in whole app, this function will be saved in storage under the ID you gave and will never been called again until will be removed
ClearItemID(id);
as OnlyOnce(id, EFFECTS); saved function in storage under specific ID, this function clear this ID and let it be used again
Call(id);
this function will create something like "signal" that will stay in app forever and wait to be used, it can be also removed using ClearItemID(id);
Catch(id, EFFECTS);
this function will active the trigger if specific ID was called using Call(id); if the signal exist, this function will catch it and work, it's good to send info from version to menu, or from version to other one
OpenModCredits();
as it sounds like, it opens a popup with credits, in case you want them to appear after bonus, or other function, it can be also used for your own custom credits button
Ambience [NOTE]
ambience is a good touch in your mod if you want to add some mood or atmosphere, as custom SFX it should be located in sounds/mod folder, for this specific sound, it will look for ambience-name.ogg - make sure the file name is correct
modPoloMaps.v1
modPoloMap is a special array to set custom default polos on your stage, they also include their own hover effect if it's enabled
replaceDeafaultPolo(poloID, img);
It is possible to change polo design in your own function, for example changing some specific or all deafult polos after bonus, or when specific polo is added, the path to this polo sprites should have normal and -hd version, and be located inside global img folder (were original polo sprite is)
replaceAllDefaultPolos(img);
It works the same as replaceDeafaultPolo(poloID, img); just with difference that it replace ALL of them on stage, so no need to give specific Polo ID to make it work
wigglePictos(speed, distance);
It makes all the icons on the picto wave, you can adjust the effect by changing speed and distance
stopWiggle();
stops wiggle/wave animation on all icons
initShakingPicto(power);
makes all of the icons shake randomly with specific power
clearShakingPicto();
stop all icons from shaking
impactIcons(power, time);
adds impact effect for icons, in short, it works like shaking picto, but smoothly stops shaking
impactPolos(power, time)
adds impact effect for all playing polos, very similar as impactIcons(power, time); do
Bonus Icons [NOTE]
you might notice that bt-bonus.svg is missing, this is because now you can use just 1 file as each icon, inside apps.js in bonusarray you can find icon: "" part, there put the name of your icon file, like bonus1icon.svg and then put inside video folder, where bonuses are located
firstLoopDelay [NOTE]
in older incredibox version, each time you place a first polo to start a mix, it had some small delay, now it got added in 6.8.7 version of RMB, and you can adjust how much delay should mix need to start, it gives user more time to have better start in mix
Custom Polo Sizes [NOTE]
every polo can now have its own custom size, no longer limit to 164x380, it let you be more creative and make better designs, every time you change heigh of a polo, you need to add this extra heigh to head offset or else head might appear in wrong spot, try adding "headHeight" to Y offset inside prop data, remember to also change the main width and height data in .json file
apps.js [NOTE]
if you are old modder, you might remember about app.js, so the code where all version info is located, this files were inside asset-v folder, but in RMB they are located inside JS folder, this is because each version now share the same file, this is why it got renamed from app.js to apps.js
_letEvents
events in RMB are special moments where polos in your mod might wear special hats to celebrate specific day or month, for example in December all of polos that can wear a hat, will wear christmas hats and your mod will have falling snow
dontWearHat
"dontWearHat" is now part of polo .json animation, set this to true if your polo don't wear any hat or mask that cover his forehead, this will let event hats to fall on his head if its happening
objectBack
"objectBack" is now part of polo .json animation, if you set it to true, the body "object" aka "body" animation will render behind the polo, if you set it to ture, the body will render on top of the polo, so it can be used or 2nd layer of hat if it follow the same head movement
renderBody
"renderBody" is now part of polo .json animation, if set on false, the original body wont appear in the animation, use it if you are working on body animation, if you set it to true, the body will render like in normal polo animation
shakeAnim
"shakeAnim" is now part of polo .json animation, it's a special build in animation that will make polo shiver/shake with the power of the number you entered
versions.xml [NOTE]
To edit or add more versions on menu, you need to edit versions.xml, you need to copy "icon" tag inside "line" tag, and change ID of the version, the icon with ID 2, will try to load data from versions.v2, so make sure it exist in apps.js
credits.xml [NOTE]
making credits in RMB is really simple and easy, you need to edit credits.xml, you can add a lot of pages, really long text and even a nice text formatting, or even custom buttons and hyperlinks
setBackgroundLayer(path)
It adds a special layer on the scene that is on top of the polos, it's good for special effects like rain or other creative things
setPictoLayer(path)
adds a 2nd layer image on top of the icons, you can also use setPictoLayer(path, [1,2,3,5]) to give this only for specific icons
poloHoverEffect
inside apps.js you can find poloHoverEffect, if it's set to true, it will change deafult polo sprite into polo-sprite-hover.png (it also needs -hd version) if user drag icon and hover it over polo
copy and modding [NOTE]
as a modmaker, please give credits for using this build, it took a lot of time and effort to make, it is made for community and people who want to learn, DO NOT give others alternative links, don't modifiy the build and share it with public, this is the only place people should access it for safety
About RMB
What is RMB? - this is a fan-made incredibox update to change main code of the game in friendly way, it is not a hack or pirated Incredibox, all official assets from paid versions v5 - v9 are removed from game, and code is changed so it's easier and more cleaner to work with, originally it was made as build only for Evadare, but later I decided to make it public, this is why the name of it its "Rem's Modding Build", it's not 100% prefect and might have bugs, but it keeps getting updated almost each new mod I release, feel free to report or suggest things
// Here all versions are located, the same as app.js but this time its apps.js because all versions info is located in this one file
// To add more versions, copy the versions.v1 and replace with versions.v2, and the same with others (it support more than 9 versions)
versions.v1 = {
name: "Template", // name of your version, just info
version: "temp01", // version code of your bonuses progress and mix saves, don't set it as a number or else it will register it as Alpha or Sunrise
date: "2025", // the year of your mod release, just info and don't change anything in game
folder: "asset-v1/", // path to all your assets for this version
background: "game-bck@2x.jpg", // name of the background used in version, can be changed to gif or png
poloSprite: "polo-sprite.png", // deafult polo sprite path for this version (inside img)
poloHoverEffect: false, // will change polo deafult sprite to polo-sprite-hover.png while holding icon on polo
ambience: "", // will look for ambience-name.ogg to play in your version if mix is not playing
firstLoopDelay: 300, // gives a small reaction time to put more sounds when mix is starting (300 is recommened)
looptime: 3429, // sound of 1 loop in MS
bpm: 90, // BPM is only app info, it won't change anything in gameplay
totalframe: 164, // number of full loop _a and _b animaiton together
nbpolo: 7, // how many polos on scene, 7 is recommened 10 is max
maxrecloop: 24, // how many loops recording a mix should have
bonusloopA: true, // true if bonus can only start on loopA and not on loopB (depends on your musical composition) (info from incredimods)
bonusendloopA: true, // true to force mix to start on Loop A when bonus finish playing (in case your mix is 3 loops or something)
_letEvents: true, // enable events, it means in December your mod will have falling snow or polos can wear special hats
colBck: "#0F0F0F", // color of your splash background
col0: "#919191", // list of hex colors for your version's splash screen, should start from the lightest and end with the darkest
col1: "#5f5f5f",
col2: "#4b4b4b",
col3: "#373737",
col4: "#232323",
pictoRowMax: 10, // number from where picto should split in half, for 20 icons its recommened 10, so 10 on top and 10 at the bottom
animearray: [ // animearray is the list of polos to load for this version
{
name: "temp_polo",
color: "7D7D7D",
uniqsnd: !0, // !0 is for 1 loop and !1 is for 2 loops
},
],
bonusarray: [ // bonusarray is the list of bonuses to load for this version, you can remove everything inside if you don't work on bonuses
{
name: "blank",
src: "b1-v1-blank-hb",
code: "1,2,3,4,5",
sound: "bonus-blank",
aspire: "aspire-blank",
expire: "", // sound that play when bonus finish playing
icon: "", // bonus icon file, should have .svg ending or .png and be located in video folder
loop: 2,
},
],
};
// to make more versions, copy and paste versions.v1 and change into v2
// versions.v2 = {
// name: "Template",
// version: "temp02",
// date: "2025",
// folder: "asset-v2/",
// poloSprite: "polo-sprite.png",
// [...]