I think the discord link is broken. Can't join the server
CakeEaterGames
Creator of
Recent community posts
Hi
Wasn't expecting this to get updated. After beating this game a while ago I got very inspired. I felt like there was one aspect of the game that was missing. I really wanted this game to have more program space and the requirement to write actual functions. So I made my own macro assembler :)
It basically has the same functionality SIC-1 has but with more readable syntax, and macross. Here's some example code
function sub(a,b) { b,a,?+1 } function set(a, b) { !var temp 0 clear(a) clear(temp) sub(temp, b) sub(a, temp) } function add(a, b) { !var temp 0 clear(temp) sub(temp, b) sub(a, temp) }
It all just compilers down to subleq It's quite satisfying to write in. I've made a lot of cool stuff with it.
cool thing. (does something interesting, see for yourself ;) )
So yeah! Thank you for introducing me to this strange language!
;------------------------------------------------------------------------------------; ; Token recognition Block ; ;------------------------------------------------------------------------------------; subleq 0, 0, @start ;Reserve the memory for the program subleq 0, 0, 0 subleq 0, 0, 0 subleq 0, 0, 0 subleq 0, 0, 0 subleq 0, 0, 0 subleq 0, 0, 0 @start: subleq 2, 2 ;Clear the first instruction @readToken: subleq @t, @t subleq @t, @IN ;Check what word is coming (\0 \n . s) subleq @a, @a subleq @a, @t, 0 ;if \0 jump to the begining of a stored program subleq @a, @p10, @readToken ;if \n read another line subleq @a, @p36, @dotToken ;if '.' .data token subleq @a, @p69, @sToken ;if 's' subleq token ;Random numbers because it's faster to subtract differences between symbols ;instead of comparing to each one ;10 = 10-0 ;36 = 46-10 ;69 = 115-46 (\n=10 .=46 s=115) @dotToken: subleq @i, @p1 ;Set loop variable to 1 (only 1 number after .data) subleq @a, @p4 ;Read 5 more symbols ."data " @dotInLoop: ;By the time we get here @a is zero so no need to clear it subleq @t, @IN subleq @a, @n1, @dotInLoop subleq @a, @a, @readNumber @sToken: subleq @i, @p3 ;Set loop variable to 3 (3 numbers after subleq) subleq @a, @p5 ;Read 6 more symbols s"ubleq " @sInLoop: ;By the time we get here @a is zero so no need to clear it subleq @t, @IN subleq @a, @n1, @sInLoop subleq @a, @a, @readNumber ;------------------------------------------------------------------------------------; ; Number parsing Block ; ;------------------------------------------------------------------------------------; @readNumber: subleq @a, @IN ;@a is cleared after we get a token subleq @t, @t subleq @t, @a, @endOfNum subleq @t, @p32, @endOfNum ;Check if less than or equal to 32. \n or space subleq @t, @p13, @foundMinus ;Check if minus subleq @a,@a, @skipMinus ;both sets @a to zero and skips the negative flag @foundMinus: subleq @isPositive, @n1 ;If there was a minus in the number set the minus flag and read another number subleq @a, @a, @readNumber ;This check is made in every digit, inefficient but short @skipMinus: ;To add digit A to the end of number B And get new number C ;C = B * 10 + A subleq @t, @p3 ;finish converting ascii to int subleq @ml, @p9 ;Set mul loop variable to 9. Multiply 9 times. Not 10. The 10th part is added after the loop @mulLoop: ;Since @ml always ends up being 1 at the end of the loop, no need to clear it subleq @a,@numb subleq @ml, @n1, @mulLoop subleq @numb, @a ;Add the multiplied by 9 part of a number to itself. subleq @numb, @t ;Add the next digit to the number subleq @a,@a, @readNumber ;Read another number ;------------------------------------------------------------------------------------; ; Write to memory Block ; ;------------------------------------------------------------------------------------; @endOfNum: subleq @t, @t subleq @isPositive, @p0, @skipNegative ;Negate a number if a flag is set @neg: subleq @isPositive, @isPositive subleq @t, @numb subleq @a, @a subleq @a, @t subleq @numb, @a ;I think this can be shorter somehow subleq @numb, @a @skipNegative: subleq @t, @numb ;Check if number is 255 subleq @t, @n1, @ch255 ;The program shouldn't jump to 255 when it ends subleq @t, @t, @writeMem @ch255: subleq @t, @n1, @writeMem subleq @numb, @numb ;found 255 subleq @numb, @resetPos ;Instead it jumps to the @resetLoop lable to start the process over subleq @t, @t, @writeMem @writeMem: subleq 0, @numb ;Write the number to the memory subleq @writeMem, @n1 ;increment the memory pointer subleq @resetLoopPtr, @n1 ;increment pointers for clearing memory subleq @resetLoopPtr+1, @n1 subleq @len, @p1 ;Count how long the program is subleq @numb, @numb subleq @a, @a subleq @i,@n1, @readNumber ;While have more numbers, keep reading subleq @t, @t, @readToken ;Read another token if don't have more numbers ;------------------------------------------------------------------------------------; ; Reset Block ; ;------------------------------------------------------------------------------------; @resetLoop: subleq @writeMem, @p1 subleq @resetLoopPtr, @p1 ;Decrement all pointers subleq @resetLoopPtr+1, @p1 @resetLoopPtr: subleq 0, 0 ;Clear the memory subleq @len, @n1, @resetLoop subleq @t, @t, @readToken ;Go back to reading new tokens for a new program @numb: .data 0 ;For storing the number @t: .data 0 @a: .data 0 @i: .data 1 ;Input number count loop @ml: .data 1 ;Multiplication loop @len: .data 1 ;Program length @isPositive: .data 0 ;Flag for negative numbers @n1: .data -1 @p0: .data 0 @p1: .data 1 @p3: .data 3 @p4: .data 4 @p5: .data 5 ;Constants sea @p9: .data 9 @p10: .data 10 @p13: .data 13 @p32: .data 32 @p36: .data 36 @p69: .data 69 @resetPos: .data -64 ;Location of a @resetLoop
UGHHH! OKAY!
I'm fighting the final puzzle and for a while I was convinced that your tests are wrong. I even ran the program on paper. It seems like everything should work. That's the most EVIL final test. The "subleq 254 0 3"! Since I placed the program after my own code and applied offsets, all values went out of the window. The test not only wants to get the program to modify itself, it also wants the program to be at a correct place... idk if it makes sence but I guess I'll have to restructure a lot of code.
Which SUCKS cause it passes every other test
When I started playing I thought that I was saving the guy... but it turns out I was a delivery drone :D
It is the simplest interpretation of the theme but it is also incredibly fun! I love how you iterated on the idea of delivering the object to the goal. Bigger guy, more guys, MORE GUYS :D
Good level design!
______________________________________________________________
If you could also play our game, that would be awesome!
It would've been nice to play through smaller levels first of making sub parts to understand how it all works but I guess you ran into time problems!
The plan was to gradually unlock more recepies as you play but we couldn't make it in time. I agree that it would've been a lot more digestible this way.
Thanks for playing!
Holy cow! You made this in 48 hours?! You game has an atmosphere stronger then games made outside of game jams! You can make a full game just with these assets and publish it on Steam.
This certainly one of the top games in this jam! Amazing!
______________________________________________________________
If you could also play our game, that would be awesome!
Thank you! The belt extension was available at first, but it caused a lot of bugs, so we removed it. And for the reverse thing... We have the code that checks for "impossible" rotations and disables the factory if they were found. But we decided that it would be more fun, to let players still play the game even if they messed up the connections. The game is hard on it's own.
Thank you for your review I'll play your game too later