(shouting)

Post your lunadll findings

The second SMBX collab!
TiKi
Posts: 709
Joined: 10 years ago

Re: Post your lunadll findings

Post by TiKi »

You forgot the black of the shadow star cheat in "cheats"
User avatar
Kevsoft
LunaLua Master Developer
Posts: 83
Joined: 9 years ago

Re: Post your lunadll findings

Post by Kevsoft »

Do you know the address?
TiKi
Posts: 709
Joined: 10 years ago

Re: Post your lunadll findings

Post by TiKi »

Kevsoft wrote:Do you know the address?
It's somewhere with the gravity and player width guy's posts.

Kil: it's touching that you'd go to those lengths on my request
Kil
Posts: 13
Joined: 15 years ago

Re: Post your lunadll findings

Post by Kil »

The thing can't even be used until someone figures out the data format behind the pointer so apparently not 8-)
DON'T PM me. Ask your question in the help thread so everyone can be answered.
User avatar
Kevsoft
LunaLua Master Developer
Posts: 83
Joined: 9 years ago

Re: Post your lunadll findings

Post by Kevsoft »

Big news: I managed to get access to the SMBX Animation/Effect/Particle (whatever) system. It is not quite revealed yet but I can already read most of the data stuff.

So what does the SMBX Animation System:
  • Well play animations
  • Has access to several values like coins, score, ect...
  • Sometimes plays sound effects in addition.
  • It has a limit to 1000 Animations at the same time.
Here is some struct Information:

Code: Select all

struct SMBXAnimation{
    short animationID;
    short unknown02;
    double XPos;
    double YPos;
    double Height;
    double Width;
    double XSpeed;
    double YSpeed;
    short unknown34;
    short unknown36;
    short unknown38;
    short unknown3A;
    short timer;
    short unknown3E;
    short unknown40;
};
Kil
Posts: 13
Joined: 15 years ago

Re: Post your lunadll findings

Post by Kil »

I guess those are for the "Effects" in the Effects folder, aka stuff that appears when things die, smoke clouds, etc
DON'T PM me. Ask your question in the help thread so everyone can be answered.
User avatar
Hoeloe
A2XT person
Posts: 1016
Joined: 12 years ago
Pronouns: she/her
Location: Spaaace

Re: Post your lunadll findings

Post by Hoeloe »

Have been looking at player memory 0x122 (forced state). Currently listed on the LunaDLL page are:

0 = normal
1 = powerup
2 = powerdown
3 = entering pipe
4 = getting fire flower
7 = entering door
500 = tanooki statue poof state

I've done some experimenting and found these:

41 = get ice power
5 = get leaf power
12 = get hammer suit
11 = get tanuki suit

These can be pretty useful for certain things. I'm using them to pause an update loop to ensure it stays in sync.
Image
Image
Image
Image
Image
Kil
Posts: 13
Joined: 15 years ago

Re: Post your lunadll findings

Post by Kil »

Finding: The way pause works in this game is freakin garbage
DON'T PM me. Ask your question in the help thread so everyone can be answered.
TiKi
Posts: 709
Joined: 10 years ago

Re: Post your lunadll findings

Post by TiKi »

Considering BGOs and backgrounds still animate, why am I not surprised
User avatar
Hoeloe
A2XT person
Posts: 1016
Joined: 12 years ago
Pronouns: she/her
Location: Spaaace

Re: Post your lunadll findings

Post by Hoeloe »

TiKi wrote:Considering BGOs and backgrounds still animate, why am I not surprised
That doesn't inherently point to bad code. Many games just pause by halting the update loop. Animations that are done independently (say, via shader code or in a separate thread) won't freeze. This is a fairly tidy way of doing things.

I imagine SMBX doesn't do this, though.
Image
Image
Image
Image
Image
TiKi
Posts: 709
Joined: 10 years ago

Re: Post your lunadll findings

Post by TiKi »

Someone said that the super speed cheat persists between levels in the editor... But gravity lunadll codes do that too! I wonder how THAT can make speed have a bigger cap, then. I hope it's not hardcoded that way so where it only activates for the cheat. Though if that is it, at least the cheat may be able to be activated.
TiKi
Posts: 709
Joined: 10 years ago

Re: Post your lunadll findings

Post by TiKi »

I found the code that toggles whether you're in super speed mode or not, like the cheat!

0x00B2C8AE, word, 0xFFFF=on, 0=off
Septentrion Pleiades
Banned
Posts: 0
Joined: 13 years ago
First name: Stephen
Location: Holstaurus Heaven

Re: Post your lunadll findings

