Golden Sun Hacking Community
January 19, 2018, 11:25:42 AM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
  Home Forum DC Wiki Help Search Calendar Downloads Login Register  
  Show Posts
Pages: [1] 2 3 ... 152
1  The Editor / Golden Sun Hacking / Re: [SOLVED] Rearraging Djinn encounters on: January 09, 2018, 02:08:22 PM
You are welcome.

And yes, that's it!

Not to worry, there are some things I have yet to understand as well. (But it probably wouldn't be that difficult to figure out.)

In both cases (the dungeon and the world map), the same function gets called. (Interesting.)

The arguments are:
r0 = NPC id
r1 = Djinni id

The dungeon is:
r0 = 00000008
r1 = 0000000A

And what I saw that was interesting, was:

The world map had it as:
r0 = 0000080C
r1 = 0000001F

This suggests that the "8" may mean something. (Another thing I haven't learned about/documented! Exciting!) Probably the difference between whether the Djinni was already displayed on the map or not, but I'll need to investigate.

EDIT: The "8" flag means to skip the animation/go straight to battle!

EDIT: Okay. Figured one big thing out!
-The number you put in the event, when a map code function is called....  (BEFORE BATTLE) ... A function puts a number at like 02000494.
-Later, (AFTER BATTLE) This number is taken, and all the NPC init entries are scanned to find a matching flag.
--Value at 02000494 must be from 012C-017B (As an 11-bit... 0800 flag is okay.) Basically matching ability id.
--ONLY FLAGS OF 0x30-0x07F WILL WORK! :) As long as the flag is match with the number put in for the event.
So pretty much, this is how the right entry is found, so you could make it any entry you wanted, as long as the flag id is found, you're good to go.
From there, based on the entry used, it'll look up the respective data in the 02030014 NPC list....
2  The Editor / Golden Sun Hacking / Re: Rearraging Djinn encounters on: January 08, 2018, 05:05:50 PM
Kind of an FYI/trivial thing.... But...... Flag 0x1F and flag 0x17 = = Not really where the Djinn flags are. (Djinn flags start from 0x30+...) But I'm guessing it is a slight mis-understanding of what I meant. :P That's alright though. "Flags" refers to the 1-bit table at 02000040/Same flags seen in Flag Menu. ; When a flag is on, it means the Djinni was retrieved, so it disappears from the map. - If it doesn't reference the bit table, (Being, not in the (0x30+ Djinn flags), I'd just call it Djinni id or something similar.

Now that the trivial part is out of the way....

I expect it is done the same way.

02030004 = Pointer to NPC table. (0200E338)
02030010 = Pointer to Events table (0200E7C0)

I scroll through those tables to find what may match.

In the NPC table, we can identify them by their sprite number and flag number. Very easy.

0200E398 = Sprite number. (Set this to 0xF3.)
0200E39A = Flag number (Set this to 0x3A.)

The Events table isn't that difficult either, and it most certainly wasn't difficult in the dungeon.
In the dungeon, it was just two exit events and a Djinni event. (That's all.)
While the dungeon is based on an interaction with an NPC, the world map is not, and is based on tile events. So I guess we can take one extra step. (EDIT:  Although, you could skip this step and go by flag id. But for sake of most events that don't always use flags... this is the way.)
See  020101A4, for the address that points to where we are in the tilemap. (Go to it.) In my example, I have 02020D5C, there, I see 0x035E12E6... Now, what we're interested in is the event number there.... (I bolded it. It is 0x5E) So, we go back to the Event table, and we look for one that matches it.

Found it!
0200E808 = 00000002 004F005E 02008101

I have bolded the event number here, that I connected it to. Now, this is when we look at that last 32-bit. It is a pointer to code that gets executed. Go to it in a disassembler. (Thumb)

There is a bit of code here, I scan for 0x1F for some reason, and see one at 0x02008144, maybe it is the right one? (If not, I can look further.)
3  The Editor / Golden Sun Hacking / Re: Rearraging Djinn encounters on: January 08, 2018, 12:48:50 AM
Hm... I got something similar with what I did. (No animation after battle.) I fixed it by correcting the flag in the npc entry.

So like...


0200803C:0A = If changed to a number like 0x14 (First mercury djinni), then you'd also need to change 020093AA. In this example, that'd be to 0x44. (0x30 + 0x14)
... Of course, the djinni you want to change it to isn't the same one as my example...

0200803C = Djinni to battle

020093A8 = Sprite id
020093AA = Flag id

(Quick testing.  Should I do more?)

@02xxxxxx = If you mean this map code file. If you edit with Atrius's editor, it'll compress back into the ROM. (Or you could manually do it, if you make an asm hack where some files can skip the compression.)
4  The Community / Open Discussion / Re: Common Enligsh issues on: January 06, 2018, 03:44:50 AM
I know... That spelling screams SIN-nergy to me. ; S'pose to be PSY-nergy. XD

The energy of sin. Bad energy. No one should use it! It'll bring death to all.
Versus Psychic Energy. Very different.
5  The Community / Open Discussion / Re: Common Enligsh issues on: January 06, 2018, 12:33:36 AM
Oh yes, I had something mentioned in my post before, but then when I did some editing to clean things up... I must have removed it.

With Djinni/Djinn, I'm going by what I saw in-game. You will not find them lowercase ever... in the text data, correct? (Not even through actual sentences. And there are plenty of sentences.)


Do you put Djinn on[3]standby before a battle,[3]or do you set them?[1]

6  The Editor / Golden Sun Hacking / Re: [RELEASE] Golden Sun Reloaded on: January 05, 2018, 04:26:16 PM
Good point. It might be better to start anew, yeah.

While there could be a way to partially fix the stats issue? (Only somewhat.) I really should take another look at your hack(s)... If enough of the game was played that you would have gotten an extreme advantage in level # or something... then it most certainly wouldn't be recommended.

I'm thinking:
tempVar = Current level value.... (For each char)
Set cur level value to 0 for each char (I think)...
And then call the level up function with tempVar to level that many times.
Call the recalculate stats function (So djinn/class/item stats are counted.)

I'm assuming stat-boosting items could also be checked? (Check treasure flags for if obtained, and artifacts for if dropped. (When it is an artifact) .... If it is assumed you used them, the items could always be re-added to a character/shop without putting them in as stats.)

It might be better to start anew, yeah.
7  The Editor / Golden Sun Hacking / Re: [RELEASE] Golden Sun Reloaded on: January 05, 2018, 03:56:33 PM
As chrono said, Piers now has frost innately, and innate psynergies are distributed the moment you start a new game. if you patch your game and hit continue piers will lose Frost as it isn't in his base class anymore.
Off chance this can be remedied by resetting the innate Psynergy every time you load a file? = Sounds like I could make a patch for general use.

Example - I'm thinking:

if (does not have Psynergy)
    give Psynergy

(And flag checks for the Rock Psynergy.)
8  The Community / Open Discussion / Common Enligsh issues on: January 05, 2018, 02:27:34 PM
(Misspelling in title was an accident at first, but then when I noticed, decided I wanted to keep it for lulz. :D)

Section 1: Correct vs. potentially "incorrect"
Isaac = Issac/issac
English = english
Psynergy = synergy
Djinni (singular) / Djinn (plural) =
I = i

Where I have bolded a capital letter above, means that it should always be capitalized. (As far as I know.)

Section 2: Formal vs. Informal
his or her = they (singular)

Whether to do s' or s's, I might ignore... I think that might be a controversial subject, based on what some teachers have taught. Best case, both could be correct depending on which English you use, but who knows? I myself still like s's for singularity , and maybe s' for plurals, though. ... but you can't go wrong with "of (noun to be possessive)", can you?
Anyway, a quick google = = This shows you can do both.

This topic is here to document what people make common mistakes with in English. That it should preferably be limited to the forums, but could include other places too.
Mainly for entertainment purposes. But could also be informational.

So if you have any, do post them!
9  General Hacking / General Editor / Re: Making text editor. on: December 14, 2017, 06:00:30 PM
Well, yes.... That is basically it. THUMB is cut-down ARM. However, I usually say ARM for 32-bit instructions, and THUMB for 16-bit instructions. (Kind of how it is labeled in VBA's Tools>Disassemble...)

So that area is where the functions are stored is that right? As in, each call in the control codes refer to the functions in that place you pointed out.
Well, kind of indirectly. I guess you can kind of think of it like a tree, but the root/parent functions for the control codes/commands aren't in this area. (However, they may call some of these functions, may need to check into that.)
In what I posted, I was going through the code to list what looked like functions that can be called. (Generally.) Usually they're easy to tell because most functions (not all) are nested in push and pop instructions.

As normmatt explained us, at least one DrawCharacter is called to draw normal text, while the other is called when the text box contains BIG characters (if you play the game, just the first text to show up will have a bigger font and be displayed in the middle of the screen)
Maybe. What I read from a quick read of the code /seemed/ to contradict your statement (at least at first)... But until I have figured out where everything is. I can't say whether I've misread or not... While Summon Night's code seems easy to read (compared to some games), I do make mistakes....

08001F14 calls
- 08003BC0
- 08003EB8

080020A8 calls
- 0800348C then 080041C8
- 080043E4 (at end)
10  General Hacking / General Editor / Re: Making text editor. on: December 14, 2017, 04:14:51 AM
Are there only like ~two ARM functions in this game (and the rest is THUMB.) or am I missing something?

@What do you say?
Sure, I guess.


@Next post: Thanks! I've added them, but I need to figure out those others in the area...
08001D0C = Stores table addresses to RAM.
 03002970 | 08BDA40C 098C8D9C 09718FFC 094D446C 09E2261C
08001D3C = File look up(table number, index of file) ; Returns address
08001D5C = File look up(table number, index of file) ; Returns size
08001D78 = File look up(table address, index of file) ; Returns address
08001D88 = File look up(table address, index of file) ; Returns size

08001D94 =
08001D98 =
08001DC4 =
08001DE8 =
08001E14 =
08001E38 =
08001E4C =
08001E64 =
08001E70 =
08001EA0 =
08001ED4 =
08001EE4 =
08001EFC =
08001F14 = DrawString(dest, textAddr, , src_offset (16-bit), bg_color)
080020A8 = (Text related)
080022B4 = (Text related) - Alternates between calling 08003B9C and 08003BA8 for each text character. No idea if it was meant to clear character.
08002388 =
080026CC =
08002A64 =
08002CB4 =
080031E8 =
0800348C = GetCharacterAddressInFont(text character id)
0800350C =
08003620 =
08003664 =
080036C4 =
080036F8 = (Text related) Draw string? (dest?,srcText,?)
0800379C = “
08003840 =
0800393C =
08003A20 =
08003B9C =
08003BA8 =
08003BC0 = DrawCharacter(src, dest, src_offset, bg_color)
08003EB8 = DrawCharacter_0(src, dest, src_offset, bg_color)
080041C8 =
080043E4 =

080044B0 = -- From here on down - I/O stuff (Indirectly)

Those two: DrawCharacter and DrawCharacter_0... Seem like each are called alternatingly... (Every other character using one, the other "every other character" using the other? Hmm.... But as with what I have in the quote, there's clearly more stuff to look into... so...
11  General Hacking / General Editor / Re: Making text editor. on: December 11, 2017, 01:35:39 AM
Alright.. I have a tiny bit of info...

"in this case the opcode is: 16 03 01 00 18 01 00 00 83 C1 00 00 The text in this opcode is 83 C1 which is translated to your partner name. Soon after this opcode we have a 0B 03 (big text) with 83 C1 81 49 81 49 that is: (Partner name) + "!!" But when testing I only saw the :(Partner name) + "!!", when the character summons him/her. I didn't see the summon name by it self as the 16 03 opcode is sugesting. That opcode is kinda weird, maybe this opcode will need some brute force search. t's not like there is much text in that opcode format. About all of it is or user created names and or '!' and or '?'. The only thing we need to take a look is that player name + 'Da'(japanese) + '!'. I think its the only of those 16 03 opcodes we might need to change. Do you have any clue to why a japanse would put a 'Da' after a name? (maybe something we need to translate)
When I looked at the code on this, it looked like this command (0316) is for getting the number of characters in the text string.

EXPR = Refers to where in memory to set the number of characters in text to.
TEXT = The text to check (Using CX83 will read from the text variables)

Does that make any sense?
12  General Hacking / General Editor / Re: Making text editor. on: December 07, 2017, 02:37:27 AM
You are welcome. Still got to document the other commands, though. = Hopefully I can get at least half of those in this month. (?)

Sounds good. I also have it in my Hacking Docs folder. (Misc. Docs link in my signature.)
13  General Hacking / General Editor / Re: Making text editor. on: December 07, 2017, 01:05:44 AM
Yeah, sounds like a good way to go... Especially if we ever want those tools to be used for more than just translating...
As for the script table? I am not sure exactly what that refers to, but I don't imagine it to be a problem? (Re-pointing is easy if you got the space. Right?)
(A bit random, but I kind of hate Python when it comes to file management. C# does a pretty good job, though.)

I've already started documenting. The document is at
It it is to list most of the functions in the game. (Functions being the code blocks that were intended to be called.)

This is just the start, and there's a long way to go. But it's nice seeing the first section (0000+) only has a small number of commands.

0000 = Unused (Pointer is 00000000)
0001 xxxx xxxx EXPR = Set var to EXPR (xxxx=Type (2/3) , xxxx (2nd) =Index)
0002 xxxx EXPR = Conditional jump (in script) if EXPR=0.
0003 xxxx = Simple Jump
0004 = Related to ending script?
0005 EXPR = Loads PSI3 file. (Index being EXPR) Current position is not saved.
0006 EXPR = Loads/calls PSI3 file. (Index being EXPR) Current position is saved.
0007 xxxx = Function call (For same 0x1C byte entry)
0008 = Return from sub-function. (Does nothing if in main function?)
0009 xxxx = Function call? (Another 0x1C byte entry?)
000A EXPR = Sets slot EXPR (0-7) to type 0x9.
000B EXPR = Gets the on flags for the engine block EXPR (0/1)
000C = Nothing (Just returns 0 to continue script.)
000D = Sets PSI3 file id(Not sure?) to 0000, but doesn't load it? (Unknown purpose.)
000E = Unused (Pointer is 00000000)
000F = Unused (Pointer is 00000000)

In the code, these ^ are pretty much separated into two groups, interesting enough. 0001,0004-0009 in the first group, 0002,0003,000A-000D in the other group.
14  General Hacking / General Editor / Re: Making text editor. on: December 03, 2017, 08:37:01 PM
Oh no, you're fine. It's no problem.... This'll be very useful during research.
Was more or less saying that going forward, I will be trying to use this other way. (I might include the arguments too. though I left those out of my example.)
15  General Hacking / General Editor / Re: Making text editor. on: December 03, 2017, 06:49:48 PM
Oh cool. That's nice.

One thing, though.  It looks a bit unorganized and rushed.

I'd prefer the commands written the 16-bit way (That is the way they are written, right?).... and for them to be in order by their number... So like....

Something like below, but I'll have to work quite a bit on it....


General / Control Flow?
0002 = conditional jump, test player's gender
0003 = simple jump
0004 = End of script
0007 = function call

(Not sure if there are categories for 0100+ and 0200+)

0307 = Set variable
0308 = Normal Text box
0309 = for text that spans 3 lines
030B = Text box with large letters
030C = for one line
030D = options
030E = End
0311 =  Box with Title (Where will you go?)
0312 = Box without Title (just a text box)
0313 = default option (no option chose)
0314 = option (Deikle Village)
0315 = end of menu
0317 = popup message: This are special text boxes that are really small and appear in the middle of the screen
0318 = wait for key press on pop up text box??

0363 = set actual place in the game's menu

037D = set name sprite
037E = set visible or invisible (portrait) Invisible are for NPC which doesn't have any portraits

0478 = sets portrait.
0479 = sets eye expression and mouth expression.
047D = adds extra sprites if the portrait is wider.
Pages: [1] 2 3 ... 152
January 17, 2018, 04:07:51 PM
KyleRunner: :D
January 16, 2018, 08:44:56 PM
Fox: I must say... life can be complicated..... when you have question(s) (via email) ... and it seems like they sort of get ignored. :D ; Fun, (And sometimes, a person may respond, and completely not answer the question.... so like... 3-person conversation.) Hahahaha!!
January 15, 2018, 07:26:16 PM
Fox: (path) 1 text=(address) char=(address) free=(address) ; << Well, closer to this... but yeah... even if I do choose to have defaults in the code, I could still use this method for overrides.
January 15, 2018, 07:24:28 PM
Fox: So like (path) 0 text=(address) char=(address) len=(number) ; (path) 1 free=(address) ; Or something. But that's just a quick example.
January 15, 2018, 06:59:14 PM
Fox: Hopefully. I was wanting to make it so you could put in the addresses/etc. as one of the arguments in the path. Hm?
January 15, 2018, 03:37:07 PM
KyleRunner: Nice! I hope you'll add compatibility with others games (GS1, Mario Golf and Tennis) soon.
January 14, 2018, 11:40:09 PM
Fox: Okay. Posted (in Downloads section) an initial cutdown version for now, for my text compressor. Basically to separate the code from my Editor for anyone who wants to mess with it. It only supports GS2, because I still didn't add the addresses/etc. for the other games.
January 14, 2018, 05:01:00 PM
Fox: Okay! Going to need to think how I want it to work. Initial thoughts is maybe have a number of arguments in the filepath thing. And have a number of shortcuts (files) to be used as examples. Assuming there are no problems.
January 14, 2018, 10:38:24 AM
KyleRunner: Well... I'm used to editing text ina a text editor, so... yes! Thanks in advance!
January 13, 2018, 11:38:43 PM
Fox: (Text editor = Text Document like notepad.)
January 13, 2018, 11:38:21 PM
Fox: Would you prefer during the text editing in a text editor? (Like what gstoolkit lets you do?) I could probably make a separate tool or something to compress it.
January 13, 2018, 10:10:02 PM
KyleRunner: Ok. Once I finish my Lost Age translation, I'll try a Mario Golf one. Thanks. (But I'll need help).
January 13, 2018, 10:03:17 PM
Fox: If you want to make it "permanent" (part of a hack), then you'd edit code in the ROM that writes to this location of the IDs you'd want to change. (You can find these locations by using a breakpoint debugger like SDL-H or no$gba.)
January 13, 2018, 10:00:11 PM
Fox: Reload/switch = Recommended to be done through Debug mode/warp menu, ofcourse... since doors seem to appear as if they were disabled? ; 03001238:01 and B+Start to get to warp menu.
January 13, 2018, 09:55:39 PM
Fox: @Kyle Runner = It might be, but you'd have to use the correct addresses for Mario Golf, rather than for GS2 as I have it right now. ; @raijinken = Yes. 02000454 = ID of leader. (Change this and reload/switch room you are in, enjoy.)
January 13, 2018, 02:23:29 PM
raijinken: Hey guys, is it possible to somehow change the lead character on the map? Was wondering. I remember there was a cheat to use Jenna, but what if I wanted Isaac, or Piers?
January 13, 2018, 02:10:03 PM
KyleRunner: Hey, Fox *
January 13, 2018, 02:09:37 PM
KyleRunner: Hey, is your text editor compatible with Mario Golf (GBA)?
January 11, 2018, 08:33:13 PM
Fox: But if it isn't an oversight, I still can't imagine it being that useful.
January 11, 2018, 08:28:24 PM
Fox: part, ofcourse.

Temple of Kraden Golden Sunrise
Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!
Page created in 0.054 seconds with 20 queries.