Alpha 0.1.1.2


Greetings borded mortals. Finally after almost two years of reworks, all older animations are now modernized with separated wind effects and better juice !
It is not this day the Hex Key will receive additional love, but that would be for next time.
I can now count precizely : 963 hands have been drawn and implemented by me, 32 are contributed into a total of 995 !
Some frames were scrapped, so we can push this count well over 1024 but that would be cheating. There's also a lot more tools for modders to play with the constants. You may skip the configuration part if it's not your cup of tea ; unless you want to know about the exact stats.

-Combat

Attack perturbation

A hand is affected by gravity if it is not attacking, in other words when the current active animation isn't an attack.
However, if the attacking hand is pushed up or downward (and not stunned) it continues like nothing happened.
Starting from there, if a hand is pushed by a total of 100 pixels on the vertical axis its attack is perturbated.
Player & animation movement themselves doesn't count, nor pushing each others with hitboxes ; nonetheless attacks do.
This value is also reinitialized when the player lands or starts a new combo.
Consequently, vertical pushes without stuns are indirectly stronger.

At last, a very old system I wanted to upgrade, my own notes dated back from 22 february 2022 !
Combat would no longer be a gravity mess.

Feedback

Player feedback duration reduced from (damage x2) +2 to damage +1 if bellow or equals 3 (greater damage values unchanged)

When a lot of small hits arrives in a short amount of time, the whole UI and UX were a bit overloaded with shakes.

Debug

☼ Reseting a game with shift+R also resets their guard to default
☼ Healing both players with shift+2 also resets their guard to default

-Settings

Screen shake

Added with 4 possible modes
None all screen shakes are disabled
Low all screen shakes intensity are halved
Normal by default, current intensity
High all screen shakes multiplied by 1.5

Some people don't like excessive shakes, so I put this option for them. You may even disable or make them go wild !

Wind effects

There's now 3 more options (with their corresponding JSON values)
Disabled (0)
Enabled (default) (1)
Transparent (2), all wind opacity halved
Only active (3), attack frame wind spawns only if having hurtbox
Transparent (4), attack frame winds spawns with halved opacity if non-active

Some feedback pointed the high amount of wind effects happening at the same time and location, while other prefers the juiciness and epicness. To please them both I added more options. Furthermore it makes debug a bit easier for modding.

Stun

☼ Stun duration bonus per strength reduced from 0.1 to 0.05
☼ Stun duration bonus per weight reduced from 0.1 to 0.05

The gluestick was much too strong at stunning ennemies with its big attacks, which was before almost multiplied by 2 (1.4x1.4 = 1.96). Now the bonus is still signitificant but more reasonable (1.2x1.2=1.44).

-Gluestick

Bigger, meaner, stronger, and even more dangerous. This is the upgraded gluestick for ya ! All of its older animations are now reworked with much better juice.
In general all of its gunshots have roughly the same power for coherence sake, but that could evolve through balance ; speaking of which the class become quite broken itself.
Recovery durations got lower as well to reduce the risk, compensated with a bit less damage everywhere.

Idle 1

☼ Slightly changed display position to better fit the hitbox
☼ Has a bit of visual movement back and forth

Idle 2 and 3

☼ Added

Move front

☼ Slightly changed display position to better fit the hitbox

Neutral - Neutral - Heavy

First Neutral

☼ Damage shortcut set to 25 as intended

Second Neutral

☼ Frame 1 and 2 duration reduced from 4-6 to 3-4 (total length reduced from 37 to 34)
☼ Damage shortcut set to 30 as intended

Heavy

☼ Reworked
☼ Explosion is now a seperate damage gadget dealing 8 damage
☼ Recovery reduced from 50 to 25

More reactivity to this fast and short ranged combo, which can deal a lot if the enemy is caught offguard. The target either eats the charging cannon or the exhausted explosion.

Neutral - [Up]

☼ Reworked
☼ Shots have more varied angles and shake the screen
☼ Duration reduced from 62 to 31
☼ Raising the gluestick deals 5 blunt damage
☼ Recovery reduced from 25 to 10

Side - Side - Side

First Side

☼ Recovery reduced from 40 to 20

Second Side

☼ Recovery reduced from 40 to 20
☼ Wind effects on last frame are freed from player movement