Post by Septentrion Pleiades »

this is more of a negative finding. Whenever you change the hitbox of the player, it seems to stay changed when you exit the level. Since most of the testing is one level at a time, are things like this being compensated for?
Image
Image
Image
User avatar
Hoeloe
A2XT person
Posts: 1016
Joined: 12 years ago
Pronouns: she/her
Location: Spaaace

Re: Post your lunadll findings

Post by Hoeloe »

Septentrion Pleiades wrote:this is more of a negative finding. Whenever you change the hitbox of the player, it seems to stay changed when you exit the level. Since most of the testing is one level at a time, are things like this being compensated for?
I think things like this have been noted before, and solutions have been suggested. It does seem like something of a design flaw with LunaDLL, but there are ways around it, they just aren't particularly neat.
Image
Image
Image
Image
Image
User avatar
kitikami
Posts: 853
Joined: 10 years ago

Re: Post your lunadll findings

Post by kitikami »

Here's some code to implement a wall jump off the side of a given type of block (the wood block in this example):

Code: Select all

#0
//reset player gravity to normal when not wall-jumping
MemAssign,0x00B2C6F4,12,0,0,0,w
//trigger wall jump from right side of wood block (block-id 1)
BlockTrigger,0,1,2,1002,0,0
//trigger wall jump from left side of wood block (block-id 1)
BlockTrigger,0,1,4,1004,0,0


#1002
//wall jump from right
//set player gravity to 0 when touching wall
MemAssign,0x00B2C6F4,0,0,0,1,w
//when jumping
OnInput,0,6,1,1003,1,0
//disable spin jump from wall
PlayerMemSet,0,0x120,0,0,1,w


#1003
//give player momentum in opposite direction after wall jump
PlayerMemSet,0,0xE0,2,0,1,df
//face right after wall jump
PlayerMemSet,0,0x106,1,0,1,w


#1004
//wall jump from left
//set player gravity to 0 when touching wall
MemAssign,0x00B2C6F4,0,0,0,1,w
//when jumping
OnInput,0,6,1,1005,1,0
//disable spin jump from wall
PlayerMemSet,0,0x120,0,0,1,w


#1005
//give player momentum in opposite direction after wall jump
PlayerMemSet,0,0xE0,-2,0,1,df
//face left after wall jump
PlayerMemSet,0,0x106,-1,0,1,w
Rixithechao
https://www.youtube.com/watch?v=BODxOghVmko
Posts: 1812
Joined: 10 years ago
First name: Mack
https://rixithechao.talkhaus.com/

Re: Post your lunadll findings

Post by Rixithechao »

NPC offsets:
0x6A - word(?) - Generator firing rate
0xAC - word - respawn X
0xB4 - word - respawn Y

The respawn coordinates use a different scale factor than the current position, so here's some Lua conversion functions:

Code: Select all

function coordToSpawnX (xPos)
	local newX = xPos*-(8) - 1572863.88
	return newX
end

function coordToSpawnY (yPos)
	local newY = yPos*-(8) - 1572864.08
	return newY
end

function spawnToCoordX (xPos)
	local newX = -(xPos + 1572863.88)/8
	return newX
end

function spawnToCoordY (yPos)
	local newY = -(yPos + 1572864.08)/8
	return newY
end
Delightful Adventure Enhanced is out now!

Image

There's an official ASMT Discord server! Check it out to discuss Demo games and follow their development! thread, invite link

(Entry requires verification, either with a connected Youtube/Twitter/Twitch/etc account or manually by the server staff.)


Itch.io (albums and eventually games), Youtube (dofur pass and I guess other videos)
User avatar
h2643
<Knux> h2643 the super computer
Posts: 3
Joined: 9 years ago
Location: Ukraine (Украина)
Contact:

Re: Post your lunadll findings

Post by h2643 »

I don't know if someone posted discovery about Dummy NPCs and NPC-0, but quite some time ago I did:
http://nsmbxforums.prophpbb.com/post87281.html#p87281
I can't find my original post at www.supermariobrosx.org, but who cares. Hopefully this is interesting enough.
Image
User avatar
Rednaxela
Maker of Shenanigans
Posts: 897
Joined: 10 years ago
Pronouns: they/them
https://rednaxela.talkhaus.com

Re: Post your lunadll findings

Post by Rednaxela »

