Points of Required Attention™
Please chime in on a proposed restructuring of the ROM hacking sections.
Views: 88,498,095
Main | FAQ | Uploader | IRC chat | Radio | Memberlist | Active users | Latest posts | Calendar | Stats | Online users | Search 04-28-24 11:09 PM
Guest: Register | Login

0 users currently in Super Mario RPG Hacking | 2 guests

Main - Super Mario RPG Hacking - Questions about lazy shell editor New thread | New reply


digikid195
Posted on 12-29-11 11:50 PM Link | Quote | ID: 148953


Micro-Goomba
Level: 11

Posts: 13/18
EXP: 5228
Next: 757

Since: 06-29-11

Last post: 4497 days
Last view: 4391 days
Hi everyone. I have a few (well rather alot) questions about the Lazy Shell editor and how to use it. First and this is the biggest problem I have is understanding how to the scripts work. I have no idea how to build a correct script of anything weather it be a battle script, action script or event script. I just don't understand how to works. If I could understand how that works I would be able to tackle the rest of the editor.

My next question is: after the beginning scene were bowser captures peach and take her to his castle how can I write a script to make Mario appear at a different location then in the first room of bowsers keep?

My final question (for now at least) is: How can I make it where I can do previews of the my work in the first room of bowsers keep. (where Mario first appears at) because when i make lets say a battle in that room, when i go to preview the rom there is no location for Mario so when I click preview and it bring the emulator up its just a black screen with that music playing. Thank you for anyone and anyone that can answer my questions. It is much appreciated

AnAxemRanger
Posted on 12-30-11 06:14 AM Link | Quote | ID: 148958


Snifit
Level: 37

Posts: 146/279
EXP: 337913
Next: 340

Since: 12-06-09

Last post: 2865 days
Last view: 109 days
I'm sure there are others who could explain stuff a lot better than I could, but I'll give it a shot.

Posted by digikid195
Hi everyone. I have a few (well rather alot) questions about the Lazy Shell editor and how to use it. First and this is the biggest problem I have is understanding how to the scripts work. I have no idea how to build a correct script of anything weather it be a battle script, action script or event script. I just don't understand how to works. If I could understand how that works I would be able to tackle the rest of the editor.


Incoming long post:

The easiest way to learn how it works would be to look at the original game's event scripts and compare them to what you know they do. For example, Take that event at the beginning of the game in the 2nd room of Bowser's keep. The event where when you stand in a certain spot, Mario stops moving, the two Terrapin guards take notice of him, move forward, swing their fists, and then a battle begins. Remember that event and keep it in mind. Then go into Lazy Shell, and open up the "Levels" tab. Then go to that particular room using the search feature. (simply input "Bowser's Keep 1st time" or something similar and you should see a few options. Choose the second room since it's the one we're using as an example.) Look at the "event fields" of that particular room and look at the events listed. There is only one event to choose from, so that makes things simple. Click on this event and it should automatically be opened up in the main "events" tab of Lazy Shell. It is event #2497. While we read through the event, keep this "level" open.

Now let's break down this event and walkthrough it step by step.

First off you'll see "if set, mem... jump to $whatever "
and "set mem..."

An important thing to know is that events don't just disappear when they're run through.
The first command checks to see if a certain bit of memory has been sit. If that bit is set, then jump to the command located at that particular offset. In this case, it would jump to the "return" command which signifies the end of an event and goes back to the game.
Generally, bits of memory only get set if an event script tells them to.
The very next command sets the particular memory bit that the first command looks for. What this does is makes sure this event doesn't happen again. The first time you touch this event and activate it, the memory bit command 1 looks for isn't set, so it goes through the entire script. The second time and beyond, the memory bit is set, therefore it skips to the "return" command which ends the script. This way, you don't end up fighting an endless army of terrapins over and over again.

"Freeze all objects until return" does exactly what it says. It freezes all other NPCs not involved in this event until the event reaches the "return" command. This way, you won't have other Terrapins walking into you during this event.

Next we see, "Obj: NPC #0, length: 32 bytes, sync = true"

Again, let's break it down.
This means that the commands which follow it (until the commands stop being indented) all pertain to NPC #0. To see what NPC #0 actually is, once again go back to the "levels." In this particular level, NPC #0 is a Terrapin. So all these commands will make this terrapin do stuff.
The "length: 32 bytes" just says how many bytes worth of commands you have that pertain to NPC #0. Nothing to worry about right now.
"sync = true" means that this list of commands will be happening at the same time as other commands with a "sync = true" command. If we look further down, we'll see that there is a similar command line to this one, but for NPC #2 instead of #0. NPC#2 is also a terrapin, so event will have two Terrapins doing the same thing.

