praetarius5018

Modder
  • Content count

    1040
  • Joined

  • Last visited

  • Days Won

    30

Posts posted by praetarius5018


  1. On 6/30/2020 at 2:23 PM, fooness said:

    The second party member’s HP/MP/etc is aligned to the very right border of the screen. The third party member’s HP/MP/etc has some space (padding?) to the left border of the screen (which looks very much better). Do you think it would be possible to move that second player’s HP/MP/etc some bit to the left?

    No idea.

    Instead I leave this here.

    5f01e00c1547b_SeikenDensetsu3(J)_sinofmana044.png.f7ad517aa1d2feaf7060298324762dc1.png


  2. 8 hours ago, hmsong said:

    Is that the version where Lise's default name is spelled Riesz?

    Nope, she is Lise as she should be.

    8 hours ago, hmsong said:

    And your translation version doesn't say whom it's by or anything like that in the beginning?  For example, the 1.01e version says it in the character selection screen.

    It says the exact same as the other version there.


  3. 6 hours ago, hmsong said:

    Oh my.  I didn't know that.  Crap, I hope me screwing with some spells didn't screw up some of boss attacks (ex: I gave Rainbow Dust a non-damaging self-enhancements, and gave Ghost summon the Angel's Grail effect).

    I know of the Zable Fahr firebreath, Tzenker feather shot, Dangaard screaming, Gorva clouds, ...

    All of the following are behind item addresses but still "spells":
    Carmilla (Queen) bloody dance, Carmilla Queen heart attack, Slime Prince red glow, Harpy talon drain, Sea Dragon frost breath, Frost Dragon ice breath, Death Machine laser, Guardian laser, Cockabird 8-dir shot, Cockabird feather hail, Basilisk petribreath, Gold Unicorn K.O. attack, Chibi-Devil bubble, Grell dance, Grell Mage dance, Sahagin Bubble, Kerberos firebreath, Petit Dragon breath, Needlion needle spam, Golden Bulette armor buff, Petit Tiamat breath, Assassin Bug poison ball, Zombie breath, Siren song, Shadow Zero's nerf beam, Ruster Bug shot, Ghoul headless, Zombie Dragon breath, Firedrake firebreath, Jewel Eaters green spit, Lightgazer cloud

    for maximum confusion just look at Gildervine's Hammerbean. it is a spell and time freezing but does not darken the screen.

    6 hours ago, hmsong said:

    Btw, which translation patch are you using for your SoM?

    Not 100% sure which exactly.
    I have the one that says:

    5f004abbe10bb_SeikenDensetsu3(J)_sinofmana025.png.304b8b2bb8a6a081f5d3f6646330bbb7.png

    instead of 1.01e's:
    5f004abe52d1d_SeikenDensetsu3(J)_sinofmana022.png.ba95a9f842b4e46fd97ac8fce08f7f43.png


  4. 4 hours ago, hmsong said:

    I thought Zabel Fahr's firebreath is a normal attack completely unrelated to Gremlin spell.  Do they share the same stats or something?  Because obviously, they do not share the same name nor spell animation (well, its firebreath isn't even screen freezing spell, so I thought it was a melee attack that uses INT stat or something).

    Wait, did you mean that some melee attacks don't freeze the screen?  Because if so, I know that.  But my point was that spells like Sky Attack, Feather Blizzard, Gas Cloud, and Revenge Spike are probably screen freezing attacks too, just like how Power Punch (from Jewel Eater) is a screen freezing attack, even though my character doesn't do any animation if I were to use it.

    No, I mean it exactly as I said.
    Some seemingly "normal" attacks are actually spells that don't freeze the game and may even have a different animation than expected or when used by you.

    4 hours ago, hmsong said:

    Okay, let me rephrase my question.  For example, Diamond Missile animation is at 17E204~17E207, and the values are EA CB 06 CD (EA CB is for ST, and 06 CD is for MT).  I understood that part.  I'm guessing EA CB is pointer to some another address in the ROM, and 06 CD is a pointer to some another address -- after all, each spell animation takes a lot of bytes, so there's no way EA CB is the animation itself.  The problem is, I don't know where the pointers are pointed at.  If the values were xx yy zz, I would think the address is zzyyxx in the rom, but there are only 2 bytes.  I initially thought it would be 17yyzz, but that turned out to be false, since some spell animations like Pink Typhoon is 59 E2 (17E259 would not be the correct address, since that's the address of the spell pointer for Power Up spell).  Perhaps I'm not understanding what "friends" pointers are.

    hmm if you want to know... how about you put a read breakpoint on D7E204 and cast the spell in ST variant and then watch where it goes with that pointer?

    it may be a pointer but noone says it has to be the same bank or even a neat +0000 pointer; it could be added to C81657 for all I know to find the actual animation data at C8E241. No idea without looking at it, but really, does it matter?
    Just change the 2 bytes and see what happens.


  5. 7 hours ago, hmsong said:

    I was specifically talking about NCorlett+LNFT v1.01 version, since that's the only English version I know exists.  I'm sure v1.00 existed too, but I was unable to find it (nor any other English translations).  In any case, if you can tell me the spell name pointer specifically for NCorlett+LNFT v1.01 version (the most common English version), then I'd appreciate it.

    I don't know those.

    7 hours ago, hmsong said:

    I think the attacks are all screen freezing attacks.  So none of them could be "normal" attack

    Sorry, but you are wrong here.
    Just check Zable Fahrs side head - the firebreath one of them uses is actually the Gremlin spell (or that is one of the bugs the translation I use added) 

    7 hours ago, hmsong said:

    Btw, I thought all addresses are 3 bytes (before value), but the animation pointer seems to only have 2 bytes (assuming ST and MT are separate).

    Please read it again.

    On 6/30/2020 at 7:40 PM, praetarius5018 said:

    I doubt you'll manage to do with spell animations what you set out to do but give this a try:
    the animations are at 17E200+4x spellId, 4 bytes per entry, first 2 bytes are the ST animation, other 2 the MT animation

    if you try to set an ST-only animation as MT the spell will crash the game and blindly guessing is right out since those 2 bytes are our "friends" pointers.

     


  6. There are no text pointers you can use without asm.
    The pointers that exist vary by translation and version of translation.

    8 hours ago, hmsong said:

    Do you know any enemy spells that has a name and are not being used by the game, whether they are normal monster, boss or even events?  Here are the ones I can't find any enemies using (some don't even have animation, although they seem to do damage), but could you confirm?

    • Sky Attack
    • Feather Blizzard
    • Gas Cloud
    • 100 Tentacles
    • Squid Ink
    • Tidal Wave
    • Revenge Spike
    • Sandstream
    • Spined Kelp
    • Bomb (the non-trap version)
    • Bloody Axe

    Sky Attack and Feather Blizzard should be used anonymously by Tzenker.
    Gas Cloud should likewise be Lightgazer's "normal" attack.
    Spined Kelp is Gildervine's.
    For Bomb and Bloody Axe I wanna say Ogre Chest has them.
    Revenge Spike - isn't that on Mispolm?

    100 Tentacles, Squid Ink and Tidal Wave should be safe.

    8 hours ago, hmsong said:

    Also, is there a way to give a spell the Dreamsee Herb effect?  I want to give that to Pressure Point, but the data in D1B090 isn't giving me any info, since it seems to be a dummy effect.

    Then it likely works like the escape rope by having the actual effect in the animation.


  7. 7 hours ago, hmsong said:

    Is there one for the spell names?

    Just no. Anything involving texts is WORSE than the Kevin wolf bonus^3, no joke there.
    Anything involved text is like compressed twice. Can't undo that manually.

    Your best bet to make "new" spells is taking existing enemy-only spells and working with those - but keep the target side the same or those enemies will do dumb stuff like heal/buff your party or kill themselves.


  8. 3 hours ago, Serafie1999AD said:

    Why it opens with B+Y instead of just Y is probably so that you wouldn't accidentally open the sluggish menu when you're using a tech at the end of a battle.

    Exactly that.
    Had it a billion times that a battle suddenly ends while I was about to perform a tech and that hurls me into that menu because there was 0 delay between a monster hitting 0 HP and the game checking for the menu.


  9. What I have for those is:
    type flags:
    00 damage spell; respects stat1-3 for (de)buffs and status ailments
    01 heal, variable (Heal Light, Regeneration)
    02 does nothing
    03 does nothing
    04 saber spells, no extra options...
    05 debuff, set POWER1 1-5 to ORA respective resistance by spell's element, POWER1 6+ to reset all resistances
    06 does nothing
    07 tinkle rain, Bottle of Salt
    08 buff, set POWER1 1-5 to ORA respective resistance by spell's element, POWER1 6+ to reset all resistances
    09 counter magic, aura wave, energy ball
    0A fraction damage (enemy-exclusive damage spells); deals no damage vs bosses; damage is target maxHP / POWER1
    0B fraction damage (half vanish); deals no damage vs bosses; fraction set by POWER1
    0C was same as 0A but without boss check
    0D was same as 0B but without boss check
    0E does nothing
    0F does nothing
    10 unknown but used by some (dummy?) spells, seems to do nothing
    11 does nothing
    12 fixed 162 damage?
    13 heal, fixed (items); use both power flags for exact value
    14 does nothing
    15 MP restore; use both power flags for exact value
    16 does nothing
    17 analyze, but bugged
    18 exorcism
    19 Lv2/3 tech damage (only consumes TP when used as tech?)
    1A escape rope
    1B ...dunno calls same stuff as map transition
    1C revive; use both power flags for exact HP value, MP is always full?
    1D EXACT same routine as 1B, NOT a copy
    1E reinitializes variables
    1F does nothing
    20 does nothing
    21 does nothing
    22 does nothing
    23 toggle status ailment (chibikko hammer, moogle badge)
    24 does nothing
    25 anti-magic
    26 does nothing
    27 death (&roulette)
    28 from here on crashes the game

     

    I doubt you'll manage to do with spell animations what you set out to do but give this a try:
    the animations are at 17E200+4x spellId, 4 bytes per entry, first 2 bytes are the ST animation, other 2 the MT animation

    if you try to set an ST-only animation as MT the spell will crash the game and blindly guessing is right out since those 2 bytes are our "friends" pointers.


  10. For now it doesn't matter what kind of LDA or STA is used; look to the right columns.

    LDA $something takes the value that is in the variable $something and puts it to A (the value is update for the next line).
    STA $something takes whatever value is in A and writes it to the variable $something.

    Whether it is LDA $34,y or whatever is not relevant for now, just follow the actual displayed address in the [] brackets.

    There may also be a lot of space between the reading and writing, in that case you have to follow the value at the right side;
    it may get doubled (ASL A), halved (LSR A), incremented (INC A), decremented (DEC A), or something
    and it may be transferred to a different column, e.g. TAX copies the value of A and writes it to X, TXA does the opposite.

    5 hours ago, hmsong said:

    On a different matter... I noticed that if I give Luna element to a magic attack, it ends up hurting me instead (I figured Luna magic would allow me to absorb HP or something, since Dryad element absorbs MP).  Is there a simple fix for that?

    The simple way is - don't.
    The game tries to run the HP steal from normal weapons but this part is not intended for spell routines which interpret some values differently, so any attempt to fix this quickly will 99% break weapon logic.


  11. 7 hours ago, hmsong said:

    Huh?  How did you figure out that 7ff743 came from 7ff753?

    On 6/15/2020 at 8:36 AM, praetarius5018 said:

    STA writes to an address.
    LDA loads from an address to A.

    Check the middle of the last two entries in the window.
    LDA 7ff753 -> it takes the value from that address and puts it into A (shown to the right of that)
    STA 7ff743 -> it takes the value of A and write it to that address


  12. 10 hours ago, hmsong said:

    03.thumb.png.bc9cb20c0d7c4def9a0d31a18c9211d8.png

    I feel like there's some real progress there.  I hope that's a progress.  Okay.  They seem to give the same info.  It doesn't seem to point to any particular address, unless D0D871 is supposed to mean something.

    D0D871 is the address in the ROM where this code is.

    As you should be able to see whatever is now in 7ff743 came from 7ff753 so you have to look further back where 7ff753 got the changed value from.
    If it looks like we're going down some rabbit hole with chasing origin after origin - that is really what it is.

    10 hours ago, hmsong said:

    As for the level joining, I have a saved state before an ally joins.  And I found the level edit RAM address for joined ally at the waterfall (I got this by simply leveling up the ally, which is 7ff111).  But what do I do with this info?

    Same process as with the the Kevin attack bonus, make a log up to the write breakpoint snaps, though in this case there's no read before so this can be a much bigger log.
    7ff111 looks ok, that is the expected difference to the attack value.

    As for which of the two is easier? Dunno.
    Kevin bonus involves math (harder) but you have a got idea of the range where it should happen, between the read and the write (easier).
    Starter level should just be a constant (easier) but you have NO idea where it may even start (harder).


  13. 5 hours ago, hmsong said:

    I couldn't find 7ff743, but I was able to find its equivalent, 7fee43 (this code is used in different map for the same attack edit):

    if it is used on a different map but here it is 7ff743 then 7fee43 is "useless" now. it means something entirely different here.

    5 hours ago, hmsong said:

    Well, the log file from non-split resulted in a huge notepad file, so I couldn't even open it (my computer simply froze).

    I use HiEditor for that, can load files of multiple GB size.

    So just that I get what you did right:

    1. put a read&write breakpoint at 7ff743
    2. do NOT mark CPU logging yet
    3. enter a battle and have Kevin transform
    4. the game should freeze now and you should see one line in the debugger that has some variation of a LDA on 7ff743
    5. NOW you toggle CPU logging and hit run
    6. wait until the game freezes again; you should now see a variant of STA on 7ff743 in the debugger
    7. hit "step into" once and then cancel the logging (step into isn't strictly necessary but it adds the STA line to the log which otherwise is missing)
    5 hours ago, hmsong said:

    Well, I certainly would like to find that, but my real goal is to edit the joining level for the allies (default is Lv04, which in code is 03, as you mentioned earlier).

    Then why are we doing this?
    As written way above, you need to find the RAM address of the joining ally's level AFTER they have joined (make a savestate BEFORE the cutscene), have you got that one?


  14. 3 hours ago, hmsong said:

    Okay, I did that.  I don't see anything resembling 7ff743 in the log file.

    If you've set the breakpoint correctly that should've been the last line in the log. Specifically the instruction where it writes the updated value to it.

    3 hours ago, hmsong said:

    And I don't know what value I'm suppose to search for.  Hmm.  What am I supposed to search for in the log file?  The value of Kevin's attack power?

     

    That should already be the 7ff743.
    I thought you wanted to find where Kevin's wolf bonus is or did I understand you wrong?


  15. 9 hours ago, hmsong said:

    Uhh.  Sorry, but I did not understand that explanation.  "going from the write to 7ff743 backwards"?  What does that mean?

    I've no idea how else to say this.
    You need to log up to the point where the new attack value gets written to 7ff743 and then search where it comes from.
    Considering this is the compressed section this can easily be 10s of thousands of lines back.

    9 hours ago, hmsong said:

    Could you tell me some of the math codes that I need to know to find the Kevin werewolf boost?

    LDA, STA, ADC, SBC, LSR, ASL, ROL, ROR, ... that it was the "bible" is for.

    9 hours ago, hmsong said:

    Also, so I need to search for "07" for Kevin's werewolf boost?

    No idea, that's what you have to find out. If I knew what we're looking for I'd knew where it was.

    I'd suggest making a new log; start the logging when 7ff743 is read first and then log until it is written to again.
    And turn of the split option to have it all in one file.


  16. I didn't say this was easy. This is not a beginner friendly section at all. Or game.

    You have to search where the value originally comes from. Which means going from the write to 7ff743 backwards until you find where the math happens.
    STA writes to an address.
    LDA loads from an address to A.
    And all the other nice tricks like stack manipulation.


  17. 43 minutes ago, hmsong said:

    Okay, I guess I was not being specific enough when I asked that question.  As you said for werewolf, I can change his STR stat and then change to werewolf form to see the difference -- 2 reference points to compare.  But for the initial level of joining, I can't.  There's only 1 reference point.  I can change a character's level just fine during the gameplay (RAM), but I can't change the initial level when they first join (neither ROM nor RAM).  There's no 2nd reference point for me to experiment.  That's why I can't use the same method.  Or is there?  If so, could you tell me what I should look for as a 2nd reference point?

    If you have no 2nd reference point then make one.

    Make a savestate before the cutscene where a character joins.
    Let the cutscene run until the character is in the party.
    Now search for where its level is.
    A give you a hint here: level is saved as displayed level-1.
    There'll be hundreds of 3s in the RAM, so how about finding out first where the actual attack power (NOT STR!!!) is saved, there should be 2 values, one for buffed, one base. Level should be close-ish by.

    Once you have the level address you can put a write breakpoint on the address of level and run the cutscene with that and logging running.

    41 minutes ago, hmsong said:

    For adding $80, are you talking about the "Memory Check" part? (shown in the picture above)  So for FM Hugger (I'm guessing my picture is looking at that map), it's $FE2F32?

    Clipboard01.thumb.png.8cd1a4954e634bbcce693ce33660395e.png


  18. 14 hours ago, hmsong said:

    Why would you not want the Jutsus to be AGI based?  Hawk has high AGI, so I figured jutsus based on AGI would make sense.  It's got weak multiplies (6), so it doesn't do much damage though.

    Don't ask me that. Square made them based on INT, in Sin of Mana they are based on AGL; they probably thought that debuff + decent damage on a "main" stat was too much.

    14 hours ago, hmsong said:

    My intention is not to reduce the boss strength (nor its level), but not increase it either.  That's why I'm trying to reduce the character's level when they join.  That way, I only need to edit the stats for the first 3 levels of a character, and it won't affect the bosses' strength.  Do you know how I should go about that?  It would help if I at least knew its bank.

    On 6/11/2020 at 9:25 AM, hmsong said:

    Is there a way to make the later characters join at Lv3 instead of Lv4?  Perhaps an address where I can edit their initial experience points?

    23 hours ago, praetarius5018 said:

    Same answer as for the werwolf bonus.

    Deja vu

    14 hours ago, hmsong said:

    I actually tried using map jester some time ago (found it on RHDN), but I couldn't really figure out how it worked.  It loaded the game, but after that, it didn't tell me anything.  The only thing I could do was look at some of the maps.

    Try the NPC tab. Priority for mobs is their level (+128 because the $80 bit is used for something)

    14 hours ago, hmsong said:

    Btw, I can see why you decided to change everyone's max stat limit, strength, level, equipment power, and everything else for SoM.  Balancing is hard.  Very hard.  Christ.

    As you may have guessed by now, vanilla enemy levels are very stair-ish. Going from 4 to 6 doesn't do much since the stat cap it is based on is the same. But going from 6 to 7 is a massive leap. That makes the whole thing even better.


  19. 4 hours ago, hmsong said:

    I know you already improved Half Vanish so that it'll affect bosses.  But you can use the former Half Vanish's effect to Hawk's trap spells, except instead of doing %-dmg of current HP, you can have the traps do %-dmg of max HP.

    He has his final weapon for exactly that effect.


  20. 8 hours ago, hmsong said:

    Yeah, so I thought about making Holy Ball and Saint Beam into INT based (but keeping Heal Light as PIE based).  But I felt that it would mostly make PIE even less useful, since it means that most enemies will be using INT based attacks.  I figured one typical spell that can be bought from black market should have PIE based attack.

    No I meant INT for all spell damage (primary elemental spells, light, dark and summons), PIE for Heal Light and all magic defense.
    Though I'd leave Jutsus as they are.

    8 hours ago, hmsong said:

    I tried to make the first two bosses (FM Hugger and Machine Golem) easier by giving higher stat to the player characters in the beginning (+1 for all stat), but that also raised bosses' stats, which made them even harder (even with the bonus stats).  But I can't just lower the Lv4 stats, since that'll lower the stats of the players later joining (they all join at Lv4).  Is there a way to make the later characters join at Lv3 instead of Lv4?  Perhaps an address where I can edit their initial experience points?

    Same answer as for the werwolf bonus.

    There's a tool called map jester, it lets you edit boss levels if that helps.
    Though you'll need to make a patch that fixes an issue with it; every time I save with that tool it screws some 80 bits up which are responsible for lampflower forest flower color at night (the hint for the labyrinth) and the autumn/destruction theme of the mana holy land at the end.

    1. backup current ROM
    2. make a change, save
    3. undo that change, save again
    4. create IPS patch that uses the new file as "unchanged" and the backup from 1. as "changed"