Need help with lua? - LunaLua General Help

Post here for help and support regarding LunaLua and SMBX2's libraries and features.
User avatar
NoMoreStars
Cheep-Cheep
Cheep-Cheep
Posts: 15
Joined: Sat Jun 06, 2015 1:58 am
Flair: I'M A STONE LUIGI
Current Project: Wind Valley (Level)

Re: Need help with lua? - LunaLua General Help

Postby NoMoreStars » Fri Aug 30, 2019 1:13 pm

So I'm tyring to get the player's current coordinates and store the x and y positions as variables. I thought this could be accomplished by using a for loop to create a table as you would do with other objects like npcs, however the variables I keep setting to Player.x and Player.y keep returning simply as nil. I'm sure I'm going about this wrong but could someone please explain how I'd go about getting the player coordinates?

Code: Select all

for index,myPlayer in ipairs(Player.get()) do

		local playerPosX = Player.x
		local playerPosY = Player.y
	
	end

User avatar
Enjl
Cute Yoshi Egg
Cute Yoshi Egg
Posts: 7473
Joined: Mon Jan 20, 2014 12:58 pm
Flair: Orphion Egamalenitar Osmos IV, Esq.

Re: Need help with lua? - LunaLua General Help

Postby Enjl » Fri Aug 30, 2019 2:12 pm

"local" means a variable is confined to the scope where it's declared. It'll be discarded when the next "end" on the same level of indentation is hit. To illustrate this:

