Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Tirlititi

Pages: 1 ... 21 22 23 24 25 [26] 27 28 29 30 31 ... 35
626
It is strange that they would use the same index to refer to each model every time, when they are in different places in each field's data. It seems like there must be a master list somewhere that tells the game why [192] is Freya and [74] is Erin...
Not necessarily. It may be some ID chosen by Square's compiler. It was decided which index refers to which model at the game's compilation time and the "master list" doesn't exist anymore.

Also, there seems to be a problem with adding new preloads to a field in some cases. For example, adding a preload to the list in Lindblum Shopping Area, breaks the model loading in Lindblum Church Area. Adding two causes the game to break altogether with an error of [unknown opcode 0x3F]
Arf, that's a problem of Hades Workshop then, not of the game's preloading datas.
There was a bug like this in the past and I thought I solved it, but it seems I didn't. I'll check and fix that bug.

@ Kefka : Yes, that's like Steiner's abilities, but the main difference (besides the fact it reduces both defences) is that it can never miss.

627
Thanks Froggy. I'll implement the Tetra Master MIPS code someday, since you documented pretty much everything important about it already ^^
But it was tedious enough to implement only the battle code, so I've let that be for another version.

@ Lein : Yeah, someone should totally do that x)
Actually, there are already several (difficulty) mods. I don't think someone will ever bother to make a mod even more difficult than Unleashed.

@ Satoh : I've a list of all the cluster datas and I can easily check the objects' ID. That way I know which model IDs are field-dependant and which are not. For naming them, I looked at the game's script and listed them when I could identify them (there are still a lot of unnamed model IDs btw). I don't think they have any label indeed.

@ gorildo : About manually editing the enemy script, I'm afraid that can't be avoided. Maybe I'll add a few macros that will automatically generate some standard code (Squaresoft's devs had some) but that's not for now.

