Is it possible to increase the speed of the airship cockpit NPC? I've finally got it working how I want it to, but it's a tad too slow for my liking.
Thanks
EDIT: Also, does scrolling other layers/autoscrolling the level not function properly when you're using the airship cockpit? Either they won't scroll at all or they'll glitch out and cause me to die.
Re: SMBX Help Thread
Posted: 01 Jun 2013, 17:24
by Markus_E-bear
Hey guys, doing my first level for this hack. It is pretty much ready to be uploaded and tested, but I made custom graphics for it. How do I include those with the level so that they are a part of it?
Thanks!
Re: SMBX Help Thread
Posted: 01 Jun 2013, 17:54
by Cjn14
Markus_E-bear wrote:Hey guys, doing my first level for this hack. It is pretty much ready to be uploaded and tested, but I made custom graphics for it. How do I include those with the level so that they are a part of it?
Wherever the .lvl file for your level is, put a folder there that has the same name as your level. Find the names of the graphics you want to replace in the "graphics" folder and then rename your custom graphics so that they have that same name/file type. Then, put the renamed custom graphics into the new folder you made for your level.
Then, if you turn your level into a .rar archive and send it, make sure you include that folder in the archive, otherwise the graphics won't show up when you send the level to others. This is the same thing you need to do for custom music.
Hope that helps! Post a reply if that didn't answer all of your questions!
Re: SMBX Help Thread
Posted: 01 Jun 2013, 18:00
by Markus_E-bear
Cjn14 wrote:
Markus_E-bear wrote:Hey guys, doing my first level for this hack. It is pretty much ready to be uploaded and tested, but I made custom graphics for it. How do I include those with the level so that they are a part of it?
Wherever the .lvl file for your level is, put a folder there that has the same name as your level. Find the names of the graphics you want to replace in the "graphics" folder and then rename your custom graphics so that they have that same name/file type. Then, put the renamed custom graphics into the new folder you made for your level.
Then, if you turn your level into a .rar archive and send it, make sure you include that folder in the archive, otherwise the graphics won't show up when you send the level to others. This is the same thing you need to do for custom music.
Hope that helps! Post a reply if that didn't answer all of your questions!
Nope, you answered everything, thanks!
Re: SMBX Help Thread
Posted: 10 Nov 2013, 02:39
by SAJewers
Docopoper:
you suggested for the Final Boss to lower the # of hits Science takes. Could you look into doing that? I can't seem to make it work.
Darkychao/Demolition:
I know you guys had this idea of Super Leeks or something. Are Appearing only in Cutscenes, or will they be in End of World Bosses as well?
Re: SMBX Help Thread
Posted: 10 Nov 2013, 03:35
by darkychao
SAJewers wrote:Darkychao/Demolition:
I know you guys had this idea of Super Leeks or something. Are Appearing only in Cutscenes, or will they be in End of World Bosses as well?
It really depends if people mind if we edit their levels to include them
Re: SMBX Help Thread
Posted: 10 Nov 2013, 03:40
by SAJewers
I personally see no problem with that at all.
Re: SMBX Help Thread
Posted: 25 Nov 2013, 12:47
by SAJewers
Again: requesting help from Docopoper or Kil on setting the # of Boss hits for the Final Level/Boss.
Re: SMBX Help Thread
Posted: 25 Nov 2013, 18:14
by Septentrion Pleiades
SAJewers wrote:Again: requesting help from Docopoper or Kil on setting the # of Boss hits for the Final Level/Boss.
I was actually worry that someone might be able to defeat him before the sequence of attacks was over.
Re: SMBX Help Thread
Posted: 25 Nov 2013, 18:39
by SAJewers
Septentrion Pleiades wrote:
SAJewers wrote:Again: requesting help from Docopoper or Kil on setting the # of Boss hits for the Final Level/Boss.
I was actually worry that someone might be able to defeat him before the sequence of attacks was over.
Docopoper suggested some time ago (after the Boss was Finalized) that the # of hits needed should be lowered.
Re: SMBX Help Thread
Posted: 25 Nov 2013, 20:07
by Septentrion Pleiades
SAJewers wrote:
Docopoper suggested some time ago (after the Boss was Finalized) that the # of hits needed should be lowered.
He still should remain difficult, especially since now we risk breaking him if he takes too few hits.
Re: SMBX Help Thread
Posted: 25 Nov 2013, 20:22
by docopoper
SAJewers wrote:Again: requesting help from Docopoper or Kil on setting the # of Boss hits for the Final Level/Boss.
Oh, right. xD Ok, I'll do that tonight.
Though one unrelated thing I'd like to mention:
I added the character's names th the special thanks section of the credits. But I called Iris Green Demo - can that please be a thing we do in the credits throughout the series? I think it would be hilarious.
I also added Uncle Broadsword to the list.
Re: SMBX Help Thread
Posted: 25 Nov 2013, 20:28
by Sturg
If we're on the topic of additional credits, I added Rena.
Re: SMBX Help Thread
Posted: 29 Nov 2013, 09:59
by Willhart
In lunadll, Is it possible to play a custom SFX if you give it a specific id?
I'd like to play a longish track on top of the music without interrupting it.
Re: SMBX Help Thread
Posted: 29 Nov 2013, 12:11
by Kil
Not now, but it'll be ready for the next game.
Re: SMBX Help Thread
Posted: 29 Nov 2013, 14:43
by docopoper
That with the ability to display arbitrary sprites will be cool. I'll be able to make an entirely separate game in the engine.
Are sprite transformations and direct vertex drawing out of the question? xD
Re: SMBX Help Thread
Posted: 29 Nov 2013, 14:58
by SAJewers
I think It'd be kinda cool to have a puzzle level where you use LunaDLL to have layers you have to move around to progress.
Re: SMBX Help Thread
Posted: 29 Nov 2013, 15:05
by docopoper
Or make an entirely new platformer with different physics.
Re: SMBX Help Thread
Posted: 01 Dec 2013, 14:27
by Willhart
Is there a way to make blocks that stop the player movement from only one side?
Re: SMBX Help Thread
Posted: 01 Dec 2013, 15:04
by docopoper
I think I'd be able to do that with LunaDLL. It might feel different to other collisions though - since I would I would more be holding the player's coordinates to that side of the block when colliding. So anything like collisions with walls stopping the player from running wouldn't happen.
Re: SMBX Help Thread
Posted: 01 Dec 2013, 16:05
by Willhart
docopoper wrote:I think I'd be able to do that with LunaDLL. It might feel different to other collisions though - since I would I would more be holding the player's coordinates to that side of the block when colliding. So anything like collisions with walls stopping the player from running wouldn't happen.
I had an idea of making a Bubble Bobble level. It would be neat to have the special wall collision mechanics of that game included. I tired to make one-way walls with npc codes and resized slopes but those didn't really work.
I have not made anything yet, so this isn't too important right now.
Re: SMBX Help Thread
Posted: 01 Dec 2013, 18:16
by Kil
I'm looking for new commands to add. That might be doable with scripts if I add PlayerMemSet which you could use to cancel out collision by triggering it with BlockTrigger, maybe.
Also if anyone cares about the structure of events, here it is.
//*** SMBXEvents.h - Definition of known event structure ***
#pragma once
#include "Defines.h"
#include "Globals.h"
// - SMBX Event Struct. size = 0x ( bytes)
//
//+0x00 w = No Smoke (0xFFFF == no smoke, 0 == smoke)
//+0x02 w = Sound effect ID to play
//+0x04 dw = ptr to event name
//+0x08 dw = ptr to text message
//+0x0C dw = ptr to Hide Layer target 1
//+0x10 dw = ptr to Hide Layer target 2
//+0x14 dw = ptr to Hide Layer target 3
//+0x18 dw = ptr to Hide Layer target 4
//+0x1C dw = ptr to Hide Layer target 5
//+0x20 dw = ptr to Hide Layer target 6
//+0x24 dw = ptr to Hide Layer target 7
//+0x28 dw = ptr to Hide Layer target 8
//+0x2C dw = ptr to Hide Layer target 9
//+0x30 dw = ptr to Hide Layer target 10
//+0x34 dw = ptr to Hide Layer target 11
//+0x38 dw = ptr to Hide Layer target 12
//+0x3C dw = ptr to Hide Layer target 13
//+0x40 dw = ptr to Hide Layer target 14
//+0x44 dw = ptr to Hide Layer target 15
//+0x48 dw = ptr to Hide Layer target 16
//+0x4C dw = ptr to Hide Layer target 17
//+0x50 dw = ptr to Hide Layer target 18
//+0x54 dw = ptr to Hide Layer target 19
//+0x58 dw = ptr to Hide Layer target 20
//+0x5C dw = ptr to Hide Layer target 21
//+0x60 dw = ptr to Show Layer target 1
//+0x64 dw = ptr to Show Layer target 2
//+0x68 dw = ptr to Show Layer target 3
//+0x6C dw = ptr to Show Layer target 4
//+0x70 dw = ptr to Show Layer target 5
//+0x74 dw = ptr to Show Layer target 6
//+0x78 dw = ptr to Show Layer target 7
//+0x7C dw = ptr to Show Layer target 8
//+0x80 dw = ptr to Show Layer target 9
//+0x84 dw = ptr to Show Layer target 10
//+0x88 dw = ptr to Show Layer target 11
//+0x8C dw = ptr to Show Layer target 12
//+0x90 dw = ptr to Show Layer target 13
//+0x94 dw = ptr to Show Layer target 14
//+0x98 dw = ptr to Show Layer target 15
//+0x9C dw = ptr to Show Layer target 16
//+0xA0 dw = ptr to Show Layer target 17
//+0xA4 dw = ptr to Show Layer target 18
//+0xA8 dw = ptr to Show Layer target 19
//+0xAC dw = ptr to Show Layer target 20
//+0xB0 dw = ptr to Show Layer target 21
//+0xB4 dw = ptr to Toggle Layer target 1
//+0xB8 dw = ptr to Toggle Layer target 2
//+0xBC dw = ptr to Toggle Layer target 3
//+0xC0 dw = ptr to Toggle Layer target 4
//+0xC4 dw = ptr to Toggle Layer target 5
//+0xC8 dw = ptr to Toggle Layer target 6
//+0xCC dw = ptr to Toggle Layer target 7
//+0xD0 dw = ptr to Toggle Layer target 8
//+0xD4 dw = ptr to Toggle Layer target 9
//+0xD8 dw = ptr to Toggle Layer target 10
//+0xDC dw = ptr to Toggle Layer target 11
//+0xE0 dw = ptr to Toggle Layer target 12
//+0xE4 dw = ptr to Toggle Layer target 13
//+0xE8 dw = ptr to Toggle Layer target 14
//+0xEC dw = ptr to Toggle Layer target 15
//+0xF0 dw = ptr to Toggle Layer target 16
//+0xF4 dw = ptr to Toggle Layer target 17
//+0xF8 dw = ptr to Toggle Layer target 18
//+0xFC dw = ptr to Toggle Layer target 19
//+0x100 dw = ptr to Toggle Layer target 20
//+0x104 dw = ptr to Toggle Layer target 21
//+0x108~ w = Music index to change to per section (FFFF == dont change, FFFE = default)
//+0x132~ w = Background to change to per section (FFFF = dont change, FFFE = default)
//+0x15C dw =
//+0x160~ f = Position settings
//+0x54C dw = End Game (1 == bowser defeat, 0 = none)
//+0x550 dw = Ptr to name of event to trigger
//+0x558 f = Delay
//+0x55C w = Up (0xFFFF = checked)
//+0x55E w = Down
//+0x560 w = Left
//+0x562 w = Right
//+0x564 w = Jump
//+0x566 w = Alt jump
//+0x578 w = Run
//+0x57A w = Alt run
//+0x57C w = Drop
//+0x57E w = Start
//+0x580 dw = Ptr to name of Layer Movement layer
//+0x584 f = Horizontal layer speed
//+0x588 f = Vertical layer speed
//+0x58C f = Horizontal autoscroll
//+0x590 f = Vertical autoscroll
//+0x594 w = Autoscroll section
//+0x598 w = Auto start
struct SMBXEvent {
short NoSmoke; //(0xFFFF == no smoke, 0 == smoke)
short SoundID;
wchar_t* pName;
wchar_t* pTextMsg;
wchar_t* pHideLayerTarg1;
wchar_t* pHideLayerTarg2;
wchar_t* pHideLayerTarg3;
wchar_t* pHideLayerTarg4;
wchar_t* pHideLayerTarg5;
wchar_t* pHideLayerTarg6;
wchar_t* pHideLayerTarg7;
wchar_t* pHideLayerTarg8;
wchar_t* pHideLayerTarg9;
wchar_t* pHideLayerTarg10;
wchar_t* pHideLayerTarg11;
wchar_t* pHideLayerTarg12;
wchar_t* pHideLayerTarg13;
wchar_t* pHideLayerTarg14;
wchar_t* pHideLayerTarg15;
wchar_t* pHideLayerTarg16;
wchar_t* pHideLayerTarg17;
wchar_t* pHideLayerTarg18;
wchar_t* pHideLayerTarg19;
wchar_t* pHideLayerTarg20;
wchar_t* pHideLayerTarg21;
wchar_t* pShowLayerTarg1;
wchar_t* pShowLayerTarg2;
wchar_t* pShowLayerTarg3;
wchar_t* pShowLayerTarg4;
wchar_t* pShowLayerTarg5;
wchar_t* pShowLayerTarg6;
wchar_t* pShowLayerTarg7;
wchar_t* pShowLayerTarg8;
wchar_t* pShowLayerTarg9;
wchar_t* pShowLayerTarg10;
wchar_t* pShowLayerTarg11;
wchar_t* pShowLayerTarg12;
wchar_t* pShowLayerTarg13;
wchar_t* pShowLayerTarg14;
wchar_t* pShowLayerTarg15;
wchar_t* pShowLayerTarg16;
wchar_t* pShowLayerTarg17;
wchar_t* pShowLayerTarg18;
wchar_t* pShowLayerTarg19;
wchar_t* pShowLayerTarg20;
wchar_t* pShowLayerTarg21;
wchar_t* pToggleLayerTarg1;
wchar_t* pToggleLayerTarg2;
wchar_t* pToggleLayerTarg3;
wchar_t* pToggleLayerTarg4;
wchar_t* pToggleLayerTarg5;
wchar_t* pToggleLayerTarg6;
wchar_t* pToggleLayerTarg7;
wchar_t* pToggleLayerTarg8;
wchar_t* pToggleLayerTarg9;
wchar_t* pToggleLayerTarg10;
wchar_t* pToggleLayerTarg11;
wchar_t* pToggleLayerTarg12;
wchar_t* pToggleLayerTarg13;
wchar_t* pToggleLayerTarg14;
wchar_t* pToggleLayerTarg15;
wchar_t* pToggleLayerTarg16;
wchar_t* pToggleLayerTarg17;
wchar_t* pToggleLayerTarg18;
wchar_t* pToggleLayerTarg19;
wchar_t* pToggleLayerTarg20;
wchar_t* pToggleLayerTarg21;
short Section1MusicID; //(FFFF == don't change)
short Section2MusicID; //(FFFF == don't change)
short Section3MusicID; //(FFFF == don't change)
short Section4MusicID; //(FFFF == don't change)
short Section5MusicID; //(FFFF == don't change)
short Section6MusicID; //(FFFF == don't change)
short Section7MusicID; //(FFFF == don't change)
short Section8MusicID; //(FFFF == don't change)
short Section9MusicID; //(FFFF == don't change)
short Section10MusicID; //(FFFF == don't change)
short Section11MusicID; //(FFFF == don't change)
short Section12MusicID; //(FFFF == don't change)
short Section13MusicID; //(FFFF == don't change)
short Section14MusicID; //(FFFF == don't change)
short Section15MusicID; //(FFFF == don't change)
short Section16MusicID; //(FFFF == don't change)
short Section17MusicID; //(FFFF == don't change)
short Section18MusicID; //(FFFF == don't change)
short Section19MusicID; //(FFFF == don't change)
short Section20MusicID; //(FFFF == don't change)
short Section21MusicID; //(FFFF == don't change)
short Section1BackgroundID; //(FFFF == don't change)
short Section2BackgroundID; //(FFFF == don't change)
short Section3BackgroundID; //(FFFF == don't change)
short Section4BackgroundID; //(FFFF == don't change)
short Section5BackgroundID; //(FFFF == don't change)
short Section6BackgroundID; //(FFFF == don't change)
short Section7BackgroundID; //(FFFF == don't change)
short Section8BackgroundID; //(FFFF == don't change)
short Section9BackgroundID; //(FFFF == don't change)
short Section10BackgroundID; //(FFFF == don't change)
short Section11BackgroundID; //(FFFF == don't change)
short Section12BackgroundID; //(FFFF == don't change)
short Section13BackgroundID; //(FFFF == don't change)
short Section14BackgroundID; //(FFFF == don't change)
short Section15BackgroundID; //(FFFF == don't change)
short Section16BackgroundID; //(FFFF == don't change)
short Section17BackgroundID; //(FFFF == don't change)
short Section18BackgroundID; //(FFFF == don't change)
short Section19BackgroundID; //(FFFF == don't change)
short Section20BackgroundID; //(FFFF == don't change)
short Section21BackgroundID; //(FFFF == don't change)
int Unknown15C;
float PositionSettings[251];
int EndGame; //(1 == bowser defeat, 0 = none)
wchar_t* EventToTrigger;
float Delay;
short ForceUp; //(0xFFFF = checked)
short ForceDown; //(0xFFFF = checked)
short ForceLeft; //(0xFFFF = checked)
short ForceRight; //(0xFFFF = checked)
short ForceJump; //(0xFFFF = checked)
short ForceAltJump; //(0xFFFF = checked)
short ForceRun; //(0xFFFF = checked)
short ForceAltRun; //(0xFFFF = checked)
short ForceDrop; //(0xFFFF = checked)
short ForceStart; //(0xFFFF = checked)
wchar_t* LayerToMoveName;
float LayerHSpeed;
float LayerVSpeed;
float AutoscrollHSpeed;
float AutoscrollVSpeed;
short AutoscrollSectionNum;
short AutoStart; //(0xFFFF = checked)
};
namespace SMBXEvents {
SMBXEvent* Get(int index);
SMBXEvent* GetByName(std::wstring Name);
short Count();
};
inline short SMBXEvents::Count() { return GM_EVENT_COUNT; }
In hindsight, I'm not sure what use that's going to be.
Re: SMBX Help Thread
Posted: 01 Dec 2013, 22:50
by docopoper
No, that's actually very useful since it allows things like displaying message boxes from LunaDLL.
It also allows you to do something really cool:
Scan the message field so that if the level designer types something like "LunaDLL: " + one of the commands you are able to trigger using the text file. That command will be run when the event triggers and no message will be displayed.
I also propose that if a SMB1 axe is set to friendly - it should act as a trigger zone (using the sprite's normal bounding box) that triggers its death event whenever the player touches it, and the talk event for every frame the player is touching it (assuming it has those respective events assigned) - since neither of those events ever seem to be triggered when the axe is friendly and has no message attached. If the axe does have a message attached - you should probably ignore it and not use it as a trigger zone.
Anyway, those are two things I thought of doing when you first came out with the DLL. You just didn't have any way of triggering or reading events. (I still don't know if you can trigger them yet - but you should make that possible if you can)
Re: SMBX Help Thread
Posted: 02 Dec 2013, 17:54
by Kil
Well I figured out how to trigger smbxevents. That'll be in the next version.
There's now the ability to make your own custom level cheats as event triggers in lunadll.txt, so I'm adding some globals in the base dll for management and convenience with certain things
deletesystem32 - Fully clears all demo counter records
toggledemocounter - Toggle the demo counter display on/off
thouartdamned - Fully toggle all lunadll features on/off
Re: SMBX Help Thread
Posted: 03 Dec 2013, 01:28
by Mabel
Is there a way to make an event trigger multiple layers?
and
Is there a way to make an event trigger multiple events?
if not i guess ill just wait on that thing Kil is doing which is basically my answer o3o.