Jump to content

Event Assembler Questions Thread


CT075
 Share

Recommended Posts

There should be a file named "World Map Helpers.txt". If you open the file in Word, Wordpad, or some other text editor that isn't Notepad is everything still garbled? You may want to try re-downloading EA as well.

Link to comment
Share on other sites

  • Replies 3.3k
  • Created
  • Last Reply

Top Posters In This Topic

Ah! Everything ungarbled when i used notepad++. So I looked through the world map help.txt with nothing related to PUTSPRITE, FADETOWM, or CODE. I also checked for latest version of EA but I haven't found anything new in the new downloaded standard libraries. I pasted the section that isn't working. Can you tell me what the correct parameter order is for those three codes? I feel like I'm missing something simple. Ex. Loading units would be: LOU1 (group of unit name here)

SCRO
STAL 20
REMOVETEXTBOX
TEXTBOXTOTOP
STAL 60
FADETOWM [64,680] 0x76 //This line is not working
STAL 60
PUTSPRITE 0x18 [166,621] 0x00 0x10 0x80 // this line is not working
STAL 0
TEXTWM 0x6C2
STAL 20
SCRO
REMOVETEXTBOX
REMSPRITE 0x2 0xE8
_ASM0x42 0xB2FB1
STAL 20
_0xCA
MUEN 4
_0xAD
_0xAE
STAL 60
///CODE 0x0 0x0 0x0 0x0 //and this line is not working.
Link to comment
Share on other sites

CODE has been deprecated. Use BYTE instead.

FADETOWM and PUTSPRITE actually take two additional unknown parameters at the end. Just use 0x00 for those (Make sure to consult the Event Assembler Language.txt file for syntax).

/* Not this */ FADETOWM [64,680] 0x76 //This line is not working
/* This */ FADETOWM [64,680] 0x76 0x00 0x00
 
/* Not this */ PUTSPRITE 0x18 [166,621] 0x00 0x10 0x80 // this line is not working
/* This */ PUTSPRITE 0x18 [166,621] 0x00 0x10 0x80 0x00 0x00
Link to comment
Share on other sites

  • 1 month later...

Does the Event Assembler completely overwrite events I edit? I'm trying to make my own custom chapter from scratch, but every time I try to start a new game it just crashes when I try to load a map. Do I need to 'remove' the existing prologues events somehow before I can write my own? I'm following the tutorials exactly and I just don't get why things aren't working for me.

Link to comment
Share on other sites

Several small mistakes, probably brought on by sleep deprivation. I decided to learn to hack FE last night and I've done nothing else for the past thirteen hours or so. Though I'll admit I've been driven a bit by frustration.

I forgot to seal one of my groups with UNIT, I mislabeled the text I wanted to use, and I wasn't using the LUA1 command properly either.

Link to comment
Share on other sites

(i assume you mean LOU1? offhand i can't think of a code called LUA1)

to answer your initial question, EA does not "overwrite" old events unless you tell it to (I would advise strongly against that). What it does instead is write the events somewhere else in the ROM (typically into free space, although "expanded space" beyond the original 16MB is also valid) - this is what your ORG command specifies.

To tell the game to run your events, you need to change the pointer to the chapter's events; this is typically done with the macro EventPointerTable (depending on which tutorial you're following, if any, you may see this step replaced with "ORG 0xC9C9C8+4*id; POIN ThisChapter" or something similar - really old tutorials might even tell you to do this step in Nightmare). By doing this, even though the old events are still present in the ROM, nothing is ever actually telling the ROM to use those events (the only place they would be used has been changed, to your events!).

Edited by CT075
Link to comment
Share on other sites

So how does the EA work in regards to persistent things like levels and equipment? Will they just keep the levels and equipment they had before if I leave those parameters blank? If I wrote

UNIT Lyn 0x02 Lyn Level(0,Ally,False) [12, 3] [12, 3] NoAI

Would she show up as whatever level she was in the chapter before with the same items? If not, what do I have to do to accomplish that?

Link to comment
Share on other sites

loading units that exist in save data ignores all inventory, level, class etc parameters set in the event itself and instead default to the value that's already there

so, to answer your question, yes

Edited by CT075
Link to comment
Share on other sites

It seems editing text with FEditor causes the game to crash. Do I have to use FEditor on the ROM before I use anything else? That's a bit irritating. Is there a way to let me use FEditor freely even if I edit the ROM with EA and Nightmare?