About what can be edited using MIPS code...
1) Making the max HP a data using more than 16 bits : no you can't. I mean, it would require huge changes and not only in the battle MIPS code but also in the other MIPS codes, not to mention messing up the data tables for enemies and updating all the codes refering to one of the enemy's stats. Besides, you can already kind of increase the HP limit by healing the enemies when they reach a certain limit.
2) Removing the damage limit : actually, you see that Pure Damage's formulas cap the damage to 9999. If you remove these lines (change them to "nothing" for instance), you can deal more than 9999 damage in one shoot. However, the damage display won't follow and you will still see the 9999 figures, even though the actual damage are more than that. I don't know how it is possible to make the display works properly for that :/
3) Make an enemy non-targetable : it's surely possible, but not easily and not in the "Spell Effect" part of the MIPS code. One would need to search through the full code to see if and where the targeting is handled and add a check for petrified foes. Not possible without a harsh work.
4) Disable reward for Death-dealt enemies : I don't know. That's surely the easiest thing to do, but it depends on how the rewards are calculated. I know that the Exp gain is updated everytime an enemy dies (it's not calculated in 1 shoot at the end of the battle), so maybe you just need to avoid updating that figure if the enemy dies from a Death spell. That's a bit further than the Spell Effect part of the code, though.

628
From my point of view, Photoshop is faulty there, cause I found the .tiff layer format in some official .tiff documentation. I don't see why Photoshop doesn't support that feature (as said, Gimp does).

Well then, since SE decided to keep the release of the Steam version for later, here is the v0.33 :
 - Added a MIPS editing feature. MIPS is the coding language shared by all the PSX games. It's the deepest level of game modifications and shouldn't be used carefree. More infos below.
 - You can now add and remove several things, so you don't need to recycle another item to create a new one :
 --- Add/Remove texts in text blocks and battles,
 --- Add/Remove enemy groups,
 --- Add/Remove enemy spells.
 - Completed the list of spell effects, though I only know the effect of "Defless" among the new ones : it unconditionally divides both defences by 2.
 - You can now use the field models of most of the playable characters. Indeed, the problem was that you don't only need to add the character's model in the preloading list, but also link it to a script's entry. The related "InitObject" call is a necessary step to preload the 3D model.
 - Added a background artwork image. It was made by Maxa' and I'm really glad of it :D


Here is the step-by-step method to use one of the playable character's model on the field :
1) In the target field's script, choose an object's entry. You'll replace that object by your playable character's model, so you need to choose one you won't use anymore. Modify the scripted events and whatever you want in that object's script ; don't touch the "Init" function yet.
Note : in some future version, you'll be able to add new entries, so you won't have to dummy one. You may also keep the old entry's script and thus use both objects (the old one + the new character's) using a trick : use a global variable and increment it in the object's "Init" function. This way, you'll be able to identify different instances of the same entry and give them different models. See the script of Linblum Soldiers in "Brahne's Fleet/Event" in disc 2 for an example of that system : there's only 1 entry for 2 different soldiers.
In any case, the important thing there is to note the chosen entry's ID (the number used in the related "InitObject" call).
2) Change the Preloading stuff of that field and add your character's model. Here is the list of the ones that can be used for now :
Code: [Select]
Vivi (8)
Dagger_Bis (76)
Zidane (98)
Dagger (185)
Freya (192)
Beatrix (204)
Quina (273)
Eiko (443)
Amarant (509)
Steiner (5489)
I don't think you can use battle models ; there seems to be a problem when using them.
When you add the model, you're asked for a number : enter the ID of the previously chosen entry.
If you don't have enough space, you need to remove some other object.
3) Return to the field's script and modify the "Init" function of your character's entry. Here are the different setups for the animations and sizes :
Code: [Select]
    // Vivi
    SetModel( 8, 61 )
    SetStandAnimation( 148 )
    SetWalkAnimation( 571 )
    SetRunAnimation( 419 )
    SetLeftAnimation( 917 )
    SetRightAnimation( 918 )
    SetObjectLogicalSize( 20, 30, 44 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 65, 57 )

    // Dagger Bis
    SetModel( 76, 91 )
    SetStandAnimation( 2089 )
    SetWalkAnimation( 2086 )
    SetRunAnimation( 2091 )
    SetLeftAnimation( 2088 )
    SetRightAnimation( 2084 )
    SetObjectLogicalSize( 20, 26, 42 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 89, 4 )

    // Zidane
    SetModel( 98, 93 )
    SetStandAnimation( 200 )
    SetWalkAnimation( 25 )
    SetRunAnimation( 38 )
    SetLeftAnimation( 40 )
    SetRightAnimation( 41 )
    SetObjectLogicalSize( 20, 24, 40 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 97, 61 )

    // Dagger
    SetModel( 185, 91 )
    SetStandAnimation( 2089 )
    SetWalkAnimation( 2086 )
    SetRunAnimation( 2091 )
    SetLeftAnimation( 2088 )
    SetRightAnimation( 2084 )
    SetObjectLogicalSize( 20, 26, 42 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 89, 4 )

    // Freya
    SetModel( 192, 94 )
    SetStandAnimation( 2556 )
    SetWalkAnimation( 2553 )
    SetRunAnimation( 2558 )
    SetLeftAnimation( 2555 )
    SetRightAnimation( 2551 )
    SetObjectLogicalSize( 26, 34, 48 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 105, 53 )

    // Beatrix
    SetModel( 204, 100 )
    SetStandAnimation( 2978 )
    SetWalkAnimation( 2975 )
    SetRunAnimation( 2981 )
    SetLeftAnimation( 2980 )
    SetRightAnimation( 2974 )
    SetObjectLogicalSize( 20, 20, 30 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 104, 48 )

    // Quina
    SetModel( 273, 92 )
    SetStandAnimation( 3228 )
    SetWalkAnimation( 3237 )
    SetRunAnimation( 3230 )
    SetLeftAnimation( 3235 )
    SetRightAnimation( 3227 )
    SetObjectLogicalSize( 40, 48, 60 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 65, 45 )

    // Eiko
    SetModel( 443, 63 )
    SetStandAnimation( 7503 )
    SetWalkAnimation( 7518 )
    SetRunAnimation( 7506 )
    SetLeftAnimation( 7516 )
    SetRightAnimation( 7514 )
    SetObjectLogicalSize( 20, 24, 38 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 65, 5 )

    // Amarant
    SetModel( 509, 122 )
    SetStandAnimation( 8307 )
    SetWalkAnimation( 8316 )
    SetRunAnimation( 8312 )
    SetLeftAnimation( 8310 )
    SetRightAnimation( 8314 )
    SetObjectLogicalSize( 30, 35, 50 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 65, 0 )

    // Steiner
    SetModel( 5489, 104 )
    SetStandAnimation( 2001 )
    SetWalkAnimation( 1996 )
    SetRunAnimation( 2005 )
    SetLeftAnimation( 1986 )
    SetRightAnimation( 2010 )
    SetObjectLogicalSize( 30, 35, 50 )
    SetAnimationStandSpeed( 14, 16, 18, 20 )
    SetHeadAngle( 97, 32 )
You can unfortunatly only use those 5 animations each time. The other character animations are field-dependant.


Now, about MIPS.

The available MIPS code is the one from the battle system. Every time you're in battle, that's the code running in the background and processing everything. A convenient part of it handles the spell effects and that's the main modifiable thing for now. You can modify the different assembly-like instructions and they are displayed a bit more readably on the right. The spell effect scripts are called at the "Effect Point" of spell animations. Be sure to check the help ; though it is far from complete, it's still a first introduction to it.

Let's start with a relatively simple example : the effect of "Pure Damage". It consists of these lines.
Code: [Select]
$2 = $29[51] & 0xFF
nothing
$2 = $2 | 0x1
$29[51] = $2 & 0xFF
$4 = $17[8]
nothing
$3 = $4[5] & 0xFF
nothing
$2 = $3 << 1
$2 = $2 + $3
$2 = $2 << 3
$2 = $2 + $3
$3 = $4[7] & 0xFF
$2 = $2 << 2
jump 0xB4CC0
$3 = $3 + $2

// What lies at 0xB4CC0 :
jump 0xB7918
$29[54] = $3 & 0xFFFF
The $ things are placeholder for variables (RAM registries actually). There are 31 of them, most of which that have special purposes.
The brackets are used to retrieve or store a data from the memory. While non-brackets can be seen as temporary variables, for calculation purpose, the brackets ones are used to communicate with the whole system.