Next is "seq playback..." Yada yada.

This makes whatever character it pertains to (remember: it's still NPC#0 since it's still indented and underneath the "Obj: NPC #0 command") perform an animation of some kind. It might help to open up the "Sprites" section of Lazy Shell right now.

"sprite +=" does what you might think it does. It changes the "sprite #" according to Lazy Shell's sprites section. For example, we see that a Terrapin (walking) is sprite #237. If we used += 1 it would do an animation using the one of sprite #238. "Sprite +=" will almost always be 0. In some rare cases, you may use += 1 or += 2.

"mold = true/false" determines if this particular command is dealing with a full animation sequence or a simple mold (still picture).

"playback once = true/false" determines whether or not the animation only plays once, or keeps repeating until the sprite is given a new animation command.

"seq = #" determines which animation sequence (or mold, if mold = true) we're using. In this case, it's sequence #2, which shows the Terrapin stumbling backwards.

"mirror = true/false" determines if the mold or sequence looks normal, or is flipped around (like looking in a mirror).

Now, let's keep moving on down.

"Delay, frames (8-bit): ##" pauses the script for however many frames you want. Frames are very short amount of time. I don't know how many FPS (Frames Per Second) this game has, but suffice it to say you need a significant amount of frames paused for there to be a noticeable difference in the game. The max amount of frames you can delay with one single Delay command is 255. However, the 16-bit command allows you to delay more frames, but takes more bytes of memory to do so.

As we progress through this entire event script, I will only go over commands I haven't already gone over.

Next new command is "playback, set speed..."
"set speed =" determines how fast the sprite will move. By double-clicking this command, we see that "set speed = 1" speeds up movement by 2x. Speed 0 is normal speed, speed = 2 speeds up by 2.5x, etc.

"shift =" and "seq =" determine what will be affected by this speed change. If "Shift = true" that means the sprite will move with that amount of speed if he moves around the level. If "seq = true" the animation that sprite is going through will speed up by the amount specified in the command. In this particular example, the sprite's animation is moving at 2x speed, but he is still moving at normal speed when he actually changes location.

"Shift southwest, pixels..." Do I really need to explain this one? You could probably figure out that this will move the Terrapin southwest 24 pixels. Or in other words, 24 pixels closer to the bottom left corner of the screen.

"Playback sound" will play a sound. In this case, a terrapin winding up his fist for a punch.

Now look at that other command highlighted in blue. This now means we are done with NPC #0, and the following indented commands pertain to NPC #2 (another Terrapin).
You can also see that the commands underneath it are the same. We also know that the Terrapins are supposed to match each other's movements in game. Everything checks out here... except there is no "playback sound" command. This is okay. One sound does the work for both characters.

Moving on down to unfamiliar commands, "Obj: NPC #2, stop embedded action script" keeps the Terrapin from doing anything else. No more moving for him. We're about to fight, so we don't need him to move anymore anyway.

"Engage battle, pack 1" makes the gang fight a particular group of enemies. In this case, Pack 1, which if you look up is a group of 4 Terrapins.
"battlefield:" determines where the fight takes place. Simple.

The next command is important: "if clear, mem 00:7040, bit: 0, jump to $####"
You'll also notice a "Reset Game" command underneath it. What this does, is tells the game: if the player gets a game over, reset the game. If the player won the fight, skip the reset command and go to the next command instead. In your future event scripts, always be sure to put these two commands after your battles. Otherwise, you could lose a fight, but the game would still think you've won.

"Obj: NPC #0, remove" does just that: it removes that NPC. You just beat the Terrapins in a fight, so now they must die.

"unfreeze all objects" lets those Terrapins move again after we froze them in the beginning of this event.

"Fade-in from black (async)" is another important command for post-battles. The screen automatically fades to black to start a fight, so you need to get rid of this black screen when the fight is over so you can resume play. The "async" just means it won't happen at the same time as any other commands. If there were a bunch more commands after it, they'd wait patiently until the screen was fully light again.

Last but not least is the ever important "return" command. This ends you're event and stops the game from looking up any other commands. If you didn't have this at the end of this particular event, the game would continue onward to event #2498 which could horribly glitch up the game. The return command helps us keep things neat and organized.