Link to comment
Share on other sites

Well, I don't even know what happened this time. I even used FEditor first on a clean ROM.

10ykpp0.jpg

[OpenRight][LoadFace][0x16][0x01]ou there! You are our Tactician, yes?[A] <-----This was the problem.
I hope you're good. We'll need all the
help we can get today.[A]
[HalfCloseEyes]
I suspect they're hiding out in the
old mines to the west.[A]
We'll need luck as well as skill if
we're going to flush them out.[A]
[MoveRight]
Move out![A]
[X]
And I'm loading it with:
OOBB
LOU1 CityGuard BadGuys
ENUN
TEX1 0x815
REMA
ENDA
EDIT: Argh. Another typo did it, it seems. Needed to separate the beginning of the text from the opening line.
Edited by OOTN
Link to comment
Share on other sites

Hahaha! I got this stuff working at last! Custom opening, custom characters, custom map and enemies. And nothing has gone wrong! Looks like I've finally gotten the hang of the basics, I can get started actually modding now.

t0iycz.jpg

Link to comment
Share on other sites

  • 2 weeks later...

Alright so I'm trying to make an event,

#define DISABLE_TUTORIALS
#include EAstdlib.event

EventPointerTable(0x06,Pointers)

ORG 0xD80000

Pointers:
POIN Turn_events
POIN Character_events
POIN Location_events
POIN Misc_events
POIN TrapData TrapData
POIN Bad Bad Bad Bad
POIN Good Good Good Good
POIN Opening_event Ending_event

Good:
UNIT 0x01 0x01 0x01 Level(1, Ally, 0) [14,9] [12,5] [0x016, 0x01, 0x6B] NoAI
UNIT 0x03 0x02 0x01 Level(1, Ally, 0) [14,9] [13,6] [0x01, 0x6B] NoAI
UNIT

Bad:
UNIT 0x3E 0x39 0x3E Level(1, Enemy, 0) [3,2] [3,2] [0x1F] Guard
UNIT 0x5F 0x0A 0x3E Level(1, Enemy, 0) [3,2] [2,4] [0x01] AttackInRange
UNIT 0x5F 0x0A 0x3E Level(1, Enemy, 0) [3,2] [4,5] [0x01] PursueWithoutHeed
UNIT 0x5F 0x28 0x3E Level(1, Enemy, 0) [2,4] [6,3] [0x01] AttackInRange
UNIT

Turn_events:
TurnEventPlayer(0x0,Opening_event,1)
TurnEventPlayer(0x05,Goodguys,2)
TurnEventPlayer(0x07,Talk,2)
End_MAIN

Character_events:
End_MAIN

Location_events:
End_MAIN

Misc_events:
CauseGameOverIfLordDies
DefeatBoss(Ending_event)
End_MAIN

TrapData:
End_MAIN

Opening_event:
OOBB
LOU1 Good
ENUN
TEX1 0x815
REMA
LOU1 Bad
ENUN
TEX1 0x816
REMA
ENDA


Ending_event:
ENDA

// Events

Goodguys:
LOU1 Goodguys
ENUN
ENDA

Talk:
TEX1 0x817
REMA
ENDA

// Manual Movement

// Scripted Fights

// Units

Goodguys:
UNIT 0x2F 0x28 0x00 Level(1, Ally, 0) [6,9] [6,9] [0x01] NoAI
UNIT 0x30 0x28 0x00 Level(1, Ally, 0) [5,9] [5,8] [0x16] NoAI
UNIT

// Shop Data

MESSAGE Events end at offset currentOffset

As you can see from this, I'm trying to have reinforcements come on turn 2. However every time I try the dialouge plays, but the units don't show up. I've checked over this and it looks like everything was entered correctly (or at least as far as I know, since I learned how to mod yesterday) is there anything I'm missing?

Link to comment
Share on other sites

How are you able to assemble a file with duplicate labels? Does EA not complain that you already defined GoodGuys?

Unrelated, but if you have two events occuring on the same turn you can just load them under the same label, so instead of

Goodguys:
LOU1 GoodguysGroup
ENUN
ENDA

Talk:
TEX1 0x817
REMA
ENDA
you can just do

Goodguys:
LOU1 GoodguysGroup
ENUN
TEX1 0x817
REMA
ENDA
and remove the other event.
Link to comment
Share on other sites

  • 4 weeks later...

