News:

As a consequence of the forum being updated and repaired, the chatbox has been lost.
However, you can still come say hi on our Discord server!

Main Menu

[RELEASE] Golden Sun: The Balance Age

Started by Caledor, 24, January, 2015, 12:29:46 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Salanewt

Yeah, that makes sense.

Recovery: Nah, it's cool. Not sure which part to explain. I think the 655 part is just because the RNG function that formula uses can give you really high numbers, and the turn part is basically duration (remaining duration can also be no higher than 5 turns). As the duration goes down, the target becomes more likely to recover before the effect ends.

Thanks; should only need a couple branch tweaks at most really. Should be pretty simple to make more enemy summons if that's your goal, but yeah.

Classes: Oh cool, I must have missed them. Nice work!
Oh yeah baby, £ me harder.

Fusion is just a cheap tactic to make weak Adepts stronger.

Yoshi's Lighthouse is a hacking website in progress. Why not check it out if you like Yoshi or the Mario & Luigi games?

Misery

Quote from: Caledor on 25, January, 2015, 04:43:03 PM
QuoteBecause i'm outright removing the HP% damage. So it's something like a small compensation.
Aaah.  Okay that explains it.  Also... HOW?!  I'd love to find a way to reduce the percentile damage - changing it to 2% efficiency instead of 3%.  Also... what else are you going to be doing to help balance summons?  If it's just base damage, it won't be really worth using without some other benefit going on.
http://forum.goldensunhacking.net/index.php?topic=2215.15. About balance, isn't the summon only problem the fact that they're overpowered against high HP bosses?

I wouldn't say the balance issue is that summons are too strong against high HP bosses - rather, the issue with them doing HP% damage is that you can have access to them instantly, i.e. summon rushing. More specifically, the later parts of The Lost Age has mechanics that mitigate the balancing factors of summon rushing. Those are:
-Multi-element summons (feed a higher amount djinn into an attack of the desired element)
-Backup party (bypass the class penalty)
-Ability to carry up to 18 djinn of every element (summon costs become considerably less restricting)

Toning summons down to 2% per djinn takes a bit of the sting out of them against high-HP bosses but doesn't affect them particularly much against anything else. However, it might not help much in this case since you're adding several pieces of element+ equipment, considering how much elemental power contributes to summon damage (when the HP% damage type is in effect).

Summons are very hard to balance, there's really no ideal way to do it. Generally, if you do something to make summon rushing less effective, it makes summons even less effective for anything *other* than summon rushing.

Quote from: Caledor on 26, January, 2015, 09:23:30 AM
Just for a quick reference against Dullahan: having now raised the base chance for Dull Impair and Weaken to 130 (maybe 125-120 is better... will test later), for elemental level 5 (most 3 element classes), the chance to hit him with those debuffs are respectively 53% (due to vulnerability), 22% and 28%. Given that they seem to last only a single turn due to his insane 59 luck, that those are the lowest chances (2 element classes with a level of 7 have higher chances) and the fact that he IS Dullahan after all, the whole thing seems pretty fair to me.

I'm sure any class can do something more productive with their turns than going for a chance to make the boss a bit less effective for one turn... which is completely fine in this case. Using a boss with 59 luck as the basis of your balancing decisions really wouldn't be such a good idea.

Caledor

QuoteSummons are very hard to balance, there's really no ideal way to do it. Generally, if you do something to make summon rushing less effective, it makes summons even less effective for anything *other* than summon rushing.
I didn't really understand your point completely but i do see that my approach might no be the best one. How would to try to fix them?

QuoteUsing a boss with 59 luck as the basis of your balancing decisions really wouldn't be such a good idea.
Actually I'm using him as the extreme rather then a basis. Something like "this is the limit" and then i move from there.

Rolina

Quote from: Caledor on 25, January, 2015, 04:43:03 PM
QuoteBecause i'm outright removing the HP% damage. So it's something like a small compensation.
Aaah.  Okay that explains it.  Also... HOW?!  I'd love to find a way to reduce the percentile damage - changing it to 2% efficiency instead of 3%.  Also... what else are you going to be doing to help balance summons?  If it's just base damage, it won't be really worth using without some other benefit going on.
http://forum.goldensunhacking.net/index.php?topic=2215.15. About balance, isn't the summon only problem the fact that they're overpowered against high HP bosses?

