Page 21 of 32

Re: SMBX Help Thread

Posted: 01 Jun 2013, 16:57
by S.N.N.
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. :P

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.

Code: Select all

//*** 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.