Note: if you’re confused on the three Hanteichan executables, just focus on v2.1.666 as your main editor. v2.2.1 includes the ability to copy patterns and data between instances of itself, but is prone to crashing often. pat_editor is not made to edit HA6s.
Hantei-chan makes it somewhat easy to modify HA6 (Hantei 6) files to make modifications to UNI2 and other French Bread games. If you would like to edit frame data, box data, effects, attack stats, visuals, and many things far and between, this is what will you get started to bend the Hollow Night to your will.
Like with all projects, be sure to save often and make backups. A good work ethic will save you from heartaches and lost time. HA6 is a powerful tool, but one that you must get used to and be careful with. There is no typical undoing.
New File - Empty File.
Close File
Load from .txt… - Can load a whole character from chrXXX_0.txt
Load HA6… - Loads a .HA6 moveset file.
Load HA6 and Patch… -
Save - Save changes. You can use CTRL+S to save quicky.
Save as… - Saves a copy, and Save
s to it from now on.
Load CG… - Loads the Character Graphic file for a visual of the character.
Load parts… - Loads the .pat file for move effects.
Load Palette… - Loads the .pal file so you can preview colours.
Exit - Close program.
When you open Hantei-chan, you’re also free to use Preferences to change the UI colours and other properties. Tools, and specifically Help > Shortcuts may be of great use to you later.
Patterns are individual animations that are used for every single action a character may make, such as standing still, walking, jumping, blocking, along with their arsenal of attacks - including seperated projectiles and effects. The pattern names within the vanilla characters are in Japanese, though you can inspect what does what by simply examining the frames along with their graphics. Since the characters will share a majority of their default functions also based on ./data/BaseData.HA6
, you can therefore refer to ./script/btl_Define.txt
to view some defined constants starting at Line 1150. For example, you will see that all characters will use Pattern #0 for their idle standing animation, and #1 for their standing A attack animation.
For a list of all the patterns’ uses in UNIB, please refer to this file on the repo.
When you view or create a pattern, you will see a horizontal slider with arrows to the right of it, indicating the chronological order of the pattern going left to right. This is made up of individual “frames”, which you should be familiar with as the fighting game concept (though each frame can have varied lengths of time). It will be important to note that each frame mostly exists in a vacuum, and that every frame will have its own set of parameters. Switching the frame (which you can use the L/R arrow keys for) will change the one that you are editing, and you must account for all the differences between frames. You may click the Animate button to preview how the pattern would look in-game, including loops.
From hereon out, we will refer to all the changes in the drop-downs that we can make section-by-section, and inform on what each entry can do.
Basic information and definitions on the pattern.
Label | Function |
---|---|
Pattern Name | Personal comment - you can use it to name the pattern. Any name can be used at all, like for naming specials. |
Code Name | If required, the internal association to be used for this pattern. For example, 6B is not a move that exists on characters by default, so 6B must be placed as a code name for the move to be available. More examples would be J4C , 41236SP , 236EX_Hit , 0202A, etc. |
PSTS, Level, PFLG | Unknown, ignorable. |
Hantei-chan lets you copy and paste entire patterns, which is good for editing similar patterns such as variations in specials.
Hantei-chan v2.2.1 will let you copy over other patterns from different open instances of itself, so you can copy over patterns from other characters to edit, but as per the warning above, it is unstable and you should make backups often. Not sure what Push pattern copy and Pop all and paste are.
State mostly deals with the physical state of the character - whether they can be actionable, have a 2D movement vector, gain special qualities, etc.
Label | Function |
---|---|
Movement Flags | Is the motion of this character changing? Flags 1, 2, 5 and 6 are the only ones to be concerned for, where set applies the character’s current velocity, while add increments the velocity to what the character already had. For example, setting a character to 1000 will make the frame move the character 1000 units every frame. If the next frame has the add flag with a value of 500, the movement will become 1500. The flags here use the order of Y and X, while the four values below go X and Y. Don’t get confused. |
Speed | X, Y. Movement Flags required. Sets or adds to the character’s speed by this value. Note that Y positive means going downwards, so for patterns for jumps/going up, you would want a negative Y value. |
Accel | X, Y. Acceleration, flags required. How many units to add, each frame. Applications are - a running start/stop, gravity, a projectile that changes speed, etc. |
Values increase left-to-right, top to bottom. Lots of these are unknown or obsolete. Can be used manually.
| ID | Label | Function | |–|–|–| | 0 | | | | 1 | | | | … | | | TODO
| ID | Label | Function | |–|–|–| | 0 | Can always EX cancel | Determines if the frame allows to be stopped by Chain Shift or an EX move. The game will know if it’s an EX move and won’t allow it to be cancelled by other EX moves. | | 1 | UNK2 | | 2 | Can only Jump Cancel | Obselete. | 3 | UNK4 | | 4 | Unknown. | Has been used. | … | | | | 31 | Can’t Block | Can’t Block | TODO
| Label | Function | |–|–| | Number of Hits | Refer to the Attack section. The MAXIMUM number of hits the attack does for the duration of the current frame. If it is 2, the attack specified will hit twice on that frame. | | ASCF | Unknown | | Player Can Move | True or False? Is the player able to cancel this frame and do anything at all such as walking around, blocking, etc? Or do they commit to this pattern/frame? | | State | Is the character Standing, Crouching, or in the Air? Used to determine attack results, air mechanics, etc. | | Invincibility | What is this character immune to during this frame? | | Counterhit | Can the character get Counter-Hit during this frame? As a rule of thumb, all Normals will be a Low Counter, and all Specials will be a High Counter. No Change is typically put for every following frame until Clear enters for the actionable recovery frames. | | Cancel [Normal/Special] | During and after a hitbox/attack box comes out, can the character cancel into another move? For the most part, Normals will always be cancellable On Hit to anything, while Specials can’t be cancelled. EX moves should never cancel. On Successful Hit applies to moves that are NOT blocked - if it is blocked, it’s not cancellable.
Sinusoidal information and movement.
Label | Function |
---|---|
Flags | Similar to Movement Flags, 1 being Y and 5 being X. |
Sinewave | X distance, Y distance, X frequency, Y frequency. Distance = the range of movement, Frequency = speed of oscillation. |
Phases | X, Y. Starting offset of frequencies. |
The Copy AS and Paste AS buttons let you quickly paste this entire section for easy editing.
Animation deals with the visual appearance of the character during that frame, and dictates how the pattern should flow into the next frame, loop, or end.
You can have multiple layers in a frame to use graphics with. You can add or delete more with the buttons. Similar to editing the pattern frame, the Layer you select will have all the properties below applied to this layer only. You can remove the extra layers if you won’t use anything but the base 0.
The ID number of which sprite to use according to the CG file you’re using.
Using the .pat file instead? For effects.
Visual offset of the character.
Display the sprite normally? Or use an additive (brightening) property? Or use a subtractive (darkening) property? Mostly for effects.
Control the RGB channels, with alpha (transparency) notably included. Can help with Blend Modes.
X, Y, Z. Rotates the sprite. X is a vertical flip. Y is a horizontal flip. Z rotates the sprite clock-wise. Whole integers have the same result, with 0.5 being the exact “flipping” point, so use decimal values. Can make funny 3D-looking effects with this.
X, Y. Changes the size in that dimension. For reference, MBAACC characters are roughly 1/3 the size of UNIB characters.
How high the current layer should be for this frame. Z-index.
TODO which is EF teehee?
Not sure exactly what it does but this is important for certain moves to work properly and to do some scripts. Standardly, all frame 0s have it enabled. TODO
Typically used to signal when voice clips are played by using the first box with the value of “10”.
Give the frame an ID number. Important for editing and timing custom moves or doing certain things such as checking if the direction is held for a dash. TODO
Controls other ways the pattern is handled from this point. In order, Land to Pattern? is for aerial states, check loop counter is for moves that loop a certain amount of times, Go to relative offset is used in conjunction with “Go to frame” in the next part, Relative end of loop is a mix of the last two. TODO
What to do when the frame is done? Go to a different pattern, go to the next chronological frame, jump to a specific frame, or End the pattern? TODO
Which Pattern or Frame to go to if using the drop-down’s 1st or 3rd option.
TODO
TODO
TODO
TODO
How many frames does this frame last for? Reminder, there are 60 frames in 1 second.
If there is a visual change to a sprite or effect between frames and layers, the method to “blend” (interpolate) between them. For example, if you set an effect to have Alpha 0 (invisibility) on the first frame and Alpha 255 (opaque) on the next, setting interpolation to “Linear” will smoothly cause the graphic to fade in from nothing, whereas setting it to “None” just makes the graphic appear with no buildup. Interpolation can be applied to color and even the X/Y/ROT positioning of assets.
For a better understanding, research easings.
Copy current frame when inserting - Disable to insert/append an empty frame instead of duplicating the current one.
Append Frame - Places another frame at the end of the pattern.
Insert Frame - Inserts a frame right after the current one.
Range Tool - You can set a range of frames to paste the colour, mass-set a landing frame, copy/paste frames and paste the visual transformations for. This window can be dragged docked to the rest of the UI.
Copy Frame
Paste Frame
Delete Frame
To register an attack, you must fill out:
A single attack frame will cause 1 hit with its specifications for the length of that frame - it will not attack with the same frame data twice unless you duplicate the frame.
If you need to make a move that has animating attack frames spread across multiple frames, but don’t want to have multiple hits to happen, you would set all the Number of hits for the frames with attack boxes to 0. The frame before your first attack frame should have Number of hits set to 1. Meaning that if you had three attack frames in a row, all their Hit counts would be 0, but the frame right before all of them would be 1. This will make sure that all subsequent attack frames next to each other will count as one hit and won’t activate again.
Dictate information about an attack for that frame including all active boxes.
These cause additional effects to occur, which may also be done in the character’s mv file. These can range from playing sounds, modifying the battlers, etc. Refer to https://github.com/Fatih120/undernightinbirth/blob/master/doc/effects.txt for now.