Third Side

☼ Reworked
☼ Frame 1, 2 and 3 duration reduced from 7 to 6 each
☼ Total length reduced from 51 to 44
☼ Recovery reduced from 40 to 20
☼ Has more movement, final advancement increased from 96 to 150

Side - Neutral - Back

Neutral

☼ Reworked
☼ Duration reduced from 45 to 33
☼ Shortcut set to 28 as intended
☼ Recovery reduced from 20 to 10
☼ Damage reduced from 6-6 to 4-4

Back

☼ Reworked
☼ Explosion is now seperated into a damage gadget
☼ Duration reduced from 55 to 41
☼ Recovery reduced from 30 to 5
☼ X movement increased from 350 (fix) to 426.5 (min) - 464 (max)
☼ Movement shortcut set to 36
☼ Damage reduced from 10 to 8

Up

☼ Reworked
☼ Duration reduced from 48 to 37
☼ Recovery reduced from 20 to 10
☼ Shortcut reduced from 40 to 32
☼ The last frame can deal 4 additional blunt damage for 5 frames
☼ Shakes the screen when landing
☼ Reduced damage from 8 (min) / 10 (max) to 6 (min) / 8 (max)

Up [Neutral]

☼ Reworked
☼ Duration reduced from 48 to 34
☼ Recovery reduced from 10 to 1
☼ Gatling is now seperated into damage gadgets and shakes the screen
☼ Gatling damage increased from 3x3 to 2x6

Up [Heavy]

☼ Reworked
☼ Duration reduced from 54 to 44
☼ Recovery reduced from 50 to 20
☼ Explosion is now seperated into a damage gadget
☼ Damage reduced from 10 to 8
☼ Deals 5 additional blunt damage when raising the weapon

Up Heavy [Neutral]

☼ Reworked
☼ Duration reduced from 48 to 35
☼ Recovery reduced from 50 to 20
☼ Gatling is now seperated into damage gadgets and shakes the screen
☼ Gatling damage increased from 3x3 to 2x6

Down

☼ Reworked
☼ Damage increased from 12 (max) to 11 (blunt) + 3 (pure)
☼ Duration decreased from 65 to 49
☼ Shortcut reduced from 48 to 42
☼ The shockwave is now a seperate damage gadget

Down - [Up]

☼ Reworked
☼ Adjusted pushes to be more coherent with the combo
☼ Duration reduced from 36 to 28

Down - [Down]

☼ Added

Down - [Side]

☼ Added

Heavy

☼ Reworked
☼ Damage reduced from 5 (blunt) + 7-10 (pure, variable) to 5 (blunt) + 8 (pure)
☼ The first hit pushes more
☼ Adjusted explosion push
☼ Explosion is now a seperate damage gadget
☼ Duration reduced from 69 to 58
☼ Shortcut reduced from 62 to 51
☼ Recovery reduced from 50 to 25

Heavy - [Heavy]

☼ Reworked
☼ Duration reduced from 85 to 52
☼ Shortcut reduced from 68 to 46
☼ Recovery reduced from 40 to 20
☼ More movement amplitude

Heavy - Heavy - [Heavy]

☼ Almost completely remade from scratch
☼ Duration reduced from 38 to 32
☼ Recovery reduced from 50 to 30

Heavy - Heavy - [Side]

☼ Reworked
☼ Duration reduced from 74 to 46
☼ All shots are seperated to different damage gadgets and shake the screen

-Configuration

☼ Integer player.PLAYER_RECOVERY_AGILITY_FACTOR, by default 0.1, greater or equal to 0 at gamestart. Increases the recovery divisor per agility, starting at 1. For example 4 agility divides recoveries by 1.4. 0 Agility divides by 1, so no change.

☼ Decimal player.PLAYER_RECOVERY_AGILITY_SHORTCUT, by default 1, greater or equal to 0 at gamestart. If the player recovery is lower or equal to this factor times their agility they can continue or start a combo. For example at 4 agility the player can react at 4 recovery or less.

☼ Decimal player.PLAYER_RECOVERY_PARTIAL, by default 0.5, between 0 and 1 at gamestart. Multiplies the recovery of the player if their attack successfuly hit but haven't followed with a correct combo.

