The Inner Workings machine secret!


#654

666 probably show something, 420 as well. What is the significance of 777?


#655

stereotypical lucky number, ex. slot machines

Maybe one of them is the year unibro was born.


#656

Perhaps the year the game started? That could be one. I’ll try to come up with more possibilities.


#657

Can someone summarise? Read the whole thread but I’m kinda confused… (whole thing happened in the wee hours of the morning and I was asleep ;()


#658

Demonseye found something, which led to a scavenger hunt of people talking to a variety of NPCs (Guill, Craig, Beekeeper computer, etc.) to find a secret passcode which in turn led to the discovery that The Machine has a secret calculator function. But you need a bee helm to get there.


#659

Don’t think you need bee helm

image

edit: nvm im stupid see reply


#660

so… i just need to press my face against the monitor, got it!


#661

So… this was an ARG that led to a 16 bit calculator written in what is likely C++… An inefficient one at that. The reward thus far seems like more text based on certain number inputs.

I mean hey, I’m all for more lore, post realmeye in the library, and making the game feel more interconnected… I just wish there was something substantial at the end of the day beyond returned text strings, only possible within a season dungeon.


#662

I’ve never expected so many people at one thread at a time. Since the wiki is already done, and since i have admin powers of this thread and the reddit one, i’ll update both and keep them.

That was a really great work, many people was disappointed by the lack of rewards at the end, but an OP reward for people who just sneak in the thread, takes the information and password, could be not very great for the RotMG community at all. So, the people that suffered and are mad in the process are the players who discovered everything from the beginning to the end, aka me, the forumers, and the redditors that decided to help us.


#663

That’s the way to get the Beekeeper’s computer to ask for a password.
What “screen” is there even in the Machine to get close to?


#664

Out of 5 secrets, we already found 2 :

-69
-420
-probably 666 ?!


#665

What makes you say that there are 5 secrets in total?

What happens when you manage to output 69 and 420?


#666

Bold of you to assume a real programming language is used to make things in this game. We would make much cooler stuff if it did :sunglasses:

Realm enemies are scripted as finite state machines with XML.

Finite state machines have no concept of variables, math, loops, or any other programming construct. The only thing you can do is:

Supply a finite set of states
In each state, activate a set of “Behaviors”
In each state, supply a set of transitions that map to another state.

States can have states within them (objects are HDFA), but transitions can only map to states that share the same direct parent. Not grandparents etc.

The set of behaviors and transitions one can activate are finite. They have a name such as “Orbit” and some parameters. For example

<Behavior protecteeId="TM Example Object" radius="3" speed="1">Orbit</Behavior>

That’s it. This is your entire toolbox. Every tick (0.2sec) the current states behaviors are executed, and the transitions are checked.

Any sort of data representation is done with a “tag”. A tag has a String name and is either set, or not set. You interface with a tag through behaviors by either executing a ClearTag behavior on the tagName, or a SetTag behavior on the tagName.

You act based on the tag by a few parameters you can use in the XML for a transition. There are two:

“hasTag” ; true if object has the tag of the supplied name
“noTag” ; opposite of hasTag

<Transition hasTag="tagName">NewState</Transition>

That is all you can do.

There are no debugging tools. Every tag you set is not cleared until you clear it yourself. Every tag you use, you MUST remember yourself its name, and figure out for yourself if it is set or not in the current state of the object. If you so much as forget to clear ONE tag, the entire state machine can break spectacularly:

Old example of when one out of many paths trough a specific state machine did not clear a tag

You CANNOT check at execution time:

Is the object in a specific state
What are the tags of the object
What values are currently being checked for a transition

The only thing you can do is make the object “Say” some text, and from there deduce what trace of states it followed.

Tags are contained within the object: every object has their private list of the tags that are and aren’t set. Other objects have NO way of seeing what tags (or ANY data for that matter, such as HP, or current state) other objects have. They only have info on themselves.

In order to do math, many objects are required. There are many hundreds on the final calculator map, and over 200 unique objects exist for this purpose.

These objects need to cooperate to do math, but finite state machines are stupid and can’t communicate. There are a few ways they can detect changes in the environment:

“Do one or more of ((objectId)) exist currently”

This is global, i.e. if it exists anywhere in the dungeon this is true.

You also cannot count with this. Only if there are zero, or more than zero.

“Is the ((tagName)) global tag set?”

Apart from tags there are also global tags. Like their name implies, they are global. ANY object can read and write a globaltag. If you thought tags were hard to manage, you should try a taste of globalTags.

These are an objects sensors to the environment. Notice how both are global meaning they are most of the time useless. An object doing math needs to know if the bit it is currently looking at is 1 or 0, not “is any bit in the entire dungeon 1 or 0”.

In order to do math you require localized communication: some means to pass context of the nearby environment and make decisions based on it.

There is only one mechanic that can do this.

The “followOrders” behavior, and the corresponding “Order” xml tag.

You can find more about this on the public documentation for xml: https://sites.google.com/decagames.com/xml-documentation/xml-guide/orders?authuser=0

One limitation orders have, that I first ran into developing the nest, is that orders don’t work like you expect them to. No one knew how they did: in order to make the calculator I had to completely reverse engineer the mechanic. (Remember, I was not a deca employee until the calculator was pretty much done. All the research was conducted without access to source code)

From this, I concluded the following rules:

  • An Order can be received by zero or more recipients
  • A recipient can have at most one master
  • Activating a followOrders behavior equates to finding a Master. The object does not care if the master has any orders for it. It finds the nearest (if any) object within the range parameter you gave it, and saves this object internally
  • It will then listen to orders exclusively from this Master. If other objects transmit orders to this one, it does not care. Only the master controls it.
  • If the master is out of range, the object does not look for a new Master. It just checks if there are orders, notices the master is too far away, and tries again next tick.
  • Only when the master dies will it look for a new one to lock on to.

This basically means everything is hard. Suppose you want to read data from a bit in some way by following orders in some way. Then it locks on to a bit of choice and listens only to that one forever. Can’t do that.

The trick is to exit the state with the followOrders behavior in it, to clear the Master. Then activate a new followOrders behavior immediately by going to a state that has one.

Big brain time, transitions are reflexive, meaning you can transition into the state it came from. This works to reacquire a master. You would have to do this every time the environment around the object is suspected to change, to reacquire the context. For example, when it moves to the next bit in a row.

You can then communicate data one Tag at a time, by ordering the target object to set a tag on itself. Then the object can make a decision based on the tag it received.

Congratulations, you tricked an object into acquiring information about the environment.

(Just don’t forget to clear the tag for the next loop or it instantly thinks it got the info)

This is the basic construct for local communication in the game. It is the ONLY way you can do it. There are many design patterns that stem from this to manipulate the game into doing arithmetic. For example, imagine how you will get around this one:

“”"
An object needs to communicate with a different one. However, one is at the start of a row of bits. The other at the end. Meaning they are 32 tiles apart.*. Orders can only be acquired by a radius, meaning you require a 64 tiles diameter circle to directly communicate. This means, due to order lock-in with masters, you require at most one master exists in a 64 diameter circle. But in order to do math, you require multiple of these to exist above each other in a set of rows of bits (for example to add numbers). How will you deal with this?
“”""

  • In reality, the problem is harder: instead of 32 tiles apart they are ‘unknown’ tiles apart. The middle section of every row of bits is infinitely scalable by design of Turing Completeness. This calculator could be 32 bit, 256 bit or infinity bit if I bothered to make the map.

To close this text wall, I’d like to reoeat that THERE IS NO DEBUGGING. All of these things you manage entirely on your own. The text spam you get in the calculator was my only debugging tool . It actually makes sense to me, because I have looked at it thousands of time to figure out what I did wrong.

However many Orders, tags and globalTags you think I had to use to make this thing, before you look at these links, make a guess. I assure you there are more than you guessed.

These screenshots are a month old, and the numbers have since expanded.


#667

here’s a video of craig explaining.


disclaimer i found this video and it’s not mine.

#668

What about 833, 8335, 338, and 5338? Obvious reasons.


#669

AHAHHAHAHAHAH, YES! THANK YOU! FINALLY! Ths has bugged me since first entering the inner workings!


#670

even tho i only found out one peice of the puzzle (craig hehe) i’m honored i contributed to this thread :smiley:


#671

I have risen in order to ask if anyone has put the noise from the calculator through a spectrogram


#672

What noise from the calculator ?


#673

im pretty sure the “noise” is reference to the spam that comes out of the machine saying true, true, false, false, false false… ect. not actual noise.