Let's get a closer look :
Code: [Select]
$2 = $29[51] & 0xFF
nothing
$2 = $2 | 0x1
$29[51] = $2 & 0xFF
These lines are adding the bitflag 0x1 to $29[51]. That "$29[51]" is a special data that will be used latter by the "jump 0xB7918" call. Note that a lot of spell effects (all I think) end with a "jump 0xB7918" call : it resolves the effect by applying the damage, the statuses, checking if the target should die or change state, run the "hit" animations, etc...
The bitflags "$29[51]" are flags about the effect on the target. The bitflag 0x1 is the one saying "This spell deals damage" so now all you have left to do is to set the amount of damage dealt.

The following lines :
Code: [Select]
$4 = $17[8]
nothing
$3 = $4[5] & 0xFF
nothing
are used to retrieve the spell's power. "$17[8]" is the casted spell's data offset and the 5th data is the spell power (its written in 8 bits, just like the "$29[51]" flags, hence the 0xFF). Now the variable $3 holds the spell power.

Next are those lines :
Code: [Select]
$2 = $3 << 1
$2 = $2 + $3
$2 = $2 << 3
$2 = $2 + $3
$2 = $2 << 2
You can translate them by "$2 = (($3 * 2 + $3) * 8 + $3) * 4" or, shortly, by "$2 = $3 * 100". Since the raw multiplications are slow operations (or were at the time), the devs prefered to use shifts and sums instead.
Next to it, there's also :
Code: [Select]
$3 = $4[7] & 0xFF
$3 = $3 + $2
$29[54] = $3 & 0xFFFF
The spell's accuracy is stored into $3, then added to $2  and stored into "$29[54]", which is the memory place where you need to store the damage number before the "0xB7918" call. Note that the line following a jump call is always executed before the jump actually occurs (there's a delay of one instruction).

To sum up, this code explicitely does that :
1) Add a flag "deals damage" to the effect,
2) Set the damage to 100 * Spell Power + Spell Accuracy,
3) Run the "Apply Effect" code (0xB7918 ; note that it can differ depending on your version of the game).

Check the help to have a list of useful known data addresses. You'll know how to retrieve data such as caster's or target's stats. If you're interested in modifying raw spell effects, I encourage you to check out how most simplest are done. Namely, you should check out these spell effects :
Minus Strike, Lucky Seven, Thievery, Frog Drop, Dragon Crest and Grudge (other "Pure Damage" like effects, with more complex damage formulas),
Defless, Absorb Magic/Strength (another effect than damage, but quiet simple),
Darkside, Drain and Osmose (damage/heal on the caster and use of the different flags),
Chakra (HP and MP heal, and also an example of an effect using a supporting ability),
Curse (change the elemental weakness of the target and display a special text. I suspect the element of the spell Curse to be specially randomized the same way that Roulette's target is randomized ; that's something specially handled by the battle script, but not at the "spell effect" place).

Note that there are a lot of "jump" calls that lead out of the spell effect's range - sometimes to another spell effect's function part, sometimes to another part of the battle script and even sometimes to another part of the RAM script, not battle-related -. You can try to guess what's their purpose (mainly : they do the standard damage and dodge calculations) and treat them as black boxes. You can also copy the address offset and paste it in the "Full Code" area to see the target code.

Since that's complicate even to understand the code (and even more to write one), I'll do samples of custom spell effects and post them here. If you have ideas, you can ask and I'll see if it's reasonably easy to make ^^"


Fiou, I hope some of you will find interests in this version. I'm both glad to be able to modify spell effects and disappointed to have it so complicated ^^"
By the way, to add to the masochism, that MIPS coding thing will surely be useless for the Steam version ; that's one of the first thing they'll have updated for sure.

629
Thanks for the SetModel parameter Satoh, and for the interesting explanations ^^

Battle Scene importing (and even exporting) is not working well indeed. That's a part of the program I started a long time ago and I didn't got back fixing things there, mainly because they're quiet messy to begin with. Actually, I think the best I've ever done with that is exporting a scene, modify the position of 1 vertex and import back the model. The fact that it worked was a big success for me ^^"
I don't think you can use another amount of materials than the default one (and maybe you can't use another amount of vertices either).
Also, the exportation is partial because some scenes have animations (such as Trance Kuja's battle scene, where the crystal is seen floating behind him).

About the field backgrounds, you can export them :
1) Either one by one using the "Background: Manage" button and then "Export". This way, all the checked tile blocks will be exported as different layers of the .tiff image (unless you merge them). I don't know for Photoshop, but Gimp asks about using those layers as new images or using them as normal layers when I open the .tiff image with it.
2) Either by file batching. This way, all the tile blocks will be exported.

As Satoh said, field backgrounds are composed of tiles, which are 16x16 little images (potentially transparent). Those tiles are then packed into tile blocks, which is what you see in HW.

By the way, if you happen to know about image format and have an idea for a better one than .tiff, let me know ^^
.tiff seemed to me the most standard format that supports multiple layers, but if photoshop can't read them as layers, that's a problem.

630
Thanks Satoh !

About preloading models, yes, that's kind of strange. The preloading list does exist in the game's data and you really modify it by adding another model. However, it seems to be not sufficient... It might have to do with this 2nd parameter though, as I don't have a clue about what it does. It might be what you say, but the Moogle on the World maps actually have a 200 value, which is quiet large if it's a collision size...

