Reassembly

Reassembly

Not enough ratings
Var Reference
By Neon
Forgot the name of a var? Feel like you're missing something? Want to see what you can do that you didn't know about? Here is a huge list of every block var in the game.
2
   
Award
Favorite
Favorited
Unfavorite
The structure of this reference sheet
Before we get started, let's talk about how i'll talk about what I want to talk about when I talk about it. This first section will literally be the guide guide.

Vars can have a variety of many different inputs, so instead of putting one example number for all of them, I decided to just include variables with meaning.

Var Inputs

Input
Meaning
AN
Any number
PN
Positive number
AI
Any integer
PI
Positive integer
a-b
Must be positive integer equal to or in between the two given numbers.
"string"
Any text of your choosing. Must have quotation marks.
MULTI_FLAGS
Can have one or several of certain strings of text without quotation marks. Place a | in between each flag. Zero flags also works
ONE_FLAG
Same as above, but only one flag may be chosen.
SHAPE
Any shape name or custom shape ID.
0xHEX
6-digit hex code that has 0x in front of it. Need help selecting colors? Try this[www.google.com]
0xTRANSHEX
8-digit hex code with the first two digits representing transparency. Again, put a 0x infront of it. Example, Non-transparent magenta: 0xffc800ff
{x, y} or {x, y, z}
Multiple inputs in curly brackets, usually for coordinates but can be for other things too. Separate numbers with a space. A space and a comma is optional, but LUA works fine without commas.
TBF
Stands for "to be filled". If you know the usage of these vars, please comment about it

Var Input Notes

Symbol after input
Meaning
?
Setting to 0 has same effect as not specifying
...
Drastically changes the block's functionality if not it's default value
!
Must be specified. If not, the block will fail to load and/or break/crash the game
<AN-AN>
Must be within the indicated range. This does not appear if the range is <0-1>
[stuff goes in here]
Indicates the var's default value
(ONE_FLAG)
Var has no effect unless indicated flag is present

Comments

Comment beginning
Meaning
--
Explains what the var does. Usually present everywhere in the guide, unless a var does exactly what it's name implies.
#
Indicates a flag that could be inputed, and explains what it does
i
Other notes, additional information or advice
Common Vars
This section contains vars that all blocks must/can have, even if they have no features.

