HomeGamesUpdatesPricingMethodology
Steam News18 November 20257mo ago

Hand2Hand Alpha 0.1.1.7

Greetings bored mortals. Here's an extensive update with a newcomer ! I wanted to finish it first but it's been so long before an update so I insisted to show it now.

Full notes

Full Hand2Hand update

Read the full published notes in a cleaner layout. The original post stays linked below.

Repeated intro

Greetings bored mortals. Here's an extensive update with a newcomer ! I wanted to finish it first but it's been so long before an update so I insisted to show it now. The ENJMIN (the school I'm currently in) takes quite some time and energy, but I managed to polish features and UI.

What changed

4 fixes13 additions25 changes4 removals
  • UI and audio
  • Gameplay
  • Balance
  • Fixes
  • Performance
changedGreetings bored mortals. Here's an extensive update with a newcomer ! I wanted to finish it first but it's been so long before an update so I insisted to show it now. The ENJMIN (the school I'm currently in) takes quite some time and energy, but I managed to polish features and UI.
addedMain menuLinks to socials added. They are keyboard accessible past the exit button.
changedClass gallery☼ The shown value of each stat with shift pressed is moved on top of the icon and gaining a border to be better distinguishable
removedTutorial☼ Statistic descriptions are more compact and their vertical spacing is more automatic ☼ Statistic text color takes the stat color instead of a hard coded color ☼ Large icons removed, and thus moving the text body closer to the left border ☼ Updated stat desc to reflect recent changes
addedAnimation☼ Each frame can now have alternate sound IDs depending on the stance index of the class, for example the metal ruler can have metallic swings without having to create separate classes ☼ Recursive sound and sound volume is for now set for all the sounds of the frame, specific values for each stance is planned
addedAnimation☼ Each image can now have a specific opacity value ► By default 255 ► If 0, will be counted as 255 ► Intended to be applied on fading wind effects, may need some versions to be fully integrated on all concerned animations ► New animations will systematically have their wind opacity properly set

Main menu

Links to socials added. They are keyboard accessible past the exit button.

☼ The shown value of each stat with shift pressed is moved on top of the icon and gaining a border to be better distinguishable

Tutorial

☼ Statistic descriptions are more compact and their vertical spacing is more automatic ☼ Statistic text color takes the stat color instead of a hard coded color ☼ Large icons removed, and thus moving the text body closer to the left border ☼ Updated stat desc to reflect recent changes

Animation

☼ Each frame can now have alternate sound IDs depending on the stance index of the class, for example the metal ruler can have metallic swings without having to create separate classes ☼ Recursive sound and sound volume is for now set for all the sounds of the frame, specific values for each stance is planned

☼ Hurt boxes now benefit from the negative X/Y flag in combat and display ► Right now no animation benefit from it, so there's no consequences on the game in practice

☼ Each image can now have a specific opacity value ► By default 255 ► If 0, will be counted as 255 ► Intended to be applied on fading wind effects, may need some versions to be fully integrated on all concerned animations ► New animations will systematically have their wind opacity properly set

Animation Gadget

They can now take the stance in account when playing sounds, making modding also more flexible. For a reminder animation gadgets are mostly used to display wind effects and hand animations in the menu.

Control

☼ Added a new settings for player direction when doing side/back attacks, can be set and saved for each player ► [0] Dynamic works like before, the attack direction is dynamic with the player direction (by default) ► [1] Static Left neutral+left will always do a side attack and neutral+right will do a back attack, no matter the direction ► [2] Static Right same as Static Left but side and back are swapped ► Putting any other values will be treated as Dynamic in the settings file ► AI will ignore this settings

Combat

☼ Active hurtbox now checks the correct duration, instead of duration+1 ☼ When the player is recovering or stun cannot longer regain guard ☼ Parrying successfully an attack disables the next combo shortcut of the attacker ☼ A KO player has its guard decay (only cosmetic) ☼ A KO player has its guard grayed (only cosmetic)

Class selection

☼ Can now play alternate sound depending on the selected class stance, like in combat ☼ Rearranged display order to make UI elements visible on top of the hand ☼ Class & stance name text have now borders, their color are now automatically adjusted to make them better readable

Class

☼ New flag to make random AI unable to select them, separate from being unselectable by players. That means the modder can make classes AI only or Player only. However the user can manually select the disabled class for the AI. ☼ An invalid or absent path for a class icon no longer interrupts the game, but will be replaced by a 500x500 green cross

Chopstick

☼ Adjusted some minor wind length ☼ Updated wind opacity for all animations ☼ Its IA will no longer do back startup if the target is in the air or moving upwards ☼ Its IA is also more likely to use down startup if the target is in the air or moving upward

Side Side [Side]

☼ Fixed missing backwinds

Ballpen

☼ Updated wind opacity

Side Back Up [Side]

☼ Updated wind durations to fit the animation

Side Back Up Neutral [Side]

☼ Updated wind durations to fit the animation

Neutral [Down]

☼ Updated wind durations to fit the animation

Down [Down]

☼ Updated wind durations to fit the animation

Up [Down]

☼ Updated wind durations to fit the animation

Back [Heavy]

☼ Updated wind durations to fit the animation

Heavy [Heavy]

☼ Updated wind durations to fit the animation

Unarmed

☼ Updated wind opacity ☼ Fixed Idle 1 and 2 wind durations

Neutral neutral neutral Side

☼ Adjusted wind durations

Back Side

☼ Adjusted wind durations

Heavy Neutral [Down]

☼ Fixed missing data

Gluestick

☼ Updated wind opacity ☼ Fixed various minor wind assignement issues

Side [Side]

☼ Reworked ☼ Added a new image between 4 and 5 to better transition the movement ☼ Image duration reduced from 6 6 6 6 12 to 5 5 5 3 6 9 (total from 30 to 33) ☼ Recovery reduced from 20 to 17 ☼ Combo shortcut increased from 24 to 30 ☼ Changed the image 4 wind front 2 by a seperate damage gadget ☼ Damage increased from 8 blunt to 8 blunt + 3 pure ☼ Image 4 (now 5) movement reduced from -32 64 to -16 32

Hexkey

☼ Updated wind opacity

Side

☼ Adjusted wind durations

Side Side Side [Neutral]

☼ Adjusted wind durations

Side [Back]

☼ Adjusted wind durations

Side Back [Up]

☼ Adjusted wind durations

Up

☼ Adjusted wind durations

Heavy Heavy

☼ Adjusted wind durations

Death

☼ Adjusted wind durations

Side Side Neutral

☼ Wind effects are now properly freed from movement

Ruler

☼ Added in alpha status ☼ Has only 1 idle animation, 2 openers and 3 combos ☼ Cannot be selected by the AI since it is incomplete ☼ Can be selected in the demo fights (don't know why but I'm working on it)

AI

☼ Back-end reworked to fix some cases where it fails to follow combos or having special orders ☼ Can now parry in hard difficulty when the player use non-heavy attacks ☼ Hard difficulty no longer has +1 stats everywhere (except Difficulty and Reach) ☼ New Insane difficulty level ; same as Hard difficulty but having +1 stats everywhere (except Difficulty and Reach)

Demo fight

☼ No longer broken by mouse movement or by window focus ☼ With the Hard difficulty changed, the demo fight combatants no longer have +1 stats everywhere ☼ Cannot longer be paused, using pause command no longer plays the cancel UI sound (but it anyway breaks the demo fight like before)

Debug

☼ Non-active hurtbox is now displayed with a much higher transparency than active ☼ Being in slomo also changes the pitch of all sounds ; depending on the config file it is capped between x0.5 and x2 speed to avoid absurd sound pitches ☼ Displayed debug hurt frames from projectiles now take in account the damage duration like for regular player attacks

Mod

☼ Location storage and compression slightly altered ► Display shift are now based on a 2048x2048 image instead of 2000x2000, making conversion simpler with mask and bit shifts ► Integer and real coordinates are now two seperate types of data structures, they now concern image shift, hurtbox shift and shadow shift ☼ Due to how the compression was previously done, decimal values in coordinates are no longer rounded in few rare case at game export ☼ Alternate sound id is an optional array called *sda* starting at index stance-1 in the data.json file ► Putting 0 won't change the sound ID and will play the base sound id (at *sd*) ► Putting -1 will remove the played sound : the stance doesn't play a specific sound at this moment ► Putting alternate sounds indexes outside used stances of the class won't throw errors, but will never be used in practice (for example putting at index 10 while the max number of stance is 2)

To make things more explicit, there's two types of raw animation images (before cropping) : 1000px long and 2048px long. They can have arbitrary height, but the 100px radius circle hitbox must always have the same coordinate in the raw image : ☼ Top right corner at 450 425 in 1000px mode ☼ Top right corner at 998 973 in 2048px mode You can use your own way to shift your images, but it must not exceed +-2048 for each coordinate. More detailed info in the Wiki is planned.

☼ New entries added in the font part of the data.json file, making possible for the user to change the font path, font settings and border size. It is not possible (yet) to add and use new fonts into seperate entries. ► path charSizeX/Y size of the char, for example 16x16 ► lineSpace Space between lines in the UI when displaying blocs or lists ► charSpace Space between one char to another on a same line ► thickness Size of the border for bordered fonts ► distance Taxicab distance for the thickness ► scale On the spot rescaling for display ; by default 1. ⚠️ Putting absurd values might result into the UI breaking or even crashes due to how it is coded and used.

☼ Integer UI2D.ICON_STAT_COLOR. Defines the STAT color in the UI in a RGB decimal format ► For example UI2D.ICON_STRENGTH_COLOR is 255, or 0x0000FF, which is red

Behind the scenes

☼ Reworked a bit AI functions to be more standardized with the rest of the code, optimizing few bits ☼ Animation images can now be flagged as extended, meaning they are based on 2048² images instead of 1000² for display shifting ☼ Player, wind effects, hurtboxes and damage gadget animation images now take in account the extended flag ☼ The animation image flag is now a long (4 bytes) instead of char (2 bytes) because the extended bit is the 17th ☼ Reindexed class animation types to fit animation types ; because class animation types were indexed form 0 and the other from 1. There's no any gameplay nor technical impacts, but that indirectly fixes AI decision making and make minor code parts smoother to upkeep ☼ Consequently, the animation indexation is now a bit different for classes, impacting how data is imported and exported (in practice Down and Back are swapped) ☼ Sound impacts moved from the damage creation function to when it is applied ☼ DSP (sound engine) updated, allowing on the fly pitch changes directly in the core (Thanks Nemerod !) ☼ Tweaked some functions and macro to clean up the code ☼ JUMP_WITH_UP string renamed into SETTINGS_KEYBOARD_JUMP_WITH_UP ☼ Made control detection more reliable in some rare cases ☼ Damage data damage type type changed from integer to byte ☼ Damage data can now be specified as pure projectile source ☼ Uniformized frame display from player, debug, animation, wind gadgets and damage gadgets ; making the code a bit more compact and easier to maintain ☼ Removed a memory leak if a destroyed animation had projectiles ☼ Number of allocated frames increased from 4096 to 8192 ☼ Optimized how image mirror states are stored and accessed, from a integer dynamic array into a compact bit-to-bit memory allocation ; going down from ~12k x 4 bytes into 8k / 8 bytes in the current state of the game. This saved around 45Kb of memory and slightly sped up the execution, could be negligible in most setups but every effort counts in the end. ☼ Reworked how font works, using hardcoded flexible settings ☼ Added a 32x32 font created from the 16x16 original ☼ Replaced 16x16 displayed text of scale at least x2 into 32x32 text with halved set scale

Bug fix

☼ [0.1.?] AI animation commands are not indexed correctly Fixed. They are now much more potent as they can now use neutral attacks & follow combo as intended. ☼ [0.1.?] Displaying wind effects may not have the right color intensity Fixed ☼ [0.1.?] AI might jump in rare cases if the corresponding player jump with up settings is enabled Fixed, they will ignore this settings altogether ☼ [0.1.0.?] Damage duration is not imported nor exported in the JSON Fixed. This was a major oversight from my part. ☼ [0.1.1.?] Maintained parry while having no guard left is sometimes counted as parrying Fixed ☼ [0.1.1.?] Sound impacts when parried sometime had not the reduced sound version where it should Fixed ☼ [0.1.1.?] Player swap and HUD display debug commands don't work Fixed. ☼ [0.1.1.?] Game crashes if a class doesn't have a move back animation when existing in a fight Fixed. ☼ [0.1.1.?] Game crashes if a class doesn't have a jump animation nor parry animation when initiating a parry Fixed. ☼ [0.1.1.?] Game crashes if a class doesn't have a hit animation when killed Fixed. ☼ [0.1.1.?] Negative image shift is instead absolute for wind effects Fixed ☼ [0.1.1.?] Hurtboxes in debug were displayed in the wrong coordinate and direction for player turned leftward Fixed ☼ [0.1.1.?] Sound variation iterations is not a global global, making it effectively 0 and never triggering sound variation Fixed. Added another security where variation is enabled if this value is also greater than 0 ☼ [0.1.1.6] Command names used in the code were the localized version Fixed, it should be in english to avoid inconsistencies ☼ [0.1.1.6] Menu instruction displayed menu control attack to accept instead of player attack, which showed "unassigned"Fixed. ☼ [0.1.1.6] Last combo example in tutorial has not the right localized string for neutral Fixed.

Known issues

Do not take them literally, as some are rumors or inconsistent between setups while other problems aren't listed yet.

☼ [Demo] Hurtbox images do not take in account transparent pixels, if the whole image is a bit transparent the hurtbox is ignored in the code ☼ [0.1] Very long combo list in class gallery may step on the class desc or even outside the bottom screen border ☼ [0.1] Controllers are taken like PS3, other types might not have the same button layout ☼ [0.1.0.?] AI tends to not follow combos when the player is in the air ☼ [0.1.0.?] Taking a screenshot with shift+f won't catch parts which are out of the screen ☼ [0.1.?] Attacking when landing doesn't flip the hand towards the opponent ☼ [0.1.?] Terrain name is not translated ☼ [0.1.?] Attacking when landing doesn't flip the hand towards the opponent ☼ [0.1.?] Terrain name is not translated ☼ [0.1.0.?] AI tends to not follow combos when the player is in the air ☼ [0.1.0.?] Taking a screenshot with shift+f won't catch parts which are out of the screen ☼ [0.1.0.?] Fullscreen is not a true fullscreen to avoid a bug on Windows 11 ☼ [0.1.0.5] x86 version unavailable until further notice ☼ [0.1.0.7] When a lighter hand jumps between the space between the heavier player and a wall, the push physics is incorrect for a few moments ☼ [0.1.0.7] A combo with 5 or more attacks with big icons might be cut off for very small screens ☼ [0.1.0.7] Controller models may have different inputs and even affect both players at the same time ☼ [0.1.1] Cannot pause with controller or player specific menu keys in the fight intro ☼ [0.1.1.?] Changing sound output crashes the game (due to how the DSP works) ☼ [0.1.1.?] Values saved in floating point in the JSON aren't exact, but doesn't change much in practice the game rhythm ☼ [0.1.1.1] Lag or picking 50FPS or below makes physics a bit less precise ☼ [0.1.1.3] Some long text strings might break a bit of the interface, overlapping other texts or even getting out of the screen; especially on translations ☼ [0.1.1.3] If there’s one plugged controller connected to Player 1, it is not possible to change it for Player 1 using the controller (use the keyboard instead) ☼ [0.1.1.3] Demo fight kicks in only if the game window is focused even after the 2 minutes long wait ☼ [0.1.1.4] Intro music is sometimes cut when the level music starts, or even loops again and again ☼ [0.1.1.6} Unplugging a controller doesn't show any popup. If it is not plugged again for a while the game may quit without warning ☼ [0.1.1.6] If one is unplugged during runtime the controller no longer works until restarting the game (temporary fix made by Nemerod) ☼ [0.1.1.6] Refresh rate is a bit imprecise ☼ [0.1.1.6] Refresh rate settings is applied only on restart ☼ [0.1.1.6] Training terrain removed due to an unknown performance issue ☼ [0.1.1.6] Class animations in selection menu aren't restarted when going back there ☼ [0.1.1.7] Slomo also changes the pitch of UI sounds in combat

Source

Steam News / 18 November 2025

Open original post

Changelog.gg summarizes and formats this update. How we read updates.