631
Congrats for the sound, I didn't think of it ^^
108 indeed seems to be the sound ID. I don't have a clue for the other arguments but I suppose you'd expect the volume, pitch and maybe delay to be parameters. I won't add a tool for playing sounds and musics simply because I would need to convert their format (they are so-called "AKAO files", from the sound programmer's name) and I don't know of it.

However, I may do a list to easily identify them. It's only a matter of testing there.

632
Yes it is possible to make the Mini-Prima Vista catchable.
1 ) Go edit Hideout's script and seek the functions "Theater_Ship_Miniature" (any one of those),
2 ) Right-click on the function's name and choose "Add" to add a new function related to Prima Vista's entry,
3 ) In the properties, let the Entry Type to 2 and change the Type to 3 (for a Speak button event),
4 ) Copy-paste the following script in the newly created function :
Code: [Select]
Function Theater_Ship_Miniature_SpeakBTN
    set VAR_GlobBool_158 = 0
    if ( VAR_GlobBool_159 == 1 ) {
        DisableMove(  )
        if ( VAR_GlobBool_144 == 0 ) {
            DisableMenu(  )
        } else {
            Wait( 1 )
        }
    }
    0x27( 127 )
    HideObject( 255, 0 )
    SetTextVariable( 0, 326 )
    AddItem( 326, 1 )
    WindowSync( 7, 0, 61 )
    set VAR_GlobBool_158 = 1
    if ( VAR_GlobBool_159 == 1 ) {
        if ( VAR_GlobBool_156 == 0 ) {
            EnableMove(  )
            0x27( 255 )
            if ( VAR_GlobBool_144 == 0 ) {
                EnableMenu(  )
            }
        }
    }
    TerminateEntry( 255 )
    return
5 ) Change the "326" figures to your item ID ; 326 is the ID of the first unused Key item so you may use that slot to create your Mini-Prima Vista as well,
6 ) Go to the "Main_Init" function : you need to make it so the Ship won't appear again upon re-entering the field. Change these lines :
Code: [Select]
    if ( VARL_GenBool_2419 == 1 ) {
        InitObject( 3, 0 )
    }
into these :
Code: [Select]
    if ( ( VARL_GenBool_2419 == 1 ) && ( GetItemCount(326) == 0 ) ) {
        InitObject( 3, 0 )
    }
7 ) There's no 7th step,
8 ) Profit !

633
FF9 Gameplay Releases / Re: [FF9] Alternate Fantasy (v3.2)
« on: 2016-03-03 20:27:13 »
Ozma can still be very random and say "no" to a perfectly prepared team. There are however a few tricks possible to lower that random aspect and make him more accessible. Still a tense fight (contrary to Necron, I didn't increase his HP).

Yeah, I thought it was a shame that Dispel was so useless in the normal game, so here it can take care of a few problems ^^
Necron's ATB is a bit tricky since he actually has 4 ATB bars. The main one is the fastest and casts Blue Shockwave and Grand Cross (and Neutron Ring in vanilla ; here it became a counter). The other ATBs use respectively the -aga spells, the Cure/Buff spells and the Flare/Holy/Meteor megaspells. So yeah, you can't do a lot if he gets several turns at once ^^
But knowing that, you can care a bit more of the ATB trick : it's not always a good idea to let the ATB run while Necron is casting.

634
FF9 Gameplay Releases / Re: [FF9] Alternate Fantasy (v3.2)
« on: 2016-03-02 16:31:26 »
Congrats ! If you keep winning, then it can't be all about luck :p
I'm quiet sure I didn't change the different ways to get the Robe of Lords ; I did that for the Protect Rings but not for the Robe.

That's a good thing you can beat Hades without grinding too much. When I changed the Excalibur II requirements, I admit that I didn't think a lot about the feasability of "beating Hades before 14 hours". It seemed possible but since I don't speedrun and I don't have a good idea of how much time the difficulty increase would demand, I'm not sure it's actually possible ^^"

Next come Kraken and Lich :D

635
FF9 Gameplay Releases / Re: [FF9] Alternate Fantasy (v3.2)
« on: 2016-02-28 09:22:34 »
I did change the steal rate of Hilgigar's and Beatrix 1's rare steal. They are 6.25% rate steals instead of the normal 0.39% rate. This at least has been changed the same way in my mod and LandonRay's Unleashed. I guess you were just unlucky.

636
FF9 Gameplay Releases / Re: [FF9] Alternate Fantasy (v3.2)
« on: 2016-02-27 09:38:22 »
Yes, it's time. I think it's after 8 turns that Stock Break gets enabled. The battle becomes really tough from this point, but you can get to back row to tank a little bit more.
Also, you can actually displace your characters inside the menu to choose which ones should be placed on the sides. This way you choose which characters will inevitably take Stock Break and which will have a chance to avoid it.

I don't mind the way you play your game ^^
I'm not sure you ever asked Mr. Sakaguchi about save states :p

637
FF9 Gameplay Releases / Re: [FF9] Alternate Fantasy (v3.2)
« on: 2016-02-26 19:32:33 »
Glad you found some consistency in the difficulty :)
Indeed, that's a lot easier than Unleashed ; my goal was not a difficulty mod but more a "renew the Final Fantasy IX experience" mod.