☼ Integer player.PLAYER_WEIGHT_LAND_THRESHOLD, by default 3, greater or equal to -1 at gamestart. If the weight of the player is greater than this value, the landing animation is more intense. Purely cosmetic.

☼ Decimal player.PLAYER_DAMAGE_CUT/PIERCE/WEIGHT/_PER_CUT/PIERCE/BLUNT/STRENGTH/AGILITY/SPEED/WEIGHT, greater or equal to 0 at gamestart. Increases the damage multiplicator dealt with corresponding attack types. By default
► Cut damage is increased by 0.02 per cut, 0.02 per speed and 0.01 per strength
► Pierce damage is increased by 0.02 per pierce, 0.02 per agility and 0.01 per strength
► Blunt damage is increased by 0.02 per blunt, 0.02 per strength and 0.01 per weight
► Resulting damage is multiplied by 1+(sum of bonuses), for example gluestick blunt damage is multiplied by 1.2

☼ Decimal player.PLAYER_DAMAGE_REDUCTION_PER_STAMINA, by default 0.05, greater or equal to 0 at gamestart. Divides received damage by 1 + stamina x constant. For example 4 stamina divides damage by 1.2

☼ Integer player.PLAYER_MINIMUM_DAMAGE_MODE, by default 2, between 0 (included) and 2 (included)
0 Minimum damage set to 0
1 Minimum damage set to 1
2 Damage bellow 1 has 1/(stamina+1) chances to be 1 instead of 0, for example 4 stamina gives 1/5 chances to have 1 damage instead of 0

☼ Integer player.PLAYER_PERTURBATION_Y, see Combat - Attack perturbation, by default 100, greater or equal to 0 at gamestart.

☼ Decimal player.PLAYER_PUSH_POWER_PER_STRENGTH/AGILITY/SPEED/WEIGHT/STAMINA, greater or equal to 0 at gamestart. Increases the push multiplicator of each statistic, by default
► +0.05 per strength
► +0 for the other ones
► Each factor multiplies each others. For example if we add +0.04 per weight it makes (1+0.05x4) x (1+0.04x4), thus 1.392 for the gluestick

☼ Decimal player.PLAYER_PUSH_RESISTANCE_PER_STRENGTH/AGILITY/SPEED/WEIGHT/STAMINA, greater or equal to 0 at gamestart. Same logic as push bonus but redicing the multiplicators. By default
► -0.05 per strength
► -0.05 per weight
► 0 for the other ones
► For example, the gluestick has received pushes multiplied by (1-4x0.05) x (1-4x0.05), thus 0.64.
⚠️ The resulting multiplicators may go to 0 or even negative, which can provoke funky behaviors

☼ Decimal player.PLAYER_BULLDOZE_STRENGTH/AGILITY/SPEED/WEIGHT/STAMINA_FACTOR, greater or equals to 0 at gamestart. Defines the push power of the player when they are moving, compared to the push power of the other one. By default strength is at 1, the rest 0.

☼ Decimal player.PLAYER_BULLDOZE_PUSH_FACTOR, by default 2, greater or equals to 0 at gamestart. Multiplies the previous sum when the player is moving foward.

☼ Decimal player.PLAYER_BULLDOZE_BACKWARD_FACTOR, by default 2, greater or equals to 0 at gamestart. Multiplies the previous sum when the player is moving backward.

☼ Decimal player.PLAYER_BULLDOZE_DIFFERENCE_FACTOR, by default 1, greater or equals to 0 at gamestart. If the player strength is greater than their weight, the previous result gets a bonus of that difference multiplied by this value. For example the unarmed has a difference of 3, thus gets a bonus of 3.

☼ Decimal player.PLAYER_BULLDOZE_WEIGHT_HINDRANCE, by default 1, greater or equals to 0 at gamestart. The final push power is reduced by the weight multiplied by this value.
► For example, an idle gluestick has a push power of 4 from strength, 0 from difference and -4 from hindrance, to a total of 0.
► The final push power value is then compared to the other player, making it relative

☼ Decimal player.PLAYER_MOVEMENT_SPEED_BASE, by default 15, greater or equals to 1 at gamestart. Defines the base movement speed per pixel per frame, which makes 750 pixels per seconds at 50 FPS.