I'd like to know how one finds Condition IDs(with evential and without evential) and Event IDs in order to code this:

If Bandit is dead,then Zagan will become an ALLY unit(otherwise, nothing happens) , and other conditionals for when I plan to do so when making the hack I'm planning.

I've been told that it's better to ask the question here rather than a new thread.

Link to comment
Share on other sites

are you modifying an existing chapter or making a new one? if you're making a new one you can set the event IDs yourself. for example, if Bandit's death quote triggers 0x07 to TRUE then that's the ID you run with. Later on when you make a condition, and you need to use the ID that says "Bandit dead" then you would use 0x07. new chapter = new slate so all IDs between 0x04-0x3F are yours to use.

if you're modifying a chapter then you need to disassemble the chapter and find the corresponding events to get the IDs.

Link to comment
Share on other sites

Alright,that very information excites me to the core :)))

Though,I need to make sure of a couple of things. Am I to assume that both conditions and ASMroutines are also can be completely custom made under this new map as well?

And as for the pointer...how xan I make this map accessible in place of the prologue?Or do I have to make a custom map,set that custom map to an unused pointer in nightmare,and direct the prologue to said pointer?

I don't understand the process of setting things,but I'll try my best to get as far as I can.

Again,thank you

Link to comment
Share on other sites

I'm quite sure Arch's tutorial covers custom maps, if not, then UT will.

Everything can be custom made, within reason. stuff like "if character x is dead, y happens"is incredibly easy. all you need to do is attach the appropriate event ID to the event and then refer to it later. things like "if character has a stat of 20" or "if A and B are at A support" are more complex

Link to comment
Share on other sites

I'm sorry,but there's something that is really confusing to me.I feel that there's something big I'm missing here with these 2,still,more like the lines of finding these via nighmare and hex editor.I can find some via nightmare and evential, I think my problem is finding some of them in the first place(as well as Condition ID) in the first place,how how I'm using them.

I feel like an idiot for not getting this part down.I also need to see some stuff regarding if I can use block(IE ChestOpened, what you call those)

The thing I'm trying to perform is loading Assassins from the chest after that chest had opened,for multiple turns on end,as I planned for one of my main components of a hack I want to make is that idea.

Here's what I did:

#define DISABLE_TUTORIALS
#include EAstdlib.event
EventPointerTable(0x06,Pointers)
ORG 0xD80000
Pointers:
POIN Turn_events
POIN Character_events
POIN Location_events
POIN Misc_events
POIN TrapData TrapData
POIN Bad Bad Bad Bad
POIN Good Good Good Good
POIN Opening_event Ending_event
Good:
UNIT 0x02 0x26 0x02 Level(1, Ally, 0) [9,7] [9,7] [0x58, 0x46, 0x68] NoAI
UNIT 0x2D 0x23 0x2D Level(1, Ally, 0) [10,6] [10,6] [0x57, 0x37] NoAI
UNIT
Bad:
UNIT 0x3E 0x22 0x00 Level(1, Enemy, 1) [1,2] [1,2] [0x53] HealUnits
UNIT 0x3F 0x18 0x00 Level(1, Enemy, 1) [1,3] [1,3] [0x35, 0x32] AttackInRange
UNIT
Reinforcements:
UNIT 0x3A 0x28 0x00 Level(1, Enemy, 1) [0,1] [0,1] [0x03] PursueWithoutHeed
UNIT
Shadows:
UNIT 0xFC 0x3E 0x00 Level(20, Enemy, 0) [11,6] [11,6] [0x0D] PursueWithoutHeed
UNIT
Turn_events:
TurnEventPlayer(0x0,Opening_event,1)
TURN 0 Turn2[2,5] 0x0 0x00
TURN 0 Mendel[1,30] 0x8 0x00
End_MAIN
Turn2:
CMOF
LOU1 Reinforcements
ENUN
Character_events:
End_MAIN
Location_events:
Chest(0x6D,11,6)
End_MAIN
TileChanges:
TileMap(0x0F,11,6.,0x01,0x01,ChestOpened)
TileMapEnd
ChestOpened:
BYTE 0x04 0x00
ALIGN 4
End_MAIN
Misc_events:
CauseGameOverIfLordDies
Mendel:
IFET 0x01 ChestOpened
LOU1 Shadows
ENUN
ELSE 0x02
ENIF 0x01
ENUF 0x24
ENIF 0x02
End_MAIN
TrapData:
End_MAIN
Opening_event:
OOBB
LOU1 Good
ENUN
LOU1 Bad
ENUN
ENDA
Ending_event:
ENDA
// Events
// Manual Movement
// Scripted Fights
// Units
// Shop Data
MESSAGE Events end at offset currentOffset
I suspect that one problem is those condition coordinates(particularly, 0x24,and 0x01),I don't know how to find the correct ones in hex or evential.I know this because the same problem happened after simpler coding attempts:After player phase 1,the game sort of stops in limbo with the units still doing their standing animation, but nothing else happens.Not to the point of full on crashing with the high pitched noise,but no further things can be done.
Also,I suspect my logic to be somewhat off.My main concern is the turn event that says to have a condition starts on turn 1,but is for something that only start's if the following condition happens,hence why I put an ENUF there.
EDIT:Y'know,this is a stupid question but,Is it better for someone like me to be working on a new chapter rather than modifying an old one?I don't understand at all the notion of assigning condition and event IDs,but I've been thinking about it lately.I guess I am working for an old one,seeing as my custom map is in the prologue's pointer.
Edited by supnaplamQW
Link to comment
Share on other sites