After finding some NPC offsets that I posted in the help thread (didn't know about this thread, oops), I've found a few more notable things:

This old bit that was documented before slightly inaccurate

Code: Select all

0x+F4	?	= Related to lakitu throw identity?
because that value is actually a double starting at 0xF0, but sure, a float starting at 0x+F4 would look the same for lakitu throw identities with them being integers within a small well-known range.

The real picture of this area of memory is like:

Code: Select all

// 0x+F0 qw = Multipurpose NPC AI state/timer 1
// 0x+F8 qw = Multipurpose NPC AI state/timer 2
// 0x+100 qw = Multipurpose NPC AI state/timer 3
// 0x+108 qw = Multipurpose NPC AI state/timer 4
// 0x+110 qw = Multipurpose NPC AI state/timer 5
Notes about each for SMB3 Bowser
0x+F0 Resets to 9 when starting to jump high and decrements 1 per tick. Not sure but may start arcing after it hits 0
0x+F8 Increments by a seemingly random number between 0.0 and 1.0 each tick. Resets from time to time but I don't can't tell exactly why.
0x+100 Increments by 1 per tick. Sometimes it gets reset to 0, but other times it gets reset to a negative number and counts back up to 0 to trigger something.
0x+108 Current AI phase (2=hopping, 3=jumping high+falling, 4=shooting fireballs, 10=turning right after hitting ground, -10=turning left after hitting ground)
0x+110 Other? (0=just after hitting ground, 1=other)

Notes about with Brown Doughnut Block
0x+F0 0=Not falling, 1=Falling
0x+F8 0=Idle, 1=Wiggling or falling
0x+100 Increments by 1 per tick until 30. Falls at 30.
0x+108/110 Unused

Notes about with Dry Bones
0x+F0 0=Up walking around, 1=Collapsed
0x+F8 When broken, increments by 1 per tick until 400 at which point it gets up
0x+100 Alternates between 1 and 0 when wiggling (0x+F8 between 300 and 400)
0x+108/110 Unused

Notes about with SMW Bowser Statue
0x+F0 Increments 1 per tick, resetting when it shoots
0x+F8/100/108/110 Unused

Notes about with Lakitu
0x+F0 Thrown NPC identity
0x+F8 Init to 1, set to 0 a little while after throwing
0x+100 0=Haven't yet passed over player, 2=Getting ready to throw, 3=Like 0 but after having thrown before
0x+108 When getting ready to throw, resets to 100 and starts decrementing. Throws once 0 again.
0x+110 Always increments 1 per tick, resets to 0 after throw


This analysis may be helpful to people who want to manipulate the AI of existing NPCs more. If anyone has any requests for me to look into the AI state/timers for a particular NPC, let me know.

Quick little thing I did with this knowledge for example, is I made a SMB3 Bowser which never shoots fireballs and only does the high jump attack, or only shoots fireballs and doesn't jump.
shenanigans.png
shenanigans.png (39.6 KiB) Viewed 5250 times
User avatar
Kevsoft
LunaLua Master Developer
Posts: 83
Joined: 9 years ago

Re: Post your lunadll findings

Post by Kevsoft »

If you are bored, you can analyse the Animation struct :P
Kil
Posts: 13
Joined: 15 years ago

Re: Post your lunadll findings

Post by Kil »

Maybe you can further investigate the holes in the Player struct. I know a lot of those do something...
DON'T PM me. Ask your question in the help thread so everyone can be answered.
User avatar
Hoeloe
A2XT person
Posts: 1016
Joined: 12 years ago
Pronouns: she/her
Location: Spaaace

Re: Post your lunadll findings

Post by Hoeloe »

Kil wrote:Maybe you can further investigate the holes in the Player struct. I know a lot of those do something...
I did find there was a lot of padding in the NPC struct, which is useful. This seems to occur between variables of different types, in order to push them to an offset that matches with other variables of that type. This means there is a lot of blank space in the NPC struct, which is useful for things such as CinematX, which writes to one of them to keep unique IDs for NPCs. I expect this is also the case for the player and world struct, so that's worth noting.

Having said that, there is still a lot that's not known. Another useful feature would be the ability to grab the input data before it's captured by the player movement or otherwise, which would allow us to freeze the player and handle game input manually in Luna.
Image
Image
Image
Image
Image
User avatar
Hoeloe
A2XT person
Posts: 1016
Joined: 12 years ago
Pronouns: she/her
Location: Spaaace

Re: Post your lunadll findings

Post by Hoeloe »

Couple of new player memory offsets, based on yoshis:

Code: Select all

0xB0 float		Tongue Start Position
0xB4 word		Tongue End Offset (start position + (end offset * direction) = tongue end position)
0xB6 word	 	-1 if tongue retracting
Image
Image
Image
Image
Image
Post Reply