Page 39 of 47
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Tue Feb 16, 2016 9:15 am
by Kevsoft
You define it where you write it.
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Tue Feb 16, 2016 11:15 pm
by Nat The Porcupine
Are there any other LunaLua 0.7.3 BETA users experiencing this issue with the SMB3 Overhaul API?
Before anybody asks, I checked, and there are no missing graphics. I also used the example level to test this whole thing out, so this being the result of improper setup is impossible. I've also tested both the version included with LunaLua 0.7.3 as well as the latest version from the actual forum post; the result is the same. Even a fresh reinstall of the LunaLua did not solve the issue. However, I did NOT test this in older versions of LunaLua.
What's really weird is that P-meter and Clock icon still render. In the case of the P-meter, only the red arrows and red letter "P" ever render. Furthermore, the red P-meter arrows bleed into the screen, so it still looks like it's full even after I've been standing still for awhile. I hope this is just a quick fix and not something that requires a fresh rewrite of the code...
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Wed Feb 17, 2016 1:31 am
by lotus006
@Nat The Porcupine
Yup I'm getting the same result I was thinking my self maybe it was because I fucked up the files when editing other lua
but apparently you got the same things.
try minimal Overhaul api you have the setup of the SMB Advance 4 but you dont have the blue hud rectangle just minimal stuff of the look
of SMB3 and it work fine. (probably something can conflict with his old code like place sprite something)
But I was recreating from strach few hud from alot of game with an menu hud who you can control want you want to toggle parts.
I have so far the SMB Advance 4 done SMB2 and a Mix of Zelda2 and Zelda 3 , but not sure when I will release it.
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Wed Feb 17, 2016 6:28 am
by Nat The Porcupine
@lotus006
Well, it's good to know I'm not the only one. Just thought it was weird that the api was included in the Beta in its current state. If this ends up working in older versions LunaLua, then it may actually be something wrong with the LunaLua Beta itself. I kind of believe that may be the root cause, but I don't know for sure.
EDIT: I just tested this in LunaLua 0.7.0.3 and it worked without issue. It looks like the Beta may be the root cause of the issue after all.
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Wed Feb 17, 2016 11:12 am
by Ness-Wednesday
Am I able to do the following things with peach?
Change Peach's attack via Tanooki suit to a projectile based attack and maker active in statue form?
And change her bomb attack to Link's sword attack?
I also wonder if I am able to make Peach spinjump without anyone else triggering her to do so?
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Wed Feb 17, 2016 11:40 am
by Emral
Yes, yes, yes. All you need for these are the player and npc class, and their offset pages on the wiki.
I'm assuming Peach's spinjump would work like the one Rednaxela made for Link.
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Fri Feb 19, 2016 1:19 am
by lotus006
I got a question about table , is there a way to get the last key in the table (i mean not the highest value the last value)
in example:
Code: Select all
stuff= {
1 = cat,
5 = dog,
3 = red,
4 = green }
I need to get
4 in the result
thanks
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Fri Feb 19, 2016 1:33 am
by underFlo
Pretty sure that table's aren't saved in the order you create them and instead order them when they store them. Only idea would be to put {5, dog} where dog is and the key to 2 etc. so the keys you used are now just elemente of the inner table. That way, the keys to the elements can be ordered normally, and you'd access the last key with
I don't know what you're planning to do here, but of you wanna use a table to execute code for multiple elements, I'd really recommend for the keys to be in order. So that way, your table would be
Code: Select all
stuff= {
{1, cat},
{5, dog},
{3, red},
{4, green}}
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Fri Feb 19, 2016 1:50 am
by lotus006
Spinda wrote:Pretty sure that table's aren't saved in the order you create them and instead order them when they store them. Only idea would be to put {5, dog} where dog is and the key to 2 etc. so the keys you used are now just elemente of the inner table. That way, the keys to the elements can be ordered normally, and you'd access the last key with
I don't know what you're planning to do here, but of you wanna use a table to execute code for multiple elements, I'd really recommend for the keys to be in order. So that way, your table would be
Code: Select all
stuff= {
{1, cat},
{5, dog},
{3, red},
{4, green}}
oh thanks, dont worry I wont use this table its just to be in an example to make understand I wont want the value 5.
it's just because I wanna want to display stuff with Text.print like this
just to see how much block I'm trying to detect when I'm colliding it.
in that example under, this code will be ok ?
Code: Select all
Text.print( tonumber(stuff[#stuff][1]) , 10 , 100 )
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Sat Feb 20, 2016 11:46 am
by PixelPest
Having a bit of an issue here with my bomb boo AI:
Code: Select all
local bombboo = {}
function bombboo.onInitAPI()
registerEvent(bombboo, "onLoop", "onLoop", false)
end
function bombboo.onLoop()
tableOfBombBoos = NPC.get(43, -1);
end
function onKeyDown(keycode)
if (keycode == KEY_RUN) then
for _,v in pairs(NPC.get(43,player.section)) do
if NPC.getIntersecting(player.x,player.y,player.x + player.width,player.y + player.height) > 0 then
tableOfBombBoos[table.getn(tableOfBombBoos)].id = 137;
end
end
end
end
return bombboo
It doesn't do anything when I grab npc-43 (boo with grabside = 1), when it should transform into npc-137. Any ideas?
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Sat Feb 20, 2016 12:14 pm
by underFlo
You'd need to do v.id
What you're doing is transforming the last bomb boo into npc-137.
Also, why do you define tableOfBombBoos?
Also, you haven't registered the event "onKeyDown"
Also, you should just do the NPC.getIntersecting for loop, since there's no point in doing it twice.
Just do
Code: Select all
for _, v in pairs(NPC.getIntersecting(what you put there)) do
if v.id == 43 then
v.id = 137
break
end
end
(The break is so only one bomb boo gets transformed)
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Sat Feb 20, 2016 12:52 pm
by PixelPest
Thanks Spinda.
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Sat Feb 20, 2016 4:58 pm
by PixelPest
I found kind of an issue in Lua, when doing anything like this:
Code: Select all
function onLoop()
for _,v in pairs(NPC.get(229,player.section)) do
if #Block.getIntersecting(v.x,v.y,v.x + v.width,v.y + v.height) > 0 then
v:kill(9)
end
end
end
If you have something happening too an NPC, block, etc., it is also affected by hidden objects. For example, in this code, when NPC 229 collides with a block, you kill the NPC without any effects. If you had an invisible layer, this would still be considered a collision and the NPC would randomly disappear.
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Sat Feb 20, 2016 5:04 pm
by Emral
You can check for Layer.isHidden to circumvent this.
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Sat Feb 20, 2016 5:05 pm
by PixelPest
Enjl wrote:You can check for Layer.isHidden to circumvent this.
Thanks. Good to know.
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Sun Feb 21, 2016 2:36 am
by lotus006
I have just two small questions :
1. is there a way to get the images (icons) and show them with Graphics.drawImageWP from the editor but in game about the items, blocks, npcs, etc... ?
2. is it possible to have a picture and made it hide with transparency layer image ? (like clipping picture) with png ?
Thanks
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Tue Feb 23, 2016 6:48 am
by Quantumenace
Experimental NPC reference system. SMBX shuffles NPC addresses around between loops sometimes, which can cause incorrect references if you try to keep track of a specific NPC.
This assigns a unique key to the NPC using otherwise unused memory bytes. It would require referencing and destroying 4 billion NPCs for it to run out of keys. If the memory address is moved, the system will try to find the correct NPC and update the pointer.
Are there any obvious flaws? Also, if this is used in LoadSharedAPI, will everything still use the same nextkey variable correctly?
Code: Select all
--NPC reference system can be used to store references to a specific NPC over multiple loops
--Uses normally unused offsets. For this to work, do not alter these memory offsets:
--0x64-65, generator type flag (don't change the NPC to/from a generator)
--0x6C-6F in non-generators (generator delay)
--0xE8-EB in generators (animation timer)
--NPCref takes the NPC pointer and returns a table containing a the pointer and a unique key
--NPCfromref takes the table and returns the NPC pointer
--If the NPC address is moved by SMBX between loops,
--the key will mismatch and the system will attempt to find the correct NPC
--NPCfromref will return nil if the NPC no longer exists. Ensure your code accounts for this.
local NPCrefsystem = {}
local nextkey = 1
function NPCref(NPCpointer)
local key = 0
local ref = {}
if NPCpointer:mem(0x64,FIELD_WORD) == 0 then
key = NPCpointer:mem(0x6C,FIELD_DWORD)
else
key = NPCpointer:mem(0xE8,FIELD_DWORD)
end
if key == 0 then
key = nextkey
if NPCpointer:mem(0x64,FIELD_WORD) == 0 then
NPCpointer:mem(0x6C,FIELD_DWORD,key)
else
NPCpointer:mem(0xE8,FIELD_DWORD,key)
end
nextkey = nextkey + 1
if nextkey == 2147483648 then nextkey = -2147483648 end
if nextkey == 0 then nextkey = 1 end
end
ref.pointer = NPCpointer; ref.key = key
return ref
end
function NPCfromref(ref)
local key = ref.key
local k
local n = ref.pointer
if key == nil then return nil end
if n ~= nil and not n.isValid then n = nil end
if n ~= nil then
if n:mem(0x64,FIELD_WORD) == 0 then
k = n:mem(0x6C,FIELD_DWORD)
else
k = n:mem(0xE8,FIELD_DWORD)
end
end
if n == nil or k ~= key then
for _,v in pairs(NPC.get(-1,-1)) do
if v:mem(0x64,FIELD_WORD) == 0 then
k = v:mem(0x6C,FIELD_DWORD)
else
k = v:mem(0xE8,FIELD_DWORD)
end
if k == key then n = v; ref.pointer = v; break end
end
end
if k == key then return n
else ref.pointer = nil; ref.key = nil; return nil
end
end
return NPCrefsystem
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Tue Feb 23, 2016 6:57 am
by Emral
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Tue Feb 23, 2016 8:25 am
by Quantumenace
Okay, now I'm embarrassed.
Edit: Is there a simple way to detect if a simulated NPC would be hit and take damage from NPCs or explosions intersecting a collider area? I'm trying to make something that's a rotatable 64x32 rectangle, and my current method of using 3 dummy rippers appears to work well, but is there a better way?
Re: LunaLua Offical Thread - SMBX Usermod Framework
Posted: Fri Feb 26, 2016 6:09 pm
by PixelPest
Code: Select all
local leveltimer = loadSharedAPI("leveltimer")
function onStart()
leveltimer.setSecondsLeft(200);
leveltimer.setTimerState(true);
end
function onLoop()
local seconds = leveltimer.getSecondsLeft()
if timetrialsactive == true then
if gold11 == true then
Graphics.drawImageWP(gold, 0, 0, 5)
end
if gold11 ~= true then
if sliver11 == true then
Graphics.drawImageWP(silver, 0, 0, 5)
end
if silver11 ~= true then
if bronze11 == true then
Graphics.drawImageWP(bronze, 0, 0, 5)
end
end
end
end
end
function onEvent(calledEvent)
if calledEvent == "Collected" then
if seconds == 175 then
if gold11active == true then
gold11 = true
gold11active = false
silver11active = false
bronze11active = false
Graphics.drawImageWP(gold, 0, 0, 5)
end
end
if seconds == 165 then
if silver11active == true then
silver11 = true
silver11active = false
bronze11active = false
Graphics.drawImageWP(silver, 0, 0, 5)
end
end
if seconds == 155 then
if bronze11active == true then
bronze11 = true
bronze11active = false
Graphics.drawImageWP(bronze, 0, 0, 5)
end
end
end
end
Where do I draw these images such that they appear in the top left hand corner of the screen when their criterias are met? Right now they just don't show up. (Don't worry, I already have variables defined in my lunaworld.lua for everything needed.)