QuoteNot quite what I meant.  What I mean is that weapons can work as equippable spells as well.  Let's say you have a Gaia Blade.  Sure, you can try to unleash it, but you'd also be able to cast Titan Blade manually.  Swap out for the Swift Sword, however, and you lose Titan Blade and gain Rapid Smash instead.  The way you're describing though seems like a much different approach... It sounds interesting.  I suppose I'll have to check it out.
Thanks for the info~
Oh, now i get what you meant. However, I'm trying to balance out the game so i want to reach a compromise between existing contents not add entirely new features. Your approach seems fun as well but it's not what what i aim to do. After all the party itself describes unleashes and criticals to be unpredictable in game ;)
Yeah, it's pretty much why I didn't press an issue or anything - your balancing method's quite different.  Haven't really seen it in practice, though, so I'd really like to try it out when you're done.

Salanewt

QuoteHow would to try to fix them?

Not sure about Misery, but I have an idea that may work. Could be too much for what you're going for though. Anyway, what if you were to make it so a character can only use their own Djinn for summons rather than letting them share? This change would mean that your pool caps at 9 per character (or 10 if you add the dummy Djinn) rather than 36 (or 40), which in turn means that using any major summon will screw with your class setup; it would also provide an incentive to play around with the class system, as the only way to use a lot of these major summons would be to try different classes. Additionally, this would mean that you can't just spam summons that an enemy/boss is weak to unless you have the necessary Djinn available, especially because the player can only put one Djinni per character on standby rather than up to four, so setting up for a stronger summon would take longer as well.

Or something, I don't know. Might even be worth keeping some of the % bonuses with this sort of barrier, but it could also take a little while to make this work properly.

Oh yeah baby, £ me harder.

Fusion is just a cheap tactic to make weak Adepts stronger.

Yoshi's Lighthouse is a hacking website in progress. Why not check it out if you like Yoshi or the Mario & Luigi games?

Caledor

Keeping the HP% damage (albeit extremely lowered) is an option as well. I don't really like the cap on the djinn though, mainly for two reasons... it will make only certain classes gain access to specific summons and restrict choices a lot. What I aim is the very opposite of that since everything i've done till now was add choices and increase variety.

At the moment I'm busy making the final changes before i start to (try to) implement the infamous PP multiplier. That is, lowering the PP multipliers for low tier classes (or psynergy would be extremely overpowered early game) and a final balance of classes in general. I'm particularly fond of some of them, namely the Radiant Miko, the Incantatrix, which are both are the most versatile casters of the game, and the Fateweaver, which is the strongest one offensive-wise (punishment). Piers' new classes, as well as the paladin and the warlord are under review instead, but i hope to make a final version for them soon. EDIT: It's done.

Caledor

Ok guys, I'm almost there. Just a question: i got that the division at 08002054 is r0/r1... but how is the result in r0 stored after that? cause i don't think i can just "add r0, #0x01" after that...

Daddy Poi's Oily Gorillas

It's supposed to work like this:

mov r0, (PP) //You might use the ldrh instruction instead to load the value here, though.
mov r1, 0x1000
bl 0x8002054
add r0, #0x01
//You'll still need to apply it to whatever it is you are applying it to.