638
FF9 Gameplay Releases / Re: [FF9] Alternate Fantasy (v3.2)
« on: 2016-02-26 09:18:45 »
Are you sure you applied the patch correctly? Because Black Waltz 1 is kinda not the same as the normal game and changes should already have struck you more.
If Vivi's Mage Staff doesn't teach MP+20%, for example, then you're playing vanilla game.

Other than that, the difficulty curve is quiet smooth ; the Alexandria rescue part is a bit more difficult and the end of CD 2 is a bit more relaxing. No difficulty spikes anywhere.
Also, besides maybe Necron and Ozma, it was thought to be beatable with no grinding at all.

639
Thanks !

Well, there are the mods that are compatible between each others and those which are not.

Mods are compatible with each other if they don't modify the same aspect of the game. These could already be used together before that update ; you can just apply the .ppf patches one after the other.

Mods that are not compatible with each other likely change the same things in different manners. So they can't be applied both at the same time. However, with this update, it is indeed possible to choose what you take from each mod and mix them together.
You simply need to open the modded binary files (or use "Open Mod" if you have it in a .hws format) and check/uncheck things in the "Mod Manager" tool. Export them as .hws and then re-open a normal game file and apply all the .hws one after the other.

However, Hidden Dialogs is basically included in Alternate Fantasy so there's no need to mix them.
The other example you gave shows that you can't go in the details because God Save the Queen change 2 things : the items and the (synthesis) shops. If you do this method, you'll have to remove all the other items/shops modifications of Alternate Fantasy. It's better in this case to see how God Save the Queen is made and do the changes directly with the program.

Here are (from memory) what each mod modifies, to check compatibility :
Code: [Select]
Hidden Dialogs : Texts (Cleyra) and Field scripts.
God Save the Queen : Items and Shops.
Vir's mods : Items, Stats, Texts (for some typo mistakes), Spells (Thunder Slash), Enemies (only the Pandemonium trio and Tantarian for the forced exp, I think).
Unleashed : Spells, Stats, Items, Shops and Enemies. Maybe also Commands and Supporting Abilities (I don't remember that being changed).
Alternate Fantasy : All those plus World Maps, a few Fields and Spell Animations.
ATB Speedup : not something modifiable in HW. Compatible with everything else.

640
Update to v0.32 :
- Added a file batching feature ; it allows to extract or import a lot of things in 1 shot :
-- Can export/import texts and UI texts (see below for more informations about the importation process),
-- Can export scripts (no importation yet),
-- Can export field backgrounds.
- Added a Mod Manager tool ; it allows to define which datas should be overwritten when you save (using any of the 3 save methods). Its main purpose is to allow you to create a Mod file (.hws) from an already modded version of the game : just check all the features that differ from the original game.
- Improved the Dialog box automatic resizing. I didn't test it thoroughly, but from what I saw, it seems to calculate the box size for the best result (it always fits the default size when you don't change the text).
- Deciphered quiet a few script opcodes. Some of them have been slightly renamed ("WalkEx" -> "WalkXZY" for instance, for the opcode that makes a character walk to a destination given by 3 coordinates).
- Fixed some UI text opcodes ; it was not normal to have figures in the middle of some UI texts. The figures in battle's UI texts are normal though (it might be the display time of the text).
- Fixed a bug making global declaration always giving the same base variable slot when the base variable was not specified.
- Added Russian RGR charmap in the .conf file. Hades Workshop can't scan the translated version directly though ; I guess shikulja's post was about that ^^"


So, in order to properly import text files, you need some formatting :
The .txt file must start with the following line. Everything before that will be ignored :
Code: [Select]
#HW filetype TEXTFor UI texts, it must be this instead :
Code: [Select]
#HW filetype UITEXTAfter that, you need to specify to which text block corresponds your file using a line like this one :
Code: [Select]
#HW fileid [ID]replacing [ID] by the number corresponding to the text block in the following list :
Code: [Select]
0 : Generic UI
1 : Debug Room
2 : Prima Vista
3 : Alexandria Castle (1)
4 : Evil Forest
7 : Cleyra Trunk
8 : Ice Cavern
18 : Red Rose
22 : Lindblum Castle (Disc 2)
23 : Mist Gates
30 : Terra
31 : Mountain Path
32 : Conde Petie
33 : Alexandria (Disc 1)
37 : Black Mage Village (Disc 2/3)
38 : Mognet Central
40 : Ruined Prima Vista
42 : Quan's Dwelling
44 : Cleyra
47 : Dali
50 : Dali Underground
51 : Gizamaluke Grotto
52 : Bran Bal
53 : Observatory Mountain
63 : Cargo Ship
70 : Treno (Disc 2)
71 : Qu's Marsh
74 : South Gate
77 : Burmecia
88 : Alexandria Castle (3)
89 : Alexander
90 : Alexandria (Early Disc 3)
91 : Alexandria By Night
121 : Shrines
124 : Oeilvert
134 : Pinnacle Rocks
166 : Daguerreo
186 : Hilda Garde III
187 : Ending
189 : Invincible
223 : Treno & Supersoft
276 : Lindblum (Disc 1)
289 : Alexandria Castle (2)
290 : Stormless Cleyra
344 : Pandemonium
358 : Madain Sari (Disc 2/3)
359 : Gargan Roo
360 : Madain Sari (Disc 4)
361 : Fossil Roo
484 : Mount Gulug
485 : Occupied Lindblum
525 : Occupied Lindblum Castle
595 : Lindblum (Disc 3/4)
694 : Memoria
738 : Iifa Tree Roots
739 : Ipsen Castle
740 : Desert Palace
741 : Treno (Disc 3/4)
754 : Ruined Alexandria Castle
908 : Esto Gaza
943 : Lindblum Castle (Disc 3/4)
944 : Iifa Tree
945 : Chocobo Places
946 : Ruined Alexandria
1073 : Black Mage Village (Disc 4)
Then, before each text, you need to write a line :
Code: [Select]
#HW newtext [POS]replacing [POS] by the text's position in the text block.