(not using the code block thing cause the smbx forum theme still doesn't display line breaks)

function onStart()
local val = 1
end

print(val) -- prints nil

on the other hand:

local val = 0

function onStart()
val = 1
end

print(val) --prints 1

So what you want is your variables to be declared outside of all functions so that they aren't discarded. Within the functions/loops you can update them then.
Your setup has one other difficulty: You're using a loop over players and saving both player's values into the same variable. Which means that on the first iteration, your variable is set to the location of the first player, and then it's immediately overridden in the second loop. I recommend using a table instead:

local playerPositions = {
{x = 0, y = 0}. -- index 1
{x = 0, y = 0} -- index 2
}

function onTick()
for k,p in ipairs(Player.get()) do
playerPositions[k].x = p.x
playerPositions[k].y = p.y
end
end
ImageImageImageImage
ImageImageImageImageImageImage

User avatar
FlyingGym
Cheep-Cheep
Cheep-Cheep
Posts: 16
Joined: Sat Aug 17, 2019 3:28 pm
Flair: ok
Chat Username: Gym

Re: Need help with lua? - LunaLua General Help

Postby FlyingGym » Fri Aug 30, 2019 10:34 pm

What would replicate a red koopa troopa's invulnerability to falling off of cliffs/blocks?

User avatar
Enjl
Cute Yoshi Egg
Cute Yoshi Egg
Posts: 7473
Joined: Mon Jan 20, 2014 12:58 pm
Flair: Orphion Egamalenitar Osmos IV, Esq.

Re: Need help with lua? - LunaLua General Help

Postby Enjl » Sat Aug 31, 2019 5:36 am

FlyingGym wrote:
Fri Aug 30, 2019 10:34 pm
What would replicate a red koopa troopa's invulnerability to falling off of cliffs/blocks?
The "cliffturn" npc config flag.
viewtopic.php?f=35&t=425
Just put "cliffturn=true" without the quotation marks into your npc config file.
ImageImageImageImage
ImageImageImageImageImageImage

User avatar
FlyingGym
Cheep-Cheep
Cheep-Cheep
Posts: 16
Joined: Sat Aug 17, 2019 3:28 pm
Flair: ok
Chat Username: Gym

Re: Need help with lua? - LunaLua General Help

Postby FlyingGym » Sat Aug 31, 2019 1:38 pm

so im using a smb1 gloomba to make an goombrat, what files do i load to activate the cliffturn without getting an error about not loading NPCcode?

User avatar
DrMekar
Ripper II
Ripper II
Posts: 307
Joined: Sat Apr 08, 2017 7:16 am
Flair: CUSTOM CHARACTER CREATOR
Current Project: Mario Hereos 2: The Seal of Darkness, SMBXDM The Lost Levels 2, Path of Silence
Chat Username: DrMekar
Contact:

Re: Need help with lua? - LunaLua General Help

Postby DrMekar » Sat Aug 31, 2019 8:53 pm

FlyingGym wrote:
Sat Aug 31, 2019 1:38 pm
so im using a smb1 gloomba to make an goombrat, what files do i load to activate the cliffturn without getting an error about not loading NPCcode?
If you're fine with with replacing a NPC (The Gloomba) then you can just write "cliffturn=1" in the txt document.
My Youtube Channel: https://www.youtube.com/channel/UC-8fzX ... subscriber

Current Project: Mario Heroes 2: The Seal of Darkness
posting.php?mode=edit&f=90&t=23148&p=339823#previewImage

Last Project: Mario Heroes: The First Chapter

Great Folks who support/ed my projects/in the past:

Suecra
jaf
Suckerman7 HM

User avatar
Daring Tombstone
Rex
Rex
Posts: 88
Joined: Mon Aug 28, 2017 10:57 pm
Current Project: Nothing Anymore
Chat Username: Chaperone

Re: Need help with lua? - LunaLua General Help

Postby Daring Tombstone » Tue Sep 03, 2019 5:09 pm

Don't know why this isn't working. It's the dragon coin thing from enjl's video.

Image

Pretty sure this is all correct. (minus it's coinCounter instead of other thing)

My problem is that the counter doesn't increment on collecting a coin. Something wrong in the script and it's me being stupid?
Accurate representation of me after seeing the new SMBX version right after posting my new episode.
Image
Check out my completed episode
Spoiler: show
Image

User avatar
Enjl
Cute Yoshi Egg
Cute Yoshi Egg
Posts: 7473
Joined: Mon Jan 20, 2014 12:58 pm
Flair: Orphion Egamalenitar Osmos IV, Esq.

Re: Need help with lua? - LunaLua General Help

Postby Enjl » Thu Sep 05, 2019 6:20 am

OFFSCREEN doubles for collection. Instead of that check, try a Colliders.collide(player, v) call for each player on the dying NPC.
ImageImageImageImage
ImageImageImageImageImageImage

User avatar
Murphmario
Mouser
Mouser
Posts: 1924
Joined: Fri Dec 20, 2013 7:07 pm

Re: Need help with lua? - LunaLua General Help

Postby Murphmario » Tue Sep 10, 2019 6:43 pm

Trying to make an NPC that behaves like the Sidehoppers in Super Metroid, but the code doesn't seem to work. It just keeps going through all of it's animation frames, and I don't know why.

If it helps, I partially based this off of Enjl's Bearvor NPC in terms of it's grounded state.
Spoiler: show

Code: Select all

local hoprng = 1
local animationtimer = 0

--Register events
function sampleNPC.onInitAPI()
	npcManager.registerEvent(npcID, sampleNPC, "onTickNPC")
	--npcManager.registerEvent(npcID, sampleNPC, "onTickEndNPC")
	--npcManager.registerEvent(npcID, sampleNPC, "onDrawNPC")
	--registerEvent(sampleNPC, "onNPCKill")
end

function sampleNPC.onTickNPC(v)
	--Don't act during time freeze
	if Defines.levelFreeze then return end
	
	local data = v.data
	
	--If despawned
	if v:mem(0x12A, FIELD_WORD) <= 0 then
		v.data.state = 0
		data.initialized = false
		return
	end

	--Initialize
	if not data.initialized then
		--Initialize necessary data.
		data.initialized = true
	end

	--Depending on the NPC, these checks must be handled differently
	if v:mem(0x12C, FIELD_WORD) > 0    --Grabbed
	or v:mem(0x136, FIELD_BOOL)        --Thrown
	or v:mem(0x138, FIELD_WORD) > 0    --Contained within
	then
		--Handling
	hoprng = hoprng + 1
	if hoprng == 3 then
		hoprng = 1
	end
	
	local ST_Grounded = 0
	local ST_Air = 1
	
	v.data.state = 1
	
	if data.state == ST_Air then
		if v.collidesBlockBottom then
			v.speedX = 0
			v.animationFrame = 0
			data.state = ST_Grounded
		end
	elseif data.state == ST_Grounded then
		animationtimer = animationtimer + 1
		if animationtimer == 1000 then
			v.animationFrame = 1
			if hoprng == 1 then
				v.speedX = 2 * v.direction
				v.speedY = -6
				animationtimer = 0
				data.state = ST_Air
			end
			elseif hoprng == 2 then
				v.speedX = 6 * v.direction
				v.speedY = -2
				animationtimer = 0
				data.state = ST_Air
			end
		end
	end
Now taking graphics requests:
https://docs.google.com/forms/d/1urWpFq ... #responses

My graphics pack:
http://www.supermariobrosx.org/forums/v ... t=1960/url

Nothing is coming on Christmas. Why? Because I missed my past promises and should stop putting release dates on my stuff.

User avatar
Enjl
Cute Yoshi Egg
Cute Yoshi Egg
Posts: 7473
Joined: Mon Jan 20, 2014 12:58 pm
Flair: Orphion Egamalenitar Osmos IV, Esq.

Re: Need help with lua? - LunaLua General Help

Postby Enjl » Tue Sep 10, 2019 7:10 pm

Murphmario wrote:
Tue Sep 10, 2019 6:43 pm
onTick happens before SMBX sets animation frame, onTickEnd happens after. I used onTickEnd.
ImageImageImageImage
ImageImageImageImageImageImage

User avatar
Daring Tombstone
Rex
Rex
Posts: 88
Joined: Mon Aug 28, 2017 10:57 pm
Current Project: Nothing Anymore
Chat Username: Chaperone

Re: Need help with lua? - LunaLua General Help

Postby Daring Tombstone » Wed Sep 11, 2019 3:24 pm

I might be stupid but gonna ask anyways. I'm trying to play a SFX using lua. I've done this so many times but I'm having trouble somehow in the new PAL version.

Image

This shows up every time I try to play it and have no idea why. Never had this error before so don't know what it means. I should add that i'm attempting to play it through the lunaworld.lua and have the sound effect file in the episode folder instead of the level folder. Do I need to place the sound effect in every level folder or is there a way to play it in the episode folder?
Accurate representation of me after seeing the new SMBX version right after posting my new episode.
Image
Check out my completed episode
Spoiler: show
Image

User avatar
Enjl
Cute Yoshi Egg
Cute Yoshi Egg
Posts: 7473
Joined: Mon Jan 20, 2014 12:58 pm
Flair: Orphion Egamalenitar Osmos IV, Esq.

Re: Need help with lua? - LunaLua General Help

Postby Enjl » Wed Sep 11, 2019 3:36 pm

It means there is no file called "Uhhh.ogg" in the Beep Boop folder in the Test Level folder.
2 things (assuming PAL build):
1) SFX.play(Misc.resolveFile("Uhhh.ogg")) will search in the episode folder after searching in the level folder.
2) luna.lua in the episode folder is the new lunaworld.lua
ImageImageImageImage
ImageImageImageImageImageImage

