Hellequin Posted February 18, 2014 Share Posted February 18, 2014 Hey everyone So first off, I'm relatively new to hacking games and I'm the first one to say that the stuff I've been doing isn't that difficult. However what I want to do is more difficult and I'm getting stumped...the plethora of tutorials and topics out there are very helpful, but many are beyond my scope or lacking somewhere. Anyway, I'm editing FE8 right now, mostly just tweaking some things that I've never liked about the game; easy stuff like stat caps, promotion branches, items etc. All nightmare stuff. I've also done some palette editing for portraits and sprites, which included some hex work for the lords since they don't have palette pointers. Most recently I've created a custom portrait and sprite palette that I've successfully put into the game just to make sure they work by replacing a character, but I would really like to add an entirely new character to the game. Which brings me to my first stump point. As I said, I've created the stuff I need for it, but I'm not really sure exactly how to insert a new character into the game. I'm making a mage knight, so no custom animations/classes or anything, just a recoloured battle sprite and a custom portrait, so no issues there. If I can help it I'd really rather not replace any characters. I've heard mention of extra spaces that are just empty, so if that's how it's done I really need info on how to get my new stuff into that area (manual hex editing then adjusting pointers?). Alternatively, I've noticed people talking about modifying events/using the chapter unit editor nightmare module, and on my own I've noticed that nightmare has a lot of empty slots in the character editor module that just have "mountain thief" (bandit I'm pretty sure). Are these available as replacers or are they important for something?That would mean I only have to figure out how to get an extra portrait in as well as the extra battle sprite palette. Plus an event to recruit them I suppose (haven't done this yet, but I think there are a number of tutorials for this). If you just add a unit using events, does that just write all the necessary data to the empty space automatically? My second question is about weapon ranks, but I suspect it's quite a bit more difficult, if even possible. I've always hated the idea that you can only get one weapon to S through training. For one, it means that for some characters you have to choose which one (staff users especially...), plus it's SUPER annoying when you accidentally hit it when you didn't mean to, or are afraid to use a certain weapon too much even when it would be more beneficial (e.g. In a group of pirates, your cavalier having to use a lance so you don't accidentally level up swords too far). This is especially true for characters who either gain an extra weapon type upon promotion that starts WAAYY lower than the main weapon, or characters that come with base levels much higher (e.g. Duessel with axes up higher than swords/lances, but in that case it's ok because I want him S with axes :P). Anyway, I guess you didn't need the reasoning...is this possible? I know like Athos and Lyon can do it, but it looks like the way that was done was just to give them their own unique classes and set their base rates at S so they're always up there. I would much prefer training there if possible :) Thanks in advance!! Sorry it was so long-winded! Quote Link to comment Share on other sites More sharing options...
Tables Posted February 18, 2014 Share Posted February 18, 2014 Duessel's weapon levels all start the same... To answer your questions (kinda somewhat): Most of the generic information filled character slots are open for use. If you aren't sure, change an enemy (probably a Prologue Fighter) into that character slot and see what happens to their name and description, or just check what the name data is pointing at. If it's something like 'dummy' then that slot is unused. I can't help much more than that I'm afraid. As for weapon levels, I think you need to do ASM hacking to change that. I don't know what Lyon has which makes him different. Quote Link to comment Share on other sites More sharing options...
Hellequin Posted February 18, 2014 Author Share Posted February 18, 2014 Thanks for the reply Tables! First off, haha my bad, you're right about Duessel. It was his WEAPONS that had the preference for axes (silver axe and steel lance). But not important. Second, yeah...I was afraid of that. I figured it would have to be something complicated like ASM hacking which I'm going nowhere near, so I suppose I'll just have to live with it. Third: Ok, so I took your advice and changed around the info for one of the prologue fighters to try and get my guy into the game. I successfully changed his name and portrait as well as his description using FEditor Adv (which led to some interesting effects...soldiers all being named "Leclerc" with a special description since those pointers were apparently generic haha). For the portrait I replaced 0x6E, which was "Novala clone". I don't know if that's actually used for anything (It's Novala, a shaman boss from one of the first few chapters - the one with the hostages for the spider - with a different palette), so if that isn't actually used that would be awesome since I wouldn't have to figure out how to inset a new portrait into empty space. I haven't figured out how to get his new battle palette in yet though...for now it's generic class default. I did notice some ??? entries in Nightmare though in the battle palette reference module...they have pointers but apparently no one knows what they're for. Can they be safely replaced? For the rest, I just changed everything in Nightmare (allegiance, level, promoted unit, promoted mounted unit, etc. and used the CUE to put him in in place of the fighter). I also noticed just browsing through Nightmare that after the prologue the bandits in the chapters I looked through all used the same character number, like 0x8E or something, so that's promising for all of those empty spots. I should probably be thorough though and actually go through each chapter and make sure they don't have a special purpose. Also, I noticed that the character did, in fact, stay with you (chapter 4 - I think - that has the first battle prep screen has him in there...none of the others obv since I didn't add him to the chapter data), but it acted kind of wonky since it considered him a member of the team but nowhere on the map since the chapter data doesn't have him. What I mean is that after everyone was grayed out the turn didn't end because I assume the game thought there was another character still to move. I'll just make sure to put him in sometime after that when we have a prep screen. SO, if I can get this all to work, all I'll need to do is create an event for his recruitment, probably in the chapter 12-ish range, although it may be easier to put him in either before or after the lord split. Thanks again for your help...if you know anything more about what I've said please let me know! This is coming along very nicely :) Quote Link to comment Share on other sites More sharing options...
Hellequin Posted February 19, 2014 Author Share Posted February 19, 2014 update: Ok so I replaced one of the randomly empty spots with my custom character. 0x1b is the character reference, which for some reason was empty between Dozla and Rennac. There may be an issue here, but I won't know it until I test Eirika's route, so I'll have to replay the beginning chapters to get there. I've looked through most of the chapters in the CUE and haven't found any reference to 0x1b so far though, so I doubt it's anything. I also discovered a portrait that was literally labelled "unused man" in Nightmare, so that's the one I've now replaced with my portrait. I was able to successfully change his name with the FEditor Adv text editor module, but I'm having trouble with the description still. The description is being weird...between FEditor Adv (FEA from now on) and Nightmare, it seems that there is a discrepancy in the text pointer. In Nightmare, for example, Rennac's description is put at 0x88. In FEA, however, this address is 0288. Nightmare won't allow me to type in 0x288 for the description, and instead outputs in-game what FEA has as 0088, which is like "OFF" or something equally not for character descriptions. I've tried replacing a little-used actual character description (like an NPC that you have to rescue in the chapter with Syrene...17 I think), but again the same thing happens only it uses a different glitchy-looking text. The other major problem I still can't figure out is how to assign his palette to him. I used one of the two ??? palettes from the battle palette reference module of nightmare and replaced it with his using APE, but I don't know how to point it to him. Since the character slot I used to put him in is apparently a generic character, they don't have a speical palette pointer of their own, they just use default 0x00. I assume what I need to do is hex edit the pointer, but I'm not exactly sure how to do this. More specifically, how can I locate 0x1b character reference in hex and pair it with the palette reference? Other than that, once I get these working as they should and I'm convinced that I've put him in smoothly without glitches etc or royally messed anything up, I'll start on creating an event for recruitment. But that's down the road, this stuff is more important first. When I do get to it I'm sure I'll have more questions lol. Any help is greatly appreciated! Quote Link to comment Share on other sites More sharing options...
Alfred Kamon Posted February 19, 2014 Share Posted February 19, 2014 The description is being weird...between FEditor Adv (FEA from now on) and Nightmare, it seems that there is a discrepancy in the text pointer. In Nightmare, for example, Rennac's description is put at 0x88. In FEA, however, this address is 0288. Nightmare won't allow me to type in 0x288 for the description, and instead outputs in-game what FEA has as 0088, which is like "OFF" or something equally not for character descriptions. I've tried replacing a little-used actual character description (like an NPC that you have to rescue in the chapter with Syrene...17 I think), but again the same thing happens only it uses a different glitchy-looking text. That happens because that Nightmare Module has an error. Open it in Notepad and.... uh... I don't remember exactly how you fixed that (someone please correct me if I'm wrong), but maybe you just have to edit this: Description value 2 1 -> change to "2" NEHU NULL again, I'm not 100% sure. Maybe test it around a bit and let me know. The other major problem I still can't figure out is how to assign his palette to him. I used one of the two ??? palettes from the battle palette reference module of nightmare and replaced it with his using APE, but I don't know how to point it to him. Since the character slot I used to put him in is apparently a generic character, they don't have a speical palette pointer of their own, they just use default 0x00. I assume what I need to do is hex edit the pointer, but I'm not exactly sure how to do this. More specifically, how can I locate 0x1b character reference in hex and pair it with the palette reference? There should be another Module for that... though it isn't usually included in the standard packs, maybe search around a bit. Basically there are 3 modules for palettes, one where you should specify which classes your character has (if they don't match the palette(s) won't apply), another that points to the palettes he should use and another one that points to the palettes data in hex. If I understood correctly, you need the one in the middle right now. Quote Link to comment Share on other sites More sharing options...
Hellequin Posted February 19, 2014 Author Share Posted February 19, 2014 Omg Alfred you have no idea how much stress you saved me lol. That literally solved my problems in like 10 minutes! That happens because that Nightmare Module has an error. Open it in Notepad and.... uh... I don't remember exactly how you fixed that (someone please correct me if I'm wrong), but maybe you just have to edit this: Description value 2 1 -> change to "2" NEHU NULL again, I'm not 100% sure. Maybe test it around a bit and let me know. Worked flawlessly...changing that to a 2 allowed me to put in all 3 numbers/letters which linked perfectly to the descriptions, glitchiness-free :D There should be another Module for that... though it isn't usually included in the standard packs, maybe search around a bit. Basically there are 3 modules for palettes, one where you should specify which classes your character has (if they don't match the palette(s) won't apply), another that points to the palettes he should use and another one that points to the palettes data in hex. If I understood correctly, you need the one in the middle right now. this worked too...found the missing modules here: http://serenesforest.net/forums/index.php?showtopic=26737 There is a separate folder for battle palette editors in the package that has the modules you mentioned. Part 1 lists what possible classes there are (for me, he's a prepromoted mage knight so just the one), and part 2 asks for the pointer. Since I used the ??? one I just pointed it there and voilà , proper palette. Thanks so much for your help! Now I'm off to write an event for recruitment...so I'll probably be back lol. Quote Link to comment Share on other sites More sharing options...
CT075 Posted February 19, 2014 Share Posted February 19, 2014 Open it in Notepad and.... uh... I don't remember exactly how you fixed that (someone please correct me if I'm wrong), but maybe you just have to edit this: [sNIP] yeah that's correct basically whoever wrote the nightmare module accidentally told it that it's only a one byte field when it should actually be a two-byte field so it only lets you edit the last byte Quote Link to comment Share on other sites More sharing options...
Alfred Kamon Posted February 20, 2014 Share Posted February 20, 2014 Omg Alfred you have no idea how much stress you saved me lol. That literally solved my problems in like 10 minutes! Hey man, I'm glad I was able to help you! =] yeah that's correct basically whoever wrote the nightmare module accidentally told it that it's only a one byte field when it should actually be a two-byte field so it only lets you edit the last byte Oh I see. Well, I suppose that happens. Someone should just correct/gather all the new Modules and upload them somewhere. probably not gonna happen but it would be best for everyone Quote Link to comment Share on other sites More sharing options...
Hellequin Posted February 20, 2014 Author Share Posted February 20, 2014 Ok, I really appreciate everyone's help with this little endeavour. I've learned a lot! I have one more question...I've been trying to learn the eventing stuff, but programming with code stuff is really not my forte. I think I've got what I need but I don't know if it's right or where to put it. I know the general protocol is just to try it and play around, but if it is wrong, which it probably is, I would have absolutely no idea how to fix it. Ok, so I want my character to be recruited in chapter 12 Eirika or chapter 13 for Ephraim. For both chapters, I want the event to occur turn 1, just after the events that naturally occur at this time. The character should spawn in as an ally, (holding an Elfire, Mend, and Elixir) then immediately run up to the tile just beside the lord and initiate the conversation. Since they're already an ally they don't need to be turned or have a special speaking event since it happens right away automatically. This is what I have for Eirika...Ephraim's should be almost exactly the same, except with different coordinates and a different text pointer: Turn EventPlayer (0x00, LeclercRec, 01) UNIT 0x1B 0x29 0x00 Level(1,Ally,False) [0, 21] 0x00 0x00 0x01 LeclercRec [0x3A, 0x4C, 0x6D, 0x00] NoAI LeclercRec: MUS 0x30 REDA [2, 21] 0x3 0x00 0x20 TEXTSTART TEXTSHOW 0x839 TEXTEND REMA Like I said, it's probably not correct, and I have no idea where to put it. I largely copied from what the game had for the normal beginning scenes and what Alfred posted for Duncan Idaho in his thread, drawing a little from the event hacking for dummies guide by Arch. Thanks again! Quote Link to comment Share on other sites More sharing options...
Hellequin Posted February 22, 2014 Author Share Posted February 22, 2014 (edited) Ok after brushing up on the stuff in the Event Hacking for Dummies tutorial and rereading some of the codes in the files, I touched up my codes, put them where I thought they should go and attempted to reassemble. I got this error: Line 134, Column 28: Didn't reach end, currently at Comma(,) This is where the "UNIT" line is above. I put the blank unit line after it and made it a separate event that is called by the TURN event, and then calls the LeclercRec event, but otherwise didn't change it. Column 28 happens to be right where the first comma is in the Level section. This is exactly the same format as I have been seeing, so I don't know what is wrong. In case you need it, here are the various pieces that I added in: TurnEventPlayer (0x00, LoadLeclerc, 01) LoadLeclerc: UNIT 0x1B 0x29 0x00 Level(1,Ally,False) [0, 21] 0x00 0x00 0x01 LeclercRec [0x3A, 0x4C, 0x6D, 0x00] NoAI UNIT LeclercRec: MUS 0x30 REDA [2, 21] 0x3 0x00 0x20 CAM1 Eirika TEXTSTART TEXTSHOW 0x839 TEXTEND REMA ENDA Edited February 22, 2014 by Hellequin Quote Link to comment Share on other sites More sharing options...
Alfred Kamon Posted February 22, 2014 Share Posted February 22, 2014 (edited) Hellequin, spaces and caps are very important in events! Also, there are some mistakes there. "LeclercRec" just can't work like that, because the command for repositioning works, in fact, only for repositioning. I'll fix this for you, pay attention to what I do and don't make the same mistakes again, ok? TurnEventPlayer(0x00,LeclercRec,01) LoadLeclerc: UNIT 0x1B 0x29 0x00 Level(1,Ally,False) [0,21] 0x00 0x00 0x01 LeclercRepo [0x3A,0x4C,0x6D,0x00] NoAI UNIT LeclercRepo: REDA [2,21] 0b 0x1 0x0 0 LeclercRec: MUS1 0x30 _LOAD1 0x1 LoadLeclerc ENUN// this makes the game wait until the movement(s) is done before executing the events that come next CAM1 Eirika TEXTSTART TEXTSHOW 0x839 TEXTEND REMA _0x0228 0x7//this code is always needed to end events. Otherwise in FE8 you get a random FADU effect ENDA Edited February 22, 2014 by Alfred Kamon Quote Link to comment Share on other sites More sharing options...
Hellequin Posted February 22, 2014 Author Share Posted February 22, 2014 (edited) Thanks again, Alfred. You're a huge help...I really owe you one. I didn't know about that stuff you mentioned but I won't forget it in the future. I'm still getting the comma error though. Maybe I disassembled wrong or something but I don't think so. Now it's saying Line 140 is the bad line, which is where the TurnEventPlayer line is. It's stopping at the comma for some reason...last time it was the UNIT line, but all that stuff is at the bottom now so it isn't making it that far. Any suggestions? I've seen numerous posts about this on the EA board but I haven't seen a definitive answer as to what causes it. If I change that line to the raw code version instead of the macro version then the UNIT line becomes problematic again...I've copy/pasted your lines. Edited February 22, 2014 by Hellequin Quote Link to comment Share on other sites More sharing options...
Alfred Kamon Posted February 22, 2014 Share Posted February 22, 2014 It's cool, don't worry. :) Mmmh, that's quite strange. Could I see your whole event file? Quote Link to comment Share on other sites More sharing options...
Hellequin Posted February 22, 2014 Author Share Posted February 22, 2014 (edited) here you go :) /////////////////////////////////////////////////////////////// //// Disassembled with Nintenlord's Event Assembler //// Version: 9.10.4713.28131 //// Game: FE8 //// File: Fire Emblem - the Sacred Stones_HellequinHack.GBA //// Offset: $9E94E8 //// ///////////////////////////////////////////////////////////////ORG $591F40label26:_0x1020 0x1_0x0220 0x2_0x0320 0x8_SETCONDITION 0x0 0xC 0x0FADU 16ENIF 0x0_0x1020 0x0ENDAlabel15:_0x1020 0x1_0x0220 0x2_0x0320 0x8_SETCONDITION2 0x0 0xC 0x0FADI 16ENIF 0x0_0x1020 0x0ENDA//The next line is for re-assembling purposes. Do not delete!MESSAGE Original ending offset is $591F88 and the new ending offset is CURRENTOFFSETORG $591FD8label33:CALL label15_0x2220_0x3E20_0x2220ENDA//The next line is for re-assembling purposes. Do not delete!MESSAGE Original ending offset is $591FF0 and the new ending offset is CURRENTOFFSETORG $592104label23:_0x1020 0x4ASMC 0x85375ENDA//The next line is for re-assembling purposes. Do not delete!MESSAGE Original ending offset is $592114 and the new ending offset is CURRENTOFFSETORG $8BA170Units1:UNIT 0x1 0x2 0x0 0x50 [1,21] 0b 0x0 0x0 0x0 [0x9,0x6C,0x6C,0x0] [0x0,0x0,0x0,0x0]UNIT 0x17 0x27 0x0 0x8 [1,20] 0b 0x0 0x0 0x0 [0x3A,0x39,0x0,0x0] [0x0,0x0,0x0,0x0]UNIT 0x2 0x7 0x0 0x50 [2,22] 0b 0x0 0x0 0x0 [0x17,0x6C,0x6C,0x0] [0x0,0x0,0x0,0x0]UNIT 0x2 0x7 0x0 0x50 [4,23] 0b 0x0 0x1 0x8BA040 [0x17,0x6C,0x6C,0x0] [0x0,0x0,0x0,0x0]UNIT 0x2 0x7 0x0 0x50 [4,24] 0b 0x0 0x0 0x0 [0x17,0x6C,0x6C,0x0] [0x0,0x0,0x0,0x0]UNIT 0x2 0x7 0x0 0x50 [3,23] 0b 0x0 0x0 0x0 [0x17,0x6C,0x6C,0x0] [0x0,0x0,0x0,0x0]UNIT 0x2 0x7 0x0 0x50 [1,23] 0b 0x0 0x0 0x0 [0x17,0x6C,0x6C,0x0] [0x0,0x0,0x0,0x0]UNIT 0x15 0x4D 0x0 0x50 [3,21] 0b 0x0 0x0 0x0 [0x6C,0x0,0x0,0x0] [0x0,0x0,0x0,0x0]UNIT 0x2 0x7 0x0 0x50 [0,22] 0b 0x0 0x0 0x0 [0x17,0x6C,0x6C,0x0] [0x0,0x0,0x0,0x0]UNIT 0x2 0x7 0x0 0x50 [0,20] 0b 0x0 0x0 0x0 [0x17,0x6C,0x6C,0x0] [0x0,0x0,0x0,0x0]UNIT 0x2 0x7 0x0 0x50 [2,20] 0b 0x0 0x0 0x0 [0x17,0x6C,0x6C,0x0] [0x0,0x0,0x0,0x0]UNIT 0x2 0x7 0x0 0x50 [4,21] 0b 0x0 0x0 0x0 [0x17,0x6C,0x6C,0x0] [0x0,0x0,0x0,0x0]UNITlabel31:UNIT 0x50 0x5E 0x0 0x4C [12,2] 10b 0x0 0x0 0x0 [0x25,0x2E,0x0,0x0] [0x3,0x3,0xC,0x0]UNIT 0xBB 0x63 0x0 0x4D [11,28] 0b 0x0 0x0 0x0 [0x14,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xBB 0x63 0x0 0x55 [16,26] 0b 0x0 0x0 0x0 [0x14,0x1C,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xBB 0x63 0x0 0x4D [15,14] 0b 0x0 0x1 0x8BA048 [0x14,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xBB 0x63 0x0 0x4D [14,14] 0b 0x0 0x1 0x8BA050 [0x14,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xBB 0x63 0x0 0x4D [18,1] 0b 0x0 0x0 0x0 [0x16,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xBB 0x63 0x0 0x4D [18,3] 0b 0x0 0x0 0x0 [0x16,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xB0 0x58 0x0 0x55 [13,26] 0b 0x0 0x0 0x0 [0x8B,0x0,0x0,0x0] [0x0,0x0,0xC,0x0]UNIT 0xB0 0x58 0x0 0x4D [16,14] 0b 0x0 0x0 0x0 [0x8B,0x0,0x0,0x0] [0x0,0x0,0xC,0x0]UNIT 0xB0 0x58 0x0 0x55 [3,4] 0b 0x0 0x0 0x0 [0x8B,0x0,0x0,0x0] [0x0,0x0,0xC,0x0]UNIT 0xB0 0x58 0x0 0x4D [16,3] 0b 0x0 0x0 0x0 [0xAF,0x0,0x0,0x0] [0x0,0x0,0xC,0x0]UNIT 0xB0 0x58 0x0 0x4D [7,14] 0b 0x0 0x1 0x8BA058 [0x8B,0x0,0x0,0x0] [0x0,0x0,0xC,0x0]UNIT 0xB0 0x58 0x0 0x4D [14,29] 0b 0x0 0x0 0x0 [0xAF,0x0,0x0,0x0] [0x0,0x0,0xC,0x0]UNIT 0xB3 0x5B 0x0 0x4D [18,19] 0b 0x0 0x1 0x8BA060 [0xB1,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xB3 0x5B 0x0 0x55 [18,20] 0b 0x0 0x1 0x8BA068 [0xB1,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xB3 0x5B 0x0 0x4D [8,14] 0b 0x0 0x1 0x8BA070 [0xB1,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xB7 0x5F 0x0 0x4D [1,10] 0b 0x0 0x0 0x0 [0xB3,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xAC 0x54 0x0 0x3D [10,3] 0b 0x0 0x0 0x0 [0x3,0x0,0x0,0x0] [0x0,0x3,0x4,0x0]UNIT 0xAC 0x54 0x0 0x3D [13,3] 0b 0x0 0x0 0x0 [0x16,0x0,0x0,0x0] [0x3,0x3,0x4,0x0]UNIT 0xB7 0x5F 0x0 0x4D [2,12] 0b 0x0 0x0 0x0 [0xB3,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xB7 0x5F 0x0 0x4D [5,5] 0b 0x0 0x0 0x0 [0xB3,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xB7 0x5F 0x0 0x4D [8,6] 0b 0x0 0x0 0x0 [0xB3,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xAA 0x52 0x0 0x55 [9,25] 0b 0x0 0x1 0x8BA078 [0xAD,0x0,0x0,0x0] [0x0,0x0,0xC,0x0]UNIT 0xAA 0x52 0x0 0x55 [10,25] 0b 0x0 0x1 0x8BA080 [0xAD,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xB5 0x5D 0x0 0x4D [12,5] 0b 0x0 0x0 0x0 [0x20,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xB5 0x5D 0x0 0x4D [19,11] 0b 0x0 0x0 0x0 [0x20,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xB3 0x5B 0x0 0x45 [10,8] 0b 0x0 0x0 0x0 [0xB1,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xB3 0x5B 0x0 0x45 [12,8] 0b 0x0 0x0 0x0 [0xB1,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT 0xB0 0x58 0x0 0x55 [3,0] 0b 0x0 0x0 0x0 [0xAF,0x0,0x0,0x0] [0x0,0x0,0xC,0x0]UNIT 0xB0 0x58 0x0 0x55 [17,0] 0b 0x0 0x0 0x0 [0x8B,0x0,0x0,0x0] [0x0,0x0,0xC,0x0]UNIT 0xAB 0x53 0x0 0x25 [18,5] 0b 0x0 0x0 0x0 [0xAE,0x0,0x0,0x0] [0x3,0x3,0x4,0x0]UNITlabel35:UNIT 0xAA 0x52 0x0 0x55 [7,12] 0b 0x0 0x0 0x0 [0xAD,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT//The next line is for re-assembling purposes. Do not delete!MESSAGE Original ending offset is $8BA51C and the new ending offset is CURRENTOFFSETORG $8BA5D0label36:UNIT 0x18 0x3E 0x1 0x8 [5,12] 0b 0x0 0x1 0x8BA0C0 [0x38,0x5C,0x6C,0x0] [0x0,0x0,0x0,0x0]UNITlabel30:UNIT 0x17 0x27 0x0 0x8 [0,21] 0b 0x0 0x1 0x8BA0C8 [0x3A,0x39,0x0,0x0] [0x0,0x0,0x0,0x0]UNIT 0xB 0x1B 0x0 0x8 [0,22] 0b 0x0 0x1 0x8BA0D0 [0x0,0x0,0x0,0x0] [0x0,0x0,0x0,0x0]UNIT 0x19 0x4B 0x0 0x8 [0,21] 0b 0x0 0x1 0x8BA0D8 [0x0,0x0,0x0,0x0] [0x0,0x0,0x0,0x0]UNIT 0x2 0x7 0x0 0x8 [0,22] 0b 0x0 0x1 0x8BA0E0 [0x0,0x0,0x0,0x0] [0x0,0x0,0x0,0x0]UNIT 0x1 0x2 0x0 0x8 [0,20] 0b 0x0 0x1 0x8BA0E8 [0x0,0x0,0x0,0x0] [0x0,0x0,0x0,0x0]UNITlabel34:UNIT 0x18 0x3E 0x1 0x8 [12,5] 0b 0x0 0x3 0x8BA0F0 [0x0,0x0,0x0,0x0] [0x0,0x0,0x0,0x0]UNIT 0xC5 0x52 0x0 0x55 [12,4] 0b 0x0 0x3 0x8BA108 [0x0,0x0,0x0,0x0] [0x0,0x3,0xC,0x0]UNIT_0x0228 0x7//this code is always needed to end events. Otherwise in FE8 you get a random FADU effectENDA//The next line is for re-assembling purposes. Do not delete!MESSAGE Original ending offset is $8BA6AC and the new ending offset is CURRENTOFFSETORG $9E9450TurnBasedEvents:TURN 0x7 label16 [1,255] 0x0TURN 0x8 label17 [1,255] 0x0TurnEventPlayer(0x00,LeclercRec,01)END_MAINCharacterBasedEvents:END_MAINLocationBasedEvents:LOCA 0x0 label18 [6,10] 0x10LOCA 0x0 label19 [5,12] 0x10SHOP 0x0 label20 [17,6] 0x17END_MAINMiscBasedEvents:AFEV 0x3 EndingScene 0x6AREA 0x9 label21 [8,0] [19,9]AREA 0xA label22 [0,10] [19,15]AREA 0xA label22 [0,0] [7,9]AFEV 0x0 label23 0x65END_MAINDunno1:END_MAINDunno2:END_MAINDunno3:END_MAINTutorial:END_MAINPointerList:POIN TurnBasedEventsPOIN CharacterBasedEventsPOIN LocationBasedEventsPOIN MiscBasedEventsPOIN Dunno1 Dunno2 Dunno3 TutorialPOIN Traps1 Traps2POIN Units1 Units1POIN $0 $0 $0POIN $0 $0 $0POIN BeginningScene EndingScene//The next line is for re-assembling purposes. Do not delete!MESSAGE Original ending offset is $9E9538 and the new ending offset is CURRENTOFFSETORG $9ED826label20:SHLI 0x38 0x39 0x3F 0x40 0x4B 0x4C 0x50 0x6C 0x6D 0x6E 0x6F//The next line is for re-assembling purposes. Do not delete!MESSAGE Original ending offset is $9ED83E and the new ending offset is CURRENTOFFSETORG $9ED9E1Traps1:ENDTRAP//The next line is for re-assembling purposes. Do not delete!MESSAGE Original ending offset is $9ED9E2 and the new ending offset is CURRENTOFFSETORG $9EDEB4Traps2:ENDTRAP//The next line is for re-assembling purposes. Do not delete!MESSAGE Original ending offset is $9EDEB5 and the new ending offset is CURRENTOFFSETORG $9EE1B8label38:_0x3325 0xFFFF_SETCONDITION 0x0 0xC 0x2CALL label24ENIF 0x0ENDAlabel24:_0x1929_0x0620 0xC2_0x0221 0xFFFF_0x0228 0x7ENDBlabel25:_SETCONDITION 0x0 0xC 0x0_LOAD_WHATEVER 0x1ENUNELSE 0x1ENIF 0x0_LOAD_WHATEVER 0x0ENUNENIF 0x1ENDA//The next line is for re-assembling purposes. Do not delete!MESSAGE Original ending offset is $9EE218 and the new ending offset is CURRENTOFFSETORG $9EE248label32:_0x1927_SETCONDITION2 0x0 0xC 0x0_0x1922_SETCONDITION 0x0 0xC 0x0_0x0620 0x3CCALL label25ENIF 0x0ENDAlabel27:_0x1020 0x4CALL label26_0x0228 0x9_LOAD_WHATEVER 0x1ENUN_0x0220 0x9_0x1020 0x0ENDAlabel39:_0x1927_SETCONDITION2 0x0 0xC 0x0_0x1922_SETCONDITION 0x0 0xC 0x0CALL label27ENIF 0x0ENDAlabel29:_0x0320 0x8_SETCONDITION2 0x80BD 0xC 0x0FADI 16ENIF 0x80BDTEXTSTART_0x2220FADU 16ENDAlabel28:_0x0320 0x8_SETCONDITION2 0x80D2 0xC 0x0FADI 16ENIF 0x80D2_0x1A21_0x2140 0xFFFF 0x0 0x0FADU 16ENDAlabel37:CALL label28_0x0620 0x32TEXTSHOW 0xFFFFTEXTENDCALL label29ENDA//The next line is for re-assembling purposes. Do not delete!MESSAGE Original ending offset is $9EE330 and the new ending offset is CURRENTOFFSETORG $9F4F88BeginningScene:MUS1 0x47_LOAD2 0x1 label30ENUNCUMO 0x1STAL 60CURETEXTSTARTTEXTSHOW 0xA56TEXTEND_0x1326 0x7FFFTEXTCONTTEXTENDREMACAM1 [10,20]_LOAD1 0x1 label31ENUN_SETVAL 0x2 0x88BA6AC_SETVAL 0x3 0x1CALL label32CUMO 0x2STAL 60CUREMUS1 0x25TEXTSTARTTEXTSHOW 0xA57TEXTENDREMAFADI 16_LOAD1 0x0 Units1ENUNCALL label33_0x1324 0x7FFFCAM1 [7,21]FADU 16CUMO 0x17STAL 60CUREMUS1 0xATEXTSTARTTEXTSHOW 0xA58TEXTENDREMACAM1 [9,11]_LOAD2 0x1 label34ENUNCUMO 0x18STAL 60CURETEXTSTARTTEXTSHOW 0xA59TEXTENDREMA_SETVAL 0xD 0x0_SETVAL 0x1 0x2C9_SAVEFORBATTLE_SETVAL 0x1 0x0_SAVEFORBATTLE_SETVAL 0x1 0x309_SAVEFORBATTLE_SETVAL 0x1 0x0_SAVEFORBATTLE_SETVAL 0x1 0x305_SAVEFORBATTLE_SETVAL 0x1 0x0_SAVEFORBATTLE_MOVE3 0x0 0x18 0x0_SETVAL 0xD 0x0_SETVAL 0x1 0x2CB_SAVEFORBATTLE_SETVAL 0x1 0x0_SAVEFORBATTLE_SETVAL 0x1 0x2C9_SAVEFORBATTLE_SETVAL 0x1 0x0_SAVEFORBATTLE_SETVAL 0x1 0x309_SAVEFORBATTLE_SETVAL 0x1 0x0_SAVEFORBATTLE_SETVAL 0x1 0x306_SAVEFORBATTLE_SETVAL 0x1 0x0_SAVEFORBATTLE_MOVE3 0x0 0xC5 0x0ENUNDISA 0x18STAL 30_MOVE 0x8 0xC5 [7,12]ENUNCUMO [5,12]STAL 60CURE_SETVAL 0x2 0x1CALL label28MUNOTEXTSHOW 0xA5ATEXTENDREMAMUSIFADI 16_0x2220DISA 0xC5_LOAD1 0x1 label35ENUN_0x0229 0x7_0x0229 0x8_0x0228 0x7ENDAEndingScene:MUS1 0x31FADI 16_0x342A 0x0_0x342C 0x0_0x342B 0x0_0x3320 0x18_SETCONDITION2 0x2 0xC 0x0_0x3322 0x17_SETCONDITION 0x0 0xC 0x0_SETVAL 0x2 0x1CALL label28TEXTSHOW 0xA5BTEXTENDELSE 0x1ENIF 0x0_0x3322 0x15_SETCONDITION 0x2 0xC 0x0_SETVAL 0x2 0x1CALL label28TEXTSHOW 0xA5CTEXTENDENIF 0x1FADI 16_LOAD1 0x1 label36ENUNENIF 0x2_0x2220CAM1 [12,4]FADU 16STAL 15CUMO [12,1]STAL 60CURE_0x3322 0x17_SETCONDITION 0xA 0xC 0x0_SETVAL 0x2 0x4CALL label28TEXTSHOW 0xA5DTEXTENDREMA_0x1324 0x7FFFFADI 16_SETVAL 0x2 0x1CALL label28MUS1 0x2BTEXTSHOW 0xA5ETEXTEND_0x1324 0x7FFF_0x0E23 0x20MUS1 0x32TEXTCONTTEXTENDREMAFADI 4_SETVAL 0x2 0x3CALL label28TEXTSHOW 0xA5FTEXTENDREMAELSE 0xBENIF 0xAMUS1 0x32_SETVAL 0x2 0x3CALL label28TEXTSHOW 0xA60TEXTENDREMA_0x1324 0x7FFFFADI 16_SETVAL 0x2 0x1CALL label28MUS1 0x2BTEXTSHOW 0xA61TEXTEND_0x1324 0x7FFF_0x0E23 0x20MUS1 0x32TEXTCONTTEXTENDREMAFADI 4_SETVAL 0x2 0x3CALL label28TEXTSHOW 0xA62TEXTENDREMAENIF 0xB_0x0229 0x74MNCH 0xDENDAlabel18:MUNO_SETVAL 0x2 0x1_SETVAL 0x3 0xA63CALL label37MUSICALL label26_SETVAL 0x3 0x59_GIVEITEMTO 0xFFFF_0x2720 0x2_0x0228 0x7ENDAlabel19:MUS2 0x30STAL 33ENIF 0x0_0x2E21_SETVAL 0x7 0x1_SETCONDITION 0x1 0xC 0x7_SETVAL 0x7 0x17_SETCONDITION 0x2 0xC 0x7_SETVAL 0x7 0x15_SETCONDITION 0x3 0xC 0x7_SETVAL 0x2 0x1_SETVAL 0x3 0xA67CALL label37ELSE 0x9ENIF 0x1_SETVAL 0x2 0x1_SETVAL 0x3 0xA64CALL label37ELSE 0x9ENIF 0x2_SETVAL 0x2 0x1_SETVAL 0x3 0xA65CALL label37ELSE 0x9ENIF 0x3_SETVAL 0x2 0x1_SETVAL 0x3 0xA66CALL label37ENIF 0x9_LOAD1 0x1 label36ENUN_0x2720 0x3MURE 0x2_0x0228 0x7ENDAlabel21:_SETVAL 0x2 0x0CALL label38_0x0221 0x7_0x0228 0x7ENDAlabel16:_SETVAL 0x2 0x88BA51CCALL label27_SETVAL 0x2 0x88BA7C4CALL label39_0x0228 0x7ENDAlabel22:_SETVAL 0x2 0x0CALL label38_0x0221 0x8_0x0228 0x7ENDAlabel17:_SETVAL 0x2 0x88BA738CALL label27_SETVAL 0x2 0x88BA7ECCALL label39_SETVAL 0x2 0x88BA788CALL label27_SETVAL 0x2 0x88BA580CALL label27_0x0228 0x7ENDALoadLeclerc:UNIT 0x1B 0x29 0x00 Level(01,Ally,False) [0,21] 0x00 0x00 0x01 LeclercRepo [0x3A,0x4C,0x6D,0x00] NoAIUNITLeclercRepo:REDA [2,21] 0b 0x1 0x0 0LeclercRec:MUS1 0x30_LOAD1 0x1 LoadLeclercENUN// this makes the game wait until the movement(s) is done before executing the events that come nextCAM1 EirikaTEXTSTARTTEXTSHOW 0x839TEXTENDREMA_0x0228 0x7//this code is always needed to end events. Otherwise in FE8 you get a random FADU effectENDA//The next line is for re-assembling purposes. Do not delete!MESSAGE Original ending offset is $9F552C and the new ending offset is CURRENTOFFSET Thanks again, Alfred. Just in case something looks messed up, this is supposed to be Eirika Chapter 12 (Village of Silence). The text pointers all seem correct so it should be the correct chapter. The Leclerc Events that you fixed for me are all right at the bottom, line 588, and the Turn event is at 143. Edited February 22, 2014 by Hellequin Quote Link to comment Share on other sites More sharing options...
Alfred Kamon Posted February 23, 2014 Share Posted February 23, 2014 (edited) You're using a macro (TurnEventPlayer) but you haven't included the line that tells the Assembler to read the standard EA library. Just paste this at the beginning of the file: #include EAstdlib.event Also it won't read your changes right now because you haven't included this either: EventPointerTable(0x??,PointerList) Just paste this below the other code. Go to the event pointer table editor in Nightmare and search the number corresponding to the "events in chapter 12", then insert that byte in place of those question marks. Edit: Ah, if you insert those events I'm 100% sure they'll break the game. Look at where you're inserting the stuff. The last ORG is this: ORG $9F4F88 and according to the last line: MESSAGE Original ending offset is $9F552C and the new ending offset is CURRENTOFFSET It means the events included between those two lines usually end at 0x89F552C, but if you insert more stuff there, then they will end later, overwriting some precious stuff. What do you do, then? Just create an extra ORG pointing to free space and place your adds there. Where is free space in FE8? Check "Free Space.txt" which should be coming with FEeditor. ORG 0x?????? *insert your stuff here* MESSAGE Current events end at CURRENTOFFSET Edited February 23, 2014 by Alfred Kamon Quote Link to comment Share on other sites More sharing options...
Hellequin Posted February 23, 2014 Author Share Posted February 23, 2014 (edited) Lifesaver again. Thanks so much...like I said this coding crap isn't my forte. I know it lets you do pretty much whatever you want and is totally necessary for any competent hack, but it's just not up my alley lol. Anyway it assembled without a hitch after the changes. Thanks so much!! Just to be sure...the changes look like this: 1) Right at the top of the file just after the title box #include EAstdlib.event EventPointerTable(0x37,PointerList) 2)All the other crap at the bottom ORG 0x00B2A610 TurnBasedEvents: TurnEventPlayer(0x00,LeclercRec,01) TURN Now just to get to chapter 12 to test it and see if my FEditor texting stuff worked :) LoadLeclerc: UNIT 0x1B 0x29 0x00 Level(01,Ally,False) [0,21] 0x00 0x00 0x01 LeclercRepo [0x3A,0x4C,0x6D,0x00] NoAI UNIT LeclercRepo: REDA [2,21] 0b 0x1 0x0 0 LeclercRec: MUS1 0x30 _LOAD1 0x1 LoadLeclerc ENUN// this makes the game wait until the movement(s) is done before executing the events that come next CAM1 Eirika TEXTSTART TEXTSHOW 0x839 TEXTEND REMA _0x0228 0x7//this code is always needed to end events. Otherwise in FE8 you get a random FADU effect ENDA //The next line is for re-assembling purposes. Do not delete! MESSAGE Original ending offset is $00B2A610 and the new ending offset is CURRENTOFFSET Edited February 23, 2014 by Hellequin Quote Link to comment Share on other sites More sharing options...
Alfred Kamon Posted February 23, 2014 Share Posted February 23, 2014 (edited) ORG 0x00B2A610 TurnBasedEvents: TurnEventPlayer(0x00,LeclercRec,01) TURN whelp, you can't do that, there can only be one "TurnBasedEvents". I assume you kept the original one, right? Just transfer the original down there and add your personal TURN event. Removing things from their original places won't break anything, it's just adding that could be dangerous. Edited February 23, 2014 by Alfred Kamon Quote Link to comment Share on other sites More sharing options...
Hellequin Posted February 23, 2014 Author Share Posted February 23, 2014 lol ahh, good ole' FE name calling. classic. Anyway, thanks again. I told you this wasn't my thing. Well, I figured since you couldn't add there you'd have to put it into the custom stuff going into free space. Then I figured that since it was "closed" (i.e. with END_MAIN)in the normal area above you couldn't just have the solitary "Turn" line, so I figured you'd have to re-call the turn part. Believe it or not I took an introductory programming class in high school lol. But that was with Turing I think, which is far more black and white than all this macro stuff. If you wanted a variable/macro, you had to define it yourself with like, math equations essentially. You couldn't just say "define" or whatever, and you'd have to tell it if it was string or boolean or whatever. And if a loop was closed you would have to reopen it or add to it if you wanted to make an edit like this one. Idk, it's been a while, but that's my logic for that. I know programming has made serious improvements since then so it's pretty far over my head now. I guess you didn't really need the logic behind it but there you go. Thanks again for all of your help...I'll let you know how it turns out. Then to adapt it to Ephraim, but that should just be coordinates and a different text pointer. Quote Link to comment Share on other sites More sharing options...
Alfred Kamon Posted February 23, 2014 Share Posted February 23, 2014 Sure, let me know! ^^ And yup, your guesses were right. You did well replacing the END_MAINs. And thanks for the little lesson, it was quite entertaining, haha! ^^ I didn't do any programming back in high school so all this stuff is new for me 'Later! Quote Link to comment Share on other sites More sharing options...
Hellequin Posted February 23, 2014 Author Share Posted February 23, 2014 With those tweaks it worked flawlessly. I moved the Cam up to the top of the event because he was loading and moving before it had faded back in after Ewan's event. I also added a cursor flash on him before the conversation to make it more noticeable. I also moved his loading position up to the top spot so that he moved more than two spaces. Otherwise I had a couple of sprite and text touch-ups but it's all good now. Thanks so much for all of your help again. It's not common that someone is willing to go that out of their way for you to help you out. I know it must be frustrating to deal with noobs like myself. So thanks. Not that I'd likely ever be much assistance to you, but if you did need anything just let me know. Quote Link to comment Share on other sites More sharing options...
Alfred Kamon Posted February 23, 2014 Share Posted February 23, 2014 Oh, I'm glad everything worked! :) And don't worry, I'm just happy to help people, especially if they're like you, haha! I don't find it frustrating at all honestly, what's most frustrating is when you write a lot to help someone and then that someone doesn't apply enough. It makes me feel I've wasted my time for someone who doesn't even care about his own stuff, or who isn't willing to put much effort in it. You're doing your own job here, and that's enough to repay me. Cheers! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.