If you used the "Export Text Block" feature, you only need to replace all the strings "// New Text :" by "#HW newtext" and add the right filetype and fileid at the start of the file.
I thought that it would be better to use "#HW" for the importation's syntax instead of just "//" because those slashs could be found inside the texts you'd want to import.

If you use the File Batching feature, everything is already formatted.

Note that you need to have texts with their opcode marks (the 'µ'). It'll throw a warning if the amount of µ mismatch from the default text's.
Also, dialog boxes can be automatically resized when you import your texts.



Fiou... Next version will likely be about making the program compatible with the Steam version. I don't know if I'll add an Android/iOS support but I don't think so. Steam version should allow to bypass the size limitations though ; I guess the priority after that will be about editing the backgrounds  8-)

641
There are two of them, for some reason. During the escape from Alexandria's Castle, the game unlearn those abilities both times Dagger is added to the party.

1st one (story-wise) is found in "A. Castle/Staircase" (1st one) at the end of "Zidane_Init".
2nd one is found in "A. Castle/Underground", still at the end of "Zidane_Init".

I also found one in Zidane's script of "Pinnacle Rocks/Path" (1st one), but I don't think it's ever ran because Zidane can't be controlled in these screens (judging from the "Main_Init" function, it would be ran if the player went in these screens before the Castle escape).

The setting about the eidolons' magic cost is redefined everytime the party is modified, but it's set to 0 the first time in the function "Main_19" of the field "Pinnacle Rocks/Hole" (this function runs once when the dialog with Ramuh is done ; it handles the screen change).

Thank you for the lvl1 scripts :)

@Dogshrapnel : I don't know for Iai Strike. It may be the accuracy that uses another formula. It may be to handle very specific effects ("Death" heals the target if it's under Zombie instead of adding the status for instance).

642
No, it still doesn't work and I can't give any more answer that I gave at the time itoikenza :/

643
For your question, yes it'll apply both for the enemy and the party uses of a spell animation.

For the binary file, I can't say... Can you provide me a link with the RGR translation patch? I'll look into it this week.

644
@vivigix : Thanks for the deails.

You need to open the file "HadesWorkshop.conf" with a text editor. The text is written using UTF-8 and most text editors can read it perfectly. However, if that's not the case (for instance, if you see no kanjis in front of the "Japanese" charmap, something is wrong), try with another text editor. Notepad++ or Notepad2 can read it for instance.

Once opened, add the line I gave you under the "[Text]", among the other Charmap declarations.
You end up for instance with a file like this :
Code: [Select]
# Hades Workshop configuration file
# Comment lines begin with #

[Preferences]
Charmap=Latin
OpcodeCharacter=µ
MenuColor=0
TextPreview=2

[Text]
Charmap[Latin]=0123456789+-=*% ABCDEFGHIJKLMNOPQRSTUVWXYZ(!?“:.abcdefghijklmnopqrstuvwxyz),/+~&ÁÀÂÄÉÈÊËÍÌÎÏÓÒÔÖÚÙÛÜáàâäéèêëíìîïóòôöúùûüÇÑçñŒß'”_}{∴∵♪→∈×♦§<>←∋↑△□∞♥?????????????«»↓―°★♂♀☺?„‘#※;¡¿
Charmap[Latin][A]=?
Charmap[Latin][B]=?

Charmap[RussianPirateRGR]=0123456789+-=*% АBСDEFGНIJКLМNOPQRSТUVWXYZ(!?“:.аbсdеfдhijкlтпорqrstиvwxyz),/+~&БДЖЗИЙЛУÍÌГПФШЩЬЭЯЮÜбвжзмнцйíìглшщэчыùюüЦяфьЫЧ'”_}{∴∵♪→∈×♦§<>←∋↑△□∞♥?????????????«»↓―°★♂♀☺?„‘#※;¡¿

