Check out the new spriting environment here

bitwizard simplified bit manipulation & other tools for mindustry logic // mixed mlog and custom ops

Important information:

main instruction / instruction set sub instruction parameters purpose & details example
timer new name, duration in ms create and start a timer timer new BakePretzelTimer 1200000
loop name determine the line of code a timer should jump to if it's not expired (the line below) timer loop BakePretzelTimer
op add becomeImpatient becomeImpatient 1
extend name, duration in ms extend a timer timer extend BakePretzelTimer 60000
close close the most recently created timer timer new Wait2secs 2000
timer loop Wait2secs
timer close
consistent (alias: con) disables line count optimization for instructions below this tag consistent
spl of value SomeRandomSplit 0 #becomes 2 lines instead of 1 for given index 0 due to line count consistency
inconsistent (alias: incon) enables line count optimization for instructions below this tag, is the default setting incon
spl of value SomeRandomSplit 0 #output is back to default 1 line
expect building links prevents the processor from finishing initialization if the provided links aren't valid expect switch1 display1 message1
spl* new target variable name, reference name, bitranges... create a bit splitter for a variable
only 52 bits can be used due to the inner workings of Mindustry as of v7 b140
spl new bytes Bytes 8 8 8 8 8 8 #splits 'bytes' into 6 actual bytes
label functionality: you can give names to your bitranges by joining the name and the value with a colon spl new bits Bits 1:bit1 1:bit2 1:bit3 1:bit4
target variable name, reference, step, a syntactical "*", amount of bitranges if you want to save on the line count you'll like to take a more calculative approach to splitters like here spl new bits Bits 1 * 16
label functionality jr: give your bitranges names, this time by index spl new bytes Bytes 8 * 4 0:byte1 2:byte3 3:byte4
label splitter reference, labels... you can also set the labels in a separate line if you like, good for managing a LOT of wordy labels on multiple lines spl new moreAndMoreBits MoreAndMoreBits 1 2 3 4 5 6 7 8 9 10
spl label MoreAndMoreBits 0:OneBit 1:TwoBits 2:ThreeBits 3:FourBits 4:FiveBits
spl label MoreAndMoreBits 5:SixBits 6:SevenBits 7:EightBits 8:NineBits 9:TenBits
obtainf* output variable, splitter reference, constant bitrange index get the range of bits of a splitter's target variable at a constant index spl obtainf a Bytes 1 #gets the 2nd range of bits in 'Bytes'
obtaind output variable, splitter reference, bitrange index get the range of bits of a splitter's target variable at an index that may be determined in runtime
this generates a lot more code than obtainf so don't use it when you don't need to define the bitrange index in runtime
spl obtaind a Bytes x #gets the x-th range of bits in 'Bytes'
clearf splitter reference, constant bitrange index clear the range of bits of a splitter's target variable at a constant index spl clearf Bytes 3 #clears the 4th range of bits in 'Bytes'
cleard splitter reference, bitrange index clear the range of bits of a splitter's target variable at an index that may be determined in runtime
this generates a lot more code than clearf so don't use it when you don't need to define the bitrange index in runtime
spl cleard Bytes x #clears the x-th range of bits in 'Bytes'
writef* input, splitter reference, constant bitrange index write to the range of bits of a splitter's target variable at a constant index spl writef 0b10100101 Bytes 3 #writes a number to the 4th range of bits in 'Bytes'
writed* input, splitter reference, bitrange index write to the range of bits of a splitter's target variable at an index that may be determined in runtime
this generates a lot more code than writef so don't use it when you don't need to define the bitrange index in runtime
spl writed 0xFF Bytes x #writes a number to the x-th range of bits in 'Bytes'
using bitrange labels you can make use of bitrange labels with fast splitter methods in place of bitrange indices: spl new bytes Bytes 8 * 2 0:Byte1
spl obtainf byte Bytes Byte1
spl clearf byte Bytes Byte1
spl writef 0xFF Bytes Byte1
fun new name declare a new function fun new ConstructingAdditionalPylons
close close the most recently declared function fun close
have / call function name have fun™ / call a function fun have ConstructingAdditionalPylons
uflag (empty) flag value set @unit's flag to the provided flag value uflag 64 #so much shorter
get unit type, flag value search, (escape conditions...) will try to bind @unit to an UNCONTROLLED unit of the provided unit type, with the specified flag; @unit escape conditions may be used to break out of the loop uflag get @oct 0 === null
jump noOctsPresent equal @unit null
# makes use of escape conditions to tell whether a unit of a unit type is present
get any unit type, flag value search, (escape conditions...) will try to bind @unit to ANY unit of the provided unit type, with the specified flag; once again, @unit escape conditions may be used to break out of the loop uflag get any @quad 0
uflag 69
await (condition), flag value, (intermediary function calls...) causes the processor to loop until @unit's flag meets the specified condition ("equal" by default) set signal 6942069420
uflag signal
uflag await not signal
# this is how to do the network
test condition, output variable test's @unit's flag for the specified condition uflag test == 0 lol
verify jump target OR function name will (call / jump to) the specified target if @unit is
A. dead
B. controlled by another processor
myLabel:
uflag get any @flare 0
wait 5s
uflag verify myLabel
log2 output, input get the base 2 logarithm of a number; automatically defines LN2 if necessary log2 x 16
define LN2 define a variable 'LN2' as the natural logarithm of 2 at the start of your code define LN2
print LN2
printf message1 #gimme ln2
LN16 define a variable 'LN16' as the natural logarithm of 16 at the start of your code define LN16
PI define a variable 'PI' as a 16-digit approximate of pi at the start of your code define PI
parray variable (used as index) create a pointer array parray a
/ close one case of a pointer array that isn't the last case parr fruit
set x "apple"
/
set x "orange"
//
// close the last case of a pointer array (defines the size of it) parr car
set x "King Kai's car"
/
set x "some burning Tesla vehicle in China"
//
for variable, (optional = assignment), conditional operator, condition right side, (!recommended! increment value) create a for loop to be used in conjunction with 'next' for x = y != 10 z
next
next close the most recently created for loop for x not 10 1
next

*: in part or wholly affected by line inconsistency and the 'consistent' tag

Home