English (American)  中文(简体)
This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

by MangaD at 05-07-2020, 12:24 PM

It is possible to "convert" the SWF to an EXE using HF Workshop, which is actually just using Adobe Flash Player Projector to create a standalone of the SWF. There are many versions of the FP available for download, and you may download them here.

Note: If you are curious about the algorithm HF Workshop is using, you may check it here.

However, HF Workshop does not customize the FP projector. So here are some instructions on how you can achieve this.

Note: The EXE must not be compressed with UPX for this to work.

Changing the icon

For changing the icon, you'll need Resource Editor. Open the file with resource editor. Expand the "Icon" folder, right click on the first icon, click on "Load resource..." and select the ICO file you want. If you don't have a ICO file but only an image, you can convert the image to ICO using any online tool, like https://icoconvert.com/. The official HF ICO is available here. You may do this for all the icons there, though one should be enough to change the displayed icon of the EXE file.

Removing the menu bar

The menu bar is not very useful. Of all of its options, full screen is probably the only useful one, but this can be achieved with CTRL+F too. Removing this bar is actually easy. With Resource Editor again, open the EXE with it, expand the "Menu" folder and delete all the menu entries.

Changing the window's title

This one varies with the FP version. On old versions, I was told that using Resource Editor, changing the title can be done on the "String Table" folder. But on more recent versions (the oldest I tried was version 11), changing the title must be done with an hex editor. In version 11 and version 20 (the ones I tried), you have to search for A\0d\0o\0b\0e\0 \0F\0l\0a\0s\0h\0 \0P\0l\0a\0y\0e\0r\0 \0X\0X, where the \0 represents the null byte (00 in hexadecimal) and appears between every character, and XX represents the version (11, 20...). After you've found this, you can write your own title on top of this (keeping the null bytes intact), and you must terminate the title with a null byte, and you also cannot have a title bigger than the already existing one, using this simple method. So, your title could look like: H\0e\0r\0o\0 \0F\0i\0g\0h\0t\0e\0r\0 \0v\00\0.\07\0+\0\0\0X\0X

Note: Resource Hacker appears to break Trong's Flash Player. Resource Editor is a good alternative that works.
by asdfqwe at 03-07-2020, 08:53 PM
How can I allow heater to turn when he use run attack?

[Image: Capture.png]
by MangaD at 21-06-2020, 03:43 PM
After talking with @不饿白帝BEBD, @Runningcake and @Lee Catalpa Tien (on QQ), I have grasped a few concepts of the SPT file. I'll leave a rough draft here, for future updates and development. Feel free to comment with your knowledge and improve it!

Overview of SPT file:

[Image: spt.png]
  • cad and keyTgr arrays appear to be useless. Maybe leftovers from older versions.
  • frames array contains all the frames' data.
    • allowKeyTrigger attribute of a frame specifies whether or not we can perform an action (e.g. attack) from this frame.
  • action array contains all the possible actions of a character.
    • a_keyTgr specifies the actions that can be TriGgeRed in the action state that it belongs to, as well as how to trigger them
      • rkt (restrict key trigger) if it is false, allowKeyTrigger in frame is ignored. If it is true, it can be triggered only in frames of the action that have allowKeyTrigger set to true. Example: In STAND state, rkt should be false for a special move if we want to trigger it at any time. But during an attack or specific action, rkt should be true so that only in certain frames (e.g. later frames) of the attack we can trigger another one.
      • k key combination to perform move to right.
      • kr key combination to perform move to left (stands for key reverse).
      • agi is the Action Group Index that this trigger corresponds to.
      • ati - in an action group there is an actionIndex array, ati is the index in this array.
      • ai - each element of the actionIndex array is also an array, and ai is the index of the element in this array that we want.
  • actionGroup - corresponds to a set of actions. Most common are normal, gua (guard), cat (catch human), hea (catch object), rid (ride)
    • action useless array, probably leftover from older versions. It was moved to the outside action array mentioned above. Now actionGroup is linked to a set of actions through the attributes ati, agi and ai inside a_keyTgr inside of an action.

Making new moves requires modifying actionGroup, action and frame arrays.
  • hire_id - array with type of soldiers for each possible unit (we have to use their id to get them, e.g.: "z_infantry01"). If you use a mount as id (e.g. horse, horse_monster, horse_triceratops), they will be available to mount but won't attack on their own.
  • hire_max - array with count of soldiers for each possible unit (for ex. lets say "z_infantry01" if we put its value to 1, then we get 4 soldiers, if 2 means then 8 soldiers)
  • hire_price - array with costs to hire a unit, for each possible unit.
  • hire_h - array with mounts for each possible unit. If "null" they are on foot. If "h" they are on horse. If "m" they are on monster. If "t" they are on triceratops. These mounts won't disappear when a soldier falls from them, they will be available to mount by the player or another soldier, except if the hire_id is z_cavalry01, then the mounts will disappear.
by MangaD at 21-06-2020, 11:33 AM
In HF v0.7, Raye's lightning attack (G → A)  cannot turn around.

[Image: raye2.png]

In this tutorial, we will be fixing that!

I will assume that the reader is already familiar with the HF Workshop tool, if he is not, he is advised to go to the linked thread, read it and watch the tutorial video.