Charmap[Japanese]=0123456789+-=*% ABCDEFGHIJKLMNOPQRSTUVWXYZ(!?゛:。abcdefghijklmnopqrstuvwxyz)、/・〜&「」…、。ーあいうえおぁぃぅぇぉかきくけこがぎぐげごさしすせそざじずぜぞたちつてとだぢづでどなにぬねのはひふへほばびぶべぼまみむめもぱぴぷぺぽやゆよゃゅょっらりるれろわをんアイウエオァィゥェォカキクケコガギグゲゴサシスセソザジズゼゾタチツテトダヂヅデドナニヌネノハヒフヘホバビブベボマミムメモパピプペポヤユヨャュョッラリルレロワヲンヴ
Charmap[Japanese][A]=『』'城魔南場艇劇村道山洞窟宮砂街黒樹火幹法士森装用地備族下沼古氷輪術体祠性帽鉄属子門使武器石駅剣車馬畑号撃敵腕与専攻定薬全回白指効拳設動金雷師源町果単一数竜大技手黄宝変風鏡剤珠盗板得防頂目更北毒態状中死水見発暗無消列力気避取入精皮秘豆賊氏聖服生天炎切復在現味御加追人率色事赤複返費前闇冷投減桃針線神当路橋角髭月羽爪枯心瑚胸光鎧衣内郷司祭本妖後珊忍憩呪斬女吸方蘇孔理波青上値能収黙化沈倍自調乱半喚相迷眠召混先惑分実必制通験瀕改逃経反治万空原導利止隠固牙象鯨星右育持長鍵形面解意極者教触戒区熱満統免許射貫知熟警日緑
Charmap[Japanese][B]=替要決刀告宣運画江庭園部夢食着三付根束飽興帯転柔尾草奮円頭巾髪野菜銀左棒八閃Ⅱ兜猫飾嘯雑鳴息突章絞狂華六咲命桜海裁獄放魚魂夜戦所最闘個選獣種険冒初作幻確義奥移並誰絶物不受了的弱点終字常猛買名覚同々異未処文削除編成元屋造店鍛冶売書※択認箇具操否位置視世行出即土守殺身今何脱恐睡時好代高湿谷押諸岬漠岸脈盆平島瀬霧去東西陸浅忘外側閉夕川辺近浜血絵対重可向系正期記憶進階段退各合小遠距離速別表示間枚類以補助騎港王国裏徐

#more stuff below...

Save the file and then open Hades Workshop. Go to "File -> Preferences" and change the field "Game Alphabet" to "RussianPirateRGR".
1) If you don't see any other option than "Default", then your text editor probably messed up with the configuration file. Change your text editor.
2) If you see "Default", "Latin", "Japanese" and "Russian" but not "RussianPirateRGR", then you didn't add the line correctly inside the .conf file.

In the case you successfully selected "RussianPirateRGR", it should work.


@itoikenza : There's unfortunatly no way to replace Beatrix inside the menus and battles and not on the field, besides doing what I described several times (replace Beatrix by a normal character at the beginning of the field's "main" function and replace her back in the party at the end of that same function).

I plan to make HW compatible with the Steam version (actually, if everything goes well, the space limitation should be removed, enabling a bunch of cool stuff), but I can't tell before I see it ^^"

645
Hey vivigix. Congrats for your script edition.

I added a support for a russian version. When I made the charmaps, I've been given 2 for the russian version though (KUDOS and RGR).
What's the difference between them? Are there any official russian translation or are they both fan-made? Is there one clearly better than the other?

If both versions are equally useful, I'll add back both version supports...
For now, you can copy-paste this line in your "HadesWorkshop.conf" file and it should add RGR support (go in "File -> Preferences" to change the charmap).
Code: [Select]
Charmap[RussianPirateRGR]=0123456789+-=*% АBСDEFGНIJКLМNOPQRSТUVWXYZ(!?“:.аbсdеfдhijкlтпорqrstиvwxyz),/+~&БДЖЗИЙЛУÍÌГПФШЩЬЭЯЮÜбвжзмнцйíìглшщэчыùюüЦяфьЫЧ'”_}{∴∵♪→∈×♦§<>←∋↑△□∞♥?????????????«»↓―°★♂♀☺?„‘#※;¡¿
Thanks for telling me about this.

646
I wrote that wrong thing in SetPartyReserve's description inside the editor.

647
I got Amarant lvl 2 by doing this, so I guess Amarant's level will always be the same as Blank's level, regardless of the levels of the rest of the crew.
Otherwise, yes.