User avatar
NoMoreStars
Cheep-Cheep
Cheep-Cheep
Posts: 15
Joined: Sat Jun 06, 2015 1:58 am
Flair: I'M A STONE LUIGI
Current Project: Wind Valley (Level)

Re: Need help with lua? - LunaLua General Help

Postby NoMoreStars » Fri Sep 13, 2019 5:02 pm

So i'm trying to implement a situation where something is triggered when a block is hit without using the old event system in order to gain more control. I wanted to try this with the Block:hit function as seen on the Block Class page on the wiki, but I noticed that it only simulates a block hit and returns a nil value. In order for my situation to work, I would need a boolean to be returned to continue on with the control structure. Instead I opted to try using the Block Memory offsets, specifically SMBX Block+0x04 which tracks how many times a block is hit according to the wiki. I don't think I quite have the syntax right though. I'm going off of Enjl's Luna Lua Tutorial 3 Episode where he implemented something similar with boss health by accessing the npc memory and I just copied the syntax he used there for what I'm trying to accomplish:

local hitCount = block:mem(0x04, FIELD_WORD)

I've also set it up so that if hitCount is greater than zero then a sound will play, which is how I know it isn't working properly.
I'm pretty sure I have the looping structure correct for the blocks I am trying to get the memory address for:
Spoiler: show
function onTick()
local offSwitchBlock = Block.get(283)
for k,v in ipairs(offSwitchBlock) do

local hitCount = block:mem(0x04, FIELD_WORD)
if hitCount > 0 then
Audio.playSFX(47)
end

end

end
Any idea what's going on? Is it the syntax of the memory offset like I thought?

User avatar
Enjl
Cute Yoshi Egg
Cute Yoshi Egg
Posts: 7473
Joined: Mon Jan 20, 2014 12:58 pm
Flair: Orphion Egamalenitar Osmos IV, Esq.

Re: Need help with lua? - LunaLua General Help

Postby Enjl » Fri Sep 13, 2019 5:12 pm

If you're on the PAL release, you can use onBlockHit instead:

function onBlockHit(eventObj, v, fromUpSide, playerOrNil)
if v.isValid and v.id == 283 then
SFX.play(47)
end
end

eventObj allows you to cancel the hit event, v is the block, fromUpSide is a boolean and playerOrNil is which player hit the block. They're not useful for this case, but useful to know about. Aplogies for the lack of documentation at the moment.
ImageImageImageImage
ImageImageImageImageImageImage

User avatar
MarioLover64
Fighter Fly
Fighter Fly
Posts: 75
Joined: Fri Apr 26, 2019 6:09 pm