Ok, so, the file where the data that we need to change is, is called Spt file. In HF v0.7, Raye's Spt file has ID=316. Extract that file with HFW, extract the JSON file from the ZIP file, and open it with your favorite text/code editor. This file is huge, so I recommend you to collapse all attributes in order to get an overview of the file's contents, as shown in the image:

[Image: spt.png]

Here I'm using VS Code, and the shortcut to fold all is Ctrl+K Ctrl+0.

You can see in the image the lines that have an arrow and are highlighted in blue, these are arrays and you can expand to view, in case you have collapsed them as suggested. Our relevant data for this tutorial is in the action array (line 2346), which contains all of the actions related to our character.

The property we need to change for our action is called allowTurnFace, and we should set it to true. The problem now is finding which action corresponds to Raye's lightning move.

Update: The array keyTgr is actually useless, gem from older versions, and the below explanation only works by chance. The actual way to find the action we want is more complicated, and this thread can shed some light.

The array keyTgr contains the key sequences for performing our actions. We know as a matter of fact that our sequence is G → A, and that is translated to gra (guard, right, attack) in the keys property. We find gra in position 2 and 6 of the keyTgr array (lines 891 and 951), and they are associated to actions attack4 and attack3 respectively, so now we know what actions to look for.

Going back to our action array (line 2346), we will now search in it for the string array4. In VS Code, you can select the collapsed array, then press Ctrl+F, and select the icon to Find in selection (Alt + L), as shown in the picture below.

[Image: spt2.png]

The first action we found is in the 75th position of the action array, and has name _RID_ATTACK4. Because it has the _RID_ prefix, this probably refers to the attack while riding, which is not what we're looking for right now, so we press the down arrow or enter to keep looking. We then find the action with name ATTACK4 in position 82, this is what we want, and we change the attribute allowTurnFace to true.

"82": {
    "HFW_classNameXXX": "Data.Action",
    "allowTurnFace": true,
    "selfLoop": false,
    "nextAgi": -1.0,
    "aiz2": 0.0,
    "aix1b": 0.0,
    "landAti": -1.0,
    "frame": null,
    "mpBurn": 0.0,
    "nextAti": -1.0,
    "landActionName": null,
    "aix2b": 0.0,
    "landAgi": -1.0,
    "name": "ATTACK4",
    "nextActionName": null,
    "special": -1.0,
    "aix2": 0.0,
    "aiz1": 0.0,
    "index": 82.0,
    "nextAi": -1.0,
    "aix1": 0.0,
    "a_keyTgr": {
        "HFW_ArrayLenXXX": 1,
        "0": {
            "HFW_classNameXXX": "Data.A_KeyTgr",
            "kl": 1.0,
            "ati": 3.0,
            "pollhp": 0.0,
            "agi": 0.0,
            "atf": false,
            "ai": 2.0,
            "k": "a",
            "hp": 0.0,
            "rkt": true,
            "mp": 0.0,
            "kr": "a"
    "type": -1.0,
    "landAi": -1.0,
    "frameIndex": 222.0

After trial and error attempts, I found that changing this property only for attack4 was enough, and no need to change it for attack3. I have not spent enough time figuring out the difference between these 2 attacks, but this completes our tutorial. All you have to do next is to replace the JSON file in the ZIP file, replace it in HFW, and export  the new EXE. Cheers!

Special thanks to @不饿白帝BEBD, @Runningcake and @Lee Catalpa Tien
by MangaD at 19-06-2020, 08:49 PM
I will assume that the reader is already familiar with the HF Workshop tool, if he is not, he is advised to go to the linked thread, read it and watch the tutorial video.

Frames' data can be found in SPT files. Drew's SPT file has id=229. Open that file and search, for example, for "name": "JUMP_ATTACK" in order to change Drew's jump kick. You should find the following:

"50": {
    "HFW_classNameXXX": "Data.Action",
    "selfLoop": false,
    "nextAi": -1.0,
    "allowTurnFace": false,
    "nextAti": -1.0,
    "frame": null,
    "aiz2": 0.0,
    "special": -1.0,
    "landAti": -1.0,
    "landAi": -1.0,
    "nextAgi": -1.0,
    "name": "JUMP_ATTACK",
    "a_keyTgr": null,
    "landAgi": -1.0,
    "frameIndex": 146.0,
    "aix1b": 0.0,
    "mpBurn": 0.0,
    "index": 50.0,
    "aix2": 0.0,
    "aiz1": 0.0,
    "nextActionName": null,
    "type": -1.0,
    "aix2b": 0.0,
    "aix1": 0.0,
    "landActionName": null

Notice that frameIndex is 146, that's the frame where JUMP_ATTACK begins. Now you can search for "146" and you'll find that frame. All subsequent frames with "name": "jump_attack" belong to that motion. Every frame has a duration attribute, you can increase it to slow down the motion. Good luck!
  •  Previous
  • 1
  • 2
  • 3(current)
  • 4
  • 5
  • 42
  • Next 
Welcome, Guest
You have to register before you can post on our site.


Search Forums

Forum Statistics
Members: 252
Latest member: iczzy209348
Forum threads: 285
Forum posts: 1,354
Online Users
There are currently 26 online users.
0 Member(s) | 24 Guest(s)
Bing, Google
Upcoming Events
No upcoming events