Basically, you set up arguments from r0-r3, and some in the stack depending on how many arguments the function takes, this one only takes two arguments. What bl does is call the function at 08002054, and when it is done, continue where this function left off.
Most functions either
-don't have a real return value  (Examples are when the purpose is only to set a value or do an action.),
-or return something in r0 (Usually when you need to get the value of something, the function may or may not have any other affect, though, it depends on what it is for.)
(There might even be some exceptions where something could have a second return value, however, and the Division function is probably the only one I know of. Basically, r1 is the remainder for those that don't return it in r0.)
Golden Sun Docs: Broken Seal - The Lost Age - Dark Dawn | Mario Sports Docs: Mario Golf & Mario Tennis | Misc. Docs
Refer to Yoshi's Lighthouse for any M&L hacking needs...

Sometimes I like to compare apples to oranges. (Figuratively) ... They are both fruits, but which one would you eat more? (If taken literally, I'd probably choose apples.)
Maybe it is over-analyzing, but it doesn't mean the information is useless.


The only GS Discord servers with significance are:
Golden Sun Hacking Community
GS Speedrunning
/r/Golden Sun
GS United Nations
Temple of Kraden

Can you believe how small the Golden Sun Community is?

2+2=5 Don't believe me? Those are rounded decimal numbers. Take that, flat earth theorists! :)

Caledor

So I CAN do the add r0, #0x01 right after the division call. Ok thanks, that's what i needed to know.

Daddy Poi's Oily Gorillas

Yeah, (Although, the mov r1, 0x1000 will need to be split into two instructions. mov r1, 0x10 and lsl r1, r1, 0x8, for example.)
Apart from returns, r0-r3 would be garbage data after the function is called and dealt with. With r4, it just depends...? So any values that need to be saved before a function call for use after a function call should be placed in r5+ (For some games, possibly r4+), or in the stack.


EDIT: Oops... 0x1000 is the wrong number, since that's hex.

So...

mov r1, 0xFA
lsl r1, r1, 0x2
Golden Sun Docs: Broken Seal - The Lost Age - Dark Dawn | Mario Sports Docs: Mario Golf & Mario Tennis | Misc. Docs
Refer to Yoshi's Lighthouse for any M&L hacking needs...

Sometimes I like to compare apples to oranges. (Figuratively) ... They are both fruits, but which one would you eat more? (If taken literally, I'd probably choose apples.)
Maybe it is over-analyzing, but it doesn't mean the information is useless.


The only GS Discord servers with significance are:
Golden Sun Hacking Community
GS Speedrunning
/r/Golden Sun
GS United Nations
Temple of Kraden

Can you believe how small the Golden Sun Community is?

2+2=5 Don't believe me? Those are rounded decimal numbers. Take that, flat earth theorists! :)

Caledor

Another issue... i can't find where the acting character data is stored inside the base damage formula (in order to access MaxPP)... :sad:
Does someone know about this one?

Caledor

After an entire day of searching...
I tried looking around placing breakpoints here and there inside the formula but the only thing i found is that the sp wasn't of any help and that r8 always stores the target data, which is completely useless for what i want to do. Dumps weren't that useful either cause they are static unlike the enemy data so all i can guess is that the information is accessed by using a pc index and then calculated from those static addresses... but that was a dead end too since none of those indexes are stored anywhere in the formula. I even tried using the added damage formula for comparison, since that one has to grab the attack value from somewhere, but the one at 080B03AC already has the value memorized in r0 and r5... This is becoming a nightmare, even more cause this is the only thing missing in the whole formula...

Salanewt

#32
Okay, found it! It looks like they grab most (if not all) of what they need from the current/casting unit before the code even gets to a formula. From what I can tell, they load the current unit's RAM in r5 shortly before removing it with the instruction after #0812065C, which overrides it with the relevant ePower for whatever ability is being used. Basically, the ability's element ranges from 0 to 4 (nothing to Jupiter I think), and then shifts that value by x2 and adds x48 to it; the resulting value is then added to the character's base RAM address before it loads the correct ePower value.

Unless I'm mistaken, you should be able to reload it with an LDR command from sp, #0x50 anywhere in that section. If you only want it in the base formula section, then it should work there as well.

Hope this helps!


Looks like you just posted right as I was posting. Yeah, r8 seems to store target data to use for each formula, but I can see why they don't individually read from the caster's RAM; takes less space this way.
Oh yeah baby, £ me harder.

Fusion is just a cheap tactic to make weak Adepts stronger.

Yoshi's Lighthouse is a hacking website in progress. Why not check it out if you like Yoshi or the Mario & Luigi games?

Daddy Poi's Oily Gorillas

Turns out that I studied this before Calendor's last post... and I had this in my text box. (Didn't post it because I don't think I was ready.)
Quoter8 = targeted address
r10 = targeted slot
sp, 0x4C = user slot
sp, 0x50 = user address

After seeing Salanewt's post, I guess sp, 0x50 is the correct one!

---
And yeah, sometimes when looking for what is stored in the stack, you have to go to the very beginning of the function... That's usually where it allocates the space in the stack, and the Damage Formula likely has one of the biggest stacks in this game, if I took a guess. (See add sp, -0x70)
Golden Sun Docs: Broken Seal - The Lost Age - Dark Dawn | Mario Sports Docs: Mario Golf & Mario Tennis | Misc. Docs
Refer to Yoshi's Lighthouse for any M&L hacking needs...

Sometimes I like to compare apples to oranges. (Figuratively) ... They are both fruits, but which one would you eat more? (If taken literally, I'd probably choose apples.)
Maybe it is over-analyzing, but it doesn't mean the information is useless.


The only GS Discord servers with significance are:
Golden Sun Hacking Community
GS Speedrunning
/r/Golden Sun
GS United Nations
Temple of Kraden

Can you believe how small the Golden Sun Community is?

2+2=5 Don't believe me? Those are rounded decimal numbers. Take that, flat earth theorists! :)

Caledor

You guys did it! Thanks to your efforts the multiplier is practically DONE!
The only thing that somehow bugs me is that the division function didn't do anything but I don't really care cause I just replaced it with a 10-bit lsr. Now on to the balance of summons and djinns!
EDIT: The long-awaited formula:


EDIT2: Starting post updated!

Caledor

#35
The changes to Golden Sun: The Lost Age are done. The only thing that I want to review are: PP cost of mass healing, Doom Dragon skills and the base power of summons. After that, the only thing standing in the way of a release here would be the port of everything I've implemented from my Italian ROM to an English one.

About the original Golden Sun. Things are more difficult here, cause I couldn't port the PP multiplier and the Simple Summons patch from TLA like I (easily) did with the Simple Effects patch instead. I couldn't even find the base damage formula here!! So... is someone of you guys knowledgeable enough about the first game to point me in the right direction? I'd really appreciate it, cause I'm at a loss here. Thanks in advance.  :happy:

Daddy Poi's Oily Gorillas

QuoteI couldn't even find the base damage formula here!!
Did you search for matching hex while remembering GS1 can still have differences? Or were you just browsing around GS2's address in GS1?

Because things vary in size, it's likely at a way earlier address in GS1, and to prove my point, here are some comparisons:

GS1 is 8 MB
GS2 is 16MB.

08320000 = Master file table in GS1
08680000 = Master file table in GS2

08077000 = Party Mechanics block in GS1.
080AD000 = Party Mechanics block in GS2.

080B5000 = Battle Mechanics block in GS1.
08118000 = Battle Mechanics block in GS2.

The damage formula probably starts around 080BBB0C in GS1, unless I'm mistaken.
Golden Sun Docs: Broken Seal - The Lost Age - Dark Dawn | Mario Sports Docs: Mario Golf & Mario Tennis | Misc. Docs
Refer to Yoshi's Lighthouse for any M&L hacking needs...

Sometimes I like to compare apples to oranges. (Figuratively) ... They are both fruits, but which one would you eat more? (If taken literally, I'd probably choose apples.)
Maybe it is over-analyzing, but it doesn't mean the information is useless.


The only GS Discord servers with significance are:
Golden Sun Hacking Community
GS Speedrunning
/r/Golden Sun
GS United Nations
Temple of Kraden

Can you believe how small the Golden Sun Community is?

2+2=5 Don't believe me? Those are rounded decimal numbers. Take that, flat earth theorists! :)

Caledor

#37
I searched for matching hex cause that worked when I ported the Simple Effect Patch, i know about the size difference. Thank you for your input btw, i'll try looking around there and see how it goes.

EDIT: Sorry Fox but is that the address of the generic damage formula (the one that starts at 08120454 in gs2 basically)? Cause I only need the base damage and summon formula, the one at 08120F70 in gs2. I did try to look around it, but sadly to no avail.  :sad:
Anyway isn't it strange that I couldn't find a single match with an hex editor when the formula for the 2 games is identical?

Caledor

Keep checking the first post as it gets constantly updated with new ideas while trying to implement the infamous PPmultiplier to the first golden sun as well.

Daddy Poi's Oily Gorillas

QuoteEDIT: Sorry Fox but is that the address of the generic damage formula (the one that starts at 08120454 in gs2 basically)? Cause I only need the base damage and summon formula, the one at 08120F70 in gs2. I did try to look around it, but sadly to no avail.  Sad
The damage formula function is HUGE!
The two addresses for GS2 that you mentioned are part of the same function.
08120F70 is in the middle of that formula.. (But where the stuff for Base damage, etc... was.).
08120464 is the absolute beginning of that entire function.
So I assumed you'd just scroll down from the GS1 address I gave...

QuoteAnyway isn't it strange that I couldn't find a single match with an hex editor when the formula for the 2 games is identical?
Forgot to search in reverse byte, maybe? (Basically put it in 8-bit mode with no spaces.)
Golden Sun Docs: Broken Seal - The Lost Age - Dark Dawn | Mario Sports Docs: Mario Golf & Mario Tennis | Misc. Docs
Refer to Yoshi's Lighthouse for any M&L hacking needs...

Sometimes I like to compare apples to oranges. (Figuratively) ... They are both fruits, but which one would you eat more? (If taken literally, I'd probably choose apples.)
Maybe it is over-analyzing, but it doesn't mean the information is useless.


The only GS Discord servers with significance are:
Golden Sun Hacking Community
GS Speedrunning
/r/Golden Sun
GS United Nations
Temple of Kraden

Can you believe how small the Golden Sun Community is?

2+2=5 Don't believe me? Those are rounded decimal numbers. Take that, flat earth theorists! :)