Re: Need help with lua? - LunaLua General Help

Postby MarioLover64 » Fri Sep 13, 2019 7:50 pm

Would it be possible to change the bounce of the noteblock to for example be one block higher

User avatar
NoMoreStars
Cheep-Cheep
Cheep-Cheep
Posts: 15
Joined: Sat Jun 06, 2015 1:58 am
Flair: I'M A STONE LUIGI
Current Project: Wind Valley (Level)

Re: Need help with lua? - LunaLua General Help

Postby NoMoreStars » Fri Sep 13, 2019 7:53 pm

Enjl wrote:
Fri Sep 13, 2019 5:12 pm
If you're on the PAL release, you can use onBlockHit instead:

function onBlockHit(eventObj, v, fromUpSide, playerOrNil)
if v.isValid and v.id == 283 then
SFX.play(47)
end
end

eventObj allows you to cancel the hit event, v is the block, fromUpSide is a boolean and playerOrNil is which player hit the block. They're not useful for this case, but useful to know about. Aplogies for the lack of documentation at the moment.
Would I wanna put that within the loop (that itself is running in the onTick function) or would I wanna run this within it's own function and call on it from the loop? Either way it still doesn't seem to be working despite everything. I am running on the most recent version of the PAL release also. Thanks for the help btw and I understand documentation takes time. I appreciate all the work ya'll put in to make SMBX something really great.

User avatar
Enjl
Cute Yoshi Egg
Cute Yoshi Egg
Posts: 7473
Joined: Mon Jan 20, 2014 12:58 pm
Flair: Orphion Egamalenitar Osmos IV, Esq.

Re: Need help with lua? - LunaLua General Help

Postby Enjl » Fri Sep 13, 2019 8:10 pm

No. onBlockHit is a function like onTick or onNPCKill. yYou don't need to check for a block to be hit every frame, nor do you need to manually call it. I basically provided a replacement to the code you had.

If it's not working, please use Misc.dialog(debug message) to find out where the issue lies. A good first step is to print v.isValid before checking for it in onBlockHit.
ImageImageImageImage
ImageImageImageImageImageImage

User avatar
NoMoreStars
Cheep-Cheep
Cheep-Cheep
Posts: 15
Joined: Sat Jun 06, 2015 1:58 am
Flair: I'M A STONE LUIGI
Current Project: Wind Valley (Level)

Re: Need help with lua? - LunaLua General Help

Postby NoMoreStars » Sat Sep 14, 2019 1:41 am

Enjl wrote:
Fri Sep 13, 2019 8:10 pm
No. onBlockHit is a function like onTick or onNPCKill. yYou don't need to check for a block to be hit every frame, nor do you need to manually call it. I basically provided a replacement to the code you had.

If it's not working, please use Misc.dialog(debug message) to find out where the issue lies. A good first step is to print v.isValid before checking for it in onBlockHit.
Ah that makes a lot more sense. In that case I got it workin'! Thanks for all your help Enjl.

User avatar
Daring Tombstone
Rex
Rex
Posts: 88
Joined: Mon Aug 28, 2017 10:57 pm
Current Project: Nothing Anymore
Chat Username: Chaperone

Re: Need help with lua? - LunaLua General Help

Postby Daring Tombstone » Wed Sep 18, 2019 5:22 pm

Is there a page somewhere where I can look up these types of memory values?

mem(0x00B2C8B4, FIELD_WORD, -1)

I looked but must have overlooked it somewhere. (Btw thanks on help so far, forgot misc.resolvefile existed.)
Accurate representation of me after seeing the new SMBX version right after posting my new episode.
Image
Check out my completed episode
Spoiler: show
Image

User avatar
Enjl
Cute Yoshi Egg
Cute Yoshi Egg
Posts: 7473
Joined: Mon Jan 20, 2014 12:58 pm
Flair: Orphion Egamalenitar Osmos IV, Esq.

Re: Need help with lua? - LunaLua General Help

Postby Enjl » Wed Sep 18, 2019 6:04 pm

Daring Tombstone wrote:
Wed Sep 18, 2019 5:22 pm
Is there a page somewhere where I can look up these types of memory values?

mem(0x00B2C8B4, FIELD_WORD, -1)

I looked but must have overlooked it somewhere. (Btw thanks on help so far, forgot misc.resolvefile existed.)
https://wohlsoft.ru/pgewiki/SMBX_Global_Memory
ImageImageImageImage
ImageImageImageImageImageImage


Return to “LunaLua Help”

Who is online

Users browsing this forum: No registered users and 11 guests