☼ Decimal player.PLAYER_MOVEMENT_SPEED_PER_SPEED, by default 3, greater or equals to 0 at gamestart. Defines the movement bonus per speed per pixel per frame. For example the chopstick has a total movement speed of 15 + 4x3 = 28 pixels per frame (1400 per second).

☼ Decimal player.PLAYER_MOVEMENT_SPEED_HINDRANCE, by default 1, greater or equals to 0 at gamestart. Defines the movement speed reduction per difference between strength and weight per pixel per frame if the weight is greater than the strength.

☼ Decimal player.PLAYER_JUMP_BASE, by default 30, greater or equals to 0 at gamestart. Defines the initial upward movement speed per pixel per frame at jump start, which makes 1500 at 50 FPS.

☼ Decimal player.PLAYER_JUMP_WEIGHT_FACTOR, by default 3, greater or equals to 0 at gamestart. If the player weight is greater than their strength, it reduces the initial jump speed by the difference multiplied by this value.

☼ Decimal player.PLAYER_JUMP_TEMPER_BASE, by default 5, greater or equals to 0 at gamestart. The meaning of its value is shown in the official discord.

☼ Decimal player.PLAYER_JUMP_TEMPER_DECREMENT, by default 5, greater or equals to 0 at gamestart. The meaning of its value is shown in the official discord.

☼ Decimal player.PLAYER_JUMP_TEMPER_THRESHOLD, by default 5, greater or equals to 0 at gamestart. The meaning of its value is shown in the official discord.

☼ Decimal player.PLAYER_GRAVITY, by default 1, greater or equals to 0 at gamestart. Defines the player vertical speed increase per pixel per frame if affected by gravity.

☼ Integer player.PLAYER_DODGE_PER_AGILITY, by default 1, greater or equals to 0 at gamestart. Reduces the margin in frame per agility at dodge start and finish during which the player is vulnerable and inactive ; starting from player.PLAYER_DODGE_MARGIN=10
► For example, unarmed with hyperactive stance has a total margin of 10-7=3

☼ Integer player.PLAYER_DODGE_RELOAD_PER_AGILITY, by default 4, greater or equals to 0 at gamestart. Reduces the dodge reload time per frame per agility. For example
► The gluestick has 50 frame reload time (which is one second)
► Chopstick has 50-4x4=34 frame reload time
► Unarmed in hyperactive stance has 50-4x7=22 frame reload time

☼ Decimal player.PLAYER_STUN_POWER_PER_STENGTH/AGILITY/SPEED/WEIGHT/STAMINA, greater than 0 at gamestart. Defines the stun duration bonus multiplicator for each statistic, by default
► 0.05 per strength
► 0.05 per weight
► For example, the gluestick has a 1.2 x 1.2 bonus, which is 1.44

☼ Decimal player..PLAYER_STUN_RESISTANCE_PER_STENGTH/AGILITY/SPEED/WEIGHT/STAMINA, greater than 0 at gamestart. Defines the received stun duration multiplicator for each statistic, by default 0.1 per stamina.
► For example, the gluestick multiplies received stun durations by 0.6

☼ Decimal player.PLAYER_DODGE_PER_AGILITY