And that ends our tutorial on this particular event. I know there are many other commands for event scripts, but let's start out slow.

As was said before, the easiest way to learn is to look at an event already in the game, see how the creators of the original game did it, and then copy them. But at the same time, look at those commands and try to figure out what they do based on the context.

Posted by digikid195
My next question is: after the beginning scene were bowser captures peach and take her to his castle how can I write a script to make Mario appear at a different location then in the first room of bowsers keep?


I think the event that controls that very beginning sequence is completely unchangeable. In other words, no. He has to start in that room.

Posted by digikid195
My final question (for now at least) is: How can I make it where I can do previews of the my work in the first room of bowsers keep. (where Mario first appears at) because when i make lets say a battle in that room, when i go to preview the rom there is no location for Mario so when I click preview and it bring the emulator up its just a black screen with that music playing. Thank you for anyone and anyone that can answer my questions. It is much appreciated


If you're saying you've actually changed the first event to change the location Mario starts at, see the above answer. Also, when making an event where you have Mario go to a new level, be sure to have a "fade-in from black" command afterwards. Otherwise it will stay black.

Sorry for the incredibly long post, but if you're understanding of Lazy Shell has increased even a little bit I've done my job.

digikid195
Posted on 12-30-11 11:55 AM Link | Quote | ID: 148960


Micro-Goomba
Level: 11

Posts: 15/18
EXP: 5228
Next: 757

Since: 06-29-11

Last post: 4497 days
Last view: 4391 days
Oh wow thank you Axem. That's a lot of information but its very helpful! also on my last question what I ment was you know when you go to preview a rom and in the big white box there is usually coordinates for Mario and the location of the room he is in? well when I go to preview that room there isn't coordinates so as a result when I preview it and the emulator plays the preview its just a black screen. but the 2nd room of bowsers keep and so forth previews just fine. Any reason for this?

AnAxemRanger
Posted on 12-30-11 12:34 PM Link | Quote | ID: 148962


Snifit
Level: 37

Posts: 148/279
EXP: 337913
Next: 340

Since: 12-06-09

Last post: 2865 days
Last view: 109 days
Actually, because of glitches and stuff with my Axem Rangers hack, I've been limited to using Lazy Shell ver 2.5, and its previewer never worked right for me, so I have no real experience with the previewer function.

But if I had to guess, I would say that for the previewer coordinates, you would input the same coordinates Mario normally starts at in whatever room you should be in. But answer me this: if you press the jump button, can you hear Mario jump? If so, then that means either you somehow got the camera off of Mario and into some corner of the universe with no graphics to display, or you forgot to fade-in from black. The latter is more likely. In any event script that changes Mario's location to a different level, you should have a "fade-in from black (a-sync)" command immediately after the level change.
But like I said, I have no real experience with the previewer function, and as such I have no real understanding of how it works so I could be totally off base. You're probably better off if someone else answered this particular question.

digikid195
Posted on 12-31-11 02:49 AM Link | Quote | ID: 148968


Micro-Goomba
Level: 11

Posts: 16/18
EXP: 5228
Next: 757

Since: 06-29-11

Last post: 4497 days
Last view: 4391 days
That helps thank you Axem. But once again a problem has arisen... At least for me. Well I need major help with the event scripts. your broke it down a lot for me last time but I have no idea how to do the thing I want. What I want is to write a script so when mario walks into the second room of Bowsers Keep the magikoopa will display dialogue and in gauge in battle. I know thats a fairly simple script but im not sure how to make it work.

AnAxemRanger
Posted on 12-31-11 07:07 AM Link | Quote | ID: 148972


Snifit
Level: 37

Posts: 149/279
EXP: 337913
Next: 340

Since: 12-06-09

Last post: 2865 days
Last view: 109 days
Well I can give you a basic outline. Once again: incoming really long post.

If you want it to happen immediately upon entering the room, giving the player no time to prepare, here's what I might do.

