Idle gossip

I’ve been playing a game called EVE online lately.

But my fun adventure is not how to play the game but hacking the game.

By some means I have almost completely decompiled the original EVE code (readable code)

This has to do with the nature of python, and my guess is that Java should have a way to convert from bytecode to readable code (maybe not)

Hacking can be illegal or unethical so I’m not going to go into too much detail about how I did it, just some interesting ways that I’ve seen it done

Trying to do multithreading in python2 is a complicated thing and that seems to be the legacy of python2.
I found out that python’s multithreading has a lock where only the thread that acquires the lock can execute the programme, and the lock must be released when the programme has finished executing.
There’s almost nothing python2 can do asynchronously.
(Of course this is just what I understand so far from my brief exposure to python2, and maybe python2 can be)

The more interesting design is the “sm”, which manages all the registered modules and then accesses the local Service via sm.getService. sm.remotesvc seems to call the server’s functionality

I am now wondering what is “SM” in jme? I found the getStateManager, and then I started reading the documentation and finally, yes, this is what I’m looking for
( yan tells me there’s a StateManager.)

Well, it’s a little awkward, but after all the crazy stuff we’ve done to get different class to talk to each other, it turns out there’s a getStateManager :upside_down_face:

I also saw a simple database for storing game resources in the game code, and I wondered if something similar existed in jme

Most of the rest of the content is almost similar to the process of making a game in jme including the existence of a module called update in each module to make updates.

(You can leave any suggestions Thank you for your message)

This has to do with the nature of python, and my guess is that Java should have a way to convert from bytecode to readable code (maybe not)

Yes, “getting the source back” is a bit of a sliding scale. On the extreme end you have things like python and javascript where the source code is what is directly run. In that case getting the source code back is trivial; you already have it.

Java is in a bit of a middle ground. The Bytecode has a very close relationship to the source so decompilation is generally easy with method, class and variable names retained. The decompiled source will not be exactly the same as what went it but is very close (comments, javadocs and some annotations are not recoverable though). Some people are worried about that and use things like obfuscators to make understanding the decompiled source harder.

Further along the spectrum are things like C++, again they can be decompiled but what comes out is generally a mess, requiring lots of human work to get it back into something understandable.

Personally I think worrying about decompilation is a dead end, piracy is a legal problem not a technical one.

Hacking applications locally on your machine is generally not illegal but can be a breach of contract

I also saw a simple database for storing game resources in the game code, and I wondered if something similar existed in jme

What do you mean by this exactly? Storing models, textures etc created during design time to use during runtime. Or save game objects to persist to disk. Or some way or organising game state during runtime

3 Likes

So if I read your post correctly, you have decompiled EVE online and are using that to see how it works… then seeing what similar features are available in JME.

If so then it might be worthwhile to also look at working JME open source examples to see how things are done in JME.

For example, there are two simple space game examples I wrote a long time ago.

The first is using regular plain Java game objects:

The second is using an “entity component system”:

I bring up the second one especially because it’s not a very big step to add database support because Zay-ES (the entity component system library used) has built in database support. This game example just isn’t using it.

Both games use networking, real time object syncing, app state manager, etc…

3 Likes

A KV-type database holds the paths to most of the game’s resources such as models, textures, music and so on.

Okay thanks for the reply

What would you want to do with that exactly? Are you looking to change string paths (e.g. “Textures/portraits/commsOfficer.png”) with constants (e.g. Assets.Textures.Portraits.COMMS_OFFICER). If so the plugin Typed Materials will do that (disclaimer; it’s one of my projects)

2 Likes

Java decompilers exist, yes. There’s this one, for example.

1 Like