☼ Decimal timeScale, by default 1, greater or equals to 0.1 at gamestart. Scales the game speed to it (doesn't change the framerate itself).
⚠️ High values can overflow the indexation, especially damage, closing the application
⚠️ Low values may make the game less precise and more unpredictable

☼ Decimal slomo, by default 0.2, greater or equals to 0.1 at gamestart. Multiplies the time scale by this value in slomo mode (maj+5 in combat).
► Setting it to 1 disables the slomo in practice
► Setting it to above 1 will accelerate the game instead, but may not be called slomo. People can have fun with it tho.
⚠️ High values can overflow the indexation, especially damage, closing the application
⚠️ Low values may make the game less precise and more unpredictable

The following values are added to set how many elements of each type can be allocated in memory. These by default can run the base game just fine, but might need to be increased when modding additional data. Please prefer powers of two as it is the least wasteful in memory (you could even go to multiples of 4096 for good measure)
memory.location, by default 0x10000 (65536)
memory.frame, by default 0x1000 (4096)
memory.animation, by default 0x800 (2048)
memory.statistic, by default 0x100 (256)
memory.stance, by default 0x100 (256)
memory.class, by default 0x20 (32)
memory.player, by default 0x2 (2)

If timeScale and/or slomo are very high, increase these values as well
memory.damageGadget, by default 0x10 (16)
memory.damageData, by default 0x10 (16)
memory.particle, by default 0x80 (128)
memory.gadget, by default 0x40 (64)

-Behind the scenes

☼ Data name for all classes standardized : variables and files.
When you get your hand (ahah) on gamedev, you tend to pile up things on a lava flow which solidifies into something harder to manage later

☼ Indexed classes, players, stances, statistics, damage gadgets, damage data and particles.
Performance gain is negligible, but that prepares the terrain for much later. And what's done is done.

☼ Animation frames can now spawn multiple damage gadgets at once instead of only one max.

☼ Acceleration relative to framerate have been changed, like mentionned in bug fixes. To put more details you may remark the hand accelerates quickly instead of snapping directly to the max speed ; but that was already there long time ago. However the way it is done is by multiplying the speed by a factor to the power of the current frame duration, which caused some unexpected speeds at lower and higher values. Instead the formula is a interpolation between the current speed and the target relative to the frame duration.

☼ Class selection screen takes now in account selection and selected animations, in other words if the class is validated or not. Right now none of the current classes has these animations but modding can add them.

☼ Class booleans (toBeAdded, isLoaded, notSelectable) are now compressed into one single flag, as well as in the JSON.

-Bug fixes

☼ [0.1.1.1] Wind effects could generate tiny memory leaks Fixed.
☼ [0.1.1.1] Player commands may get stuck on some buttons in menus after leaving a vs AI combat Fixed.
☼ [0.1.1.1] Some jump, land, hit, spawn, death and dodge animations were initialized with unused attack data Fixed. No incidence to the actual game but it makes the developpement and modding more conscistent.
☼ [0.1.1] Random and mirror icons in class list doesn't have the right size and location Fixed.
☼ [0.1.1] Wind and particle effects aren't removed when changing menus Fixed.
☼ [0.1.1] The last class in the gallery is not accessible, going directly to the next one Fixed.
☼ [0.1.0.8] Displayed damage gadget hurtboxes aren't correctly flipped Fixed.
☼ [0.1.0.8] Damage gadgets picked animation movement as push and animation acceleration as push acceleration instead of push and push acceleration Fixed, no animation were concerned before, but at least future and modded animations won't break the game.
☼ [0.1.0.8] Damage gadget don't take in account orientation when moving at the very first frame Fixed.
☼ [0.1.0.8] Damage gadgets could not be dodged Fixed.
☼ [0.1.0.8] Damage gadgets sound is not played at the right location, taking its absolute position with a incorrect shitt Fixed. They play at the center of their sprite as they are not bound by player position.
☼ [0.1.0.5b] Some attack animations weren't counted as attack animations in some conditions Fixed. No incidence to the actual game but it makes the developpement and modding more conscistent.
☼ [0.1.0.1] Decimal values are saved as integers in JSON files Fixed.
☼ [0.1.0.?] Player movement speed was not correctly computed, which resulted into roughly a +33% unintended increase Fixed thanks to a simpler formula.
☼ [Demo] A sprite displayed with a color intensity less or equals to 0 will be raised instead at 255 Fixed, starting from there it will be capped at 0.
☼ [Demo] All animations had their first frame length increased by 1 in practice Fixed, this means all animations are 0.02s faster as intended.

-Known issues

☼ [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 physic is incorrect for few moments
☼ [0.1.0.7] The 5th attack combo with big icon might be cut 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 in the fight intro
☼ [0.1.1] Text in combat is harder to read if of the same color of the background
☼ [0.1.1.1] Lag or picking 50FPS or below makes physics a bit less precise
☼ [0.1.1.2] On active only wind mode, when an animation is played for the very first time it won't skip unactive frames

Files

Hand2Hand Project Alpha 0.1.1.2.zip 42 MB
27 days ago

Get Hand2Hand Project

Leave a comment

Log in with itch.io to leave a comment.