First off, leave the exit field the same. In the "levels" section, exit fields are the yellow blocks and tiles that show up in the level. In other words, don't touch it. The thing you'll want to change is Bowser's Keep Area 2's "entrance event."
Once again, open up Lazy Shell's "levels" section and look up Bowser's Keep 1st time area 2.
To find any particular area's entrance event, look near the top of the screen. On the right side of the top of the screen, you'll see the word "music" followed by whatever song is supposed to play in that level (this is the easy part, but this isn't really important right now). Anyway, immediately left of that, you'll see "event#" followed by the area's entrance event.

In this case, it's event #2498. Before we go on, let's decide right now to focus on only the magikoopa and completely ignore the Terrapins inside this particular area.

Now you have a couple of options. You can either choose to:
1. overwrite event #2498 to be your new magikoopa event, or
2. you can look through the event scripts and find a blank one to work with.
If you choose 1. you'll need to delete all the various commands in event #2498. (Actually, you don't necessarily need to delete ALL the commands. You can keep commands that you know your event might also use, but for tutorial purposes, let's just say you need to delete all of the commands in this script to start with a clean slate.)
If you choose 2. you'll need to change bowser's keep area 2's entrance event to be event# whatever new event your going to be using. Let's say for example, you choose to write an event at event # 2000 (which actually is a blank event). Then, you'll go back to the levels section and change bowser's keep area 2's entrance event to me #2000 instead of #2498.

Either way, now that we've got a blank event, let's start writing our event! I'm going to keep things very simple this time around. Later on, you may learn how to make an enemy appear with magic effects and sounds and such, but for now let's keep it simple.

Let's say that Magikoopa is already in the room when Mario walks in, so as soon the screen fades in from the black, Magikoopa is already standing in front of you. For starters, we need to make sure Magikoopa's sprite already exists in that room, so when the event script calls for him to do stuff, he'll actually be there. To do this, go back to the "levels" section. Now look towards the top left area of the screen, and click on "NPCS." Now you should see 7 NPCs listed. These are all Terrapins. But these aren't important right now.
Now click on NPC #4, then click on the icon that says "Insert a new NPC after the currently selected NPC." This is what we want to do: Insert a new NPC after NPC 4, which is technically the last NPC listed. NPCs that are indented in the list are just copies of the non-indented NPC that is above them. In other words, NPCs 1, 2, and 3 are copies of NPC 0, and NPCs 5, 6, and 7 are copies of NPC 4. This makes NPC 4 the last NPC in the list, and when adding NPCs, it's generally easier to make whatever new NPC you're adding be the last one in the list. Otherwise, you could mess up other events in the room. Since you're a beginner, let's keep things easy to work with.

Now that we have NPC #8, we need it to be Magikoopa. We also need to edit his properties to suit our needs. Click on NPC #8 and look immediately to the right and you'll see a list of various NPC properties, including NPC TYPE, TRIGGER, etc. Now let's go through these one by one.

NPC TYPE determines whether the NPC is an object, which makes the NPC trigger the event specified below it (you can see what event that NPC has by looking just a little bit lower.) if the player fulfills the requirements underneath the TRIGGER option, a battle which will make a battle ensue if the player activates the TRIGGER option, or a treasure which will give the player a treasure depending on the memory bit specified if the TRIGGER is triggered.

TRIGGER determines how this particular object is activated and will play whatever event, battle pack, or treasure attached to it. The TRIGGER option and the NPC TYPE option do not matter to us in this case. These two things only apply if the NPC will be in the level for the character to interact with. Magikoopa will be controlled entirely by the entrance event, which activates the moment the player walks into the room, so the player does not have a chance to interact with the NPC by himself. Therefore, these two things don't matter in this particular case.

Next is NPC#. We need this NPC# to match Magikoopa's NPC#. To find this out, click on the 2nd right-most icon directly above where it says "Partition #." It's hard to see, but I think it shows a little picture of golden Belome. This brings up the NPCS window. Now we need to search for magikoopa. In the search bar, type in "magikoopa." Now we see several options. Let's click on the first one. It's NPC 57. In the top-left most box in the NPCS window, type 57. We see it's the blue magikoopa. You said you wanted the red one, right? So let's go back to search and try the next option, which is "red magikoopa." It's NPC 190. Let's put this in the same box in the top left. Bingo!

Now that we know what NPC it is, let's exit out of this NPC window and go back to the levels section. Back to NPC #8 in this level. Now where it says NPC#, we put the one we just got, NPC #190.

Now let's keep moving down. Event# isn't important right now for reasons stated above. Action# determines which action script the NPC will be using. You'll have to look up the action scripts to find one that'll do what you want. But for a basic walking in place action, I think #3 will work.

Speed+ determines how fast the NPC moves. We want him to move normally, so let's keep it 0.

Show NPC determines whether or not the NPC is actually visible. If this button is greyed out, the NPC will be invisible. That is bad in this case. So make sure it's not greyed out by clicking on it.

NPC#+, Event#+, and Action#+, aren't important to us right now. These apply to the indented NPCs (the "copies") we talked about earlier. I'm getting tired of typing, so I won't go over why these are useful quite yet.

The 3 coordinates below that are the NPC's isometric coordinates. Now we said we wanted Magikoopa to appear somewhere in front of Mario right? So now we need to know where Mario appears. It might help to turn on the "isometric grid" option right now. To turn it on, click on the icon near the top of the screen that looks likes a number sign going diagonally right next to a normal number sign. Now we know that Mario starts in this room on the picture of Bowser on the carpet. Move your mouse over that spot and we see that it is isometric coordinate (4,95). Now we want magikoopa to spawn a few spaces in front of him, so move your mouse a few coordinates northwest. I think (6,92) looks like a reasonable choice. So now let's go back to NPC 8 and put his coordinates as (6,92,0) The Z coordinate determines height, and since we want Magikoopa to be at normal ground level, let's keep it 0.

Next is "Facing" which determines which direction the NPC is facing. We want him to be facing where Mario will be starting, which will be the lower left, or southwest corner of the screen. So let's choose SW which I'm sure you could guess by now stands for "southwest."

Underneath all of that you'll see several boxes to check that do different stuff. You probably don't need to worry about these right now. The event we're going to create should take care of that stuff for us.

Wow, all of that and we haven't started an event script yet. Dang.
Well let's do it already!

Since we want Magikoopa to be there when Mario enters, let's make sure he is there before we do anything else. Let's start with the very first command.

In the "objects" category, choose the first command: "action queue..."
Now we go down to "current command properties..."

For our object, we're talking about NPC#8, which is Magikoopa, so let's choose NPC #8. Next is queue type. This can do a number of things, but luckily making an object appear is simple. Just choose "Show object." Then click "insert command"
Bada Bing! Now we know he'll show up.

Next, is a very important command. We need to remove the black screen.
So let's choose "screen effects" and choose the "fade-in from black (async)" command. Now we can actually see what the heck is going on.

Like I said, I wanted to keep this event simple. So let's just only do what you said you wanted to have happen: we'll have Magikoopa say something and then initiate a battle.

So now let's make him say something. Go to Dialogues and then choose Run dlg... Then in current command properties, choose whatever dialogue you want to use. Pulling a random number out of my hat (you don't have to use this number if you don't want to), let's say dialogue# 1000. Just remember: you'll need to go in the dialogues section of Lazy Shell later and edit this particular dialogue to say what you want him to say.

Honestly, I'm not entirely sure what "above obj" does, but a safe value I use for almost all my dialogues is mem $70A8. I'm not sure what that even means, but it works.

Next are dialogue properties to check or uncheck. Closable means the player can close the dialogue when it's over by pressing A. If you don't check this, the dialogue would never end unless you had a "close dlg" command later in the script, but we don't want to do that. asynchronous means nothing else in the event script will be happening during this dialogue. It's a good idea to check this, otherwise the battle might begin before the dialogue is even over. Multi-line will determine if the dialogue will go across 3 lines, rather than one. Once again, you should check this. Paper BG determines if the dialogue will have a Paper Background or if it will be in blue text without a background. Yes, you should check this.

Next we get to the all important battle.
Choose the "Engage battle with pack..." command. Choose the pack number that has Magikoopa, and also choose the background of your choice.

Now we need the commands that determine if a gameover happened or not.
Click on the Memory category and choose the "if clear, mem..." command.
Keep the address and the bit value the same. 7040: 0 is the "game over" memory bit. For now, don't worry about the "then jump" command. Just insert the command as is.

Next choose the "reset game, choose game" command which can be found in the "menus" category.

Next, we need to get rid of Magikoopa because Mario killed him. So let's remove him. Removing an object is very similar to calling it. In the "Objects" category, choose "Action queue..." Seem familiar? It should! For Object, choose NPC #8. For queue type, simply choose remove object. Now insert it. This gets rid of NPC#8.

However, some NPCs have a tendency to reappear upon reentering the room. To counter this, we need to remove him from the room's data a little more forcefully. So now, go to the "objects" category again, and choose, "set object presence..." For level, choose Bowser's Keep 1st time area 2, which is number 4. For object, choose NPC #8. Now for "presence is..." we see a simple box to check that says true. We don't want it to be true, so leave it unchecked to be false. This should get rid of him.

Like I think mentioned to you before, the game automatically fades to black for battles. Now un-black screen it. Insert another "fade in from black (async)" command.

Last but not least, let's insert a "return" command to finish off this simple event.

We're done now, right? WRONG! Let's go back up to that "If clear, mem $7040, bit: 0, jump to $XXXX" command. We now need to change this command, so double click on it. For the $XXXX, change it to match the last four digits of the address of the command immediately AFTER the reset game command. In this case, it's the "remove obj" command, right?
Let's say it looks like this:
[1F6563] Obj: NPC #8, remove
then you'd change the $XXXX to say $6563. And of course, hit "apply changes" to make it happen.

Now this should conclude our simple fight event. Unfortunately, this event will happen every time you enter the room, which isn't necessarily a good thing. To change this, you'll have to use memory bits. I've been typing for awhile now, and I'm tired. If you can't figure out how to use memory bits, I'll try to help.

digikid195
Posted on 12-31-11 12:16 PM Link | Quote | ID: 148974


Micro-Goomba
Level: 11

Posts: 17/18
EXP: 5228
Next: 757

Since: 06-29-11

Last post: 4497 days
Last view: 4391 days
Thank you so much for all this information! The only problem I have is when I tested the event the magikoopa is invisible but the rest of the script works fine... Oh! and the script repeats its self in an endless loop. I'm not sure what I did wrong.

M.E.R.255
Posted on 12-31-11 01:50 PM Link | Quote | ID: 148975


Red Goomba
Level: 16

Posts: 18/42
EXP: 18346
Next: 1910

Since: 11-20-11

Last post: 4382 days
Last view: 4350 days
This is not an answer to your problem, I'm just letting you know that I've sent you a PM and that I'm sorry that I haven't done this earlier. I had no clue where I could read my Pm's at. ^^"

And damn AnAxemRanger, how come I don't receive that much information from you like digikid195 did? =P

AnAxemRanger
Posted on 01-01-12 06:09 AM Link | Quote | ID: 148994


Snifit
Level: 37

Posts: 151/279
EXP: 337913
Next: 340

Since: 12-06-09

Last post: 2865 days
Last view: 109 days
Posted by digikid195
Thank you so much for all this information! The only problem I have is when I tested the event the magikoopa is invisible but the rest of the script works fine... Oh! and the script repeats its self in an endless loop. I'm not sure what I did wrong.


He's invisible? That's odd... Would you be able to send me a screenshot of that particular event script? I don't know why he would be invisible, but if I saw the actual event as it looks in Lazy Shell, I might be able to figure out why he's not there.

As for looping endlessly, that is to be expected. In the simple example I gave in the previous post, I didn't make it not loop. To make it so this event only happens once, you need to set a memory bit of some kind. First off, you need to find which memory bits you can spare. But for this example, let's just pick a random one. Let's say mem $7065, bit 4.
NOTE: like I said, this is just a random memory address and bit that I pulled out of thin air. It does NOT necessarily mean you should be using it.

First off, go to the very end of our event. Now AFTER the return command we have there, add another "fade-in from black (async)" command as well as another "return" command. Now you may be thinking, why are we adding stuff AFTER the return command? The return command ends an event and makes the game stop reading commands. Why would adding anything after it matter? Don't worry, I'll explain why this is important in a minute.

Now back to the memory bits and stuff. Near the end of our event, let's say right immediately before our return event, (before the FIRST return event, not the return event I just had you add.) you'll want to add a "set mem $7065, bit: 4" command. Remember, that's the memory bit I pulled out of thin air before.
If it helps, think of this as turning a switch on. Normally, the mem 7065, bit: 4 switch is off, but successfully beating Magikoopa and progressing through the event turns this switch on. It should only turn if we successfully beat Magikoopa, which is why it's a good idea to stick it near the end of our event.

Now let's make that switch do something. At the beginning of our event, yes the very beginning, in other words, it should be the first thing listed, let's insert the "if set, mem..." command. For address, let's put 7065 and for bit, put 4. Once again, this is the same bit I pulled out of thin air before. For the bottom part of this command, where it says "then jump" we need to put the last four digits of the address of the command we want to jump to. In this case, we want to jump to the second "fade-in from black (async)" command. I'll explain why in a sec.
A command's address is located to the far left of that command. It's the 6 digits in brackets. For example, it may look something like this:
[175F5E] --Fade-in from black (async)
So now, back to our "if set, mem..." command, now we know where we want the "then jump" to jump to. So for this, like I said before, type in the last 4 digits of the address of the second fade-in from black command.

Now if you've done everything correctly, this should finish our event (for now. I'd still need to see the event to know why Magikoopa doesn't appear). So let's run through what we just did:
We added to this event commands that say: if Magikoopa has already been spoken to and successfully fought, ignore this event and simply fade-in from black and let Mario do whatever the player wants like normal. If this is the first time we've seen this event, then run through the event and let the player beat Magikoopa. If he does beat him, then turn this switch on so the player won't have to fight him again.

Bada bing. There should be no more looping.

Posted by M.E.R.255
This is not an answer to your problem, I'm just letting you know that I've sent you a PM and that I'm sorry that I haven't done this earlier. I had no clue where I could read my Pm's at. ^^"

And damn AnAxemRanger, how come I don't receive that much information from you like digikid195 did? =P


Um... Sorry? If you want some help with something you could post it here and I'll see if I can help. But I thought you were doing sprites and animation stuff like that right now? Like I said before I'm pretty helpless in that department myself so you'd be better off asking someone else.

M.E.R.255
Posted on 01-01-12 01:03 PM Link | Quote | ID: 148999


Red Goomba
Level: 16

Posts: 22/42
EXP: 18346
Next: 1910

Since: 11-20-11

Last post: 4382 days
Last view: 4350 days
@AnAxemRanger, I wasn't mad or anything. ^^
I was just saying that as a joke. Usually when I use a smiley, it's nothing negative.

And well, I am currently still playing around with the program, so if I get stuck, I could let you knoooo...oh! I did remember something that made no sense to me! When looking at the hammer animation (weapons, ANIMATIONS section), I have no clue what all the AMEM and {NOOP} stuff means. I would like to add new weapons later on, so I it really would help me out knowing what means what.

AnAxemRanger
Posted on 01-01-12 01:36 PM Link | Quote | ID: 149000


Snifit
Level: 37

Posts: 153/279
EXP: 337913
Next: 340

Since: 12-06-09

Last post: 2865 days
Last view: 109 days
Posted by M.E.R.255
@AnAxemRanger, I wasn't mad or anything. ^^
I was just saying that as a joke. Usually when I use a smiley, it's nothing negative.

And well, I am currently still playing around with the program, so if I get stuck, I could let you knoooo...oh! I did remember something that made no sense to me! When looking at the hammer animation (weapons, ANIMATIONS section), I have no clue what all the AMEM and {NOOP} stuff means. I would like to add new weapons later on, so I it really would help me out knowing what means what.


Yeah, I figured you weren't actually mad. If I did think you were mad, I probably would have responded in a much ruder and nastier way. Or I simply would have posted "u mad bro?"

Anyway, {NOOP} is an empty address as far as I can tell. if you see a NOOP, consider it a free space to add something if you should so desire. At least that's as far as I can tell. However, I've noticed that if you put a lot of these in a row it can cause a bit of lag in whatever script it's in. I guess the game takes a bit of time to read through all of these commands, even if they're empty.

Now AMEM and OMEM, I honestly don''t know what those do. But I do think AMEM $62 has something to do with timing hits. Like if you successfully time an attack, AMEM $62 gets set to a value of 1, and you can usually see a command in weapon scripts that says, "if AMEM $62 = 1, jump to..." the second half of the attack that only shows up when you time a hit. But outside of that, I really don't know what they do. When I make my own spells and attacks and stuff, I usually just edit an already existing script and leave those commands alone since I don't know if adding or removing them will wreck my game.

M.E.R.255
Posted on 01-07-12 10:35 AM Link | Quote | ID: 149300


Red Goomba
Level: 16

Posts: 28/42
EXP: 18346
Next: 1910

Since: 11-20-11

Last post: 4382 days
Last view: 4350 days
I have another question(s), one that is driving me crazy for the last few days. I thought I've posted this yesterday, but apparently my browser must have hung up or something, grh.

I've been wanting to add some more sprites (movements, emotions) to the main characters/allies and I probably would figure out how to add them, but not if I can display them. Like... have Mario sit down on a chair. Let's say since I don't want to overwrite other characters, I place that animations (since Mario can't have more than 32 molds) on sprite number 200. Is it possible to make Mario sit down even though his sprites are 1-5 (or something like that) and the other one is on number 200?