Mendel:
IFET 0x01 ChestOpened 
LOU1 Shadows
ENUN
ELSE 0x02
ENIF 0x01
ENUF 0x24
ENIF 0x02
End_MAIN
No no... you're going about this wrong.
"ChestOpened" in your case, is not an actual event. It's a label (that is, a marker for the Event Assembler to find). Imagine all you have is a page of paper that says "4 0". Well, "ChestOpened" is a little bit like a tab sticking out of that page, and every time you say "ChestOpened" is the Event Assembler it will go back to your book and look for the tab that says "ChestOpened". Then it will look at the information on that page. The information on that page could be anything. Shop data, tile changes, a character, ANYTHING. Since the game is looking for a tile change, it will simply interpret the data written there as a tile change, whether it really is a tile change or not.
I can see what you're trying to do, but that's not how it works. The "Event ID" is one little flag. Imagine that it's a light, that's either on or off. When you say "IFET 1 1" you're effectively saying this:
Condition 1: Check if Light 1 is on
And if you say "IFET 3 1":
Condition 3: Check if Light 1 is on
The label "ChestOpened" doesn't actually have anything that turns on that switch. That's something else that you need to do, and, to be honest, is a bit of a pain in the ass.
But what you need to do is this:
Go to the "Main Code Helpers.txt" file. You'll see a line somewhere in there that says this:
#define Chest(item,X,Y)  "CHES 0 item [X,Y] 0x12"

This line defines your chest macro. This means that whenever YOU write Chest(Vulnerary,12,3), to YOU that's what it looks like. But to the Event Assembler, it actually looks like "CHES 0 Vulnerary [12,3] 0x12". The 0 is the Event ID of the chest event. That means that it doesn't flick any "switch" for it. The chest macro automatically sets the event ID to 0, so you'll have to write it out manually.

So now you need to change your line "Chest(0x6D,11,6)" to "CHES 0x08 0x6D [11,6] 0x12".

This will make it so that the game turns on "Turn on Light 0x08", if you will.

THEN you need to change this your IFET to this:

Mendel:
IFET 0x01 0x08//Condition 1: if Light 0x08 is turned on, 
LOU1 Shadows
ENUN
ELSE 0x02
ENIF 0x01
ENUF 0x24//Turn off Switch 0x24
ENIF 0x02
End_MAIN

You also need to have spaces here (in between Turn2 and the [, and inbetween Mendel and the [):

TURN 0 Turn2 [2,5] 0x0 0x00
TURN 0 Mendel [1,30] 0x8 0x00

Does that make things clearer?

Edited by Agro
Link to comment
Share on other sites

So what you're saying is that once a 'label' is used up to define a set's type of events,it can't be used up for another type? Chest Opened is a label that defines a tilechange,hence cannot be used to define a condition,or is it that with conditions there can never be a label?

If no label can't be used,then why could one be used for the Turn event? is it because the Trigger ID is associated with it already(before the ChestOpened)?

Also,that 0x08 is an example of one of my confusions.How come it's 0x08;how did you find that?Is defining Event and Condition ID's within the scope of just Event assembler,w/ codes between 0x04 and 0x65 free game?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...