17,000-26,000! -- Identifier, or ID of the block. The game sees this as the block's name. Cannot share ID with another block, or whichever one is loaded last will override the others. Must be first, but other vars don't have to be in any specific order. group=PI! -- Faction the block belongs to. Even if the block is used in the faction's ships, it must be their block in order for it to appear in their palette. features=MULTI_FLAGS [] # ALWAYSFIRE: If block has laser, cannon or launcher, it is always firing regardless of human/AI input. Even in the ship editor, it is firing! # ASSEMBLER: Allows the ship to regenerate blocks and pickup parts from wreckage. Required for command blocks. # AUTOFIRE: If block is a ranged weapon, it is bound to point defense by default. Also causes AI to use the weapon as point defense. # CANNON: Adds a customizable projectile weapon to the block. # CANNON_BOOST: If attached to a cannon, it applies customizable buffs to the weapon. Tinkrell cannon parts are a perfect example of this. # CHARGING: If there is a cannon or laser on the block, it changes to hold-and-release firing mode. Uses new vars for min and max charge time. # COMMAND: Allows use of command={} var and gives the ship AI. # DEACTIVATES: When block reaches 0hp, it stops functioning instead of being destroyed. # ENVIRONMENTAL: Allows seeds to grow on the block. Be warned that doesn't include just plants, but also spiky plants and faction buildings. # EXPLODE: Block causes an explosion on collision with customizable radius and damage. Used to make missiles. # FACTORY: Can use resources to build ships. # FREERES: Doesn't drop resources when destroyed. Useful for drones. # GENERATOR: Generates and/or stores power. Also adds a non-customizable explosion when destroyed. # INTLINES: Outlines of the block do not hide, even when all ports of a side are used. # INVISIBLE: Does not render block shape. # INVULNERABLE: Makes block indestructible. # LASER: Adds a laser weapon to the block with customizable stats. # LAUNCHER: Grows and launches other blocks Can make missiles, drones, and more. # MELEE: Enables meleeDamage which multiplies collision damage. # NOCLIP: Block does not collide with anything. # NOCLIP_ALLY: Block does not collide with friendly ships, useful for missiles and drones. Still collides with debris, though. # NOICON: Hides decals added by other features, like the command 8-pointed star or launcher arrow. # NOREGEN: Block cannot regenerate or rebuild. # NOPALETTE: Prevents block from appearing in the ship editor, even if it meets the right conditions. Still appears in the sandbox palette, though. # PALETTE: Opposite of NOPALETTE. Block will appear in the faction's palette, even if it normally shouldn't. # PHOTOSYNTH: Block generates R over time. # REGROWER: Allows the ship to regenerate blocks but not pickup parts from wreckage. An alternative to ASSEMBLER. # ROOT: If first port of the block's shape is not covered, the ship can spawn on asteroids and other ENVIRONMENTAL blocks. # SEED: Allows block to attach to ENVIRONMENTAL blocks. Will thrust if it is also a thruster. # SELFFACTORY: Same as factory, but can only build the same blueprint. # SHIELD: Creates a shield bubble that absorbs damage with customizable stats. # TELEPORTER: Allows ship to teleport with a mass:power ratio. # TELESPAWN: If the ship also has a factory, this feature causes it to spawn in ships fully built, for free. # THRUSTER: Makes the block thrust forward in response to player/AI movement input. Has customizable stats. # TORQUER: Rotates the ship without providing thrust. # TRACTOR: Picks up R. Has customizable range. # TURRET: If block also has CANNON, LASER or LAUNCHER, it becomes a turret. Has customizable speed, limit, and barrel. deathFeatures=MULTI_FLAGS # CANNON: Fires a cannon shot when the block is destroyed. You can customize the cannon shot with cannon={}. Warning: Crashes game if roundsPerSec undefined or set to 0. # EXPLODE: Explodes when destroyed. Can be used to customize generator explosions. i This var is still very new to me so I do not know much about it. name="string" [] -- Name of the block as seen by players in game. Multiple blocks can share the same name. blurb="string" [] -- Description of the block as seen by players in game. shape=SHAPE [SQUARE] -- Shape of the block. # View RWDK[atg.lychnobi.com] to see the shapes built-into the game. Custom shapes use number IDs. scale=PI [1] <1 - total number of scales> -- All shapes, including custom ones, come in many different size variants. points=AN? -- P value of the block. i Default value scales depending on many other stats of the block. durability=PN [1] -- Health per volume of the block. i A normal scale 1 square may seem like a 1x1, but it's actually 10x10 in the game's code, so a durability value of 1 would mean 100 health. density=PN [0.1] -- Mass per volume of the block. i Same thing with durability. armor=PN [0] -- If a cannon's damage is at most this amount, it is reflected off and deals no damage. i Very buggy and usually doesn't ricochet correctly, so most of the modding community (me included) reccomends you don't touch this var. i Does not do anything to lasers. Not sure about explosions, but it probably also doesn't resist that. growRate=PN [3.3] -- Speed at which the block assembles. The higher this value is, the faster it grows. Groth time also scales depending on volume. lifetime=AN [-1] -- Time in seconds until the block begins to degenerate. i Leave as -1 for infinite lifespan. i If block has EXPLODE feature, it explodes instead of degenerating. fillColor=0xHEX [0x000000] -- Primary color of the block. All blocks oscillate between their primary and secondary colors. fillColor1=0xHEX [fillColor] -- Secondary color of the block. All blocks oscillate between their primary and secondary colors. i Defaults to purple if fillColor is also unspecified. lineColor=0xHEX [0xffffff] -- Outline color of the block. bindingId=1-5 -- Default button to fire the weapon # 1: Left click # 2: Right click # 3: Middle click # 4: Autofire # 5: Point defense capacity=AI? [0] -- R storage of the block. i Default value changes if block is GENERATOR or PHOTOSYNTH or TRACTOR, and maybe some others. shroud={ -- Used to customize blocks by adding decorative shapes on top of them. i If the block is also a turret, the shouds become part of the turret. { -- Each second set of curvy brackets is a shroud. I don't know if there's a limit, but heck, I made a gun that has eight. shape=SHAPE [SQUARE] size={x, y}! offset={x, y, z} [0, 0, 0] taper=PN [1] -- Front of the shape is taper times the size as the back of it. This is useful for making trapezoids without the use of custom shapes. tri_color_id=0-2... -- If 0, the shroud becomes the block's primary color. If 1, it's the block's secondary color. If 2, the tertiary color. tri_color1_id=0-2... -- Shroud color oscillates between both colors, same as how blocks oscilate between fillColor and fillColor1. line_color_id=0-2... -- If 0, the shroud's outline becomes the block's primary color. If 1, it's the block's secondary color. If 2, the tertiary color. } { -- If you want to have another shroud, add another set of curvy brackets like this and add your shroud vars between them. } }
Weapon Vars
meleeDamage=PN [5] (MELEE) -- Collision damage of the block is multiplied by this value. explodeDamage=PI (EXPLODE) explodeRadius=PI (EXPLODE) cannon={ (CANNON) damage=PI roundsPerSec=PN! [0] i If unspecified or set to 0, attempting to fire the gun will immediately crash the game power=AI -- Energy needed to fire one round muzzleVel=PI -- Controls projectile speed, recoil and knockback on what it hits. i Projectiles instantly expire regardless of range if muzzleVel is negative. I used this to make homing mines for my first custom faction. recoil=AN [0] -- Recoil multiplier. Useful for guns that have very high muzzleVel, or guns that have low muzzleVel and that you want to have high recoil. range=PI rangeStdDev=PI [0] -- Every projectile's range can go up or down by up to this amount. spread=PN [0] -- Projectile deviation in radians. This may come in handy[www.google.com]. i You can also use the pi variable. In lua, you can do things like this: i pi/4 will give you 45 degrees max deviation, or a "cone" of 90 degrees i pi will give you 180 degrees max deviation, or a "cone" of 360 degrees burstyness=0.1?... [0] -- Since i'm bad at explaining things, i'll just give an example for this one. Suppose we have a roundsPerSec of 10 and a roundsPerBurst of 10... -- burstyness=0: Fires one shell every 0.1 seconds. -- burstyness=0.5: Fires one shell every 0.05 seconds for 0.5 seconds. Reloads in 0.5 seconds. -- burstyness=0.75: Fires one shell every 0.025 seconds for 0.25 seconds. Reload in 0.75 seconds. -- burstyness=1: Fires ten shells all at once every second. i Can be mixed with spread to make a shotgun effect. roundsPerBurst=PI explosive=ONE_FLAG [] # ENABLED: Projectile explodes immediately upon first contact. # FINAL: Projectile explodes when it reaches max range or runs out of HP. # PROXIMITY: If a non-friendly block is in explodeRadius range, the projectile explodes on top of that block. # FRIENDLY_FIRE: Can be combined with another flag, as usual separate with |. This flag is self-explanatory: explosion damage can also hurt ships of the same faction. i The damage var is used as explosion damage. explodeRadius=PI projectileSize=PN pattern=ONE_FLAG [RANDOM] # ABSOLUTE: Each individual projectile has an independent, random spread. # RANDOM: Projectile spread is random like ABSOLUTE, but is more often similar to the previous shot. # SPIRAL: Projectiles are spread out evenly in a line that starts off at the right of the spread and each next shot is angled slightly to the left. Useful for shotguns or deathFeatures={CANNON}. Amount of shots in a wave is determiend by roundsPerBurst, so does not work if burstyness=0. # WAVE: Deviation moves left and right in a wave-like pattern. Kinda like a double SPIRAL. Amount of shots in a wave is determiend by roundsPerBurst, so does not work if burstyness=0. # CONSTANT: Shots always deviate to the left by spread. For example, if spread=pi/2 (90 degrees), then shots always fire to the left by 90 degrees. color=0xHEX [0xffffff] fragment={ -- Makes cannon shells split into more shells. i Yep, Fragments can split into even more fragments if you wanted them to! damage=PI roundsPerBurst=PI -- For fragments, this var is how many projectiles the parent shell splits into. i Fragment vars with no comments work just like cannon vars. range=PI rangeStdDev=PI [0] projectileSize=PN color=0xHEX [0xffffff] spread=PN i Measured in radians. muzzleVel=PI pattern=ONE_FLAG [ABSOLUTE] # ABSOLUTE: Projectiles are spread out randomly # SPIRAL: Projectiles are spread out evenly # WAVE: Honestly am not sure how to explain what the hell this does, so just go try it out for yourself } } -- Remember your closing bracket after you define your cannon, or your blocks.lua file won't load correctly! cannonBoost={ (CANNON_BOOST) damage={AN, AN} [1 0] -- Multiplies stat of connected cannon by first value. Adds to it by second value. -- For example: damage={1.5, 75} would increase damage by 50% of base damage + 75. -- This same logic applies to all cannonBoost vars. roundsPerSec={AN, AN} [1 0] range={AN, AN} [1 0] muzzleVel={AN, AN} [1 0] power={AN, AN} [1 0] explodeRadius={AN, AN} [1 0] } laser={ (LASER) damage=AN -- Unlike cannons which have damage per shell, lasers have damage per second. -- Becomes a healing laser if damage is a negative value. range=PI power=PI linearForce=PI -- Essentially a recoil var for lasers. However it pushes enemies more than it pushes itself. -- Set to a negative value to make a laser that pulls enemies. immobilizeForce=PI -- Causes the block and whatever it's shooting at to share velocity. If the value is high enough to overcome the thrust of the object it's pulling, the target is completely glued to you. pulsesPerSec=PN... [0] -- If not 0, laser becomes a pulse laser. pulseAvalilability=01 [0] -- Ratio of time spent pulsing to time spent waiting for next pulse. -- Let's do another example. if pulsesPerSec=2: -- pulseAvailability=0.1: Laser at full opacity for 0.2 seconds. 1.8 seconds in between pulses. -- pulseAvailabilty=0.5: Laser at full opacity for 1 second. 1 second in between pulses. -- pulseAvailability=1: Laser is constantly firing. decay=PN [0.35] -- Time in seconds laser takes to completely fade away. burstyness=TBF pulsesPerBurst=TBF width=PN -- Width of the laser. color=0xTRANSHEX [0x00ffffff] } chargeMaxTime=PN (LASER and maybe CANNON idk) chargeMin=PN <0 - 1> (LASER and maybe CANNON idk) -- Is a percentage of chargeMaxTime. -- For example, if chargeMaxTime is 8 and chargeMin is 0.5, then the minimum charge time to fire the weapon will be 4 seconds. turretSpeed=PN (TURRET) i Measured in radians. This may come in handy[www.google.com]. turretLimit=PN [infinity] (TURRET) -- Turret cannot rotate past specified angle. i Also measured in radians. barrelCount=PI (TURRET) i Default value scales with roundsPerSec. i It is currently impossible to choose how far apart the barrels are. barrelSize={x, y} (TURRET) barrelOffset={x, y, z} -- Used to change the barrel's position. barrelTaper=PN (TURRET) -- The end of the turret's barrel is barrelTaper times the size as the base of the barrel. i Lasers have a triangle-shaped barrel, meaning their barrelTaper is always 0.
Movement Block Vars
thrusterForce=PI [TBF] (THRUSTER) -- Strength of the thruster. i May need to be a few ten or hundred thousand in order to be reasonably strong. Same applies to most other movement-related vars. thrusterBoost=PN [TBF] (THRUSTER) -- When thruster first starts thrusting, it is thrusterBoost times stronger for thrusterBoostTime seconds. thrusterBoostTime=PN [TBF] (THRUSTER) -- When thruster first starts thrusting, it is thrusterBoost times stronger for thrusterBoostTime seconds. thrusterColor=0xTRANSHEX [0xffffffff] (THRUSTER) -- Color of the thruster's main trail. thrusterColor1=0xTRANSHEX [0xffffffff] (THRUSTER) -- Color of the thruster's smaller, wider trail. torquerTorque=PN (TORQUER) -- Rotational power of the torquer. teleporterPower=PN (TELEPORTER) -- Energy per mass the ship needs to teleport. Looks at total mass of the entire ship, so larger ships will need more power to teleport.
Auxiliary Vars
This section includes vars that don't fit into other categories.
command={ (COMMAND) flags=MULTI_FLAGS # AGGRESSIVE: Ships are more likely to attack. # ATTACK: Used in tournament mode. Fights intelligently, but doesn't do much else. # BAD_AIM: Ships jitter their turrets while aiming, reducing their accuracy. # CAUTIOUS: Ships are less likely to attack. # DODGES: Ships try to avoid cannon rounds. # FLOCKING: Ships like to move together in groups. # FORGIVING: Ships are more likely to stop fighting. # HATES_PLANTS: Ships attack debris and plants. # INACTIVE: Nullifies all other behavior. Does nothing. # METAMORPHOSIS: Ships will sometimes change their design. # MUTATE: Ships will deviate from their blueprint slightly, slowly evolving over time. # NO_PARENT: Children do not follow their parent ships. # NONE: Used by deactivated ships in sandbox. Ships with this flag do absolutely nothing. # PEACEFUL: Ships don't attack at all unless provoked. # POINT_DEFENSE: TBF # RECKLESS: Ships are less likely to stop fighting. # RIPPLE_FIRE: Ships use ripple fire mode. # SMART_FIRE: Ships spread out their cannon shots if they think their target will try to dodge them. # SOCIAL: Ships will protect other ships that are under attack. # SPREAD_FIRE: Ships spread their shots around. # TRACTOR_TRANSIENT: Will collect blocks from rubble. # WANDER: Ships move in random directions if they have nothing to do. I recommend you try adding this into your faction if your ships aren't moving, it somewhat worked for my faction. faction=PI -- Faction the command block works for. blueprint="string"... [] -- If specified, the command will only build into the given blueprint. photoSynthPerSec=AN (PHOTOSYNTH) -- R generated per second. tractorRange=PN [400] (TRACTOR) powerCapacity=PI (GENERATOR) -- Max power granted by the generator. generatorCapacityPerSec=PN (GENERATOR) -- Power per second granted by the generator. shield={ (SHIELD) strength=PI -- Max health of the shield regen=PI -- Regen hp/sec and power use per sec. delay=PN -- When shield is knocked out, it takes this many seconds to reactivate. armor=PI -- All non-explosive cannon damage is reduced by this amount color=0xTRANSHEX i Brighter colors appear less transparent. lineColor=0xTRANSHEX -- Color of the edge of the shield damagedColor=0xTRANSHEX -- Shield color briefly when taking damage } powerCapacity=AI (GENERATOR) -- Max power that the block grants. generatorCapacityPerSec=AI (GENERATOR) -- Power per second that the block generates. seedLifetime=PN (SEED) -- When the block roots onto something, lifetime and launchLifetime stops ticking down but this starts. Aside from that, this var functions just like lifetime. i However seedLifetime is glitched, so you reload a rooted block it decays in lifetime seconds, not seedLifetime seconds. launchSpeed=PI (SEED) -- Appears to have no effect launchCapacity=PI (SEED) -- Appears to have no effect launchResources=PI (SEED) -- Appears to have no effect launchLifetime=PN (SEED) -- Not sure if this actually does anything. replicateBlock={ (LAUNCHER) -- Code for the block you want the launcher to fire goes here, in between these two curvy brackets. } replicateTime=PN launcherPower=AI -- Energy required to build block launcherOutSpeed=PN launcherAngVel=AN... [0] -- Angular velocity. Makes the block rotate when launched.
Launcher Combonations
This section will help you with basic things you can do with a launcher.

For blocks that have the COMMAND feature, you can leave the command var empty like this: command={}

It is highly encouraged you use all optional features, unless stated otherwise in the Usage column.

Remember to set lifetime to a value above 0 for these blocks, because things like drones that don't decay would be slightly overpowered at destroying not only enemies but also computers.

Required features of
the replicated block
Optional features of
the replicated block
Usage
EXPLODE|THRUSTER
NOCLIP_ALLY|FREERES
Specify thruster and explode vars and you get a dumbfire missile.
COMMAND|EXPLODE|
THRUSTER|TORQUER
NOCLIP_ALLY|FREERES
Specify thruster, torquer and explode vars and you get a homing missile.
COMMAND|THRUSTER|
TORQUER|GENERATOR
CANNON|LASER|
NOCLIP_ALLY|FREERES|
TURRET
Using both CANNON and LASER works but is not reccomended: just pick 1. Since weapon power cannot be 0, you must also give the block a generator to fire it's weapon. 1 energy use per shot and setting generatorCapacityPerSec to roundsPerSec should do the trick, and you'll have yourself a drone launcher.
EXPLODE
NOCLIP_ALLY|FREERES
Can be a mine but not too long ago Reassembly was updated to have turreted launchers, so you can also use this to make a turreted grenade launcher.
factions.lua Vars
{ PI!={ -- ID of the faction. name="string" Name of the faction as seen in-game. playable=0-2 # 0: Non-playable # 1: Unlockable # 2: Always playable primaries=1-3 -- Amount of customizable colors the faction has color0=0xHEX color1=0xHEX color2=0xHEX explosionColor0=0xHEX -- Explosions caused by the faction's blocks are a random color in between the two explosion colors. -- explosionColor0 is also the color of fire radiating off of damaged blocks. explosionColor1=0xHEX -- Explosions caused by the faction's blocks are a random color in between the two explosion colors. aiFlags=MULTI_FLAGS # AGGRESSIVE: Ships are more likely to attack. # ATTACK: Used in tournament mode. Fights intelligently, but doesn't do much else. # BAD_AIM: Ships jitter their turrets while aiming, reducing their accuracy. # CAUTIOUS: Ships are less likely to attack. # DODGES: Ships try to avoid cannon rounds. # FLOCKING: Ships like to move together in groups. # FORGIVING: Ships are more likely to stop fighting. # HATES_PLANTS: Ships attack debris and plants. # INACTIVE: Nullifies all other behavior. Does nothing. # METAMORPHOSIS: Ships will sometimes change their design. # MUTATE: Ships will deviate from their blueprint slightly, slowly evolving over time. # NO_PARENT: Children do not follow their parent ships. # NONE: Used by deactivated ships in sandbox. Ships with this flag do absolutely nothing. # PEACEFUL: Ships don't attack at all unless provoked. # POINT_DEFENSE: TBF # RECKLESS: Ships are less likely to stop fighting. # RIPPLE_FIRE: Ships use ripple fire mode. # SMART_FIRE: Ships spread out their cannon shots if they think their target will try to dodge them. # SOCIAL: Ships will protect other ships that are under attack. # SPREAD_FIRE: Ships spread their shots around. # TRACTOR_TRANSIENT: Will collect blocks from rubble. # WANDER: Ships move in random directions if they have nothing to do. I recommend you try adding this into your faction if your ships aren't moving, it somewhat worked for my faction. } }
shipnames.lua Guide
Ship name files are very simple. Just do the ship's file name in quotation marks, an equal sign, and the ship name you want it to have.

{ "10407_Worker" = Worker "10407_Constructor" = Constructor "10407_Defense_Sattelite = "Defense Satellite" "10407_BOSS_Prototype" = "BOSS: Prototype 10407" }
Coding program to use
Most reassembly modders recommend Notepad++[notepad-plus-plus.org], but I prefer a different program called Visual Studio Code[code.visualstudio.com]. Here's what I think over the two:
Advantages of Notepad++
Advantages of Visual Studio Code
Find and Replace is easier to use
Scrollbar is not only wider but also a shrunken version of the entire file, so you can see bumps and things that are offscreen. This makes navigation without find and replace significantly easier.
Find and Replace has more options
When you type an opening parenthesis, the program automatically inserts a closing parenthesis after your cursor. This can be nice, but it can also be a disatvantage in some cases.
Significantly faster startup time
Again, most people recommend Notepad++, but I favour Visual Studio Code. You can still get Notepad++ if you want to though, when it comes to situations like this, it all boils down to personal preference. Or you could just download and try both of them, whatever works for you.
Credits
Since I like being unnecessarily nice, here's a list of everyone who helped fill out this guide.
If you're just an introvert who is bothered by my frequent screw-ups, don't worry, you can also ask me to not include your username here.

Contributors and vars they added or descriptions they corrected (excluding me):

RWDK[atg.lychnobi.com]: Most of the work, but outdated
Fandom Modding Reference[reassembly.fandom.com]: Also helped, but also outdated
Reassembly Discord: armor
6 Comments
Ribbons0121R121 22 Aug, 2022 @ 6:02pm 
ROTATOR makes thrusters rotate
rotatorSpeed is the rotation speed like turrets but for rotators
Neon  [author] 22 Aug, 2022 @ 5:42pm 
i dont even know what those do. do you?
Ribbons0121R121 22 Aug, 2022 @ 1:18pm 
ROTATOR and rotatorSpeed are missing
Neon  [author] 22 Aug, 2022 @ 6:05am 
I haven't updated this in a while so idk
Ribbons0121R121 13 Aug, 2022 @ 11:19am 
wheres rotator
BlackDeath 28 Jan, 2021 @ 7:31pm 
Super helpful for coding.