Also, is it possible to display a character with a different palette, in a town or so? I mean like... have Bowser standing there in the purple (poison) palette? But without having to add a purple Bowser to Sprites. I just mean have Bowser standing there with palette 2 or so.

I would really appreciate an answer on that, those two things cause me to lose my motivation to do something...

Yakibomb
Posted on 01-07-12 05:01 PM Link | Quote | ID: 149306


Level: 28

Posts: 70/137
EXP: 122983
Next: 8355

Since: 03-21-08

Last post: 774 days
Last view: 774 days
Posted by M.E.R.255
I've been wanting to add some more sprites (movements, emotions) to the main characters/allies and I probably would figure out how to add them, but not if I can display them. Like... have Mario sit down on a chair. Let's say since I don't want to overwrite other characters, I place that animations (since Mario can't have more than 32 molds) on sprite number 200. Is it possible to make Mario sit down even though his sprites are 1-5 (or something like that) and the other one is on number 200?

No, you cannot make a sprite change to another sprite in the range higher than 7.
You can still make Mario sit in a chair if you use the event scripts. When you want to make Mario sit, you could make Mario invisible, then call the NPC with Mario's sprites into position (or have them in position beforehand and have it be invisible, then make it reappear on call).


is it possible to display a character with a different palette, in a town or so? I mean like... have Bowser standing there in the purple (poison) palette?

