Jump to content
Aleph

Hexware

Recommended Posts

noob, I could've wrote it in 1/3 the time with 1/3 the code

in all seriousness idk how to get this working either and macs are dumb

never underestimate ourmy incapability to figure out something on my own

Share this post


Link to post
Share on other sites

I decided to just leave the .log file available since I'm still picking at the code. I've updated it to properly update support levels for the target unit as well. It seems infeasible to find a more automatic way of clearing the event pointer so that the same event isn't fired over and over (which makes the game unplayable), so I'm about to test the original idea I had of simply making the event wipe the pointer itself. Assuming that works, all that's left is providing a way to display the classic "Support Lv. increased" dialog to have (I think, anyway) the functionality of regular supports retained.

Edit: I disassembled the event I was testing with and reassembled it at 0x08D01000 with an "ASMC 0x08D00251" (the location of

133: 08d00250 0 NOTYPE LOCAL DEFAULT ABS ESPC_FUNC_ORIGIN

plus 1 (for Thumb mode)) and pointed my test data to that event. It cleared the event pointer appropriately and everything went smoothly.

Edited by Aleph

Share this post


Link to post
Share on other sites

Guys are you gonna use this thing? I kinda put a lot of work into it and it was your idea so...

Share this post


Link to post
Share on other sites

I've been trying to use it, I'm just too stupid to figure out how to use the assembler. I did what Brendor said and it's still giving me error messages... pulling a pack yak here

I hate to ask, but could you provide a step-by-step guide as to how to use it? The assembly patcher is simple enough to use, but I still can't work out how to assemble a new .dmp from the .txt. I realise you're meant to get the Assemble ARM batch file which is what I've done, but I'm still getting error messages like "[file path]\arm-eabi-as is not recognised as an internal or external command". I changed all of them to arm-none-eabi-blah and it gives the same error message. I changed all the file paths to correspond to my own folder and it's still not working, so I'm lost. If someone could provide detailed step-by-step explanation as to what to do, that would be ideal.

Share this post


Link to post
Share on other sites

Well I can assemble the source for you if that's what you need. The .dmp is up to date. If you want me to assemble it with a different allocation address then you have to tell me where it goes. The problem with giving you steps is that you're probably doing the right thing already - it's not working because I have an old version of devkitARM that I've been using for a long time. I don't really know why it won't assemble fot you, but it doesn't need to. I can handle that. The .dmp file is the "end product" so just worry about getting that part to work. If you make an honest effort and things aren't going so well I can make a patch for you, but I'll need a patch of whatever you have so that I can make a patch for your...patch...

Share this post


Link to post
Share on other sites

Just to clarify, if I need to make any more than one entry, do I need to assemble a new .dmp? Or can I just keep adding values and add the 00s at the end to indicate the data has ended? I think I'm still confused as to how this thing works @[email protected]

Share this post


Link to post
Share on other sites

It's designed to be easy to use. Yes, you just add values. Assembling the source again is actually slower for adding values than appending them with a hex editor. The entire point of the 0x00 thing is so that you can specify the end of the data yourself so the assembler doesn't have to know. It can't know.

Edited by Aleph

Share this post


Link to post
Share on other sites

seems easy enough but one thing's bugging me.

at the start of the .dmp file there's a 01 00 D0 08 and then 00 00 D0 08

I know the 00 00 D0 08 is the pointer to the allocated data but is the 01 00 D0 08 relevant to change too or does it get left alone?

Share this post


Link to post
Share on other sites

So I've tried this out. I gave Rebecca and Lowen an extremely simple event that just gives an Armads to Rebecca. The actual support event and support level raising works fine, but:

-On the turn that the support is first activated, I can't access the field menu (Suspend/Guide/End/etc), and no units can take any actions; their turns instead end with activating the support event again. Those units with Canto will activate it twice.

-The first enemy to attack on the following enemy phase performs an amazing six-hit combo, including a poisoning (doesn't stick though) and a critical Devil backfire. After that, everything goes back to normal.

I used the Assembly patcher to use the .dmp file that came with the download.

These are my parameters for ESUS_HACK_DATA:

0E 19 00 00
00 05 D2 08
00 06 D2 08
00 07 D2 08
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00

This is the event file I used:

#include EAstdlib.event

ORG $D20500
Support1:
ITGC Rebecca Armads
ENDA

ORG $D20600
Support2:
ITGC Lowen Durandal
ENDA

ORG $D20700
Support3:
ITGC Eliwood Excalibur
ENDA

Share this post


Link to post
Share on other sites

-The first enemy to attack on the following enemy phase performs an amazing six-hit combo, including a poisoning (doesn't stick though) and a critical Devil backfire.

this should not be a problem obviously it's working perfectly nothing to see here folks

Share this post


Link to post
Share on other sites

^ Did you clear the event pointer using an ASMC to the function the hack provides? It doesn't sound like you did. You really need to clear that pointer.

Guys, if you want the hack moved you will have to reassemble it. Adding data to it is fine, but re-assembling the source is the only sane way to change where it is located. There are many more references to update than you probably think there are. The source file was written so only one place has the "0x08D00000" allocation address, but the resulting .dmp has many, many values that are derived from that.

I've offered to re-assemble the source with a custom allocation address for anyone who needs it. This will also change the value of ESPC_FUNC_ORIGIN, which means the value you use as the ASMC argument to clear the pointer will change too. The .log file that the assembler outputs, which is still available for viewing in the output folder, reports things like how many bytes the hack's size is and where ESPC_FUNC_ORIGIN is.

Also note that this project is the most recent thing I've worked on, so the .rss feed in my signature has a direct link to the files...

Edited by Aleph

Share this post


Link to post
Share on other sites

Oops, missed that part. I reassembled the events with the ASMC command and now it works perfectly. Oh well, it was worth seeing the Astra brigand anyhow.

For anybody else wanting to use this, by default the function you want to call (ESPC_FUNC_ORIGIN) is located at 0x8D00250. Since it's in thumb mode, you'll want your support event to say ASMC $D00251.

Edited by Vennobennu

Share this post


Link to post
Share on other sites

wait now I'm confused. isnt the support system supposed to work normally like the "Support" command is available after waiting next to the supporting unit for a number of turns and then the hack reads what pointer is assigned to the support level? so what's the asmc for?

Share this post


Link to post
Share on other sites

Exactly what I said it's for. We discussed this in the PM: There's a pointer in the WRAM that I "created" that, when set to a non-null value, will fire the events pointed to by that pointer when you are in the unit menu (where you would normally select Support/Visit/Wait etc.). This hack sets that pointer when you choose a unit to support with, which is done normally. This only occurs if units and the support level involved with the support you've executed are in the list at ESUS_DATA_ORIGIN. If you do not unset that pointer then the same event will fire every time that menu code is reached from then on. There's no convenient way for me to program it to be cleared automatically (I've looked into it some though) so I've provided an alternative solution - clear the pointer yourself using the ASMC.

Edited by Aleph

Share this post


Link to post
Share on other sites

Yeah I mean I need to make sure this Event Support thing is able to be used by Agro first. I can multi task but I'm doing that already.

Edited by Aleph

Share this post


Link to post
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.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...