648
Yes I saw your topic.
I just made some tests : contrary to what I thought and wrote, the characters whose levels are taken in account are not the ones in the reserve (the ones available when you're asked to choose your party members) but rather seem to be the 4 party members only.

So, in order to do what you want, you need to locate the scripts that initialize the main cast the first time they join the player. It always look like this :

Code: [Select]
set VAR_B13_21 = 0
SetPartyReserve( VAR_B13_21 )
set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 0 ) ) )
set VAR_B10_8 = 0
while ( VAR_B10_8 <= 11 ) {
if ( IsInParty(VAR_B10_8) ) {
set VAR_B10_10 |= ( 1 << VAR_B10_8 )
}
set VAR_B10_8++
}
if ( 1 ) {
set VAR_B10_12 |= 1
}
if ( 1 ) {
set VAR_B10_12 |= 4
}
if ( 1 ) {
set VAR_B10_12 |= 2
}
if ( 1 ) {
set VAR_B10_12 |= 64
}
set VAR_B10_14 = ( VAR_B10_10 ^ VAR_B10_12 )
set VAR_B10_8 = 0
while ( VAR_B10_8 <= 11 ) {
if ( ( VAR_B10_14 >> VAR_B10_8 ) & 1 ) {
RemoveParty( VAR_B10_8 )
}
set VAR_B10_8++
}
if ( IsInParty(0) == 0 ) {
set VAR_A6_147 = PartyAdd(0)
}
if ( IsInParty(2) == 0 ) {
set VAR_A6_147 = PartyAdd(2)
}
if ( IsInParty(1) == 0 ) {
set VAR_A6_147 = PartyAdd(1)
}
if ( IsInParty(6) == 0 ) {
set VAR_A6_147 = PartyAdd(6)
}
set VAR_D5_303 = 0
set VAR_B10_8 = ( VAR_B10_10 = ( VAR_B10_12 = ( VAR_B10_14 = 99 ) ) )
if ( 1 ) {
set VAR_D5_303++
set VAR_B10_8 = 0
}
if ( 1 ) {
set VAR_D5_303++
set VAR_B10_10 = 2
}
if ( 1 ) {
set VAR_D5_303++
set VAR_B10_12 = 1
}
if ( 1 ) {
set VAR_D5_303++
set VAR_B10_14 = 6
}
set VAR_A6_148 = ( VAR_A6_149 = ( VAR_A6_150 = ( VAR_A6_151 = 0 ) ) )
if ( VAR_B10_8 != 99 ) {
if ( GetHP(VAR_B10_8) == 0 ) {
set VAR_A6_148 = 1
}
}
if ( VAR_B10_10 != 99 ) {
if ( GetHP(VAR_B10_10) == 0 ) {
set VAR_A6_149 = 1
}
}
if ( VAR_B10_12 != 99 ) {
if ( GetHP(VAR_B10_12) == 0 ) {
set VAR_A6_150 = 1
}
}
if ( VAR_B10_14 != 99 ) {
if ( GetHP(VAR_B10_14) == 0 ) {
set VAR_A6_151 = 1
}
}
if ( ( ( ( VAR_A6_148 + VAR_A6_149 ) + VAR_A6_150 ) + VAR_A6_151 ) == VAR_D5_303 ) {
if ( ( VAR_B10_8 != 99 ) && ( VAR_A6_148 == 1 ) ) {
SetHP( VAR_B10_8, 1 )
}
if ( ( VAR_B10_10 != 99 ) && ( VAR_A6_149 == 1 ) ) {
SetHP( VAR_B10_10, 1 )
}
if ( ( VAR_B10_12 != 99 ) && ( VAR_A6_150 == 1 ) ) {
SetHP( VAR_B10_12, 1 )
}
if ( ( VAR_B10_14 != 99 ) && ( VAR_A6_151 == 1 ) ) {
SetHP( VAR_B10_14, 1 )
}
}
SetStatus( 0, 127 )
SetStatus( 1, 127 )
SetStatus( 3, 127 )
SetStatus( 2, 127 )
SetStatus( 4, 127 )
SetStatus( 5, 127 )
SetStatus( 7, 127 )
SetStatus( 6, 127 )
SetStatus( 8, 127 )
if ( IsInParty(5) ) {
set Setting_OptionalQuina = 1
} else {
set Setting_OptionalQuina = 0
}
if ( ( ( VAR_B13_19 >> 0 ) & 1 ) == 0 ) {
SetCharacterData( 0, 1, 255, 9, 0 )
set VAR_B13_19 |= 1
}
if ( ( ( VAR_B13_19 >> 1 ) & 1 ) == 0 ) {
SetCharacterData( 1, 1, 255, 5, 1 )
set VAR_B13_19 |= 2
}
if ( ( ( VAR_B13_19 >> 2 ) & 1 ) == 0 ) {
SetCharacterData( 2, 1, 255, 6, 2 )
set VAR_B13_19 |= 4
}
if ( ( ( VAR_B13_19 >> 6 ) & 1 ) == 0 ) {
SetCharacterData( 6, 1, 6, 6, 6 )
set VAR_B13_19 |= 64
SetRow( 6, 0 )
}

What you need to do is to cut that last part with the "SetCharacterData" and paste it a little before, between the "RemoveParty" loop and the "PartyAdd" calls.
Tell me if you can't find these initializing scripts. The ones for Eiko and Amarant are found in the entrances of Conde Petie Mountain Path and of Madain-Sari respectively, in the functions "Main_Loop" and "Zidane_Loop" respectively.

However, I don't think it will fix the "Marcus/Eiko ; Blank/Amarant" stat glitch.

649
Yes Gledson, that's what I'll call "file batching". Next main version will be focused on that, promise ^^"

650
Update to 0.31b :
- Fixed that World Map bug ; the config file will update consequently.
- Enabled script edition of World Maps for the japanese version but for the two dummied World Maps.
- You can now declare "global" variables the same way you declare "local". There is no need to allocate them but, by default, they are initialized to 0 at the beginning of the script's execution (when entering a Battle, a World Map or a Field).
- Added a .hws file containing names for all the variables used in the battles. Use "Open Mod" to import it ; it won't mess with any of your modifications besides your own variable naming if you had one.

Pages: 1 ... 21 22 23 24 25 [26] 27 28 29 30 31 ... 35