Yes, this is possible, but I don't know how to do it. I mean, the command that changes the palette is really weird. I can tell you the steps you need to take to change an NPC's palette though. Here is a little guide I made for event scripts:

1) On the right with all the commands, click the "Objects" category. There, locate the "Action queue..." command (it is the first in the list).

2) What this command does is it makes an object (NPCs, the screen, layers in the level, etc) jump to a command in the list, be it making it read an action script, removing the object, what ever it is in that list.
What we're going to do is make the object "Mario," which is the player's character. Next, make the queue type "start action queue". What this does is it reads a script that you'll make in a moment.
The last thing here is if you want it to be asynchronous or synchronous. Just so you know, when checked, the game will execute this command, and it will not read on until it is done. When it is unchecked, the game will keep reading all the commands in the list without pausing. It is really up to you if you want it checked or not.

3) Alright, last step. After you made the command, click the "ACTION" button in the top-right hand corner, above all the command categories.
This button will give you a list of all the commands that can be used in this sub-script, all of which will be directed to the object.
Next, click the "Palette" category. Choose one of those commands that works.

From here, I have no idea. You have to test it out yourself, sorry.
At the end of the script, to prevent the script from reading other scripts down the line, add a "Return" command.

Don't be afraid to ask if you don't understand something I said, because I was pretty tired when I wrote this.

