Active player (459)
Joined: 11/12/2010
Posts: 183
Location: Sweden
Hmm, I don't think most of these addresses will actually be of any use if I post them. Apparently it seems the game has a register of addresses which it chooses from whenever it's time to assign values to an object. So the address for Viy's HP could be the address for the destroyable wall in front of Guidance Gate on the Surface next time around. Even the X and Y addresses for objects act the same way, so unless I can find a way to make sense into this, I'd have to search for the address every time I need them. The only things which seems to be consistent though (that I've found so far) is the addresses of Lemeza himself as well as the RNG. Addresses like his position, his items and sub weapons, his vitality and invulnerability timer. Here's the addresses I've found so far. These can all be used with Cheat Engine 6.2 RNG - Float - 007A62D8 (can be viewed in other types as well by changing it manually) X Position - 4 Bytes - 007A95B8 Y Position - 4 Bytes - 007A95BC Vitality - 4 Bytes - 007A95C0 Invulnerability - 4 Bytes - 007A9634 (Freeze this value right after you've taken a hit) Shuriken - Array of byte - 004D9EEC (Sub weapon values count 01-09, then 0A-0F, then 10-19, then 1A-1F etc...) Throwing knives - Array of byte - 004D9EEE Flares - Array of byte - 004D9EF2 Spears - Array of byte - 004D9EF0 Just to see if it's possible, I checked a couple of other things as well: Ankh Jewels - Array of byte - 004D9EFA (Yes, you can give yourself more Ankh Jewels than there exist in the game. Might not actually be useful in the real run, but could help when I need to investigate stuff and don't want to waste time gathering them all again) Feather - Array of byte - 004D9E81 (Set to 01 00 to give the Feather to yourself. Won't be visible in the inventory though. You can still pick up the Feather later on if you wish to.)
"An artist who can’t take constructive critique on their work is only hurting themselves and their potential. Conversely, and artist that can’t communicate a critique in a constructive way isn’t helping anybody."
Patashu
He/Him
Joined: 10/2/2005
Posts: 4045
Link to video
Google Translate wrote:
Posted this for the first time in two years. Gobusatashiteorimasu very. ◆ to hear it and move LA-MULANA is (only freeware version) in the hourglass, and I was doing from the end of the year before last, but it will be something that has been completely forgotten by a lot then. ◆ Because it is the memorial of the death TAS only and does not intend to complete. I'm sorry. ◆ You do not have to care quality.
My Chiptune music, made in Famitracker: http://soundcloud.com/patashu My twitch. I stream mostly shmups & rhythm games http://twitch.tv/patashu My youtube, again shmups and rhythm games and misc stuff: http://youtube.com/user/patashu
Warepire
He/Him
Editor
Joined: 3/2/2010
Posts: 2178
Location: A little to the left of nowhere (Sweden)
Tseralith wrote:
Hmm, I don't think most of these addresses will actually be of any use if I post them. Apparently it seems the game has a register of addresses which it chooses from whenever it's time to assign values to an object. So the address for Viy's HP could be the address for the destroyable wall in front of Guidance Gate on the Surface next time around. Even the X and Y addresses for objects act the same way, so unless I can find a way to make sense into this, I'd have to search for the address every time I need them.
You are dealing with pointers, see if you can find an address who's value is the address to the data you want. If the data is stored by the game in a struct, you may have to find the pointer to the head of the struct, and then use an offset.
Active player (279)
Joined: 4/30/2009
Posts: 791
On the video posted above, I was talking with UltraJMan (who runs La-Mulana in real time) and he was impressed with the effort done so far, noting it was a good few minutes improvement to beating Bahamut and Ellmec over the current route. The main difference being the lack of save/reload used in real time atm, but it seems that abusing this feature (which refills pots that have already been broken, instead of only containing something once) would save a significant amount of time over the course of the run. I am confident that video can even be optimised a bit more in the long run (collecting Save ROM after the Grail, then saving/reloading, and more manipulation of weight drops by killing enemies)
Active player (459)
Joined: 11/12/2010
Posts: 183
Location: Sweden
Interesting. Save/reloading opens up quite a number of possibilities when you don't have to search for coins and sub-weapons all the time. No progress since last time a I've been busy with whatnot, so we'll see when the next update will be. Maybe I'll look into those pointers in the meantime, thanks for explaining it. Thanks for linking that video as well.
"An artist who can’t take constructive critique on their work is only hurting themselves and their potential. Conversely, and artist that can’t communicate a critique in a constructive way isn’t helping anybody."
Active player (459)
Joined: 11/12/2010
Posts: 183
Location: Sweden
I'm thinking of looking into this game again, however I'll be analyzing the game for now, trying to figure out things like how the RNG works, possible skips, glitch hunting, finding new routes and such. I have no estimate on when I'll begin a new run for real, but it'll be when I feel I'm ready. However if anyone wish to help, you could suggest things you think might be useful. Be it either potential wall clips, possible routes, potential glitches and whatnot. I'd appreciate any input.
"An artist who can’t take constructive critique on their work is only hurting themselves and their potential. Conversely, and artist that can’t communicate a critique in a constructive way isn’t helping anybody."
Post subject: RNG investigation + two other things
Active player (459)
Joined: 11/12/2010
Posts: 183
Location: Sweden
I've figured out how the RNG advances now. Showing the adress as 4 bytes instead of float values gives a whole number which is much easier to read. Through testing I can say it cycles between the value 0 and 32768 (256*128). The formula that advances RNG is ("previous value" * 109) + 1021 So with this you can easily predict how it advances, although I'm still having problem figuring exactly how the drops behave. What I do know is that there's roughly two values every ten values which decides if an enemy should drop something. Interestingly it seems all enemies have a fixed item they drop, however if you don't have the sub-weapon they're supposed to drop, it won't drop anything at all. Another thing I've noticed is that RNG necessarily doesn't advance just once. Sometimes it advances up to five times at once, for example during certain screen transitions (which I haven't looked into why yet). Here's some RNG values which results in drops in case someone else might be able to find some sense from it. What else have I investigated? I've been trying to find a way to get the flares without solving the block puzzle, however with no success yet. I tried to corner glitch into the compartment where it is, but I'm a bit too far away to reach it. I'll continue to look into it in case I can find a solution at a later date. I've also looked into the possibility to reach the bombs by glitching into the sloped ceiling at the entrance to the Tower of Ruin. Sadly there's been no success here as well yet. Not sure if it's due to ice physics decreasing your speed or if there's something else which prevents you from glitching into the sloped ceiling, however if you can find a way to glitch up through the roof, you'll be able to get the bombs without any more problem.
"An artist who can’t take constructive critique on their work is only hurting themselves and their potential. Conversely, and artist that can’t communicate a critique in a constructive way isn’t helping anybody."
Post subject: Re: RNG investigation + two other things
Joined: 7/2/2007
Posts: 3960
Tseralith wrote:
Another thing I've noticed is that RNG necessarily doesn't advance just once. Sometimes it advances up to five times at once, for example during certain screen transitions (which I haven't looked into why yet).
Presumably multiple random numbers are needed at times, e.g. when placing enemies on a new screen, or if multiple active enemies have to decide what to do on the same frame. And the RNG advances each time it's used.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Post subject: Re: RNG investigation + two other things
Patashu
He/Him
Joined: 10/2/2005
Posts: 4045
Derakon wrote:
Tseralith wrote:
Another thing I've noticed is that RNG necessarily doesn't advance just once. Sometimes it advances up to five times at once, for example during certain screen transitions (which I haven't looked into why yet).
Presumably multiple random numbers are needed at times, e.g. when placing enemies on a new screen, or if multiple active enemies have to decide what to do on the same frame. And the RNG advances each time it's used.
Another reason can be due to RNG jitter. There are two causes of RNG jitter: 1) a random number is needed, and rejected if it doesn't have a certain property. For example, in a game with an RNG that returns 1 2 3 or 4, to fairly get a 1/3 roll you have to reject if you get a 4, so potentially many rolls are needed. 2) depending on the outcome of a roll, more rolls are needed. For example, an item is or is not spawned, and if it is, it needs an item id thus more rolls.
My Chiptune music, made in Famitracker: http://soundcloud.com/patashu My twitch. I stream mostly shmups & rhythm games http://twitch.tv/patashu My youtube, again shmups and rhythm games and misc stuff: http://youtube.com/user/patashu
Patashu
He/Him
Joined: 10/2/2005
Posts: 4045
I thought of something for your table. Let's say the RNG address has X in it, then you trigger a drop, and now the RNG address has Y in it. Is it possible that you're making a table of Ys when it's using the X to decide if a drop happened or not, or vice versa? e.g. when the game needs an RNG value does it use what's in the address, or advance it by 1 THEN use what's now in the address?
My Chiptune music, made in Famitracker: http://soundcloud.com/patashu My twitch. I stream mostly shmups & rhythm games http://twitch.tv/patashu My youtube, again shmups and rhythm games and misc stuff: http://youtube.com/user/patashu
Active player (459)
Joined: 11/12/2010
Posts: 183
Location: Sweden
Hmm, there might be something about that. Normally when you kill an enemy, the RNG advances. However it only does that if they can drop. That means the RNG is guaranteed to advance once when you kill an enemy which you know can drop something. Although this might also be a precaution to make sure you won't get drops from several enemies in a row. I can't exclude your theory though, so I'll look into it some more.
"An artist who can’t take constructive critique on their work is only hurting themselves and their potential. Conversely, and artist that can’t communicate a critique in a constructive way isn’t helping anybody."
Patashu
He/Him
Joined: 10/2/2005
Posts: 4045
Yes, some games only call the RNG when they absolutely have to (this one apparently!), vs some games advance the RNG for all sorts of gameplay-unrelated reasons (based on input, based on the frame count, etc) to keep it hard to predict (Pokemon gen 1/2, Symphony of the Night)
My Chiptune music, made in Famitracker: http://soundcloud.com/patashu My twitch. I stream mostly shmups & rhythm games http://twitch.tv/patashu My youtube, again shmups and rhythm games and misc stuff: http://youtube.com/user/patashu
Joined: 11/13/2018
Posts: 1
Hello! I took some time to reverse-engineer all of the .dat files in the /data/ folder (with the exception of scripts.dat, which contains the map warp data) https://www.mediafire.com/file/c81v2pfmtp1pcw7/La-Mulana_Classic_Maps.zip I'm hoping it will somehow help with the routing: it turns out that all the maps are actually groups of 4x5 rooms, and using Cheat Engine to go through the walls seems to wrap the map around exactly how the .dats tile the maps in memory, unless there's a door or ladder that leads somewhere else. In the .zip, I've included both .png and .tmx (Tiled) formats, along with the tilesets for viewing the maps in Tiled. EDIT: For those who want to reproduce this, here's the C# source code: https://www.mediafire.com/file/ylqj22j9dpca6y0/LaMulanaMapViewer_src.zip It's written in C# using Visual Studio 2018. After running it, you can open a .dat and it'll construct an entire .tmx in the debug console: Just save it as a text document and change the extension to .tmx, then open it in Tiled. The tilesets are loaded at "./tilesets/" relative to where the .tmx is, and they come from the original game's /graphics/ folder. EDIT2: Fun little trivia, it seems an official wallpaper of the remake suggests the remake's maps are stored into memory similarly: https://la-mulana.com/img/desktop/lm4-1280-800.jpg
Joined: 9/12/2012
Posts: 17
I'm not sure how useful this would be, but I did an RTA route that uses most of the clips I know about. Obviously stuff like the coin route and sub weapon ammo route will be drastically different because a TAS can manipulate drops from enemies. Link to video The clips I didn't do. (that I know would be useful) 1) Chamber of Birth Grail Warp room -> Dance of Life room. -A TAS could probably use the skeleton there 2) True Shrine: Just below Mother's Ankh room 3) Temple of Moon: Clipping into the "Woman" Inverted Pyramid -Tsaeralith has a video in this thread on this 4) Better Anchor skip in Corridor of Illusion. There are likely a plethora of other smaller scale clips that a TAS could do as well. Hopefully this can be somewhat useful in routing a TAS.
Patashu
He/Him
Joined: 10/2/2005
Posts: 4045
Meanwhile, the remake got a hilariously fast TAS thanks to a memory corruption glitch (details in YT video description): Link to video
My Chiptune music, made in Famitracker: http://soundcloud.com/patashu My twitch. I stream mostly shmups & rhythm games http://twitch.tv/patashu My youtube, again shmups and rhythm games and misc stuff: http://youtube.com/user/patashu