M.E.R.255
Posted on 01-08-12 12:38 PM (rev. 2 of 01-08-12 01:59 PM) Link | Quote | ID: 149333


Red Goomba
Level: 16

Posts: 29/42
EXP: 18346
Next: 1910

Since: 11-20-11

Last post: 4382 days
Last view: 4350 days
Now, I did find out how to test the palettes... out, but I think I know what you mean. It doesn't give you the result that you want. Palette Index=1 seems to turn it back to normal, while the rest gives the character colors, that it doesn't seem to have (tested it out on Yoshi).

Someone may have to figure this one out. It should be easier to figure out with Yoshi's since Yoshi can be green, pink and yellow. I'll probably give Yoshi on the other palettes (3-7) other colors, just to be safe. I'll try it out too, in case you guys don't (since you're all busy with your games ^^)


I did find out how to make Mario invisible (I didn't know that yet), but how can you make an NPC move (towards the location, or move at all)?



EDIT: Important question (to me):
How do I enable the option, where I can set who is going to be in the team? I'm wanting to try some stuff out, and I did figure out how to add characters, but not how to choose who's going to be in the battle.

Main - Super Mario RPG Hacking - Questions about lazy shell editor New thread | New reply

Acmlmboard 2.1+4δ (2023-01-15)
© 2005-2023 Acmlm, blackhole89, Xkeeper et al.

Page rendered in 0.035 seconds. (347KB of memory used)
MySQL - queries: 97, rows: 130/131, time: 0.017 seconds.